Search the Community
Showing results for tags 'smooth scrolling'.
-
Hi All, I've found some more time to work on my Alex Kidd port. I manually converted one of the original games' maps to a format that is compatible with my scrolling routines. Naturally, I lost quite a bit of detail, but the end-result isn't too bad. This is what the original looks like: And this is what the same map looks like on the TI: I had to move some blocks around, or remove some blocks to avoid color clash(can't have two different colored blocks directly next to each other), but all-in-all, most of the details are there. I also originally did a very nice conversion of the cave the old man is sitting in at the end, but I ran out of patterns and had to ditch both that and the clouds. I'm thinking of adding it in a static screen that gets tagged onto the end of the map, but those are details for later. Either way, I'm only using some of the original game maps to test playability and will probably design my own at some stage (so it'd be a sequel/prequel instead of a direct port), so I'm not sure how important those issues are. Next up, I started working on real collision detection and fine-tuning the physics to be a bit more in line with the original game. Seems to be working well, although I still need to add a collision check for the top of the sprite (you could jump into one of the blocks now and get stuck if you really try). Next up: finish the collision detection routines, find a way to make Alex face the other direction and implement punching. Also, add the jumping and punching sound effects. After that, I'll need to figure out how to make the blue blocks and the gold boxes destructable in the scrolling data... punching and destroying blocks is kinda the main mechanic of the game . It should be doable, but it will be quite convoluted as I have to decide which patterns to put in place depending on the object on the other side of the block. Finally, here's a video recorded in MESS. Normal caveats apply: youtube makes it a bit more choppy than the real thing, and of course the colors are a bit more washed out here. *edit* The latest work-in-progress version is attached to this post for those that are interested in trying it out. Latest version is from august 24th, 11pm CET. alexkidd.dsk
-
StarBlitz EDIT: Here are the new versions of the game based on feedback from this thread: StarBlitz_double_fun.bin StarBlitz Double Fun! Use the BW switch to change between 30 HZ and 60 HZ! Interesting display artifacts that show up only on the real hardware in both modes. StarBlitz_60HZ_v1.bin StarBlitz at 60 HZ - is it better than 30 HZ? StarBlitz_v5C.bin (most recent and different than the site download, continuous cityscape and meteor animation improvements; white flash left over from testing has been removed). StarBlitz_v5B.bin(bugfix - meteors now stable near enemy drones, difficulty ramped up) StarBlitz_v5.bin (added enemy drones, pods easier to shoot) StarBlitz_v4A.bin ( pods can be shot) StarBlitz_v4.bin (added enemy flyer with pods) StarBlitz_v3.bin (no motor background sound) StarBlitz_v2.bin (more meteor paths, sound scheme revisions) StarBlitz.bin (original version) StarBlitz is a high resolution smooth scrolling Defender style game where you protect the colorful cities of Mars from comets and meteors. Each Martian CityScape is different than the next. How many cities can you protect? Game play: Destroy the comets and meteors before they level the city to progress to the next level. The game ends when your ship is hit without shields or a city is destroyed. Weapons: Drone Torpedoes - Your Ship is equipped with short range drone torpedoes that you control. Shields: Magnetic Ion Shields - you'll quickly get a feel for how many meteor hits you can take; your ship changes color as the Ion field loses magnetic flux. Strategy: Inertia - use your Horizontal Drift (drift is considerable, inspired by Defender) to maneuver your Drone Torpedoes for maximum effect while avoiding the falling meteors. Larger meteors can do more damage to your shields but are easier to hit. Scoring: Interactive - your in-level score will periodically appear as a falling comet. The number of levels completed will appear on screen briefly during play at the beginning of each level, and at the end of the game. Catch or shoot score for additional points. Leveling up - when your in-level score reaches 8 you move on to the next City. Progressive Difficulty: StarBlitz is easy to play but difficult to master, difficulty ramps up as the levels progress. Easter-Egg: If you're light fingered you can play on the title screen too! Hope everyone enjoys!
- 74 replies
-
- 2
-
- smooth scrolling
- shoot em up
-
(and 1 more)
Tagged with:
-
After seeing Rasmus's great work, I decided I wanted to start working on my own smooth scrolling games for our beloved TI. Initially, I was set on using the F18A for the scrolling functionality, but alas... since I don't have a hardware setup right now and no current emulator supports the thing's scrolling registers I'm stuck with the good ol' tms9918a (for now). Since I'm lazy by nature and I didn't feel like programming a whole game in assembly, I couldn't use Rasmus' excellent scrolling example code and had to re-implement it in C. I also didn't want to spend too much time transforming the assembly output from Magellan into something directly usable from C. I looked at adding a C exporter to Magellan, but the export .java source file alone was so daunting I decided to write my own tool to generate the scrolling patterns. Since I prefer to work in The Gimp to create the level, I wrote a simple command line program that takes a 16-color bitmap file that represents the scrolling map and generates a C header file with the pattern, color and nametable data (graphics mode only, for now). Maybe I'll look at turning this into a Gimp export filter at some point. For those that are interested, the simplest horizontal scrolling C application that uses the exported header file is only 100 lines of code and looks something like this: // Includes #include "libti99/vdp.h" // Tursi's libti99, VDP functions #include "tistdio.h" // Quick set of functions for keyboard scanning #include "level.h" // Generated header file containing map data #define SIT1 0x01 #define SIT2 0x03 #define CT 0xFF // copy 8 pattern tables into VDP RAM void init_patterntables() { int frame = 0; // Write 8 pattern tables to VDP memory vdpmemcpy(0x800 * frame, patt_frame0, 768); frame++; vdpmemcpy(0x800 * frame, patt_frame1, 768); frame++; vdpmemcpy(0x800 * frame, patt_frame2, 768); frame++; vdpmemcpy(0x800 * frame, patt_frame3, 768); frame++; vdpmemcpy(0x800 * frame, patt_frame4, 768); frame++; vdpmemcpy(0x800 * frame, patt_frame5, 768); frame++; vdpmemcpy(0x800 * frame, patt_frame6, 768); frame++; vdpmemcpy(0x800 * frame, patt_frame7, 768); } // Copy colortable to VDP RAM void init_colortable() { // Init the first two black, the third one gray vdpmemcpy((CT * 0x40), colortable, 13); } void init_nametable() { int x, y; for (x = 0; x < 32; x++) for (y = 0; y < 24; y++) vdpmemcpy((SIT1 * 0x400) + (x + (y * 32)), &(map[y][x]), 1); } void copy_pattern_block(int col, int frame, int backbuffer_sit) { int row = frame * 3; col++; vdpmemcpy((backbuffer_sit * 0x400) + (row * 32), &(map[row][col]), 32); row++; vdpmemcpy((backbuffer_sit * 0x400) + (row * 32), &(map[row][col]), 32); row++; vdpmemcpy((backbuffer_sit * 0x400) + (row * 32), &(map[row][col]), 32); } int main(int argc, char *argv[]) { int x, prev_x; int frame, backbuffer_sit; // Init graphics system x = set_graphics(1); VDP_SET_REGISTER(VDP_REG_MODE1, x); VDP_SET_REGISTER(VDP_REG_PDT, 0); VDP_SET_REGISTER(VDP_REG_CT, CT); VDP_SET_REGISTER(VDP_REG_SIT, SIT1); VDP_SET_REGISTER(VDP_REG_COL, 0xF1); init_patterntables(); init_colortable(); init_nametable(); prev_x = x = 0; backbuffer_sit = SIT2; while(1) { // Scan keys and do movement // scan_keys(); // UP/'E' pressed, move forward if (check_key(2,0x4000)) x++; frame = (x) % 8; if (x != prev_x) { // Move backbuffer to front and vice-versa if (frame == 0) { VDP_SET_REGISTER(VDP_REG_SIT, backbuffer_sit); backbuffer_sit = (backbuffer_sit == SIT1) ? SIT2 : SIT1; } // Advanced frame 1 pixel (aka move pattern descriptor table pointer one position up) VDP_SET_REGISTER(VDP_REG_PDT, frame); // Write 3 rows of the next full frame to the backbuffer // Depending on frame this is either 0-2 (frame 0), 3-5 (frame 1), 6-8 (frame 2), ... copy_pattern_block(x >> 3, frame, backbuffer_sit); if (x > 1016) x = 0; prev_x = x; } } return 0; } Project files, FIAD file and disk image attached for those who want to see it in action (EA#5, ALEXKIDD). The generated code is in level.h and is untouched, what you see is what the tool generated. I tried making a video, but the result looked anything but smooth. If you want to run it in an emulator, I suggest MESS as Classic99's timing is a bit off and makes it look a bit jittery. As you'll see, it runs quite fast as-is, but I'm sure there's room for improvement as this is completely unoptimized code. I'll make the tool available soon as well, but I need to clean it up a bit before it's fit for public consumption. I also need to add a binary file export function, 'cause the C header files are actually way too memory hungry for any practical use. In the future I hope to also add up-down and bitmap mode export functionality. Currently it just does what I needed it to do, and that's it. csmoothscrolling.zip
-
So I was just playing some Tutankham for ColecoVision for the HSC and I was reminded of how choppy scrolling can be on the Coleco. I was wondering, what sort of hardware was necessary back in the day to enable smooth scrolling and was it so expensive that some systems decided to go without? I'd also like to compile a list in this thread of the early systems (consoles *and* computers) that were incapable and capable of smooth scrolling. I'll start it off. If others who know could please add to (or correct) the list. Incapable: - ColecoVision/ADAM Capable: - NES - SMS - TG16/PC-Engine - Genesis - SNES