Experienced Forum User, Published Author, Active player
(319)
Joined: 12/20/2022
Posts: 33
Location: UK
Done.
As for my personal wishlist, there are lots of games I'd like to see TASed and it's certainly beyond my abilities to do them all, even if I had infinite time.
Miner Willy series:
Manic Miner (1 loop, Max Score)
Jet Set Willy (any%, WRITETYPER)
Jet Set Willy II (any%, 100%)
Jet Set Willy II+e.22 (any%, 100%)
Jet Set Willy Nightmare Edition
Manic Panic
Jet Set Willy Altered Reality
Manic Jet Set Willy
Dizzy series:
Dizzy: The Ultimate Cartoon Adventure (any%, Max Score)
Treasure Island Dizzy (any%, Max Score)
Fantasy World Dizzy
Magicland Dizzy
Spellbound Dizzy
Dizzy: Prince of the Yolkfolk
Crystal Kingdom Dizzy (any%, All Perfects)
Crystal Kingdom Dizzy Remake
Wonderful Dizzy
Fast Food
Kwik Snax (any%, All Perfects)
Panic Dizzy
Dizzy Down the Rapids
Other classic Spectrum games I'd like to see/do:
The Trap Door (any%, Max Score)
Jetpac
Lunar Jetman
Destructo
Chaos: The Battle of Wizards
Lords of Chaos
Spindizzy
Ant Attack
Skool Daze
Back to Skool
Equinox
Highway Encounter
Alien Highway
Cauldron
Cauldron II: The Pumpkin Strikes Back
Quazatron
Strike Force Cobra
The Way of the Exploding Fist
Firelord
Uridium/Uridium Plus
Other modern Spectrum games I'd like to see/do:
Jumpin' Jupiter (+ Prelude)
Last Train to Tranz Central (Part 1, Part 2)
Just a Gal
Bonnie and Clyde
Cocoa and the Time Machine
Cocoa 2: Twenty Four Hour Parsley People (Episode 1, Episode 2 any%, Episode 2 100%, Episode 3)
Valley of Rains
DRIFT! (any%, Max Score)
DRIFT! 2K22 (any%, Max Score)
The Dark Redux (+ Lost Pages)
Travel Through Time (Story, EVA)
Lava
The Swarm is Coming
Angels
Lava Birds
Metal Man Remixed
Rubinho Cucaracha
Hakkenkast
Don Quioxte
🔺🟢🟦
I'd also like to see Tau Ceti and The Sentinel, but anything that can be considered a completion for these are very long (although I guess shorter than Desert Bus Max Score).
Experienced Forum User, Published Author, Active player
(319)
Joined: 12/20/2022
Posts: 33
Location: UK
I'd argue this is where it fails - you're not loading the game with the standard loader anymore, you've created a custom loader, which is explicitly not allowed.
Experienced Forum User, Published Author, Active player
(319)
Joined: 12/20/2022
Posts: 33
Location: UK
Can you give an example of POKEs done before load that add a cheat to the game in some way?
I'm not aware of any way to change the system in such a way that performing the standard LOAD command results in the game being modified, but I'd be interested to see otherwise.
Experienced Forum User, Published Author, Active player
(319)
Joined: 12/20/2022
Posts: 33
Location: UK
Thanks for the review!
It would be nice to have this as a general feature for microcomputer runs - even when loading from disk a large portion of the start of the run is loading, and this is obviously far worse when loading from tape. A timestamp for when the loading finishes would go a long way, at least for games only have the one initial load.
At the same time, within minutes of the video going live there are always four comments with said timestamp (and twelve more complaining about the loading sound). It's probably not a necessity.
Experienced Forum User, Published Author, Active player
(319)
Joined: 12/20/2022
Posts: 33
Location: UK
So I've been speedrunning for a few years now and gained a reputation for running Spectrum games (even though I run lots of other games too, it's just that not many other people do Spectrum games); I decided to get into tool-assisted runs of the games I'm more familiar with, as there aren't many of those for the Spectrum either (especially when it comes to the more classic games) and submitted a couple of movies already. But I have a query which affects future submissions of mine...
The Spectrum, like many microcomputers of the era, boots into a BASIC prompt. This allows the user to enter programs and modify memory with simple commands, as normal and expected usage of the computer. On a few occasions, developers have issued patches to their games in the form of programs you type in and run before loading the game, and it would seem silly to not allow it for these cases. On the other hand, this also means you can write your own patches to do literally anything, and completely trivialise any game by removing all enemies, starting in the end room, or just overwriting the code with an entirely new game, and this would obviously not be in the spirit of the game - they're effectively the same as Game Genie codes, which are typically banned.
The grey area comes with manipulating memory before loading a game. The aforementioned patches typically work by writing a custom loader, which then ignores the original game's loader and runs its own instructions after loading the game data. If the original game's loader is used, and isn't modified in any way, it's not possible to patch the game as the game data will overwrite data currently in memory. However, it's rare for game data to load and fill the entire RAM, and usually certain areas of memory are deliberately left untouched; especially system variables.
Many games use the FRAMES variable (3 bytes at 0x5C78), which counts the number of frames since the computer was turned on, to seed the random number generator. This variable can be set by the user manually before loading the game to manipulate RNG; this doesn't require a special loader and doesn't change any of the game data - should this be allowed?
Some games use built-in system routines and fail to set system variables before using them (e.g. using the BASIC keyboard interpreter without setting auto-repeat times); these could easily be changed before loading the game to modify behaviour without modifying the game itself. Should this be allowed?
Some games read general memory not loaded or initialised by the game itself; it could easily be the case that, in normal and expected usage of the system, this memory just happens to be set to something beneficial to the run. Should this be allowed?
We discussed this a couple of years ago with regards to RTA speedrunning in the Speedtrum Specrunning Discord, and came to the conclusion that as long as the game is loaded from the very start, using the standard LOAD "" in regular Spectrum BASIC, the built-in Tape Loader (for 128K machines and later), or using a type-in program provided by the developer themselves, any prior activity is allowed, including any arbitrary setting of system variables. However, all custom loaders (save for the aforementioned developer provided ones) are prohibited, as is interrupting the loading process to modify memory during or after loading.
There are a couple of justifications for this:
1. RNG manipulation can make or break some runs, and runners playing on real hardware are already at a massive disadvantage when it comes to waiting four minutes for the game to load between attempts - imagine if they had to load the game dozens of times just to get the right seed! Allowing the FRAMES variable to be set reduces this discrepancy significantly. (There are still issues with getting the right seed due to tape loading times, and we don't recommend loading from tape as a result, but still...)
2. Other memory addresses not being initialised correctly is an existing bug in the game; no bug or glitch is being introduced or added, merely exploited, and exploiting bugs is a natural part of speedrunning.
Obviously 1 is not a consideration for a TAS; but even so I lean towards allowing this as it massively lowers the discrepancy between minimising actual gameplay time and minimising the TAS frame count. (What if waiting 20 minutes before loading the game means you can complete it a few seconds faster? An extreme example for sure, but possible.)
I haven't tagged this as [ZXS] as this can also apply to C64 games, as well as CPC in the future.
TL;DR: do I have to load a game with LOAD "" or can I load it with POKE 23673,42: LOAD "" ?
Experienced Forum User, Published Author, Active player
(319)
Joined: 12/20/2022
Posts: 33
Location: UK
Correct - it's impossible to get past the first trolley without a long wait, so I added a small message in the middle. It never presses a key while the game is checking for that key so it has zero impact on gameplay.
The tape loading is almost exactly the same, and it's possible it does sync early on, but the reason I explicitly use the Software Projects version is that the graphical changes in The Warehouse mean you can complete it a single in-game frame faster.
For the most part enemy cycles are the same or at least similar enough to be comparable - the whole game in general runs faster on the GBA, and most routes that work on the Spectrum version also work just as well on the GBA (only exceptions due to enemy cycles as far as I know are Wacky Amoebatrons and The Warehouse).
The item collection difference is quite significant (major effects on Ore Refinery and The Warehouse), but more significant is the conveyor behaviour. On the GBA version, you can run against a conveyor as long as you are facing in that direction, but on the Spectrum version you must already be moving in that direction. Central Cavern, Eugene's Lair, Skylab Landing Bay, The Sixteenth Cavern, and Solar Power Generator all need very different routes for both versions because of this (in The Sixteenth Cavern, the reason the GBA run has to avoid the top-right flag bug is because you can't hold your position on the conveyor without turning around, and you don't have a frame to spare to turn around again after you jump up).
I'd like to go through the GBA version and try to improve it at some point; from what I can tell, The Menagerie, The Endorian Forest and The Warehouse should be doable the way the Spectrum version does it (with a few minor changes for The Warehouse) and there are a couple of frames to be saved in some of the GBA exclusive levels too.
Thanks for the review!