All pastes #1756089 Raw Edit

gocha

public lua v1 · immutable
#1756089 ·published 2010-01-18 15:15 UTC
rendered paste body
-- Kirby's Dream Course (U)-- snes9x 1.43RAM = {	xv = 0x7ed9d4,	yv = 0x7ed9d6,	zv = 0x7ed9d8}pad, padold = {}, {}accel, decel = 0, 0emu.registerbefore(function()	local duringCupInSound = memory.readbyte(0x7e6ac0)~=2 and (memory.readword(0x7e1ffc)==0x80f5 or memory.readword(0x7e1ffc)==0xcb83 or memory.readword(0x7e1ffc)==0xd300)	local duringOnWarp = (memory.readbyte(0x7e6a48)==1) -- memory.readbyte(0x7e1edd)==0 or memory.readbyte(0x7e6a48)==1)	local duringCameraMoveOnWarp = (memory.readbyte(0x7e1edd)==0 and memory.readbyte(0x7e659c)==255)	local duringWaterSwitchAnimation = (memory.readword(0x7e0858)==0)	local duringUFOBootUp = (memory.readword(0x7ed9c6)==10 and memory.readword(0x7ed9c8)==10 and memory.readword(0x7ed776)==600) -- (memory.readbyte(0x7e0302)==1 and memory.readbyte(0x7eda52)==1)	if not (		(memory.readbyte(0x7e6ac0)==2 -- during a shot		and memory.readbyte(0x7e6850)~=8 -- not during ability boot		and not duringOnWarp		and not duringWaterSwitchAnimation		and not duringUFOBootUp		or duringCupInSound		)		and memory.readbyte(0x7e6a8c)~=1 -- but not during the transform of the last enemy	) then return end	pad = joypad.get(1)	padtrig = {}	for k, v in pairs(pad) do		if not padold[k] and v then			padtrig[k] = true		end	end	padold = pad	local dir = math.deg(math.atan2(memory.readwordsigned(RAM.yv), memory.readwordsigned(RAM.xv))) -- memory.readwordsigned(RAM.dir)	local hv = math.sqrt(math.pow(memory.readwordsigned(RAM.xv), 2) + math.pow(memory.readwordsigned(RAM.yv), 2))	local vv = memory.readwordsigned(RAM.zv)	-- rotate	if pad.left  then dir = dir + 1.5 end	if pad.right then dir = dir - 1.5 end	if pad.L     then dir = dir + 3.0 end	if pad.R     then dir = dir - 3.0 end	-- floating	if pad.up    then		local newvv = vv + 256		if newvv >= 1024 then			newvv = newvv - 128		end		vv = newvv		memory.writeword(0x7ed9ec, 1)	end	if pad.down then		local newvv = vv - 256		vv = newvv	end	-- speedup	if pad.Y then		accel = math.min(accel + 8, 0x70)		local newhv = hv + accel		if newhv <= 0x1200 then			hv = newhv		else			hv = 0x1200		end	else		accel = 0	end	-- speeddown	if pad.X then		decel = math.min(accel + 64, 0x200)		local newhv = hv - decel		if newhv >= 0x400 then			hv = newhv		else			hv = 0x400		end	else		decel = 0	end	local clip16 = function(v) return math.max(-32768, math.min(32767, v)) end	memory.writeword(RAM.xv, clip16(hv * math.cos(math.rad(dir))))	memory.writeword(RAM.yv, clip16(hv * math.sin(math.rad(dir))))	memory.writeword(RAM.zv, clip16(vv))end)