Reply to Alliance Command Ending
If you don't have an account, just leave the password field blank.
A few days ago, I started cleaning out the closet in my office, and found a bag full of hard drives and old backup CD-ROMs. As one does.
An aside: the term 'backup' implies properly categorized, dated, and maintained archives of information. But I use the term 'backup' pretty loosely - these weren't done with any real rigor or intention. It was pretty random. And given that these artifacts where anywhere from 15 to 25 years old, I expected most of the drives and discs to be have major issues. But, I was pleasantly surprised to discover that I was able to easily recover 100% of the data from the vast, vast majority of the drives and discs.
That got my mind to wondering - did I have a backup of the original Alliance Command ending tucked away somewhere? As Tim wrote in COTPATD:
The most disappointing thing, however, is that after going through all the effort to reach the end, nothing happens. There's a credits script in the story folder, but it's never called. This feels like an awful shame.
Now, as I recall, what happened was I used a non-ASCII character in the ending script. When I 'compiled' the scripts to .d format it created a file with one malformed byte in it.
So, I searched around a bit, and I found some old Alliance Command source files! With timestamps dating from May through July 1999.
I thought it would be pretty funny to release a new version with the original ending restored some 26 years after I originally released it.
I tried to figure out where the problem was, but it wasn't clear to me by looking through the source code and the editor. So, to see it for myself, I played Alliance Command for the first time in ages, and even recorded my playthrough.
Overall, I did enjoy playing through it, even if the gameplay was a little bit simple and too easy. I did briefly considering updating it to fix an issue where the projectiles seemed to hit either text sprites (damage numbers) or blood spurts before enemies, but I just decided to change the way I played.
And, after almost an hour, I arrived at Level 10, and... the ending worked perfectly, and the credits rolled!
I believe the missing ending issue was due to an aspect of DinkC that manifests differently in different versions of Dink Smallwood.
The ending is invoked by this script (A10-s5.c):
So, the ending will be skipped for two conditions:
The player's Y coordinate... hey, that's weird. Why would the ending be skipped if the player's Y coordinate is >= 350? If the intention is that the ending is played when the player comes 'up', wouldn't we want to skip it if Dink's Y coordinate was <= 350?
Without digging into it too much, I suspect this is FreeDink's fault.
Now, as for why I remember the ending disappearing due to a non-ASCII character .d issue - I don't know. I assume I got that mixed up with another situation (maybe for the unreleased Clone War Demo?), and when I read Tim's issue I short-circuited Memory B with Memory A. Yay.
An aside: the term 'backup' implies properly categorized, dated, and maintained archives of information. But I use the term 'backup' pretty loosely - these weren't done with any real rigor or intention. It was pretty random. And given that these artifacts where anywhere from 15 to 25 years old, I expected most of the drives and discs to be have major issues. But, I was pleasantly surprised to discover that I was able to easily recover 100% of the data from the vast, vast majority of the drives and discs.
That got my mind to wondering - did I have a backup of the original Alliance Command ending tucked away somewhere? As Tim wrote in COTPATD:
The most disappointing thing, however, is that after going through all the effort to reach the end, nothing happens. There's a credits script in the story folder, but it's never called. This feels like an awful shame.
Now, as I recall, what happened was I used a non-ASCII character in the ending script. When I 'compiled' the scripts to .d format it created a file with one malformed byte in it.
So, I searched around a bit, and I found some old Alliance Command source files! With timestamps dating from May through July 1999.
I thought it would be pretty funny to release a new version with the original ending restored some 26 years after I originally released it.
I tried to figure out where the problem was, but it wasn't clear to me by looking through the source code and the editor. So, to see it for myself, I played Alliance Command for the first time in ages, and even recorded my playthrough.
Overall, I did enjoy playing through it, even if the gameplay was a little bit simple and too easy. I did briefly considering updating it to fix an issue where the projectiles seemed to hit either text sprites (damage numbers) or blood spurts before enemies, but I just decided to change the way I played.
And, after almost an hour, I arrived at Level 10, and... the ending worked perfectly, and the credits rolled!

I believe the missing ending issue was due to an aspect of DinkC that manifests differently in different versions of Dink Smallwood.
The ending is invoked by this script (A10-s5.c):
void main(void) { &confusion = 0; &polymorph = 0; int &bnut = count_item("item-fireb"); if (&bnut == 1) { kill_this_item("item-fireb"); add_item("item-kha",88, 3); &cur_weapon = 1; arm_weapon(); } if (&screen_8 == 0) { goto end; } int &shoe = sp_y(1, -1); if (&shoe >= 350) { goto end; } freeze(1); move_stop(1, 8, 300, 1); script_attach(1000); fade_down(); &player_map = 398; load_screen(); draw_screen(); draw_status(); sp_x(1, 313); sp_y(1, 121); sp_dir(1, 2); fade_up(); kill_this_task(); end: }
So, the ending will be skipped for two conditions:
- If screen_8 is 0
- If the player's Y coordinate is >= 350
The player's Y coordinate... hey, that's weird. Why would the ending be skipped if the player's Y coordinate is >= 350? If the intention is that the ending is played when the player comes 'up', wouldn't we want to skip it if Dink's Y coordinate was <= 350?
Without digging into it too much, I suspect this is FreeDink's fault.
- The official Dink Smallwood lineage versions (Dink Smallwood 1.06 through Dink Smallwood HD) likely do not update the player's Y coordinate until the first screen update. A10-s5.c is invoked before the first screen update, so when the script executes the player's Y coordinate is the last Y coordinate from the previous screen. This worked great back in 1999 (and, oddly, today with Dink HD), but not for FreeDink.
- FreeDink likely 'fixed' this bug, so that the player's Y coordinate is accessible to DinkC before the first screen draw.
Now, as for why I remember the ending disappearing due to a non-ASCII character .d issue - I don't know. I assume I got that mixed up with another situation (maybe for the unreleased Clone War Demo?), and when I read Tim's issue I short-circuited Memory B with Memory A. Yay.