SF2HF CPS2 roadmap
Get graphics ported correctly
Pass the ram checks
Fix Inputs
Sound
Add a Settings Menu
I’m still stuck on step 1
So imagine if capcom still used cps1 fonts.
SF2HF CPS2 roadmap
Get graphics ported correctly
Pass the ram checks
Fix Inputs
Sound
Add a Settings Menu
I’m still stuck on step 1
So imagine if capcom still used cps1 fonts.
Break from Hyper Fighting
ST Title screen code a lot of jumps to use of to make a main menu with.
00AA12: btst #$6, ($7e,A5); Start button is pressed or not
00AA18: bne $aa5c; branch to jmp $2b1c if not pressed.
00AA1A: tst.b ($2e3,A5); Service switch
00AA1E: beq $aa28; if not pressed
00AA28: move.w ($0,A5), D0
00AA2C: move.w ($32,PC,D0.w), D1
00AA30: jsr ($2e,PC,D1.w)
00ABA2: move.b ($7f,A5), D1
00ABA6: not.b D1
00ABA8: and.b ($7e,A5), D1
00ABAC: andi.w #$30, D1
00ABB0: beq $abf8; goes to an rts
00ABB4: lea ($2e9,A5), A1
00ABB8: tst.b ($344,A5)
00ABBC: bne $abdc
00ABBE: btst #$5, D1
00ABC2: beq $abcc
00ABCC: btst #$4, D1
00ABD0: beq $abf8; goes to an rts
00ABD2: moveq #$1, D2
00ABD4: moveq #$1, D0
00ABD6: bsr $ab7e
00AB7E: tst.b ($2df,A5)
00AB82: bne $ab9a
00AB84: move.b (A1), D4
00AB86: moveq #$0, D3
00AB88: move.b ($2e0,A5), D3
00AB8C: addq.w #1, D3
00AB8E: mulu.w D0, D3
00AB90: andi #$ef, CCR
00AB94: sbcd D3, D4
00AB96: bcs $ab9e
00AB98: move.b D4, (A1)
00AB9A: moveq #$0, D3
00AB9C: rts
00ABD8: beq $abfa
00ABFA: move.b D2, ($2f0,A5)
00ABFE: move.w #$a0, D0
00AC02: jsr $9a8.w
0009A8: trap #$2
0009AC: lea (-$8000,A5), A4
0009B0: tst.b (A4,D0.w)
0009B4: beq $9ce
0009CE: rte
0009AA: rts
00AC06: jsr $2c86.w
002C86: moveq #$0, D0
002C88: move.w D0, ($20,A5)
002C8C: move.w D0, ($1e,A5)
002C90: lea ($aa,A5), A0
002C94: move.w #$1f, D0
002C98: moveq #-$1, D1
002C9A: move.l D1, (A0)+
002C9C: move.l D1, (A0)+
002C9E: dbra D0, $2c9a
002C9A: move.l D1, (A0)+
002C9C: move.l D1, (A0)+
002C9E: dbra D0, $2c9a
(loops for 90 instructions)
002CA2: rts
00AC0A: jsr $b2a.w
000B2A: trap #$b
000B2E: lea (-$7f00,A5), A4
000B32: move.w #$7, D7
000B36: tst.b ($0,A4)
000B3A: beq $b62
000B62: lea ($20,A4), A4
000B66: dbra D7, $b36
000B36: tst.b ($0,A4)
000B3A: beq $b62
000B62: lea ($20,A4), A4
000B66: dbra D7, $b36
(loops for 24 instructions)
000B6A: rte
000B2C: rts
Then off to clear a bunch of data and go to character select.
Some input hacks i did… all of them were pretty simple, minus the Rh crazy kick which actually demanded some work…
-Zangief’s Green Hand: DP + punch;
-Ken’s Crazy Kicks: QCF + kicks, like in HDR;
-Cammy’s Backfist: QCB, like in HDR (forgot to show it);
-Cammy’s Hooligan “HCF”, or to be more precise, i changed the last direction from up-forward to just forward;
-Fei’s Chicken Wing: same as cammy’s hooligan;
This morning decided to not work on graphics and do preliminary work on program roms.
B950E addi.w #$4000,D1
Get rid of the 4000 and you can use the ssf2 font.
http://i.imgur.com/CG21HQ5.png
Now it branches to itself with this bit of code.
B9178 tst.b ($2d2,A5)
B917C bne $B9178
So switch it to a beq it quickly passes the warning and ascii title screens it boots into this garbled screen and reading the memory it’s the Dev menu and it’s upside down.
http://i.imgur.com/SgOiXWC.png
And since the inputs don’t work I can’t do anything.
Now with Video
Inputs only Directions and Punches
ADR Change
1D2BC 804001
1D2C8 804000
CPS2 Input notes aka I should of read the Source Code before I wrote this.
Inputs
CPS2 0x804000
Switches are Inverse 0 = on and 1 = off. Inputs are binary.
0x804000 and 0x804001
Other than location it behaves the same on CPS1.
First byte Player 2 controls 0x804000
0x80 = Return to neutral aka cancel?
0x40 = HP, Shot 3, Shot C
0x20 = MP, Shot 2, Shot B
0x10 = LP, Shot 1, Shot A
0x08 = Up
0x04 = Down
0x02 = Left
0x01 = Right
Second byte Player 1 Controls 0x804001
0x80 = Return to neutral aka cancel?
0x40 = HP, Shot 3, Shot C
0x20 = MP, Shot 2, Shot B
0x10 = LP, Shot 1, Shot A
0x08 = Up
0x04 = Down
0x02 = Left
0x01 = Right
Kick Harness
0x804011
This is where it gets different and weirdly this doesn't use a full byte only these bits.
0x20 = Player 2 MK, Shot 5, Shot E
0x10 = Player 2 LK, Shot 4, Shot D
0x04 = Player 1 HK, Shot 6, Shot F
0x02 = Player 1 MK, Shot 5, Shot E
0x01 = Player 1 LK, Shot 4, Shot D
Kick harness part 2
0x804020
0x40 = Player 2 HK, Shot 6, Shot F
You probably seen this on my twitter.
http://i.imgur.com/JrRF5nt.png
Decided to make the patch available for it.
Patch
Notes
309D10 - 309dfc
"WINNERS DON'T[
[][][][][][HARA
309F00
][][][][]
SS WOMEN"
It’s a simple tile edit only visible on us region.
Cadillacs and Dinos?
-ud
Hey Jed
I’m wondering if you ever thought about modifying the ST ROM to make it more tournament friendly? I think a lot of people would like the random stage select as it can get very boring being stuck on the same stage forever (also it’s nicer for the spectators too), so maybe a service menu option to enable/disable that would be great if not too much work.
Also something like a score counter would be amazing. It’s the one thing I miss from Hyper SF2 (perhaps you can copy and paste the code for this?!). It can be troublesome when you have a setup unmanned as sometimes the players are so into it they lose track of the scores haha.
I was wondering how to implement this as easily as possible. You may recall that the score counter increases by 1 each time a new game is started, but this applies for both players. If a player loses and let’s the continue timer count down, it counts as a new game and the score is reset. Obviously letting the timer run down wouldn’t work normally since you wipe out the score for the losing player. Maybe you could do something so the score counter of the player who continues does not increase by 1?
I initially thought that you might be able to mess with the end of round scores, like adding 1 point permanently to the vital and disabling the “new match +1 score” thing entirely, but then I realised that would increase the score each round and not each game.
I imagine there is something you can use to generate a score since the game obviously keeps track of who won the last game due to the character lock. You could even get rid of the score entirely and just have a couple of digits for the win counter. Would make it look a bit cleaner for capture overlays too.
Also I got some replacement ROMs in the end and burned training mode. Works so good
It’s still SF2:HF just got the intro to start playing sort of.
Haha, ok, the elephants didn’t look right to me for SF.
-ud
I dunno about the win counter since it usually gets covered up any way. I’d think being able to quickly go back to the character screen would be better and implement Fighting Layer’s where you could select a different character when challenged instead of having an event mode.
Glorious double post of being undetected for hours.
I just noticed a bug in my code with my training mode hacks since Player 2 HK is shared with the start buttons on cps2 inputs that means holding will cause the same effect as holding start. So no Kick TAP with p2 boxer.
Seems to be only on Vampire Savior.
This code seems to work for now will make a patch soon.
*better code below
Vsav Training mode 1.2(I guess)
New patch you only need to re do patch 4 if you already have it.
New feature
Pressing start will give you meter up to 5 for both players in player vs player and 10 against the cpu.
Bug fix
Holding Player’s 2 HK no longer takes you to character select
New code at address 0xFFD60
4A2D 00A4
6612 ;branch if not set to 1 life/toremo
102D 0060 move.b ($60,A5), D0
0200 000F andi.b #$f, D0
4A00 tst.b D0
660E bne ;pc + #$0e
1B7C 0080 6000 move.b #$80, ($6000,A5)
7000 moveq #$0, D0
4EF9 0002 9F12 jmp $29f12.l
4A2D 6000 tst.b ($6000,A5)
6610 bne ;$pc + #$10
7000 moveq #$0, D0
3B40 0004 move.w D0, ($4,A5)
3B40 0008 move.w D0, ($8,A5)
3B40 000C move.w D0, ($c,A5)
4E75 rts
102D 6000 move.b ($6000,A5), D0
B07C 0077 cmp.b #$77, D0
6D04 blt $660044
522E 0109 addq.b #1, ($109,A6)
532D 6000 subq.b #1, ($6000,A5)
7000 moveq #$0, D0
4EF9 0002 9F12 jmp $29f12.l
Razoola phoenix set first.
New patch you only need to re do patch 4 if you already have it.
I second the win counter, the HSF2 one. The JP version shows it every start of round and disappears when the “Fight!” message is over; I think it has ample time and appears ever so often to track score, at least in a simple way.
Found the commands that read the dipswitches. What that means is I don’t have to edit that branch to get past the ram check and rotate the screen and fix the speed.
1D3D4 Reads 80001A
1D3E0 Reads 80001C
1D3EC Reads 80001E
Now to controls
I can make some nasty code to try and make all kicks work.
Or I can have people rework their wiring and maybe make a custom game slot on the emu.
Re:Win Count
These HSF2 graphics aren’t on ST so you will have to reuse existing assets.
http://i.imgur.com/nMFnGOI.png
And there will be people so used to it not being there and still ignore it. So I would use a big number font for it like these.
http://i.imgur.com/7oXI4gL.png
Then again I’m not working on it.
Too bad you can’t just write the graphics data to a bit of space in the program ROM and reference that. Even if it just uses the regular score/name font, that would be a big help. It’s just something so it’s there for people to keep track of. Many times players have lost count of where they are in a tournament set because neither of them have been keeping count, or they forget with all the hype. Likewise when we’re on the stream and trying to run brackets and so on, sometimes we slip up and forget to update the scores
Wouldn’t you have to re-boot the game between matches to reset the count, though?
-ud