Post subject: Kung Fu Master
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I picked up some game today and TAS'd it just for the purpose of seeing how it may look afterwards. But it looks cooler than I expected. http://dehacked.2y.net/microstorage.php/info/1216435356/kungfu%20master%20gb%20tas.vbm Completion Time: 3:51.65 VBA 1.7.2 Re-recording 19.3 ROM name: Kung-Fu Master (U) I found a way to zip through a wall in the fourth level. There are some entertainment/speed tradeoffs (for example I need one frame to turn around to kick enemies behind me). Tell me what you guys think.
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
Feedback is still welcome! EDIT: A friend uploaded the video for me. http://youtube.com/watch?v=ILIBBV3eXDo
Joined: 1/27/2008
Posts: 236
Location: Somewhere
Nice run! I never liked Spartan X (because it scares me, but not as much as Nazo no Murasame-jo. *shudder* I think that instead of stopping and kicking low at some points you could jump and kick, but I know close to nothing about controls, so I was just wondering.
See Youtube page (GIRfanaticTAS) for all runs and stuff.
Former player
Joined: 12/27/2006
Posts: 532
Location: Göteborg, Sweden
Nice game. I think it deserves publication.
My published movies [03:45:05] <Naohiro19> Soulrivers: ... [03:45:19] <Soulrivers> ? [03:46:35] <Naohiro19> <Soulrivers> No! <Naohiro19> So? <Soulrivers> Yes! [03:46:48] <Naohiro19> joke
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
An improvement is being worked on, but at the moment I experience problems with the 4rd boss. I can't manage to kill him in a good and fast way. (If I run just towards him, he throws his 3 shuriken which produces tons of lag frames. If I kill the little bastards who try to catch me, I lose time for killing them and can't manage to beat the boss while going to the goal.) This will take some time... http://dehacked.2y.net/microstorage.php/info/615162951/kungfu%20master%20gb%20tas2.vbm In level 3, I manipulated three shuriken throwers to appear since this gets me a bomb item. You can sometimes notice how I kick in the air for no reason. When landing soon after attacking midair and jumping again to keep horizontal speed, you kick in the air - often even too high for enemies to hit... So I often jump another time and kick again to make it look less unoptimized or less pointless.
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
Pointers for those who want to improve the current run: - When you get grabbed, do only proceed at the same time you lose at least 0.5 HP so the 5 frames of being held are well-invested. It takes the same amount of time to lose HP when being grabbed and punched as it does for the scoring system to clear the the HP at the level end sequence. - If there are enough sprites on screen (in most cases 3, I think) you can prevent semi-bosses and those spikey things in level 4 + 5 from spawning. - You can save time by getting hit from barrels and spikes, which btw deal 1.5 points of damage. If barrels don't spawn, use zig-zag walking to make sure only 2 sprites are on-screen or use the first technique (being grabbed for longer than ~5 frames).
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
http://www.youtube.com/watch?v=05PVO7wWZ80 This is a 7 second improvement of my published run. Time was saved by taking damage during the level (so health points don't have to be cleared after each level), and by better strategies.
Joined: 8/27/2006
Posts: 883
I don't think you should take damage to save time. There's a tag for that. Ignores delays causes by bonus effect. It make the run look more sloppy that way :( Also, this game really lack the original sound "WouTA!" after every each punch or kick :P
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
The currently published run does take damage too (though I don't let myself get grabbed and punched the crap out of me)... I know it doesn't look particularly entertaining. Since it's a fighter game anyway, maybe I should go for a playaround or fastest level-time type of movie as you suggested... I just hate doing stuff at the cost of speed and I don't really know how to make an entertaining movie out of this game like this... I do know some interesting glitches though. But for now, I don't feel like TASing this game.
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
Player (137)
Joined: 9/18/2007
Posts: 389
That's some funny glitches... I would vote yes for not aiming on fastest time, but on a glitchfest instead. That's way more interesting to watch. Some of these glitches might even save time -- those where you warp from the left edge of the screen to the right edge.
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
fastest time and glitchfest more or less contradict themselves. I would need to make it a priority to show off those glitches while aiming for fastest time as my second priority. I'm not sure if every glitch is even worthwhile to show... If I ever TAS this again, I'd like to go for fastest ingame time instead.
those where you warp from the left edge of the screen to the right edge.
I already tried it, it's useless. You can't beat the boss properly while offscreen.
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
OLD POST: Some addresses, might update later. c704 xpos (cam) c703 xsub c706 ypos c705 ysub ff43 xcam(?) c684 xcam section(?), increments by 1 every 56th pixel in ff43 c717 hp, 8=half, 16=whole unit c0e9 boss hp enemy slots: c0a2/c0c2/c0e2... enemy xpos c0aa/c0ca/c0ea... enemy xsub c0a3/c0c3/c0e3... enemy ypos c0ab/c0cb/c0eb... enemy ysub these addresses might be variable: --d00c killcounter <3 (50th) --d00b killcounter hpbottle (20th) --d00d killcounter 1up (90th) --d00e killcounter hpbottleCertainlvl (4th) --d00f killcounter bomb (8th) lastlvl --d00a killcounter bomb (3th) 3rdlvl NEW POST: Lua script I made. Can use it for TASing. http://pastebin.com/0gUv4Y08 Bottle, Heart, 1up and bomb means you have to kill the displayed number of enemies to get each item drop. Bombs can only be dropped by those enemies on the train that pop up and shoot after you, and the small Asians. HP bottles get dropped every 20th enemy, in the last level apparently every 4th. Hearts every 50th. 1ups every 90th. Bombs every 3th (train) and 8th (subsequent levels after train).
Warepire
He/Him
Editor
Joined: 3/2/2010
Posts: 2178
Location: A little to the left of nowhere (Sweden)
FF43 is an LCD register, it shows the X offset for the background. http://nocash.emubase.de/pandocs.htm#lcdpositionandscrolling Why those show up in RAM search in VBA is beyond me.
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
Yeah, I'm aware that can't be the screen position. I couldn't find anything better than that and it still behaves well enough for my purposes.
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I made a tcrf page: http://tcrf.net/Kung-Fu_Master_%28Game_Boy%29 And I didn't find any damage differences in the "Easy" game, not sure about the "Hard" mode..
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
I researched this game again. Here is my info dump:
---
ENEMY SLOTS
c000~c01f
c020~c03f
c040~c05f
c060~c07f
c080~c09f
c0a0~c0bf
c0c0~c0df
c0e0~c0ff

i+0 = state 
	thugs: (00 fall, 01 active, 02 cling, 03 dead, ff inactive)
	asians: (00 fall, 01 active, 02 cling, 03 dead, 04 jump, ff inactive)

i+1 = enemy kind 
	00 thug
	01 asian
	02 chain thug
	03 level1 boss
	04 smoke trap (from top)
	05 smoke trap (from bottom)
	06 smoke trap (from right)
	07 smoke trap (from left)
	08 spike thing that emerges from the ground
	09 barrel
	0a level2 boss
	0b level3 lava ball
	0c level3 boss
	0d level4 boss?
	0e level5 boss?
	0f shuriken
	10 final boss
	11 shooter projectile (level 3)
	12 shooter
	80,81 bomb
	82,83 hp bottle
	84~87 heart
	88~8f 1up
	
	90~... background and such stuff...
	...~ff: platforms
	

i+9 = health (number of hits until dies)

i+10 = x pos sub
i+2 = x pos
i+11 = y pos sub
i+3 = y pos
(those are cam position)

If enemies are made inactive by editing 0xff as the state, it will mess up the enemy spawning. Those enemies are still counted active and will only be considered inactive if they really unspawn (not by memory edit).
---
c200 timer, depends on c201
c201 counter, tells if enemies should appear

c703 player x sub
c704 player x 
c705 player y sub
c706 player y 
(those are cam position)

c717 your health (0x08 = half unit, 0x10 = full unit)
c73c ingame clock (right most digit) ~ c73f (leftmost digit)
c0e9 boss hp

d000 score
d012 lives
--
d00a killcounter bomb (every 3rd)	-- only shooters (level 3)
d00b killcounter hp bottle (every 20th)	-- only thugs (level 1,2,3)
d00c killcounter heart (every 50th)	-- only thugs (level 1,2,3)
d00d killcounter 1up (every 90th)	-- only thugs (level 1,2,3)
d00e killcounter hp bottle (every 4th)	-- only asians (level 4,5,6)
d00f killcounter bomb (every 8th)	-- only asians (level 4,5,6)
d010 killcounter heart (every 16th) 	-- only asians (level 4,5,6)

when more than one item is eligible to drop, the item with the most priority will drop.
The other item will drop on the next kill. (its killcounter incremented instead of being reset)
Priority:
1) 1up
2) heart
3) hp bottle
--

ffbb level (0=level 1, ... 5=level 6, 6=credits)
todo: - research hitboxes - find frame rule for when the ingame clock decrements - make new luascript - new tas?
Editor, Expert player (2330)
Joined: 5/15/2007
Posts: 3933
Location: Germany
Hitboxes are in the RAM in the enemy slots, specifically here: $c004~$c008 $c024~$c028 $c044~$c048 $c064~$c068 $c084~$c088 $c0a4~$c0a8 $c0c4~$c0c8 $c0e4~$c0e8 But after trying around with it much, I can't make sense of it. I don't even know if it's supposed to be lines, points, width, height or what. If someone can help me with this, then you have my thanks. Other than that, I have made progress on a luascript, as you can see in the image below. If only we could have those hitboxes now... :) Edit: This game is much more stupid than I remember. I save pixels everywhere but then end up losing more pixels later always...