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
 |