Reverse Engineered Codes
  • Home
  • Codes
  • C-64
  • NES
  • Sega Master System

Wonder Boy in Monster Land


Picture
Picture
Picture

;========================================================= ;
;Bock Tile Data Pointers ;========================================================= .define PlayerWalkingLeftTileDataPointer = $9601
.define
PlayerWalkingRightTileDataPointer = $9632
.define BockSwordStrikeLeftTileDataPointer = $9663

.define
BockSwordStrikeRightTileDataPointer = $9692
.define
PlayerJumpingLeftTileDataPointer = $96c1
.define
PlayerJumpingRightTileDataPointer = $96C3
.define
PlayerFallingLeftTileDataPointer = $96C5
.define
PlayerFallingRightTileDataPointer = $96F0
.define
PlayerHitRightTileDataPointer = $971B
.define
PlayerHitRightTileDataPointer = $971D

;========================================================= ;JoyPad Constants ;=========================================================
.define JoyPadUp = 1
.define
JoyPadDown = 2
.define
JoyPadLeft = 4
.define
JoyPadRight = 8
.define
JoyPadButtonA = 16
.define
JoyPadButtonB = 32

;=========================================================
;Bock State Constants
;=========================================================
.define BockWalkLeftState = 1
.define
BockWalkRightState = 2
.define
BockSwordStrikeLeftState = 3
.define
BockSwordStrikeRightState = 4
.define
BockJumpingWestState = 5
.define
BockJumpingEastState = 6
.define
BockFallingLeftState = 7
.define
BockFallingRightState = 8
.define
BockHitLeftState = 9
.define
BockHitRightState = 10
.define
BockOnLadderState = 11

.define BockDoorKnockingState = 12
.define BockDyingLeftState = 13
.define BockDyingRightState = 14

;=========================================================




;=========================================================
ObjectHandler:
  add a,a
  ld e,a
  ld d,0

  add hl,de
  ld a,(hl)
  inc hl
  ld h,(hl)
  ld l,a
  jp (hl)
;=========================================================




;=========================================================
 ld
a,(_BockState) 
 hl,BockStateJumpPointerTable-2
 jp ObjectHandler

;=========================================================
BockStateJumpPointerTable:
.dw BockWalkLeftFunction .
.dw
BockWalkRightFunction
.dw
BockSwordStrikeLeftFunction
.dw
BockSwordStrikeRightFunction
.dw
BockJumpLeftFunction
.dw
BockJumpRightFunction
.dw BockFallingLeftFunction
.dw
BockFallingRightFunction
.dw BockHitLeftFunction
.dw
BockHitRightFunction
.dw
BockOnLadderFunction
.dw BockDoorKnockingFunction
.dw BockDyingLeftFunction
.dw BockDyingRightFunction

;=========================================================
BockWalkLeftFunction:
 
ld a,(_PlayerAnimationSwitchFlag)
  or a
 
jr z,-
  call
Do_BockJumpingAndSwordCheck
 
ret c
  call
Do_BockXTileCollisionCheck
 
jp nc,+
 
ld a,(_JoyPadPressed)
 
bit 2,a
 
jp z,Do_AddBockNegativeAcceleration

  ld (iy+ObjStateOffset),BockWalkLeftState
  
  ld (iy+ObjectAnimationSwitchFlag),0
 
ret

;=========================================================
;
Init Bock Falling Left State ;=========================================================
+
: 
  ld
(iy+ObjectStateOffset),BockFallingLeftState

  ld (iy+ObjectAnimationSwitchFlag),0
  ret

;=========================================================
BockWalkRightFunction:
  ld a,(_PlayerAnimationSwitchFlag)
  or
a
  jr
z,-
  call
Do_BockJumpAndSwordCheck
  ret
c
  call
  Do_BockXTileCollisionCheck
 
jp nc,+
 
ld a,(_JoyPadPressed)
 
bit 3,a
 
jp z,Do_AddBockPositiveAcceleration
     

  ld (iy+ObjStateOffset),BockWalkRightState
  ld (iy+ObjectAnimationSwitchFlag),0
  ret

;=========================================================
;Init Bock Falling Right State ;=========================================================
 

+:   

  ld (iy+ObjStateOffset),BockFallingRightState
  ld (iy+ObjectAnimationSwitchFlag),0
 
ret

;========================================================= 
PlayerSwordStrikeLeftFunction:
 
ld a,(iy+ObjectAnimationSwitchFlag)
 
or a
 
jp nz,++
  ld hl,BockSwordStrikeRightTileDataPointer
 
ld a,4

  jp +

;========================================================= 
BockSwordStrikeRightFunction:
  ld a,(iy+ObjectAnimationSwitchFlag)
 
or a
 
jp nz,++
 
ld hl,BockSwordStrikeRightTileDataPointer
 
ld a,8
+
:
 
ld (_BockAnimationPtr),hl
 
ld (iy+33),a
  ld
(iy+ObjFrameIndexOffset),0
 
ld (iy+ObjFrameTimerOffset),6
 
ld (iy+ObjFrameIndexTimerLimitOffset),8
  ld
(iy+ObjectDrawTilesFlag),1
 
ld (iy+ObjAnimationSwitchFlag),1
 
ld (iy+49),1
 
ld a,$92
 
ld ($de04),a

++
:

  call Do_BockSwordStrikeCheck
  ret c
  ld a,(_BockInAirFlag)
 
or a
  jp
nz,+

  ld a,($c429)
  or
a
 
jp nz,+
  ld
a,(_BockFrameIndex)
  cp
2
  jp
nz,+
 
call Do_BockJumpingCheck
  ret
c

+:
  Call Label1738

;=========================================================
BockJumpLeftFunction:
 
ld de,BockJumpingLeftTileDataPointer
 
ld c,4
  ld a,(_BockAnimationSwitchFlag)
 
or a
  jp
z,+
  dec
a
  jp
nz,++
  jp
BockJumpFunctionCont
;========================================================= BockJumpRightFunction: :
 
ld de,BockJumpingRightTileDataPointer
 
ld c,8
 
ld a,(_BockAnimationSwitchFlag)
  or
a
 
jp z,+
  dec
a
  jp
nz,++
 
jp BockJumpFunctionCont 

;=========================================================
+
:
 
ld  hl,(_PlayerBootsYDeltaSubPixel)
 
ld a,(_RamC1C3)
  or
a
 
jp z,+
 
ld hl,$f8c0
+
:
 
ld (_BockYDeltaSubPixel),hl
  ld
(iy+ObjInAirFlagOffset),1
++
:
  ld
(iy+33),c
 
ex de,hl
  ld
(iy+ObjAnimationStructPointerL),hl
 
ld (iy+ObjectFrameIndexOffset),0
 
ld (iy+ObjectDrawTilesFlag),1
 
ld (iy+ObjAnimationSwitchFlag),1
 
ret

;=========================================================
;

;=========================================================
BockFallingLeftFunction:
  ld hl,PlayerFallingLeftTileDataPointer
 
ld c,4
 
ld a,(_PlayerAnimationSwitchFlag)
 
or a
 
jp z,+
 
jp ++
;=========================================================  
BockFallingRightFunction: 
  ld hl,BOckFallingRightTileDataPointer
 
ld c,8
 
ld a,(_BockAnimationSwitchFlag)
 
or a jp z,+
 
jp ++

+:
  ld
(_BockAnimationStructPointerL),hl
 
ld hl,$0200
 
ld (_BockYDeltaSubPixel),hl
 
ld (iy+ObjPreviousState),c
  ld
(iy+ObjectFrameIndexOffset),0
 
ld (iy+ObjectDrawTilesFlag),1
  ld
(iy+ObjAnimationSwitchFlag),1
 
ld (iy+41),1
 
ret

++:
  call
Do_BockSwordStrikeCheck
 
ret c
  call
Label1738
 
jr nc,++
  ld
a,(C433)
  or
a
  jp
nz,Label1482
 
ld c,BockWalkLeftState
 
ld a,(_BockPreviousState)
 
cp 4
  jp
z,+
 
ld c,BockWalkRightState
+
:
  ld
(iy+ObjStateOffset),c
 
ld hl,0
 
ld (iy+ObjYDeltaSubPixel),hl
 
ret

++:
  call
Do_ModObjectYPosition
  ld a,(_JoyPadPressed)
  and %00001100
  jp
z,Label11f8
  cp
(iy+33)
  jp z,++
  ld
c,BockFallingLeftState
  cp
4
  jp
z,+
  ld c,BockFallingRightState
+
:
  ld (iy+33),a
  ld (iy+ObjStateOffset),c
  ld (iy+ObjAnimationSwitchFlag),0
  ld (iy+41),0
  ret
++
:
  cp
4
 
jp z,Do_AddBockNegativeAcceleration
 
jp Do_AddBockPositiveAcceleration

;=========================================================
;

;=========================================================
BockJumpFunctionCont:
  bit
7,(iy+ObjYDeltaPixel)
 
jr nz,+
  call
Label1738
 
jr c,++
+
:
  call
Do_BockJumpingLadderCheck

 
ret c
  jp
Do_BockSwordStrikeCheck
++
:
 
ld a,(_RamC433)
  or
a
 
jp nz,Label1482
  xor
a
 
ld (_BockInAirFlag),a
 
ld (_BockAnimationSwitchFlag),a
 
call Label1482
  ld
c,BockWalkLeftState
 
ld a,(_BockState)
  cp
 BockJumpingWestState
 
jp z,+
  ld
c,BockWalkRightState
+
:
 
ld (iy+ObjStateOffset),c
 
ld (iy+33),c
 
ret


;=========================================================
;
Check Bock Ladder,Jumping,Sword Strike ;=========================================================
Do_BockJumpingAndSwordCheck: 
  call Do_BockOnLadderCheck
  ret
c
  call
Do_BockJumpingCheck
 
ret c
  call
Do_BockSwordStrikeCheck
 
ret c
 
jp Label193A




;========================================================= ; ;========================================================= Do_BockSwordStrikeCheck: 
 
ld a,(_JoyPadButtonPressed)
  bit
4,a
  jr
nz,+
  xor
a
 
ret

+:
 ld a,(_BockSwordFlag)
 or
a
 ret nz
 ld a,(_PlayerState)
 cp
PlayerSwordStrikeLeftState
 jp z,+
 cp
PlayerSwordStrikeRightState
 jp z,+
-:
 ld
c,PlayerSwordStrikeLeftState
 bit 0,(iy+ObjStateOffset)
 jp
nz,BockSwordStrikeCheckCont
 ld c,PlayerSwordStrikeRightState ;========================================================= BockSwordStrikeCheckCont:
 ld (iy+ObjectStateOffset),c
 ld (iy+ObjAnimationSwitchFlag),0
 scf
 ret

+:
 ld a,(_BockFrameIndex)
 cp 2
 jp nc,+
 xor a
 ret
+:
  ld a,(_JoyPadPressed)
  and %00001100
  jp z,-
 cp (iy+33)
 jp z,-
 ld c,PlayerSwordStrikeLeftState
 bit 2,a
 jp nz,BockSwordStrikeCheckCont
 ld c,PlayerSwordStrikeRightState
 jp BockSwordStrikeCheckCont

;=========================================================
;

;=========================================================
Do_BockOnLadderCheck: 
 
ld (_JoyPadPressed)
 
cp 1
  jp
z,JoyPadPressedUpCheck
 
cp 2
 
jp z,JoyPadPressedDownCheck
 
xor a
 
ret



;=========================================================
;
;
=========================================================
BockJumpingLadderCheck:
 
ld a,(_JoyPadPressed)
 
and %00000001
 
