Post subject: Bugs Bunny In Crazy Castle 4 (GBC)
Editor, Expert player (2479)
Joined: 4/8/2005
Posts: 1573
Location: Gone for a year, just for varietyyyyyyyyy!!
I seem to be TASing "just for fun" nowadays (OMG!) and I keep changing games like clothes, but maybe it's not a bad thing. Here are ten levels done for Bugs Bunny in Crazy Castle 4: http://dehacked.2y.net/microstorage.php/info/1049001384/Bugs%20Bunny%20in%20Crazy%20Castle%204%20-%20WIP.vbm (I'm not gonna record more until Will Mallia finishes his awesome maps at vgmaps.com. The maps just help SO much in planning the routes.) Tricks: - Wobble climbing to ascend ladders faster. - Ladder grab boosting while walking past ladders. - Avoiding damage with the short invulnerability period after exiting rooms. AND... A handy Lua script:
while true do
local inp = input.get()

-- Only 1/3 frames accept input,
-- so let's use capslock to toggle "triple frame advance mode".
-- While capslock is on, your pause button is used as frame advance.
-- (For advancing only 1 frame, you can still use your normal frame advance key.)
if inp.capslock and vba.lagged() then
vba.pause()
end

-- Minimap script, that shows enemies etc.:
vba.registerbefore( function ()
	-- Play area size is used as minimap box size:
	bx = memory.readword(0x0000c944)
	by = memory.readword(0x0000c946)
	gui.drawbox(0, 0, bx/8+20, by/8+17, 0x55555590, "black")

	-- Player position:
	px = memory.readword(0x0000d010)
	py = memory.readword(0x0000d014)
	gui.pixel(px/8, py/8, "white")

	-- Sometimes it is useful to walk a few extra steps to reset/unload distant off-screen enemies.
	-- These lines show approximately the distance at which enemies reset:
	sx = memory.readword(0x0000c940)
	sy = memory.readword(0x0000c942)
	gui.drawline((sx-168)/8, 1, (sx-168)/8, by/8+16, 0x00ff00ff)
	if (sx+336)/8 < bx/8+20 then
	gui.drawline((sx+336)/8, 1, (sx+336)/8, by/8+16, 0x00ff00ff)
	end

	-- Enemy positions:
	start = 0x0000d050
	for k=0,8,1 do
	ex=memory.readword(64*k+start)
	ey=memory.readword(64*k+start+4)
	gui.pixel(ex/8, ey/8, "red")
	end
end)


-- "Item room macro" is activated with keyboard key "X".
-- This macro is invaluable as there are about 600 rooms that need to be entered during a full run.
-- Hold "X" and unpause before you would enter an item room.
-- (Capslock needs to be off.)
-- Sometimes there are lag frames,
-- so if the most common "X" desynchs, try "C", "V" or "B" instead.

if inp.X then walkright = 55
elseif inp.C then walkright = 54
elseif inp.V then walkright = 56
elseif inp.B then walkright = 57
end

if inp.X
or inp.C
or inp.V
or inp.B
then

	-- Enter room.
	joypad.set(1,{up=1})
	vba.frameadvance()

	-- Walk left to the chest.
	for i = 1,264,1 do 
	joypad.set(1,{left=1})
	vba.frameadvance()
	end

	-- Wait for item to spawn.
	for i = 1,6,1 do 
	vba.frameadvance()
	end

	-- Walk right to the exit.
	for i = 1,walkright,1 do
	joypad.set(1,{right=1})
	vba.frameadvance()
	end

	-- Exit room.
	joypad.set(1,{up=1})
	vba.frameadvance()

	-- Wait.
	for i = 1,133,1 do
	vba.frameadvance()
	end
vba.pause()
end


-- "Variable lenght climb macros" are activated with numpad keys 0-9.
-- However, it is often easier and more reliable to climb manually.
-- So, I don't recommend using these, but I'll post them here anyway:

if inp.numpad0 then laddersize = 2
elseif inp.numpad1 then laddersize = 3
elseif inp.numpad2 then laddersize = 4
elseif inp.numpad3 then laddersize = 5
elseif inp.numpad4 then laddersize = 6
elseif inp.numpad5 then laddersize = 7
elseif inp.numpad6 then laddersize = 8
elseif inp.numpad7 then laddersize = 9
elseif inp.numpad8 then laddersize = 10
elseif inp.numpad9 then laddersize = 11
end

if inp.numpad0
or inp.numpad1
or inp.numpad2
or inp.numpad3
or inp.numpad4
or inp.numpad5
or inp.numpad6
or inp.numpad7
or inp.numpad8
or inp.numpad9
then

	-- Wobble climb:
	for i = 1,laddersize,1 do
	joypad.set(1,{up=1})
		vba.frameadvance()
		vba.frameadvance()
		vba.frameadvance()
	joypad.set(1,{right=1})
		vba.frameadvance()
		vba.frameadvance()
		vba.frameadvance()
	end
end

vba.frameadvance()
end
Even if you aren't interested in the game, I'd be interested, if you have ideas on how to improve the code, thanks. Also, if you know anything interesting about this game, please let me know. The game is 100% hex-edit friendly, so if you feel like recording a level or two, please go ahead! With these tools, it is lots of fun.
Editor, Expert player (2479)
Joined: 4/8/2005
Posts: 1573
Location: Gone for a year, just for varietyyyyyyyyy!!
Thanks to Will Mallia's new maps, three more levels done: http://dehacked.2y.net/microstorage.php/info/931603265/crazycastle4wip.vbm Edit: + 5 levels = 18 levels done.
Experienced player (928)
Joined: 7/18/2016
Posts: 106
Location: United States
Hey, I started to make a TAS of this game a few weeks ago, but only got done with level 3 when my save file got corrupted. I'd be willing to start it again, and if you're still around, even better! Have you made any additional progress with this project? Also, I'm very interested in viewing what you've done so far, but I've been unable to load your movie in Bizhawk or VBA. Are there any specific settings I need to use to load the movie properly?
Experienced player (928)
Joined: 7/18/2016
Posts: 106
Location: United States
I stopped working on this project years ago and while I still don't plan on returning to it, I thought I should link my progress should anyone want to pick up where I left off. I managed to TAS all the way to world 4-5: Download the WIP here
Experienced player (928)
Joined: 7/18/2016
Posts: 106
Location: United States
I have resumed working on this project. As of today, I have added to the TAS first-pass basic routing from levels 5-1 to 10-7 with a total time of 1h59m22s. Updates to the levels showcased in the previously linked WIP include resyncing to BizHawk 2.9.1 and improved routes in 3-2 and 4-4. After all is said and done, I'm expecting a final TAS time of just under 2h30m. I will post an updated WIP if I go on hiatus with this again before completion.