Devlog 02: Making a game for the Amiga?
Hello World!
I understand at a broad level the kind of game I want to make: a first person, point-and-click adventure game set in a near future dystopian world. One of the things I’ll be borrowing from Rise of the Dragon is the contextual mouse cursor. Unlike Sierra or Lucasarts games where you have to select a verb or action and then click on the item, the appropriate action will happen when you click something. No need to click on “OPEN” then click on a door to open a door. Just Click It™️. What I need to figure out is what systems need to be built and how to build them.
With NEONnoir, I’m targeting the Amiga 1200. The stock models have Motorola 68EC020 CPU with 2MB of build in chip RAM and 8MB of “fast RAM”. All the graphics need to be in chip RAM for them to be blitted on the screen, so I’ll have to be careful there. The system has the AGA graphic chipset that allows for 256 color images and each color can be out of 16,777,216 colors.
There are multiple resolutions available but differ depending if running in either PAL or NTSC mode. I’m going to target 320x200, which is smaller than PAL’s 320x256, however on PAL systems, my intention is center the screen vertically.
The reason for this are simple: I’m not very familiar with the hardware to a degree that I can greatly optimize my game within the three month time-period of the jam. Targeting an NTSC A1200 give me the extra wiggle room if I need it.
With that out of the way,
How do we structure the game?
The game will be broken down into locations that can be accessed from a hub map, this could be “My Office”, “The Alleyways”, “The Sewers”, and so on. By keeping the locations self contained, I’ll only need to load image data for the location you’re in thereby lower the memory pressure on chip RAM. Each location is a logical collections of scenes.
Scenes are the actual screens we see when playing the game and can be looked as “sub-locations” in within a location. For a “My Office” location, there may be “Main Entrance”, “Office Interior”, and “My Desk” scenes. Each scene is at most a 320x200x8 image (which equates to 64k of chip RAM). If we could hog all the chip RAM for ourselves, that would be only enough space for 32 background… hence why they’re broken into locations.
Other than a background image, a scene contains a collection of rectangular regions where the user can mouse over or click. Hovering the mouse over a region should bring up some text as to indicating why the spot is interesting as well as changing the mouse cursor to something appropriate.
In order to make the game interactive, the regions should do something when the user clicks on them whether it taking them to another scene, picking up an item, starting a conversation with an NPC, etc. And this is where things get a little tricky since each region will could potentially do a bunch of things. Let’s consider a light switch.
For this puzzle, the office is dark and you can’t explore it until you turn on the light. Flipping the light switch does nothing and the player character remarks to themselves that the breaker must have tripped. They then go to a different scene to flip the breaker on and return to the office. Now, when the flip the switch, the light turns on, revealing the office. Attempting to turn the light off has the player character remark that they don’t want to because they’re afraid of the dark.
Thats seems pretty straightforward but there is a lot that the switch is doing. Using pseudocode, it must do something like this:
if power_is_on is false then
say "The breaker must have tripped"
else
if light_is_on is false then
set light_is_on to true
set_scene_bg lights_on_bg
say "Finally, some light"
else
say "No thanks, I don't like the dark"
I’m going to need to create a scripting language that can be compiled into bytecode and then interpreted at runtime when the player clicks on the light switch. I’ll go in depth in a future post.
For now, I need create the data to load up one scene in one location and show some text when mousing over the various regions.
See you next game!