Update! V0.3 is out, file is attached
New stuff:
Fever Toggle
Max Power Toggle
Lua Hitbox Script for Fightcade
More info
...also I 'finished' Cake Fighter so go find that too!
Old v0.1 post:
Never despair; I'm still working on Cake Fighter! During that (continuing) research I documented a lot of Twinkle Star Sprites (TSS) code -- so when @Swirl dropped me a line and let me know the TSS community struggles for training options, I thought I could help. With @Swirl's expert direction I cleaned up some of the existing debug menus and built a "TSS Trainer" -we will call it v0.1- that hopefully the TSS community will enjoy, as well as some folks here. Heck, maybe I'll even use it and stop being such a scrub. *edit: here is a wonderfully comprehensive guide for the trainer @Swirl has created as well. Thanks also to Sudden Desu for all the original research that uncovered the debug menus in the first place.
(a Victory pose, if you're not familiar with it, like me)
Basics
Press C+D during game-play to bring up the menu, or to
Toggle options with left or right
Exit with C+D
The Zako sub-menu enables after the round starts, i.e. "Go!", by selecting either ZAKO or BLOK and then pressing C+D to 'exit'
Choose options in the Zako sub-menu by holding D and using the directions/joystick for UDLR
Select/engage a Zako sub-menu selection by pressing C
Menu Options
MUTEKI (invincibility) On/Off - You can still get hit but you don't die i.e. round-over
CTRL - Human/CPU/Off
CHR-NO - Select your Character
CHR-COL - Select character color (Normal or Reversed)
ZAKO* - Select the enemy patterns (Auto, Zako, Blok)
DB-DISP - Shows CPU usage meter and two charts**
NODEATH - Prevents Death from spawning (On/Off)
SLOW - Slow motion (On/Off)
*ZAKO sub-menus are documented here under "ZAKO and BLOCK test", we just cleaned up the UI a bit by removing extraneous text and less useful info.
**The original DB-DISP displays three values (check guide for info). We now render the "unknown gameplay monitor" here as well since those values are potentially relevant. Also see the guide as it will be updated as the community figures those out!
There is also an optional file which disables the music driver. It's been reported that (at least on emulated systems) disabling the music results in less slowdown during very frenetic gameplay. It's helpful to train without slowdown, so if that's your aim then you'd use this file too.
Lunar IPS patches are attached here in a zipfile, which has two folders:
/mame_rom: (works on MAME, FBNeo, etc)
apply 224-p1.ips to /roms/twinspri/224-p1.p1
(optional music mute) 224-m1.ips to /roms/twinspri/224-m1.m1
/ds_multi: (works on the Darksoft MVS Multi)
apply prom.ips to the /games/twinspri/prom file
(optional music mute) apply m1rom.ips to the /games/twinspri/m1rom file
If anyone wants to fiddle with the details, or if I forget wtf I did and want to read up on it again, here are some more thorough notes on the patchwork.
FAQ
Q: Can you build a version for the Neo SD
A: No
New stuff:
Fever Toggle
Max Power Toggle
Lua Hitbox Script for Fightcade
More info
...also I 'finished' Cake Fighter so go find that too!
Old v0.1 post:
Never despair; I'm still working on Cake Fighter! During that (continuing) research I documented a lot of Twinkle Star Sprites (TSS) code -- so when @Swirl dropped me a line and let me know the TSS community struggles for training options, I thought I could help. With @Swirl's expert direction I cleaned up some of the existing debug menus and built a "TSS Trainer" -we will call it v0.1- that hopefully the TSS community will enjoy, as well as some folks here. Heck, maybe I'll even use it and stop being such a scrub. *edit: here is a wonderfully comprehensive guide for the trainer @Swirl has created as well. Thanks also to Sudden Desu for all the original research that uncovered the debug menus in the first place.
(a Victory pose, if you're not familiar with it, like me)
Basics
Press C+D during game-play to bring up the menu, or to
Toggle options with left or right
Exit with C+D
The Zako sub-menu enables after the round starts, i.e. "Go!", by selecting either ZAKO or BLOK and then pressing C+D to 'exit'
Choose options in the Zako sub-menu by holding D and using the directions/joystick for UDLR
Select/engage a Zako sub-menu selection by pressing C
Menu Options
MUTEKI (invincibility) On/Off - You can still get hit but you don't die i.e. round-over
CTRL - Human/CPU/Off
CHR-NO - Select your Character
CHR-COL - Select character color (Normal or Reversed)
ZAKO* - Select the enemy patterns (Auto, Zako, Blok)
DB-DISP - Shows CPU usage meter and two charts**
NODEATH - Prevents Death from spawning (On/Off)
SLOW - Slow motion (On/Off)
*ZAKO sub-menus are documented here under "ZAKO and BLOCK test", we just cleaned up the UI a bit by removing extraneous text and less useful info.
**The original DB-DISP displays three values (check guide for info). We now render the "unknown gameplay monitor" here as well since those values are potentially relevant. Also see the guide as it will be updated as the community figures those out!
There is also an optional file which disables the music driver. It's been reported that (at least on emulated systems) disabling the music results in less slowdown during very frenetic gameplay. It's helpful to train without slowdown, so if that's your aim then you'd use this file too.
Lunar IPS patches are attached here in a zipfile, which has two folders:
/mame_rom: (works on MAME, FBNeo, etc)
apply 224-p1.ips to /roms/twinspri/224-p1.p1
(optional music mute) 224-m1.ips to /roms/twinspri/224-m1.m1
/ds_multi: (works on the Darksoft MVS Multi)
apply prom.ips to the /games/twinspri/prom file
(optional music mute) apply m1rom.ips to the /games/twinspri/m1rom file
If anyone wants to fiddle with the details, or if I forget wtf I did and want to read up on it again, here are some more thorough notes on the patchwork.
Consolidated Trainer Notes
Offsets are +100000 in the actual file because neo geo
Debug Menu Lookup Table - 017E6C
Like many other tables in the game, the target gets built from a register offset, and the value in the table is used as a target address
example: toggling Muteki byte on/off
Debug Menu Start - 017EB0
Generally speaking, the pattern for each menu item is:
check if the item is selected,
change the render color (or skip)
set address for the text to render
send the result to the rendering subroutine $cdbe
then render the toggling part of the ui, the same way
then skip a line
I modified the code with a branch to the end after as many items as I wanted to render, to save time from nopping them all. The last thing needed is to edit how many items the game thinks are in the menu before looping.
Due to how the script was built over several conversations, there is some cruft.
The original entry "Slow" was renamed into "Zako" and the related addresses were edited.
Then we ended up putting "Slow" back in, on top of the entry "Diff". Oh wellz.
I overwrote "Dif-Not" with a patch for toggling Death.
The newly added 'Death byte' is a boolean I dropped at 10b366 in user memory In code it's referenced as $3666 ususally with a4+offset.
Where the Death code normally begins (023EBE, a jump to the death subroutine), I instead jump out to empty memory at db900 and do an evaluation of the new death byte. If it's zero, I run Death
, if it's 01, I skip over the death subroutine and return to the stack.
We also added the "unknown" display into the DB-DISP on/off toggle. That's a patch at 01799C which just jumps to the monitor, which sets the addresses i overwrote anyway, and then naturally returns with RTS.
There's a cheat that disables the audio driver (somehow) with a patch of the music driver's code at 04C2 from 32 to C9. I didn't try to disassemble the audio driver to figure out why it works, but it disables music. This apparently helps with slowdown, and I'd argue that perhaps on only emulated systems this is true. In any case, if you want to try this 'no slowdown' version you can replace your 224-m1 file with the patched version, and no music will play.
Offsets are +100000 in the actual file because neo geo
Debug Menu Lookup Table - 017E6C
Like many other tables in the game, the target gets built from a register offset, and the value in the table is used as a target address
example: toggling Muteki byte on/off
Code:
017E6C: 0001 7C4C ori.b #$4c, D1 ; muteki lookup table address, points to the logic related to the debug menu selection
; muteki toggle
017C4C: 0807 0002 btst #$2, D7
017C50: 6608 bne $17c5a
017C52: 197C 0001 4181 move.b #$1, ($4181,A4) ; the actual invulnerablilty / muteki byte (10c181 or 10d181)
017C58: 6004 bra $17c5e
017C5A: 422C 4181 clr.b ($4181,A4)
017C5E: 4E75 rts
getting the value from the lookup table
017C14: 41FA 0256 lea ($256,PC) ; ($17e6c), A0 ; 17e6c being the lookup table. entries are offset by their menu position (x4)
017C18: moveq #$0, D0
017C1A: move.b ($4180,A4), D0 ; 'menu position' byte
017C1E: add.w D0, D0 ; offset x2
017C20: add.w D0, D0 ; offset x2 more
017C22: movea.l (A0,D0.w), A0 ; get long word located at offset address e.g. 0001 7C4C from 017E6C (if offset was 0)
017C26: jsr (A0) ; jump to 017C4C
Debug Menu Start - 017EB0
Generally speaking, the pattern for each menu item is:
check if the item is selected,
change the render color (or skip)
set address for the text to render
send the result to the rendering subroutine $cdbe
then render the toggling part of the ui, the same way
then skip a line
I modified the code with a branch to the end after as many items as I wanted to render, to save time from nopping them all. The last thing needed is to edit how many items the game thinks are in the menu before looping.
Code:
017C2C: 532C 4180 subq.b #1, ($4180,A4) ; 4180+108000 = 10c180 ; this is the menu position byte for debug menu
017C30: 6418 bcc $17c4a
017C32: 197C 0010 4180 move.b #$10, ($4180,A4) ; change this #$10 byte to 07 or whatever to reduce the menu 'size'
017C38: 6010 bra $17c4a
017C3A: 522C 4180 addq.b #1, ($4180,A4) ; increment
017C3E: 0C2C 0010 4180 cmpi.b #$10, ($4180,A4) ; change this #$10 byte to 07 also to reduce the menu 'size'
017C44: 6304 bls $17c4a
017C46: 422C 4180 clr.b ($4180,A4) ; loop back to 0
017C4A: 4E75 rts
Due to how the script was built over several conversations, there is some cruft.
The original entry "Slow" was renamed into "Zako" and the related addresses were edited.
Then we ended up putting "Slow" back in, on top of the entry "Diff". Oh wellz.
I overwrote "Dif-Not" with a patch for toggling Death.
The newly added 'Death byte' is a boolean I dropped at 10b366 in user memory In code it's referenced as $3666 ususally with a4+offset.
Where the Death code normally begins (023EBE, a jump to the death subroutine), I instead jump out to empty memory at db900 and do an evaluation of the new death byte. If it's zero, I run Death
Code:
jsr $23da8
We also added the "unknown" display into the DB-DISP on/off toggle. That's a patch at 01799C which just jumps to the monitor, which sets the addresses i overwrote anyway, and then naturally returns with RTS.
There's a cheat that disables the audio driver (somehow) with a patch of the music driver's code at 04C2 from 32 to C9. I didn't try to disassemble the audio driver to figure out why it works, but it disables music. This apparently helps with slowdown, and I'd argue that perhaps on only emulated systems this is true. In any case, if you want to try this 'no slowdown' version you can replace your 224-m1 file with the patched version, and no music will play.
Q: Can you build a version for the Neo SD
A: No
Attachments
Last edited: