 81a239325d
			
		
	
	81a239325d
	
	
	
		
			
			Adds Link's Awakening: DX. Fully imports and forks LADXR, with permission - https://github.com/daid/LADXR
		
			
				
	
	
		
			304 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
			
		
		
	
	
			304 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
| CheckIfLoadBowWow:
 | |
|         ; Check has bowwow flag
 | |
|         ld   a, [$DB56]
 | |
|         cp   $01
 | |
|         jr   nz, .noLoadBowwow
 | |
| 
 | |
|         ldh  a, [$F6] ; load map number
 | |
|         cp   $22
 | |
|         jr   z, .loadBowwow
 | |
|         cp   $23
 | |
|         jr   z, .loadBowwow
 | |
|         cp   $24
 | |
|         jr   z, .loadBowwow
 | |
|         cp   $32
 | |
|         jr   z, .loadBowwow
 | |
|         cp   $33
 | |
|         jr   z, .loadBowwow
 | |
|         cp   $34
 | |
|         jr   z, .loadBowwow
 | |
| 
 | |
| .noLoadBowwow:
 | |
|         ld   e, $00
 | |
|         ret
 | |
| 
 | |
| .loadBowwow:
 | |
|         ld   e, $01
 | |
|         ret
 | |
| 
 | |
| 
 | |
| ; Special handler for when Bowwow tries to eat an entity.
 | |
| ; Our target entity index is loaded in BC.
 | |
| BowwowEat:
 | |
|     ; Load the entity type into A
 | |
|     ld   hl, $C3A0 ; entity type
 | |
|     add  hl, bc
 | |
|     ld   a, [hl]
 | |
| 
 | |
|     ; Check if we need special handling for bosses
 | |
|     cp   $59 ; Moldorm
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     cp   $5C ; Genie
 | |
|     jr   z, BowwowEatGenie
 | |
|     cp   $5B ; SlimeEye
 | |
|     jp   z, BowwowEatSlimeEye
 | |
|     cp   $65 ; AnglerFish
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     cp   $5D ; SlimeEel
 | |
|     jp   z, BowwowEatSlimeEel
 | |
|     cp   $5A ; Facade
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     cp   $63 ; Eagle
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     cp   $62 ; Hot head
 | |
|     jp   z, BowwowEatHotHead
 | |
|     cp   $F9 ; Hardhit beetle
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     cp   $E6 ; Nightmare (all forms)
 | |
|     jp   z, BowwowEatNightmare
 | |
| 
 | |
|     ; Check for special handling for minibosses
 | |
|     cp   $87 ; Lanmola
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     ; cp   $88 ; Armos knight
 | |
|     ; No special handling, just eat him, solves the fight real quick.
 | |
|     cp   $81 ; rolling bones
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     cp   $89 ; Hinox
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     cp   $8E ; Cue ball
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     ;cp   $5E ; Gnoma
 | |
|     ;jr   z, BowwowHurtEnemy
 | |
|     cp   $5F ; Master stalfos
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     cp   $92 ; Smasher
 | |
|     jp   z, BowwowEatSmasher
 | |
|     cp   $BC ; Grim Creeper
 | |
|     jp   z, BowwowEatGrimCreeper
 | |
|     cp   $BE ; Blaino
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     cp   $F8 ; Giant buzz blob
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     cp   $F4 ; Avalaunch
 | |
|     jr   z, BowwowHurtEnemy
 | |
| 
 | |
|     ; Some enemies
 | |
|     cp   $E9 ; Color dungeon shell
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     cp   $EA ; Color dungeon shell
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     cp   $EB ; Color dungeon shell
 | |
|     jr   z, BowwowHurtEnemy
 | |
| 
 | |
|     ; Play SFX
 | |
|     ld   a, $03
 | |
|     ldh  [$F2], a
 | |
|     ; Call normal "destroy entity and drop item" handler
 | |
|     jp   $3F50
 | |
| 
 | |
| BowwowHurtEnemy:
 | |
