diff options
Diffstat (limited to 'engine/events/crystal_unown.asm')
-rw-r--r-- | engine/events/crystal_unown.asm | 327 |
1 files changed, 327 insertions, 0 deletions
diff --git a/engine/events/crystal_unown.asm b/engine/events/crystal_unown.asm new file mode 100644 index 000000000..6c0e972f8 --- /dev/null +++ b/engine/events/crystal_unown.asm @@ -0,0 +1,327 @@ +SpecialHoOhChamber: ; 0x8addb + ld hl, PartySpecies + ld a, [hl] + cp HO_OH ; is Ho-oh the first Pokémon in the party? + jr nz, .done ; if not, we're done + call GetSecondaryMapHeaderPointer + ld de, EVENT_WALL_OPENED_IN_HO_OH_CHAMBER + ld b, SET_FLAG + call EventFlagAction +.done + ret +; 0x8adef + +SpecialOmanyteChamber: ; 8adef + call GetSecondaryMapHeaderPointer + ld de, EVENT_WALL_OPENED_IN_OMANYTE_CHAMBER + ld b, CHECK_FLAG + call EventFlagAction + ld a, c + and a + jr nz, .nope + + ld a, WATER_STONE + ld [CurItem], a + ld hl, NumItems + call CheckItem + jr c, .open + + ld a, [PartyCount] + ld b, a + inc b +.loop + dec b + jr z, .nope + ld a, b + dec a + ld [CurPartyMon], a + push bc + ld a, MON_ITEM + call GetPartyParamLocation + pop bc + ld a, [hl] + cp WATER_STONE + jr nz, .loop + +.open + call GetSecondaryMapHeaderPointer + ld de, EVENT_WALL_OPENED_IN_OMANYTE_CHAMBER + ld b, SET_FLAG + call EventFlagAction + +.nope + ret +; 8ae30 + +SpecialAerodactylChamber: ; 8ae30 + push de + push bc + + call GetSecondaryMapHeaderPointer + ld a, h + cp HIGH(RuinsOfAlphAerodactylChamber_SecondMapHeader) + jr nz, .nope + ld a, l + cp LOW(RuinsOfAlphAerodactylChamber_SecondMapHeader) + jr nz, .nope + + ld de, EVENT_WALL_OPENED_IN_AERODACTYL_CHAMBER + ld b, SET_FLAG + call EventFlagAction + + scf + jr .done + +.nope + and a + +.done + pop bc + pop de + ret +; 8ae4e + +SpecialKabutoChamber: ; 8ae4e + push hl + push de + + call GetSecondaryMapHeaderPointer + ld a, h + cp HIGH(RuinsOfAlphKabutoChamber_SecondMapHeader) + jr nz, .done + ld a, l + cp LOW(RuinsOfAlphKabutoChamber_SecondMapHeader) + jr nz, .done + + ld de, EVENT_WALL_OPENED_IN_KABUTO_CHAMBER + ld b, SET_FLAG + call EventFlagAction + +.done + pop de + pop hl + ret +; 8ae68 + +Special_DisplayUnownWords: ; 8ae68 + ld a, [ScriptVar] + ld hl, .MenuDataHeader_Escape + and a + jr z, .load + + ld d, $0 + ld e, $5 +.loop + add hl, de + dec a + jr nz, .loop + +.load + call LoadMenuDataHeader + xor a + ld [hBGMapMode], a + call MenuBox + call UpdateSprites + call ApplyTilemap + call MenuBoxCoord2Tile + inc hl + ld d, 0 + ld e, SCREEN_WIDTH + add hl, de + add hl, de + ld a, [ScriptVar] + ld c, a + ld de, .UnownText + and a + jr z, .copy +.loop2 + ld a, [de] + inc de + cp $ff + jr nz, .loop2 + dec c + jr nz, .loop2 +.copy + call .CopyWord + ld bc, AttrMap - TileMap + add hl, bc + call .FillAttr + call WaitBGMap2 + call JoyWaitAorB + call PlayClickSFX + call CloseWindow + ret +; 8aebc + +.UnownText: ; 8aebc + +unownwall: MACRO +rept _NARG +if \1 == "-" +x = $64 +else +if \1 >= "Y" +x = 2 * (\1 - "Y") + $60 +else +if \1 >= "Q" +x = 2 * (\1 - "Q") + $40 +else +if \1 >= "I" +x = 2 * (\1 - "I") + $20 +else +x = 2 * (\1 - "A") +endc +endc +endc +endc + db x +shift +endr + db $ff +endm + +.UnownText_Escape: + ; db $08, $44, $04, $00, $2e, $08, $ff + unownwall "E", "S", "C", "A", "P", "E" +.UnownText_Light: + ; db $26, $20, $0c, $0e, $46, $ff + unownwall "L", "I", "G", "H", "T" +.UnownText_Water: + ; db $4c, $00, $46, $08, $42, $ff + unownwall "W", "A", "T", "E", "R" +.UnownText_Ho_Oh: + ; db $0e, $2c, $64, $2c, $0e, $ff + unownwall "H", "O", "-", "O", "H" +; 8aed5 + +.MenuDataHeader_Escape: ; 0x8aed5 + db $40 ; flags + db 04, 03 ; start coords + db 09, 16 ; end coords + +.MenuDataHeader_Light: ; 0x8aeda + db $40 ; flags + db 04, 04 ; start coords + db 09, 15 ; end coords + +.MenuDataHeader_Water: ; 0x8aedf + db $40 ; flags + db 04, 04 ; start coords + db 09, 15 ; end coords + +.MenuDataHeader_Ho_Oh: ; 0x8aee4 + db $40 ; flags + db 04, 04 ; start coords + db 09, 15 ; end coords +; 8aee9 + +.FillAttr: ; 8aee9 + ld a, [de] + cp $ff + ret z + cp $60 + ld a, VRAM_BANK_1 | PAL_BG_BROWN + jr c, .got_pal + ld a, PAL_BG_BROWN + +.got_pal + call .PlaceSquare + inc hl + inc hl + inc de + jr .FillAttr +; 8aefd + +.PlaceSquare: ; 8aefd + push hl + ld [hli], a + ld [hld], a + ld b, 0 + ld c, SCREEN_WIDTH + add hl, bc + ld [hli], a + ld [hl], a + pop hl + ret +; 8af09 + +.CopyWord: ; 8af09 + push hl + push de +.word_loop + ld a, [de] + cp $ff + jr z, .word_done + ld c, a + call .ConvertChar + inc hl + inc hl + inc de + jr .word_loop + +.word_done + pop de + pop hl + ret +; 8af1c + +.ConvertChar: ; 8af1c + push hl + ld a, c + cp $60 + jr z, .Tile60 + cp $62 + jr z, .Tile62 + cp $64 + jr z, .Tile64 + ld [hli], a + inc a + ld [hld], a + dec a + ld b, 0 + ld c, SCREEN_WIDTH + add hl, bc + ld c, $10 + add c + ld [hli], a + inc a + ld [hl], a + pop hl + ret + +.Tile60: + ld [hl], $5b + inc hl + ld [hl], $5c + ld bc, SCREEN_WIDTH - 1 + add hl, bc + ld [hl], $4d + inc hl + ld [hl], $5d + pop hl + ret + +.Tile62: + ld [hl], $4e + inc hl + ld [hl], $4f + ld bc, SCREEN_WIDTH - 1 + add hl, bc + ld [hl], $5e + inc hl + ld [hl], $5f + pop hl + ret + +.Tile64: + ld [hl], $2 + inc hl + ld [hl], $3 + ld bc, SCREEN_WIDTH - 1 + add hl, bc + ld [hl], $3 + inc hl + ld [hl], $2 + pop hl + ret +; 8af6b |