jp nz,JoyPadPressedUpCheck
 
xor a
  ret

;=========================================================
--
:
 
call Do_ObjectMSBTileCheck
 
ld a,l
 and
%11000000
 cp
Ladder
 jp
nz,+
 scf

 
ret



;=========================================================
+
:
 xor

 ret

;=========================================================
;
d = YOffset
;
e = XOffset
;
=========================================================
JoyPadPressedUpCheck:
  ld de,$fffc
  call
--
  ret
nc
 
ld de,$ff03
 
call --
  ret
nc
 
jp -



;=========================================================
:
d = YOffset
;
e = XOffset
;=========================================================

 Do_BockXTileCollisionChk: 
 
ld a,(_PlayerYPositionPixel)
 
cp 192
  ret
nc
 
xor a
 
ld de,$00f8
  call
Do_ObjectMSBTileCheck
 
ld de,$04f8
 
bit 5,l
 
jp nz,+
 
ld de,$0007
  call
Do_ObjectMSBTileCheck
 
ld de,$0407
 bit
5,l
  jp
z,++ +
 
ld c,0
  bit
4,l
 
jr z,+
 
ld c,1
  ld a,l

  and
%11110000
  push
bc
  push
de
  call
+++
  pop
de
  pop
bc
 
ld a,c
 
or a
 
jr nz,+
  call
Do_ObjectMSBTileCheck
 
bit 5,l
  jr
z,++
+
:
  scf

  ret

;=========================================================







;=========================================================
Do_AddBockNegativeAcceleration:
  ld a,(_JoyPad)
  and
%00001100
 
jp z,AddPositiveDeceleration
 
cp JoyPadLeft
 
ret nz
  ld (iy+45),0
  ld
a,(_BockState)
  cp
BockWalkLeftState
  call z,Do_BockAnimationHelper

  ld hl,(_BockXDeltaSubPixel)
  ld d,-1
  ld e,(iy+37)                            ;#$ec "236
  add
hl,de
  ld (_BockXDeltaSubPixel),hl
  xor a
  ld de,($c423)                         ;de = MaxNegativeAcceleration
  sbc
hl,de
  bit
7,h
  jp
z,Label154c
  ld
hl,($c423)
  ld (_BockXDeltaSubPixel),hl
  jp Label154c

;=========================================================
Do_AddBockPositiveAcceleration:
  ld a,(_JoyPad)
  and
%00001100
  jp
z,Label15f2
  cp
JoyPadRight
 
ret nz
 
ld (iy+45),a
 
ld a,(_BockState)
  cp
BockWalkRightState
  call
z,Do_BockAnimationHelper
  ld
hl,(_BockXDeltaSubPixel)
 
ld d,0
 
ld e,(iy+40)
  add
hl,de
 
ld (_BockXDeltaSubPixel),hl

 
xor a
 
ld de,(_BockPositiveAccelerationLimit)
 
sbc hl,de
 
bit 7,h
  jp
nz,Label163a
 
ld hl,(c426)
 
ld (_BockXDeltaSubPixel),hl
  jp
Label163a






;=========================================================
;
;========================================================= Do_BockJumpingCheck:
  ld a,(_JoyPadButtonPressed)
 
bit 5,a
 
jr nz,+
  xor
a
 
ret
+
:
  ld
a,(RamC1A7)                                                       
 
or a
  jp
z,+
+
:
 
ld a,(_BockInAirFlag)

  or
a
  ret
nz
 
ld a,PlayerJumpingWestState
 
bit 0,(iy+ObjStateOffset)
  jp
nz,+
  ld
a,PlayerJumpingEastState
+
:
  ld
(_BockState),a
  ld
(iy+ObjAnimationSwitchFlag),0
 
ld a,145
 
ld (RamDe01),a                                            ;Sound Fx
  scf

  ret


Text here
Powered by Create your own unique website with customizable templates.
  • Home
  • Codes
  • C-64
  • NES
  • Sega Master System