|     ; Hurt enemy with damage type zero (sword)
 | |
|     ld   a, $00
 | |
|     ld   [$C19E], a
 | |
|     rst  $18
 | |
|     ; Play SFX
 | |
|     ld   a, $03
 | |
|     ldh  [$F2], a
 | |
|     ret
 | |
| 
 | |
| BowwowEatGenie:
 | |
|     ; Get private state to find out if this is a bottle or the genie
 | |
|     ld   hl, $C2B0
 | |
|     add  hl, bc
 | |
|     ld   a, [hl]
 | |
|     ; Prepare loading state from hl
 | |
|     ld   hl, $C290
 | |
|     add  hl, bc
 | |
| 
 | |
|     cp   $00
 | |
|     jr   z, .bottle
 | |
|     cp   $01
 | |
|     jr   z, .ghost
 | |
|     ret
 | |
| 
 | |
| .ghost:
 | |
|     ; Get current state
 | |
|     ld   a, [hl]
 | |
|     cp   $04 ; Flying around without bottle
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     ret
 | |
| 
 | |
| .bottle:
 | |
|     ; Get current state
 | |
|     ld   a, [hl]
 | |
|     cp   $03 ; Hopping around in bottle
 | |
|     jr   z, BowwowHurtEnemy
 | |
|     ret
 | |
| 
 | |
| BowwowEatSlimeEye:
 | |
|     ; On set privateCountdown2 to $0C to split, when privateState1 is $04 and state is $03
 | |
|     ld   hl, $C290 ; state
 | |
|     add  hl, bc
 | |
|     ld   a, [hl]
 | |
|     cp   $03
 | |
|     jr   nz, .skipSplit
 | |
| 
 | |
|     ld   hl, $C2B0 ; private state1
 | |
|     add  hl, bc
 | |
|     ld   a, [hl]
 | |
|     cp   $04
 | |
|     jr   nz, .skipSplit
 | |
| 
 | |
|     ld   hl, $C300 ; private countdown 2
 | |
|     add  hl, bc
 | |
|     ld   [hl], $0C
 | |
| 
 | |
| .skipSplit:
 | |
|     jp   BowwowHurtEnemy
 | |
| 
 | |
| BowwowEatSlimeEel:
 | |
|     ; Get private state to find out if this is the tail or the head
 | |
|     ld   hl, $C2B0
 | |
|     add  hl, bc
 | |
|     ld   a, [hl]
 | |
|     cp   $01  ; not the head, so, skip.
 | |
|     ret  nz
 | |
| 
 | |
|     ; Check if we are pulled out of the wall
 | |
|     ld   hl, $C290
 | |
|     add  hl, bc
 | |
|     ld   a, [hl]
 | |
|     cp   $03  ; pulled out of the wall
 | |
|     jr   nz, .knockOutOfWall
 | |
| 
 | |
|     ld   hl, $D204
 | |
|     ld   a, [hl]
 | |
|     cp   $07
 | |
|     jr   nc, .noExtraDamage
 | |
|     inc  [hl]
 | |
| .noExtraDamage:
 | |
|     jp   BowwowHurtEnemy
 | |
| 
 | |
| .knockOutOfWall:
 | |
|     ld   [hl], $03 ; set state to $03
 | |
|     ld   hl, $C210  ; Y position
 | |
|     add  hl, bc
 | |
|     ld   a, [hl]
 | |
|     ld   [hl], $60
 | |
|     cp   $48
 | |
|     jp   nc, BowwowHurtEnemy
 | |
|     ld   [hl], $30
 | |
|     jp   BowwowHurtEnemy
 | |
| 
 | |
| 
 | |
| BowwowEatHotHead:
 | |
|     ; Load health of hothead
 | |
|     ld   hl, $C360
 | |
|     add  hl, bc
 | |
|     ld   a, [hl]
 | |
|     cp   $20
 | |
|     jr   c, .lowHp
 | |
|     ld   [hl], $20
 | |
