Sega Genesis Programming Part 1: Palettes
After thinking about it for something like 25 years I decided to take a stab at learning how to program for the Sega Genesis. My first attempt at learning involves creating and loading palettes.
Sega Genesis Programming Part 2: Tiles and Sprites
I expected to get either frustrated or bored with this whole "let's try to program for the Sega Genesis thing" and am surprised to find I'm enjoying it. In this experiment I try to draw some tiles and move a sprite around with the controller.
Sega Genesis Programming Part 3: Sprite Animation
Building on the last article, this one looks at how to create an animated sprite with different patterns for each direction.
Sega Genesis Programming Part 4: Echo Sound Engine
A brief write-up on how to include the open source Echo sound engine and convert .xm files to its audio format.
Sega Genesis Programming Part 5: Collision Detection
This article explores a technique to test for sprite collision against a map, it also covers how to draw to high & low graphic planes.
Sega Genesis Programming Part 6: Vertical Scrolling
After a few iterations I have a sprite that moves around but has no place to go so it's time to try scrolling the map. Along the way I added a little more scenery and created another handy little tool.
Sega Genesis Programming Part 7: NPC Sprites
Our sprite was looking awful lonely in his sparsely decorated store. In this article we give him a friend and fix up a few lingering problems with collision detection.
Sega Genesis Programming Part 8: Game State & Pausing
In this round I fixed several nagging problems and implemented (very) basic game state management. Since the breakneck action of this demo is probably too much for most to handle I also added a pause feature to test out game state management.
Sega Genesis Programming Part 9: Object List
After 8 articles we have a sprite that can walk around and bump into things while music is playing. We can even pause the game just in case this is too much action for people to handle. Now let's figure out how we're going to let our sprite interact with their environment.
Sega Genesis Programming Part 10: Sprite Link List
In this exciting episode we figure out how sprite links can be used to control the order that sprites are drawn as they move around the y-axis. We also take a small detour and look at a way to keep track of memory address constants.
Sega Genesis Programming Part 11: Scenes & Dialogs
This is a fairly large installment that looks at how to store & load scenes, creates a font, and displays dialogs with text based on what the player is looking at. This is getting closer to almost resembling a game of some sort.
Sega Genesis Programming Part 12: Scenes & NPCs
I decided to focus on turning this crazy experiment into a simple one-room demo that contains all the basic mechanics of an adventure-like game. The first part of this involves supporting an arbitrary number of NPCs than can be moved between locations.
Sega Genesis Programming Part 13: Action Table
The second stop on our journey toward a one-room demo takes us to processing actions. In this article I built out a simple table that's used to respond to player actions based on the game state. Multi-page dialogs and default object description text were also built along the way.
Sega Genesis Programming Part 14: Selections
So far our little sprite can only look at objects and engage in one-sided dialog with NPCs. Let's fix that by adding a menu that gives them more interaction options. While we're at it, let's add the ability to respond to NPC questions.
Sega Genesis Programming Part 15: Inventory
The next step in building a one-room demo is inventory management. In this installment we give the player a (small) inventory with basic add/remove item functionality. While we're at it, let's add some dialogs that allow the player to select items to give or take.
Sega Genesis Programming Part 16: Scripted Events
It's time to force some sprites to walk around against their will. What's that? You don't think 16-bit sprites have free will? What if our world is just a sophisticated computer simulation and everything we do is part of a table written in assembly language? Now what do you think about about making these little sprites walk wherever we tell them to? If you now have a moral objection then too bad because we're doing it anyway. Also this will be the last Genesis programming article I write for a while but not for a bad reason.
Sega Genesis Programming Part 17: Fade-In/Fade-Out
I say we put an end to ugly scene transitions in the Retail Clerk '89 demos by implementing some fade-in/fade-out effects. This article is also a good refresher on palettes since it's been something like three years since I wrote that tutorial. Hmm, I thought I'd have more to show after three years. That's alright, I'm still on pace to hit the 2040 holiday shopping season.
Sega Genesis Programming Part 18: Saving & Loading
This was the last major feature I planned to add to Retail Clerk '89. I kept putting it off because I thought it would be a lot of work. It really wasn't though.
Sega Genesis Programming Part 19: 6 Button Controllers
I think I'm done working on Retail Clerk '89 so it's time to explore other Genesis demo ideas. First up is deciphering how to add 6 button controller support and detect whether a 3 or 6 button controller is connected. This article also includes a demo ROM that's handy for testing controllers on real hardware and controller configuration on emulators.
Sega Genesis Programming Part 20: Palette and Tile Generation
This isn't really about Genesis programming all that much. It's about some tools I'm working on to make Genesis programming easier. In this installment we'll be writing code to extract palettes, tiles, and patterns from an existing image and re-drawing them on the Genesis.
Sega Genesis Programming Part 21: VDP Sprite Collision
This time around I'm looking at a seldom-discussed and potentially useless feature of the Genesis hardware - the VDP sprite collision flag. Let's see how it works and decide whether there's any benefit to using it.
Sega Genesis Programming Part 22: 4 Way Play
Just a small example on how to interact with the 4 Way Play if that's something you're interested in.
C# .NET Programming
Outlook Screen Saver
An example of how to create a screen saver in C# and work with the Outlook object model.
Random Maze Experiment
Inspired by the game Minotaur for the Intellivision, this is an attempt to build a random 12x12 maze where every room is accessible.
Random Maze Experiment Part II - Objects
A follow-up to the random maze demo where I tackle adding random objects to the maze.
Android SpriteWalker Demo
A small demo on how to move a sprite around with collision detection and background music.
Quick Guide to Android Serialization
A very quick tutorial on how to serialize objects to an SD card from an Android application.
Browsing Facebook Albums from an Android Application
A demo application and tutorial about how to browse Facebook albums on Android.
Integrating Android Applications with the eBay API
A demo application illustrating how to invoke the eBay API, parse the results, and display them on an Android device.
Writing a simple file browser in JavaFX
A quick example of how to write a little file browser using the JavaFX TreeView and TreeItem classes.
Java 8 Optional: What's the Point?
My first impression of the new Optional feature introduced in Java 8.
Applet Repair Course
How to fix an old applet you don't have the source code for.
Creating a Recent File Menu
An example of how to create a recently used file menu in Java.
Atari 2600 BASIC Programming
In 1979 Atari made a BASIC programming cartridge for the 2600. Since I enjoy obsolete technology and frustration I attempted to write a few almost useful programs on it, here are the results.
Outlook VBA - Coping with annoying appointments
Some handy VBA code to take care of the most annoying appointments your co-workers force upon you.
How to not completely screw up your portal implementation - Part 1: The First Rule of Portal Design
After 5-6 years of working on portal applications I've learned a lot of painful lessons, there's no reason you should have to suffer too. The first installment in this series deals with the single most important design rule for portals.
The Abridged Story of Mercator Software
My experiences at the now-defunct Mercator Software.
Exploring an unsuccessful php hacking attempt
Let's take a quick look at a PHP hacking attempt from a Russian botnet.
Overlib Image Hover
How to create an image hover effect using Overlib.
Microsoft's Year 2000 Resource Center CD
Preparing developers for the end of the world.