Organized the scripts, ported the snake rattle n' roll script from game resources page on tasvideos.org
This commit is contained in:
parent
965f0934e5
commit
44f64078a3
|
@ -1,324 +0,0 @@
|
||||||
--Castlevania: Rondo of Blood
|
|
||||||
|
|
||||||
fill = 0x64FFC8C8
|
|
||||||
line = 0xFFFFC8C8
|
|
||||||
|
|
||||||
function drawObjInfo()
|
|
||||||
|
|
||||||
for i = 0,88 do
|
|
||||||
|
|
||||||
objX = mainmemory.read_u8(0xBC8+i)
|
|
||||||
objY = mainmemory.read_u8(0xCD0+i)
|
|
||||||
objVisibleX = mainmemory.read_u8(0xB70+i)*255
|
|
||||||
objVisibleY = mainmemory.read_u8(0xC78+i)*255
|
|
||||||
objDamage = mainmemory.read_u8(0x1300+i) --how much damage it will do if it collides with you
|
|
||||||
objHealth = mainmemory.read_u8(0x12A8+i-2) --something is wrong, -2 makes it right in some cases but makes others wrong
|
|
||||||
objStatus = mainmemory.read_u8(0x1250+i) --collision status
|
|
||||||
adjustedX = objX - objVisibleX
|
|
||||||
adjustedY = objY - objVisibleY
|
|
||||||
--clipping
|
|
||||||
if(adjustedX > 0 and adjustedY > 0) then
|
|
||||||
gui.text(
|
|
||||||
adjustedX * xmult,
|
|
||||||
adjustedY * ymult,
|
|
||||||
objX
|
|
||||||
.. " " .. objY
|
|
||||||
-- .. " " .. "#" .. i
|
|
||||||
-- .. " D" .. objDamage
|
|
||||||
-- .. " HP" .. objHealth
|
|
||||||
-- .. " S" .. objStatus
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function drawHitBoxes()
|
|
||||||
|
|
||||||
for i = 0,88 do
|
|
||||||
|
|
||||||
objX = mainmemory.read_u8(0xBC8+i)
|
|
||||||
objY = mainmemory.read_u8(0xCD0+i)
|
|
||||||
objVisibleX = mainmemory.read_u8(0xB70+i)*255
|
|
||||||
objVisibleY = mainmemory.read_u8(0xC78+i)*255
|
|
||||||
adjustedX = objX - objVisibleX
|
|
||||||
adjustedY = objY - objVisibleY
|
|
||||||
objOffsetX = mainmemory.read_u8(0x1930+i)
|
|
||||||
objDirection = mainmemory.read_u8(0xAC0+i)
|
|
||||||
objUnknownY = mainmemory.read_u8(0x19E0+i)
|
|
||||||
hitSizeX = mainmemory.read_u8(0x1988+i)
|
|
||||||
hitSizeY = mainmemory.read_u8(0x1A38+i)
|
|
||||||
|
|
||||||
if(objDirection == 1) then --9484
|
|
||||||
objOffsetX = bit.bxor(0xFF,objOffsetX) --9488
|
|
||||||
objOffsetX = objOffsetX+1 --948A
|
|
||||||
end
|
|
||||||
|
|
||||||
off00 = 0 --942B
|
|
||||||
if (bit.band(0x80, objOffsetX) == 128) then --942F
|
|
||||||
of00=bit.band(0xFF,(off00-1)) --9431
|
|
||||||
end
|
|
||||||
|
|
||||||
hitBoxCornerX = bit.band(0xFF,(objX + objOffsetX)) --9434
|
|
||||||
hitBoxCornerY = bit.band(0xFF,(objY + objUnknownY)) --944F
|
|
||||||
|
|
||||||
objStatus = mainmemory.read_u8(0x1250+i)-- generally: 0 inert, 1 benign, 2 damageable/possibly damaging
|
|
||||||
|
|
||||||
if(objStatus == 0) then
|
|
||||||
fill = 0x600000FF
|
|
||||||
line = 0xC0000000
|
|
||||||
elseif(objStatus == 1) then
|
|
||||||
fill = 0x3C00FF00
|
|
||||||
line = 0x8000FF00
|
|
||||||
elseif(objStatus == 2) then
|
|
||||||
fill = 0x50FF0000
|
|
||||||
line = 0x80FF0000
|
|
||||||
end
|
|
||||||
|
|
||||||
--clipping
|
|
||||||
if(adjustedX > 0 and adjustedY > 0) then
|
|
||||||
gui.drawBox(
|
|
||||||
hitBoxCornerX-hitSizeX,
|
|
||||||
hitBoxCornerY+hitSizeY,
|
|
||||||
hitBoxCornerX+hitSizeX,
|
|
||||||
hitBoxCornerY-hitSizeY,
|
|
||||||
line,
|
|
||||||
fill
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function dispProperties(num)
|
|
||||||
|
|
||||||
fill = 0x80FFC8C8
|
|
||||||
|
|
||||||
ObjDamageInfo = {
|
|
||||||
0x13b0,--5 means is being damaged
|
|
||||||
0x1a90,--invulnerability countdown
|
|
||||||
0xf90,--if 0, animate. seems to be used as a counter to temporarily freeze objs when damaged
|
|
||||||
0xb18,--flashing if equal to 0x10, white if equal to 0x86
|
|
||||||
0x1ae8,
|
|
||||||
0x1f18,
|
|
||||||
0x11f8,
|
|
||||||
0x12a8--health
|
|
||||||
}
|
|
||||||
|
|
||||||
for i = 1,8 do
|
|
||||||
gui.text((10+(i*20)) * xmult ,100 * ymult, mainmemory.read_u8(ObjDamageInfo[i]+num))
|
|
||||||
end
|
|
||||||
|
|
||||||
hitBoxInfo = {
|
|
||||||
0x1988,
|
|
||||||
0x1A38,
|
|
||||||
0x1930,
|
|
||||||
0xAC0
|
|
||||||
}
|
|
||||||
|
|
||||||
for i = 1,4 do
|
|
||||||
gui.text((10+(i*20)) * xmult,120 * ymult, mainmemory.read_u8(hitBoxInfo[i]+num))
|
|
||||||
end
|
|
||||||
|
|
||||||
ObjPositionInfo = {
|
|
||||||
0xB70, --offscreen or not
|
|
||||||
0xBC8, --x position
|
|
||||||
0xC20,
|
|
||||||
0xC78,
|
|
||||||
0xCD0, --y position
|
|
||||||
0xD28,
|
|
||||||
}
|
|
||||||
|
|
||||||
for i = 1,6 do
|
|
||||||
gui.text((10+(i*20)) * xmult,140 * ymult, mainmemory.read_u8(ObjPositionInfo[i]+num))
|
|
||||||
end
|
|
||||||
|
|
||||||
collisionInfo = {
|
|
||||||
0x710, --compensated x
|
|
||||||
0x720, --compensated y
|
|
||||||
0x730 --compensated "visible"
|
|
||||||
}
|
|
||||||
|
|
||||||
for i = 1,3 do
|
|
||||||
gui.text((10+(i*20)) * xmult,160 * ymult, mainmemory.read_u8(collisionInfo[i]+num))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
while true do
|
|
||||||
--Multiplier for text rendering
|
|
||||||
xmult = client.screenwidth() / 256
|
|
||||||
ymult = client.screenheight() / 225
|
|
||||||
line = 0xFFFFC8C8
|
|
||||||
--display info about a given object
|
|
||||||
--dispProperties(0)
|
|
||||||
|
|
||||||
drawHitBoxes()
|
|
||||||
drawObjInfo()
|
|
||||||
emu.frameadvance()
|
|
||||||
--invincibility cheat
|
|
||||||
-- memory.writebyte(0x13B0, 0)
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
--[[ Notes
|
|
||||||
|
|
||||||
--Object Damage
|
|
||||||
|
|
||||||
A1ED LDY $33B0,X ;"can damage"
|
|
||||||
A1F0 LDA $A26D,Y
|
|
||||||
A1F3 STA $3A90,X ;invulnerability countdown
|
|
||||||
A1F6 LDA $A27D,X
|
|
||||||
A1F9 STA $2F90,X ;whether to animate the obj or not
|
|
||||||
A1FC LDA $2B18,X ;flashing or not
|
|
||||||
A1FF STA $3AE8,X
|
|
||||||
A202 LDA #$86 ;make the palette white
|
|
||||||
A204 STA $2B18,X
|
|
||||||
A207 LDA $3F18,X
|
|
||||||
A20A ORA #$03
|
|
||||||
A20C STA $31F8,X
|
|
||||||
A20F LDA $32A8,X
|
|
||||||
A212 SEC
|
|
||||||
A213 SBC $00 ;subtract the amount of damage to do
|
|
||||||
A215 STA $32A8,X ;x is the object slot to modify
|
|
||||||
|
|
||||||
--Where the player's health is decremented
|
|
||||||
|
|
||||||
A1F2 LDA $33B0 ;check if the player is vulnerable
|
|
||||||
A1F5 BEQ $A234
|
|
||||||
A1F7 LDA $33B0
|
|
||||||
A1FA bit.band #$07
|
|
||||||
A1FC CMP #$05
|
|
||||||
A1FE BNE $A20B
|
|
||||||
A200 LDA $36D3
|
|
||||||
A203 BNE $A20B
|
|
||||||
A205 STZ $33B0
|
|
||||||
A20B LDA $98 ;player health
|
|
||||||
A20D SEC
|
|
||||||
A20E SBC $32A8 ;subtract amount of damage received
|
|
||||||
A211 STA $98
|
|
||||||
|
|
||||||
--Where the damage received (32A8) is set
|
|
||||||
|
|
||||||
9546 STA $33B0,X
|
|
||||||
9549 LDA $33B0
|
|
||||||
954C BNE $955A
|
|
||||||
954E LDA $3358,X
|
|
||||||
9551 STA $33B0
|
|
||||||
9554 LDA $3300,X ;the amount of damage an object will deal to you
|
|
||||||
9557 STA $32A8
|
|
||||||
|
|
||||||
--Where the hitbox offset is calculated
|
|
||||||
|
|
||||||
9413 LDX #$00
|
|
||||||
9415 LDA $3250,X ;load the hitbox type
|
|
||||||
9418 BEQ $9460 ;we quit if type 0
|
|
||||||
941A LDA $3930,X ;x offset
|
|
||||||
941D STA $01 ;store it in 01
|
|
||||||
941F LDA $2AC0,X ;direction facing, left is 1, right is 0
|
|
||||||
9422 BEQ $942B ;we are facing...
|
|
||||||
9424 LDA $01 ;left, load offset
|
|
||||||
9426 EOR #$FF
|
|
||||||
9428 INC
|
|
||||||
9429 STA $01 ;store the altered offset
|
|
||||||
942B STZ $00
|
|
||||||
942D LDA $01 ;get the either altered or unaltered offset
|
|
||||||
942F BPL $9433
|
|
||||||
9431 DEC $00
|
|
||||||
9433 CLC
|
|
||||||
9434 ADC $2BC8,X ;add x position to either altered or unaltered offset
|
|
||||||
9437 STA $2710,X ;store that as the hitbox corner
|
|
||||||
943A LDA $2B70,X ;is the object visible
|
|
||||||
943D ADC $00 ;correct it depending on the altered x offset
|
|
||||||
943F STA $2730,X
|
|
||||||
9442 STZ $00
|
|
||||||
9444 LDA $39E0,X
|
|
||||||
9447 BPL $944B
|
|
||||||
9449 DEC $00
|
|
||||||
944B LDA $2CD0,X ;y position
|
|
||||||
944E CLC
|
|
||||||
944F ADC $39E0,X
|
|
||||||
9452 STA $2720,X ;store hitbox y corner
|
|
||||||
9455 LDA $2C78,X ;indicator that the object is y visible
|
|
||||||
9458 ADC $00
|
|
||||||
945A ORA $2730,X
|
|
||||||
945D STA $2730,X
|
|
||||||
9460 INX
|
|
||||||
9461 CPX #$10 ;we can only do 16 objects
|
|
||||||
9463 BCC $9415 ;start again if we have objects left
|
|
||||||
9465 RTS
|
|
||||||
9466 STZ $33B0,X ;zero the "can damage" byte
|
|
||||||
9469 LDA $3250,X ;objStatus / collision status
|
|
||||||
946C BNE $9471 ;if the status is 0 we continue
|
|
||||||
946E JMP $9507 ;otherwise we quit
|
|
||||||
|
|
||||||
--X and Y represent our two objects
|
|
||||||
|
|
||||||
9471 LDA $3988,X ;x hitbox size
|
|
||||||
9474 ORA $3A38,X ;y hitbox size
|
|
||||||
9477 BNE $947C
|
|
||||||
9479 JMP $9507
|
|
||||||
947C LDA $3930,X ;x offset
|
|
||||||
947F STA $01
|
|
||||||
9481 LDA $2AC0,X ;objDirection
|
|
||||||
9484 BEQ $948D ;branch if we are facing right
|
|
||||||
9486 LDA $01 ;left
|
|
||||||
9488 EOR #$FF
|
|
||||||
948A INC
|
|
||||||
948B STA $01
|
|
||||||
948D STZ $00 ;right, zero our temp byte
|
|
||||||
948F LDA $01 ;load the possibly manipulated offset
|
|
||||||
9491 BPL $9495
|
|
||||||
9493 DEC $00
|
|
||||||
9495 CLC
|
|
||||||
9496 ADC $2BC8,X ;add object x position to the possibly manipulated offset
|
|
||||||
9499 STA $26FF
|
|
||||||
949C LDA $2B70,X ;objVisibleX
|
|
||||||
949F ADC $00
|
|
||||||
94A1 BNE $9507 ;quit if the result is non-zero
|
|
||||||
94A3 STZ $00
|
|
||||||
94A5 LDA $39E0,X ;y related
|
|
||||||
94A8 BPL $94AC
|
|
||||||
94AA DEC $00
|
|
||||||
94AC CLC
|
|
||||||
94AD ADC $2CD0,X ;obj y position
|
|
||||||
94B0 STA $2700
|
|
||||||
94B3 LDA $2C78,X ;objVisibleY
|
|
||||||
94B6 ADC $00
|
|
||||||
94B8 BNE $9507
|
|
||||||
94BA LDA $3250,X ;objStatus / collision status
|
|
||||||
94BD BPL $94C2
|
|
||||||
94BF CLY
|
|
||||||
94C0 BRA $94C4
|
|
||||||
94C2 LDY #$0F ;16 objects max
|
|
||||||
|
|
||||||
94C4 LDA $3250,Y ;objStatus / collision status
|
|
||||||
94C7 BEQ $9504 ;if objStatus is zero, go to the next object
|
|
||||||
94C9 LDA $2730,Y ;compensated "visible"
|
|
||||||
94CC BNE $9504
|
|
||||||
94CE LDA $3988,X ;x hitbox size of 1st object
|
|
||||||
94D1 CLC
|
|
||||||
94D2 ADC $3988,Y ;x hitbox size of 2nd object
|
|
||||||
94D5 STA $2701
|
|
||||||
94D8 LDA $3A38,X ;y hitbox size of 1st object
|
|
||||||
94DB CLC
|
|
||||||
94DC ADC $3A38,Y ;y hitbox size of 2nd object
|
|
||||||
94DF STA $2702
|
|
||||||
94E2 LDA $26FF
|
|
||||||
94E5 SEC
|
|
||||||
94E6 SBC $2710,Y ;subtract compensated x position for the current object
|
|
||||||
94E9 BCS $94EE
|
|
||||||
94EB EOR #$FF
|
|
||||||
94ED INC
|
|
||||||
94EE CMP $2701
|
|
||||||
94F1 BCS $9504
|
|
||||||
94F3 LDA $2700
|
|
||||||
94F6 SEC
|
|
||||||
94F7 SBC $2720,Y ;subtract compensated y position for the current object
|
|
||||||
94FA BCS $94FF
|
|
||||||
94FC EOR #$FF
|
|
||||||
94FE INC
|
|
||||||
94FF CMP $2702
|
|
||||||
9502 BCC $9508
|
|
||||||
9504 DEY
|
|
||||||
9505 BPL $94C4
|
|
||||||
9507 RTS
|
|
||||||
|
|
||||||
]]
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
-- Snake Rattle N' Roll 'Simple HUD Script'
|
||||||
|
-- Retrieved from http://tasvideos.org/GameResources/NES/SnakeRattleNRoll.html
|
||||||
|
|
||||||
|
dim1speed = 0
|
||||||
|
dim2speed = 0
|
||||||
|
xspeed = 0
|
||||||
|
xsubspeed = 0
|
||||||
|
yspeed = 0
|
||||||
|
ysubspeed = 0
|
||||||
|
xm = 0
|
||||||
|
ym = 0
|
||||||
|
|
||||||
|
function stuff()
|
||||||
|
xspeed = mainmemory.read_u8(0x417)
|
||||||
|
xsubspeed = mainmemory.read_u8(0x419)
|
||||||
|
if (xspeed == 255) then xspeed = -1 end
|
||||||
|
|
||||||
|
yspeed = mainmemory.read_u8(0x41b)
|
||||||
|
ysubspeed = mainmemory.read_u8(0x41d)
|
||||||
|
if (yspeed == 255) then yspeed = -1 end
|
||||||
|
|
||||||
|
gui.text(1 * xm,19 * ym,"L:"..mainmemory.read_u8(0x67) % 16) -- left axis
|
||||||
|
gui.text(1 * xm,29 * ym,"R:"..mainmemory.read_u8(0x69) % 16) -- right axis
|
||||||
|
gui.text(1 * xm,39 * ym,"H:"..mainmemory.read_u8(0x6b) % 16) -- height axis
|
||||||
|
gui.text(30 * xm,19 * ym, "LVel:"..(xspeed * 256) + xsubspeed + (yspeed * 256) + ysubspeed)
|
||||||
|
gui.text(30 * xm,29 * ym,"RVel:"..(xspeed * 256) + xsubspeed - (yspeed * 256) - ysubspeed)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function scaler()
|
||||||
|
xm = client.screenwidth() / 256
|
||||||
|
ym = client.screenheight() / 224
|
||||||
|
end
|
||||||
|
while true do
|
||||||
|
scaler()
|
||||||
|
stuff()
|
||||||
|
emu.frameadvance()
|
||||||
|
end
|
Loading…
Reference in New Issue