| .lowHp:
 | |
|     jp   BowwowHurtEnemy
 | |
| 
 | |
| BowwowEatSmasher:
 | |
|     ; Check if this is the ball or the monster
 | |
|     ld   hl, $C440
 | |
|     add  hl, bc
 | |
|     ld   a, [hl]
 | |
|     and  a
 | |
|     ret  nz
 | |
|     jp   BowwowHurtEnemy
 | |
| 
 | |
| BowwowEatGrimCreeper:
 | |
|     ; Check if this is the main enemy or the smaller ones. Only kill the small ones
 | |
|     ld   hl, $C2B0
 | |
|     add  hl, bc
 | |
|     ld   a, [hl]
 | |
|     and  a
 | |
|     ret  z
 | |
|     jp   BowwowHurtEnemy
 | |
| 
 | |
| BowwowEatNightmare:
 | |
|     ; Check if this is the staircase.
 | |
|     ld   hl, $C390
 | |
|     add  hl, bc
 | |
|     ld   a, [hl]
 | |
|     cp   $02
 | |
|     ret  z
 | |
| 
 | |
|     ; Prepare loading state from hl
 | |
|     ld   hl, $C290
 | |
|     add  hl, bc
 | |
| 
 | |
|     ld   a, [$D219] ; which form has the nightmare
 | |
|     cp   $01
 | |
|     jr   z, .slimeForm
 | |
|     cp   $02
 | |
|     jr   z, .agahnimForm
 | |
|     cp   $03 ; moldormForm
 | |
|     jp   z, BowwowHurtEnemy
 | |
|     cp   $04 ; ganon and lanmola
 | |
|     jp   z, BowwowHurtEnemy
 | |
|     cp   $05 ; dethl
 | |
|     jp   z, BowwowHurtEnemy
 | |
|     ; 0 is the intro form
 | |
|     ret
 | |
| 
 | |
| .slimeForm:
 | |
|     ld   a, [hl]
 | |
|     cp   $02
 | |
|     jr   z, .canHurtSlime
 | |
|     cp   $03
 | |
|     ret  nz
 | |
| 
 | |
| .canHurtSlime:
 | |
|     ; We need quite some custom handling, normally the nightmare checks very directly if you use powder.
 | |
|     ; No idea why this insta kills the slime form...
 | |
|     ; Change state to hurt state
 | |
|     ld   [hl], $07
 | |
|     ; Set flash count
 | |
|     ld   hl, $C420
 | |
|     add  hl, bc
 | |
|     ld   [hl], $14
 | |
|     ; play proper sfx
 | |
|     ld   a, $07
 | |
|     ldh  [$F3], a
 | |
|     ld   a, $37
 | |
|     ldh  [$F2], a
 | |
|     ; No idea why this is done, but it happens when you use powder on the slime
 | |
|     ld   a, $03
 | |
|     ld   [$D220], a
 | |
|     ret
 | |
| 
 | |
| .agahnimForm:
 | |
|     ld   a, [hl]
 | |
|     ; only damage in states 2 to 4
 | |
|     cp   $02
 | |
|     ret  c
 | |
|     cp   $04
 | |
|     ret  nc
 | |
| 
 | |
|     ; Decrease health
 | |
|     ld   a, [$D220]
 | |
|     inc  a
 | |
|     ld   [$D220], a
 | |
|     ; If dead, do stuff
 | |
|     cp   $04
 | |
|     jr   c, .agahnimNotDeadYet
 | |
|     ld   [hl], $07
 | |
|     ld   hl, $C2E0
 | |
|     add  hl, bc
 | |
|     ld   [hl], $C0
 | |
|     ld   a, $36
 | |
|     ldh  [$F2], a
 | |
| .agahnimNotDeadYet:
 | |
|     ld   hl, $C420
 | |
|     add  hl, bc
 | |
|     ld   [hl], $14
 | |
|     ld   a, $07
 | |
|     ldh  [$F3], a
 | |
|     ret
 |