ref: 1ee8de792ba5bf45290a4cb49b6bc3ee6aa539f3
dir: /main.asm/
INCLUDE "constants.asm" INCLUDE "home.asm" SECTION "bank1",ROMX,BANK[$1] SpriteFacingAndAnimationTable: ; 4000 (1:4000) dw SpriteFacingDownAndStanding, SpriteOAMParameters ; facing down, walk animation frame 0 dw SpriteFacingDownAndWalking, SpriteOAMParameters ; facing down, walk animation frame 1 dw SpriteFacingDownAndStanding, SpriteOAMParameters ; facing down, walk animation frame 2 dw SpriteFacingDownAndWalking, SpriteOAMParametersFlipped ; facing down, walk animation frame 3 dw SpriteFacingUpAndStanding, SpriteOAMParameters ; facing up, walk animation frame 0 dw SpriteFacingUpAndWalking, SpriteOAMParameters ; facing up, walk animation frame 1 dw SpriteFacingUpAndStanding, SpriteOAMParameters ; facing up, walk animation frame 2 dw SpriteFacingUpAndWalking, SpriteOAMParametersFlipped ; facing up, walk animation frame 3 dw SpriteFacingLeftAndStanding, SpriteOAMParameters ; facing left, walk animation frame 0 dw SpriteFacingLeftAndWalking, SpriteOAMParameters ; facing left, walk animation frame 1 dw SpriteFacingLeftAndStanding, SpriteOAMParameters ; facing left, walk animation frame 2 dw SpriteFacingLeftAndWalking, SpriteOAMParameters ; facing left, walk animation frame 3 dw SpriteFacingLeftAndStanding, SpriteOAMParametersFlipped ; facing right, walk animation frame 0 dw SpriteFacingLeftAndWalking, SpriteOAMParametersFlipped ; facing right, walk animation frame 1 dw SpriteFacingLeftAndStanding, SpriteOAMParametersFlipped ; facing right, walk animation frame 2 dw SpriteFacingLeftAndWalking, SpriteOAMParametersFlipped ; facing right, walk animation frame 3 dw SpriteFacingDownAndStanding, SpriteOAMParameters ; --- dw SpriteFacingDownAndStanding, SpriteOAMParameters ; This table is used for sprites $a and $b. dw SpriteFacingDownAndStanding, SpriteOAMParameters ; All orientation and animation parameters dw SpriteFacingDownAndStanding, SpriteOAMParameters ; lead to the same result. Used for immobile dw SpriteFacingDownAndStanding, SpriteOAMParameters ; sprites like items on the ground dw SpriteFacingDownAndStanding, SpriteOAMParameters ; --- dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters dw SpriteFacingDownAndStanding, SpriteOAMParameters SpriteFacingDownAndStanding: ; 4080 (1:4080) db $00,$01,$02,$03 SpriteFacingDownAndWalking: ; 4084 (1:4084) db $80,$81,$82,$83 SpriteFacingUpAndStanding: ; 4088 (1:4088) db $04,$05,$06,$07 SpriteFacingUpAndWalking: ; 408c (1:408c) db $84,$85,$86,$87 SpriteFacingLeftAndStanding: ; 4090 (1:4090) db $08,$09,$0a,$0b SpriteFacingLeftAndWalking: ; 4094 (1:4094) db $88,$89,$8a,$8b SpriteOAMParameters: ; 4098 (1:4098) db $00,$00, $00 ; top left db $00,$08, $00 ; top right db $08,$00, OAMFLAG_CANBEMASKED ; bottom left db $08,$08, OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA ; bottom right SpriteOAMParametersFlipped: ; 40a4 (1:40a4) db $00,$08, OAMFLAG_VFLIPPED db $00,$00, OAMFLAG_VFLIPPED db $08,$08, OAMFLAG_VFLIPPED | OAMFLAG_CANBEMASKED db $08,$00, OAMFLAG_VFLIPPED | OAMFLAG_CANBEMASKED | OAMFLAG_ENDOFDATA Func_40b0: ; 40b0 (1:40b0) xor a ld [$cf0b], a ld [$d700], a ld [W_ISINBATTLE], a ; $d057 ld [$d35d], a ld [$cf10], a ld [H_CURRENTPRESSEDBUTTONS], a ld [$cc57], a ld [wFlags_0xcd60], a ld [$ff9f], a ld [$ffa0], a ld [$ffa1], a call HasEnoughMoney jr c, .asm_40ff ld a, [wPlayerMoney] ; $d347 ld [$ff9f], a ld a, [wPlayerMoney + 1] ; $d348 ld [$ffa0], a ld a, [wPlayerMoney + 2] ; $d349 ld [$ffa1], a xor a ld [$ffa2], a ld [$ffa3], a ld a, $2 ld [$ffa4], a ld a, $d call Predef ; indirect jump to Func_f71e (f71e (3:771e)) ld a, [$ffa2] ld [wPlayerMoney], a ; $d347 ld a, [$ffa3] ld [wPlayerMoney + 1], a ; $d348 ld a, [$ffa4] ld [wPlayerMoney + 2], a ; $d349 .asm_40ff ld hl, $d732 set 2, [hl] res 3, [hl] set 6, [hl] ld a, $ff ld [wJoypadForbiddenButtonsMask], a ld a, $7 jp Predef ; indirect jump to HealParty (f6a5 (3:76a5)) MewPicFront:: INCBIN "pic/bmon/mew.pic" MewPicBack:: INCBIN "pic/monback/mewb.pic" INCLUDE "data/baseStats/mew.asm" INCLUDE "engine/battle/safari_zone.asm" INCLUDE "engine/titlescreen.asm" NintenText: db "NINTEN@" SonyText: db "SONY@" ; loads pokemon data from one of multiple sources to $cf98 ; loads base stats to $d0b8 ; INPUT: ; [$cf92] = index of pokemon within party/box ; [$cc49] = source ; 00: player's party ; 01: enemy's party ; 02: current box ; 03: daycare ; OUTPUT: ; [$cf91] = pokemon ID ; $cf98 = base address of pokemon data ; $d0b8 = base address of base stats LoadMonData_: ; 45b6 (1:45b6) ld a,[W_DAYCAREMONDATA] ; daycare pokemon ID ld [$cf91],a ld a,[$cc49] cp a,$03 jr z,.GetMonHeader ld a,[wWhichPokemon] ld e,a callab Func_39c37 ; get pokemon ID .GetMonHeader ld a,[$cf91] ld [$d0b5],a ; input for GetMonHeader call GetMonHeader ; load base stats to $d0b8 ld hl,W_PARTYMON1DATA ld bc,44 ld a,[$cc49] cp a,$01 jr c,.getMonEntry ld hl,wEnemyMons ; enemy pokemon 1 data jr z,.getMonEntry cp a,$02 ld hl,W_BOXMON1DATA ; box pokemon 1 data ld bc,33 jr z,.getMonEntry ld hl, W_DAYCAREMONDATA ; daycare pokemon data jr .copyMonData .getMonEntry ; add the product of the index and the size of each entry ld a,[wWhichPokemon] call AddNTimes .copyMonData ld de,$cf98 ld bc,44 jp CopyData INCLUDE "data/item_prices.asm" INCLUDE "text/item_names.asm" UnusedNames: ; 4a92 (1:4a92) db "かみなりバッヂ@" db "かいがらバッヂ@" db "おじぞうバッヂ@" db "はやぶさバッヂ@" db "ひんやりバッヂ@" db "なかよしバッヂ@" db "バラバッヂ@" db "ひのたまバッヂ@" db "ゴールドバッヂ@" db "たまご@" db "ひよこ@" db "ブロンズ@" db "シルバー@" db "ゴールド@" db "プチキャプテン@" db "キャプテン@" db "プチマスター@" db "マスター@" db "エクセレント" ; calculates the OAM data for all currently visible sprites and writes it to wOAMBuffer PrepareOAMData: ; 4b0f (1:4b0f) ld a, [$cfcb] dec a jr z, .asm_4b1e cp $ff ret nz ld [$cfcb], a jp HideSprites .asm_4b1e xor a ld [$ff90], a .asm_4b21 ld [$ff8f], a ld d, $c1 ld a, [$ff8f] ld e, a ld a, [de] ; c1x0 and a jp z, .asm_4bad inc e inc e ld a, [de] ; c1x2 read combined orientation and animation info ld [$d5cd], a cp $ff jr nz, .spriteVisible ; $ff -> offscreen, don't draw call Func_4bd1 jr .asm_4bad .spriteVisible cp $a0 jr c, .considerOrientation ; if >= $a0, ignore the sprite orientation and animation (by using a different conversion table) and $f add $10 jr .asm_4b48 .considerOrientation and $f ; the lower nybble contains orientation and animation info .asm_4b48 ld l, a push de inc d ld a, e add $5 ld e, a ld a, [de] ; c2x7 and $80 ld [$ff94], a ; temp store bit 7 for later use in OAM flags (draws sprite behind background (used for grass)) pop de ld h, $0 ld bc, SpriteFacingAndAnimationTable add hl, hl add hl, hl add hl, bc ; skip to the table location determined by orientation and animation ld a, [hli] ld c, a ld a, [hli] ld b, a ld a, [hli] ld h, [hl] ld l, a call Func_4bd1 ld a, [$ff90] ld e, a ld d, $c3 ; wOAMBuffer+x is buffer for OAM data .spriteTilesLoop ; loops 4 times for the 4 tiles a sprite consists of ld a, [$ff92] ; temp for sprite Y position add $10 ; Y=16 is top of screen (Y=0 is invisible) add [hl] ; add Y offset from table ld [de], a ; write new sprite OAM Y position inc hl ld a, [$ff91] ; temp for sprite X position add $8 ; X=8 is left of screen (X=0 is invisible) add [hl] ; add X offset from table inc e ld [de], a ; write new sprite OAM X position inc e ld a, [bc] ; read pattern number offset (accomodates orientation (offset 0,4 or 8) and animation (offset 0 or $80)) inc bc push bc ld b, a ld a, [$d5cd] ; temp copy of c1x2 swap a ; high nybble determines sprite used (0 is always player sprite, next are some npcs) and $f cp $b ; sprites $a and $b have no orientation or animation and therefore only 4 tiles jr nz, .calcTileOffset ; (instead of 12), so tile b's offset is a special case ld a, $7c ; = $a * 12 + 4 jr .doneCalcTileOffset .calcTileOffset sla a sla a ld c, a sla a add c ; a *= 12 (each sprite consists of 12 tiles) .doneCalcTileOffset add b ; add orientation and animation offset pop bc ld [de], a ; write OAM sprite pattern number inc hl inc e ld a, [hl] bit 1, a ; bit 1 is ignored for OAM, it's used here as an "always in foregroud" flag. jr z, .alwaysInForeground ld a, [$ff94] ; load bit 7 (set to $80 if sprite is in grass and should be drawn behind it) or [hl] .alwaysInForeground inc hl ld [de], a ; write OAM sprite flags inc e bit 0, a ; test for OAMFLAG_ENDOFDATA jr z, .spriteTilesLoop ld a, e ld [$ff90], a .asm_4bad ld a, [$ff8f] add $10 cp $0 jp nz, .asm_4b21 ld a, [$ff90] ld l, a ld h, $c3 ld de, $4 ld b, $a0 ld a, [$d736] bit 6, a ld a, $a0 jr z, .clearUnusedOAMEntriesLoop ld a, $90 .clearUnusedOAMEntriesLoop cp l ret z ld [hl], b add hl, de jr .clearUnusedOAMEntriesLoop Func_4bd1: ; 4bd1 (1:4bd1) inc e inc e ld a, [de] ; c1x4 ld [$ff92], a inc e inc e ld a, [de] ; c1x6 ld [$ff91], a ld a, $4 add e ld e, a ld a, [$ff92] add $4 and $f0 ld [de], a ; c1xa (sprite Y pos (snapped to whole steps (?)) inc e ld a, [$ff91] and $f0 ld [de], a ; c1xb (sprite X pos (snapped to whole steps (?)) ret ; copies DMA routine to HRAM. By GB specifications, all DMA needs to be done in HRAM (no other memory section is available during DMA) WriteDMACodeToHRAM: ; 4bed (1:4bed) ld c, $80 ld b, $a ld hl, DMARoutine .copyLoop ld a, [hli] ld [$ff00+c], a inc c dec b jr nz, .copyLoop ret ; this routine is copied to HRAM and executed there on every VBlank DMARoutine: ; 4bfb (1:4bfb) ld a, $c3 ld [$ff46], a ; start DMA ld a, $28 .waitLoop ; wait for DMA to finish dec a jr nz, .waitLoop ret PrintWaitingText: FuncCoord 3, 10 ld hl, Coord ld b, $1 ld c, $b ld a, [W_ISINBATTLE] and a jr z, .asm_4c17 call TextBoxBorder jr .asm_4c1a .asm_4c17 call Func_5ab3 .asm_4c1a FuncCoord 4, 11 ld hl, Coord ld de, WaitingText call PlaceString ld c, 50 jp DelayFrames WaitingText: db "Waiting...!@" _UpdateSprites: ; 4c34 (1:4c34) ld h, $c1 inc h ld a, $e ; $c20e .spriteLoop ld l, a sub $e ld c, a ld [H_CURRENTSPRITEOFFSET], a ld a, [hl] and a jr z, .skipSprite ; tests $c2Xe push hl push de push bc call .updateCurrentSprite pop bc pop de pop hl .skipSprite ld a, l add $10 ; move to next sprite cp $e ; test for overflow (back at $0e) jr nz, .spriteLoop ret .updateCurrentSprite ; 4c54 (1:4c54) cp $1 jp nz, UpdateNonPlayerSprite jp UpdatePlayerSprite UpdateNonPlayerSprite: dec a swap a ld [$ff93], a ; $10 * sprite# ld a, [$cf17] ; some sprite offset? ld b, a ld a, [H_CURRENTSPRITEOFFSET] cp b jr nz, .unequal jp Func_5236 .unequal jp Func_4ed1 Func_4c70: nop ld h, $c100 / $100 ld a, [H_CURRENTSPRITEOFFSET] add $c100 % $100 ld l, a ld a, [hl] and a ret z ld a, l add 3 ld l, a ld a, [hli] call Func_4d72 ld a, [hli] add 4 add b and $f0 or c ld [$ff90], a ld a, [hli] call Func_4d72 ld a, [hl] add b and $f0 or c ld [$ff91], a ld a, l add 7 ld l, a xor a ld [hld], a ld [hld], a ld a, [$ff91] ld [hld], a ld a, [$ff90] ld [hl], a xor a .loop ld [$ff8f], a swap a ld e, a ld a, [H_CURRENTSPRITEOFFSET] cp e jp z, .next ld d, h ld a, [de] and a jp z, .next inc e inc e ld a, [de] inc a jp z, .next ld a, [H_CURRENTSPRITEOFFSET] add 10 ld l, a inc e ld a, [de] call Func_4d72 inc e ld a, [de] add 4 add b and $f0 or c sub [hl] jr nc, .asm_4cd4 cpl inc a .asm_4cd4 ld [$ff90], a push af rl c pop af ccf rl c ld b, 7 ld a, [hl] and $f jr z, .asm_4ce6 ld b, 9 .asm_4ce6 ld a, [$ff90] sub b ld [$ff92], a ld a, b ld [$ff90], a jr c, .asm_4d01 ld b, 7 dec e ld a, [de] inc e and a jr z, .asm_4cfa ld b, 9 .asm_4cfa ld a, [$ff92] sub b jr z, .asm_4d01 jr nc, .next .asm_4d01 inc e inc l ld a, [de] push bc call Func_4d72 inc e ld a, [de] add b and $f0 or c pop bc sub [hl] jr nc, .asm_4d14 cpl inc a .asm_4d14 ld [$ff91], a push af rl c pop af ccf rl c ld b, 7 ld a, [hl] and $f jr z, .asm_4d26 ld b, 9 .asm_4d26 ld a, [$ff91] sub b ld [$ff92], a ld a, b ld [$ff91], a jr c, .asm_4d41 ld b, 7 dec e ld a, [de] inc e and a jr z, .asm_4d3a ld b, 9 .asm_4d3a ld a, [$ff92] sub b jr z, .asm_4d41 jr nc, .next .asm_4d41 ld a, [$ff91] ld b, a ld a, [$ff90] inc l cp b jr c, .asm_4d4e ld b, 12 jr .asm_4d50 .asm_4d4e ld b, 3 .asm_4d50 ld a, c and b or [hl] ld [hl], a ld a, c inc l inc l ld a, [$ff8f] ld de, DiagonalLines add a add e ld e, a jr nc, .asm_4d62 inc d .asm_4d62 ld a, [de] or [hl] ld [hli], a inc de ld a, [de] or [hl] ld [hl], a .next ld a, [$ff8f] inc a cp $10 jp nz, .loop ret Func_4d72: and a ld b, 0 ld c, 0 jr z, .done ld c, 9 cp -1 jr z, .ok ld c, 7 ld a, 0 .ok ld b, a .done ret DiagonalLines: INCBIN "gfx/diagonal_lines.2bpp" TestBattle: ret .loop call GBPalNormal ; Don't mess around ; with obedience. ld a, %10000000 ; EARTHBADGE ld [W_OBTAINEDBADGES], a ld hl, W_FLAGS_D733 set 0, [hl] ; Reset the party. ld hl, W_NUMINPARTY xor a ld [hli], a dec a ld [hl], a ; Give the player a ; level 20 Rhydon. ld a, RHYDON ld [$cf91], a ld a, 20 ld [W_CURENEMYLVL], a xor a ld [$cc49], a ld [W_CURMAP], a call AddPokemonToParty ; Fight against a ; level 20 Rhydon. ld a, RHYDON ld [W_CUROPPONENT], a ld a, $2c ; PREDEF_BATTLE call Predef ; When the battle ends, ; do it all again. ld a, 1 ld [$cfcb], a ld [H_AUTOBGTRANSFERENABLED], a jr .loop PickupItem: call EnableAutoTextBoxDrawing ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c ld b, a ld hl, W_MISSABLEOBJECTLIST .missableObjectsListLoop ld a, [hli] cp $ff ret z cp b jr z, .isMissable inc hl jr .missableObjectsListLoop .isMissable ld a, [hl] ld [$ffdb], a ld hl, W_MAPSPRITEEXTRADATA ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c dec a add a ld d, 0 ld e, a add hl, de ld a, [hl] ld b, a ; item ld c, 1 ; quantity call GiveItem jr nc, .BagFull ld a, [$ffdb] ld [$cc4d], a ld a, $11 ; RemoveMissableObject call Predef ld a, 1 ld [$cc3c], a ld hl, FoundItemText jr .print .BagFull ld hl, NoMoreRoomForItemText .print call PrintText ret FoundItemText: TX_FAR _FoundItemText db $0B db "@" NoMoreRoomForItemText: TX_FAR _NoMoreRoomForItemText db "@" UpdatePlayerSprite: ; 4e31 (1:4e31) ld a, [wSpriteStateData2] and a jr z, .asm_4e41 cp $ff jr z, .asm_4e4a dec a ld [wSpriteStateData2], a jr .asm_4e4a .asm_4e41 FuncCoord 8, 9 ; $c45c ld a, [Coord] ld [$ff93], a cp $60 jr c, .asm_4e50 .asm_4e4a ld a, $ff ld [$c102], a ret .asm_4e50 call Func_4c70 ld h, $c1 ld a, [wWalkCounter] ; $cfc5 and a jr nz, .asm_4e90 ld a, [$d528] bit 2, a jr z, .asm_4e65 xor a jr .asm_4e86 .asm_4e65 bit 3, a jr z, .asm_4e6d ld a, $4 jr .asm_4e86 .asm_4e6d bit 1, a jr z, .asm_4e75 ld a, $8 jr .asm_4e86 .asm_4e75 bit 0, a jr z, .asm_4e7d ld a, $c jr .asm_4e86 .asm_4e7d xor a ld [$c107], a ld [$c108], a jr .asm_4eab .asm_4e86 ld [$c109], a ld a, [$cfc4] bit 0, a jr nz, .asm_4e7d .asm_4e90 ld a, [$d736] bit 7, a jr nz, .asm_4eb6 ld a, [H_CURRENTSPRITEOFFSET] add $7 ld l, a ld a, [hl] inc a ld [hl], a cp $4 jr nz, .asm_4eab xor a ld [hl], a inc hl ld a, [hl] inc a and $3 ld [hl], a .asm_4eab ld a, [$c108] ld b, a ld a, [$c109] add b ld [$c102], a .asm_4eb6 ld a, [$ff93] ld c, a ld a, [W_GRASSTILE] cp c ld a, $0 jr nz, .asm_4ec3 ld a, $80 .asm_4ec3 ld [$c207], a ret Func_4ec7: ; 4ec7 (1:4ec7) push bc push af ld a, [$ffda] ld c, a pop af add c ld l, a pop bc ret Func_4ed1: ; 4ed1 (1:4ed1) ld a, [H_CURRENTSPRITEOFFSET] swap a dec a add a ld hl, W_MAPSPRITEDATA ; $d4e4 add l ld l, a ld a, [hl] ; read movement byte 2 ld [wCurSpriteMovement2], a ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] ld l, a inc l ld a, [hl] ; c1x1 and a jp z, InitializeSpriteStatus call CheckSpriteAvailability ret c ; if sprite is invisible, on tile >=$60, in grass or player is currently walking ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] ld l, a inc l ld a, [hl] ; c1x1 bit 7, a jp nz, InitializeSpriteFacingDirection ; c1x1 >= $80 ld b, a ld a, [$cfc4] bit 0, a jp nz, notYetMoving ld a, b cp $2 jp z, UpdateSpriteMovementDelay ; c1x1 == 2 cp $3 jp z, UpdateSpriteInWalkingAnimation ; c1x1 == 3 ld a, [wWalkCounter] ; $cfc5 and a ret nz ; don't do anything yet if player is currently moving (redundant, already tested in CheckSpriteAvailability) call InitializeSpriteScreenPosition ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $6 ld l, a ld a, [hl] ; c2x6: movement byte 1 inc a jr z, .asm_4f59 ; value $FF inc a jr z, .asm_4f59 ; value $FE dec a ld [hl], a ; (temporarily) increment movement byte 1 dec a push hl ld hl, $cf0f dec [hl] ; decrement $cf0f pop hl ld de, $cc5b call LoadDEPlusA ; a = [$cc5b + movement byte 1] cp $e0 jp z, ChangeFacingDirection cp $ff jr nz, .asm_4f4b ld [hl], a ; reset movement byte 1 to initial value ld hl, $d730 res 0, [hl] xor a ld [$cd38], a ld [$cd3a], a ret .asm_4f4b cp $fe jr nz, .asm_4f5f ld [hl], $1 ; set movement byte 1 to $1 ld de, $cc5b call LoadDEPlusA ; a = [$cc5b + $fe] (?) jr .asm_4f5f .asm_4f59 call getTileSpriteStandsOn call Random .asm_4f5f ld b, a ld a, [wCurSpriteMovement2] cp $d0 jr z, .moveDown ; movement byte 2 = $d0 forces down cp $d1 jr z, .moveUp ; movement byte 2 = $d1 forces up cp $d2 jr z, .moveLeft ; movement byte 2 = $d2 forces left cp $d3 jr z, .moveRight ; movement byte 2 = $d3 forces right ld a, b cp $40 ; a < $40: down (or left) jr nc, .notDown ld a, [wCurSpriteMovement2] cp $2 jr z, .moveLeft ; movement byte 2 = $2 only allows left or right .moveDown ld de, 2*20 add hl, de ; move tile pointer two rows down ld de, $100 ld bc, $400 jr TryWalking .notDown cp $80 ; $40 <= a < $80: up (or right) jr nc, .notUp ld a, [wCurSpriteMovement2] cp $2 jr z, .moveRight ; movement byte 2 = $2 only allows left or right .moveUp ld de, -2*20 ; $ffd8 add hl, de ; move tile pointer two rows up ld de, $ff00 ld bc, $804 jr TryWalking .notUp cp $c0 ; $80 <= a < $c0: left (or up) jr nc, .notLeft ld a, [wCurSpriteMovement2] cp $1 jr z, .moveUp ; movement byte 2 = $1 only allows up or down .moveLeft dec hl dec hl ; move tile pointer two columns left ld de, $ff ld bc, $208 jr TryWalking .notLeft ; $c0 <= a: right (or down) ld a, [wCurSpriteMovement2] cp $1 jr z, .moveDown ; movement byte 2 = $1 only allows up or down .moveRight inc hl inc hl ; move tile pointer two columns right ld de, $1 ld bc, $10c jr TryWalking ; changes facing direction by zeroing the movement delta and calling TryWalking ChangeFacingDirection: ; 4fc8 (1:4fc8) ld de, $0 ; fall through ; b: direction (1,2,4 or 8) ; c: new facing direction (0,4,8 or $c) ; d: Y movement delta (-1, 0 or 1) ; e: X movement delta (-1, 0 or 1) ; hl: pointer to tile the sprite would wlak onto ; set carry on failure, clears carry on success TryWalking: ; 4fcb (1:4fcb) push hl ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] add $9 ld l, a ld [hl], c ; c1x9 (update facing direction) ld a, [H_CURRENTSPRITEOFFSET] add $3 ld l, a ld [hl], d ; c1x3 (update Y movement delta) inc l inc l ld [hl], e ; c1x5 (update X movement delta) pop hl push de ld c, [hl] ; read tile to walk onto call CanWalkOntoTile pop de ret c ; cannot walk there (reinitialization of delay values already done) ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $4 ld l, a ld a, [hl] ; c2x4: Y position add d ld [hli], a ; update Y position ld a, [hl] ; c2x5: X position add e ld [hl], a ; update X position ld a, [H_CURRENTSPRITEOFFSET] ld l, a ld [hl], $10 ; c2x0=16: walk animation counter dec h inc l ld [hl], $3 ; c1x1: set movement status to walking jp UpdateSpriteImage ; update the walking animation parameters for a sprite that is currently walking UpdateSpriteInWalkingAnimation: ; 4ffe (1:4ffe) ld a, [H_CURRENTSPRITEOFFSET] add $7 ld l, a ld a, [hl] ; c1x7 (counter until next walk animation frame) inc a ld [hl], a ; c1x7 += 1 cp $4 jr nz, .noNextAnimationFrame xor a ld [hl], a ; c1x7 = 0 inc l ld a, [hl] ; c1x8 (walk animation frame) inc a and $3 ld [hl], a ; advance to next animation frame every 4 ticks (16 ticks total for one step) .noNextAnimationFrame ld a, [H_CURRENTSPRITEOFFSET] add $3 ld l, a ld a, [hli] ; c1x3 (movement Y delta) ld b, a ld a, [hl] ; c1x4 (screen Y position) add b ld [hli], a ; update screen Y position ld a, [hli] ; c1x5 (movement X delta) ld b, a ld a, [hl] ; c1x6 (screen X position) add b ld [hl], a ; update screen X position ld a, [H_CURRENTSPRITEOFFSET] ld l, a inc h ld a, [hl] ; c2x0 (walk animantion counter) dec a ld [hl], a ; update walk animantion counter ret nz ld a, $6 ; walking finished, update state add l ld l, a ld a, [hl] ; c2x6 (movement byte 1) cp $fe jr nc, .initNextMovementCounter ; values $fe and $ff ld a, [H_CURRENTSPRITEOFFSET] inc a ld l, a dec h ld [hl], $1 ; c1x1 = 1 (movement status ready) ret .initNextMovementCounter call Random ld a, [H_CURRENTSPRITEOFFSET] add $8 ld l, a ld a, [hRandomAdd] and $7f ld [hl], a ; c2x8: set next movement delay to a random value in [0,$7f] dec h ; note that value 0 actually makes the delay $100 (bug?) ld a, [H_CURRENTSPRITEOFFSET] inc a ld l, a ld [hl], $2 ; c1x1 = 2 (movement status) inc l inc l xor a ld b, [hl] ; c1x3 (movement Y delta) ld [hli], a ; reset movement Y delta inc l ld c, [hl] ; c1x5 (movement X delta) ld [hl], a ; reset movement X delta ret ; update delay value (c2x8) for sprites in the delayed state (c1x1) UpdateSpriteMovementDelay: ; 5057 (1:5057) ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $6 ld l, a ld a, [hl] ; c2x6: movement byte 1 inc l inc l cp $fe jr nc, .tickMoveCounter ; values $fe or $ff ld [hl], $0 jr .moving .tickMoveCounter dec [hl] ; c2x8: frame counter until next movement jr nz, notYetMoving .moving dec h ld a, [H_CURRENTSPRITEOFFSET] inc a ld l, a ld [hl], $1 ; c1x1 = 1 (mark as ready to move) notYetMoving: ; 5073 (1:5073) ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] add $8 ld l, a ld [hl], $0 ; c1x8 = 0 (walk animation frame) jp UpdateSpriteImage InitializeSpriteFacingDirection: ; 507f (1:507f) ld a, [$d72d] bit 5, a jr nz, notYetMoving res 7, [hl] ld a, [$d52a] bit 3, a jr z, .notFacingDown ld c, $0 ; make sprite face down jr .facingDirectionDetermined .notFacingDown bit 2, a jr z, .notFacingUp ld c, $4 ; make sprite face up jr .facingDirectionDetermined .notFacingUp bit 1, a jr z, .notFacingRight ld c, $c ; make sprite face right jr .facingDirectionDetermined .notFacingRight ld c, $8 ; make sprite face left .facingDirectionDetermined ld a, [H_CURRENTSPRITEOFFSET] add $9 ld l, a ld [hl], c ; c1x9: set facing direction jr notYetMoving InitializeSpriteStatus: ; 50ad (1:50ad) ld [hl], $1 ; $c1x1: set movement status to ready inc l ld [hl], $ff ; $c1x2: set sprite image to $ff (invisible/off screen) inc h ld a, [H_CURRENTSPRITEOFFSET] add $2 ld l, a ld a, $8 ld [hli], a ; $c2x2: set Y displacement to 8 ld [hl], a ; $c2x3: set X displacement to 8 ret ; calculates the spprite's scrren position form its map position and the player position InitializeSpriteScreenPosition: ; 50bd (1:50bd) ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $4 ld l, a ld a, [W_YCOORD] ; $d361 ld b, a ld a, [hl] ; c2x4 (Y position + 4) sub b ; relative to player position swap a ; * 16 sub $4 ; - 4 dec h ld [hli], a ; c1x4 (screen Y position) inc h ld a, [W_XCOORD] ; $d362 ld b, a ld a, [hli] ; c2x6 (X position + 4) sub b ; relative to player position swap a ; * 16 dec h ld [hl], a ; c1x6 (screen X position) ret ; tests if sprite is off screen or otherwise unable to do anything CheckSpriteAvailability: ; 50dc (1:50dc) ld a, $12 call Predef ; indirect jump to IsMissableObjectHidden (f1a6 (3:71a6)) ld a, [$ffe5] and a jp nz, .spriteInvisible ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $6 ld l, a ld a, [hl] ; c2x6: movement byte 1 cp $fe jr c, .skipXVisibilityTest ; movement byte 1 < $fe ld a, [H_CURRENTSPRITEOFFSET] add $4 ld l, a ld b, [hl] ; c2x4: Y pos (+4) ld a, [W_YCOORD] ; $d361 cp b jr z, .skipYVisibilityTest jr nc, .spriteInvisible ; above screen region add $8 ; screen is 9 tiles high cp b jr c, .spriteInvisible ; below screen region .skipYVisibilityTest inc l ld b, [hl] ; c2x5: X pos (+4) ld a, [W_XCOORD] ; $d362 cp b jr z, .skipXVisibilityTest jr nc, .spriteInvisible ; left of screen region add $9 ; screen is 10 tiles wide cp b jr c, .spriteInvisible ; right of screen region .skipXVisibilityTest call getTileSpriteStandsOn ld d, $60 ld a, [hli] cp d jr nc, .spriteInvisible ; standing on tile with ID >=$60 (bottom left tile) ld a, [hld] cp d jr nc, .spriteInvisible ; standing on tile with ID >=$60 (bottom right tile) ld bc, -20 ; $ffec add hl, bc ; go back one row of tiles ld a, [hli] cp d jr nc, .spriteInvisible ; standing on tile with ID >=$60 (top left tile) ld a, [hl] cp d jr c, .spriteVisible ; standing on tile with ID >=$60 (top right tile) .spriteInvisible ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] add $2 ld l, a ld [hl], $ff ; c1x2 scf jr .done .spriteVisible ld c, a ld a, [wWalkCounter] ; $cfc5 and a jr nz, .done ; if player is currently walking, we're done call UpdateSpriteImage inc h ld a, [H_CURRENTSPRITEOFFSET] add $7 ld l, a ld a, [W_GRASSTILE] cp c ld a, $0 jr nz, .notInGrass ld a, $80 .notInGrass ld [hl], a ; c2x7 and a .done ret UpdateSpriteImage: ; 5157 (1:5157) ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] add $8 ld l, a ld a, [hli] ; c1x8: walk animation frame ld b, a ld a, [hl] ; c1x9: facing direction add b ld b, a ld a, [$ff93] ; current sprite offset add b ld b, a ld a, [H_CURRENTSPRITEOFFSET] add $2 ld l, a ld [hl], b ; c1x2: sprite to display ret ; tests if sprite can walk the specified direction ; b: direction (1,2,4 or 8) ; c: ID of tile the sprite would walk onto ; d: Y movement delta (-1, 0 or 1) ; e: X movement delta (-1, 0 or 1) ; set carry on failure, clears carry on success CanWalkOntoTile: ; 516e (1:516e) ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $6 ld l, a ld a, [hl] ; c2x6 (movement byte 1) cp $fe jr nc, .canMove ; values $fe and $ff and a ret .canMove ld a, [W_TILESETCOLLISIONPTR] ld l, a ld a, [W_TILESETCOLLISIONPTR+1] ld h, a .tilePassableLoop ld a, [hli] cp $ff jr z, .impassable cp c jr nz, .tilePassableLoop ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $6 ld l, a ld a, [hl] ; $c2x6 (movement byte 1) inc a jr z, .impassable ; if $ff, no movement allowed (however, changing direction is) ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] add $4 ld l, a ld a, [hli] ; c1x4 (screen Y pos) add $4 ; align to blocks (Y pos is always 4 pixels off) add d ; add Y delta cp $80 ; if value is >$80, the destination is off screen (either $81 or $FF underflow) jr nc, .impassable ; don't walk off screen inc l ld a, [hl] ; c1x6 (screen X pos) add e ; add X delta cp $90 ; if value is >$90, the destination is off screen (either $91 or $FF underflow) jr nc, .impassable ; don't walk off screen push de push bc call Func_4c70 pop bc pop de ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] add $c ld l, a ld a, [hl] ; c1xc (forbidden directions flags(?)) and b ; check against chosen direction (1,2,4 or 8) jr nz, .impassable ; direction forbidden, don't go there ld h, $c2 ld a, [H_CURRENTSPRITEOFFSET] add $2 ld l, a ld a, [hli] ; c2x2 (sprite Y displacement, initialized at $8, keep track of where a sprite did go) bit 7, d ; check if going upwards (d=$ff) jr nz, .upwards add d cp $5 jr c, .impassable ; if c2x2+d < 5, don't go ;bug: this tests probably were supposed to prevent sprites jr .checkHorizontal ; from walking out too far, but this line makes sprites get stuck .upwards ; whenever they walked upwards 5 steps sub $1 ; on the other hand, the amount a sprite can walk out to the jr c, .impassable ; if d2x2 == 0, don't go ; right of bottom is not limited (until the counter overflows) .checkHorizontal ld d, a ld a, [hl] ; c2x3 (sprite X displacement, initialized at $8, keep track of where a sprite did go) bit 7, e ; check if going left (e=$ff) jr nz, .left add e cp $5 ; compare, but no conditional jump like in the vertical check above (bug?) jr .passable .left sub $1 jr c, .impassable ; if d2x3 == 0, don't go .passable ld [hld], a ; update c2x3 ld [hl], d ; update c2x2 and a ; clear carry (marking success) ret .impassable ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] inc a ld l, a ld [hl], $2 ; c1x1 = 2 (set movement status to delayed) inc l inc l xor a ld [hli], a ; c1x3 = 0 (clear Y movement delta) inc l ld [hl], a ; c1x5 = 0 (clear X movement delta) inc h ld a, [H_CURRENTSPRITEOFFSET] add $8 ld l, a call Random ld a, [hRandomAdd] and $7f ld [hl], a ; c2x8: set next movement delay to a random value in [0,$7f] (again with delay $100 if value is 0) scf ; set carry (marking failure to walk) ret ; calculates the tile pointer pointing to the tile the current sprite stancs on ; this is always the lower left tile of the 2x2 tile blocks all sprites are snapped to ; hl: output pointer getTileSpriteStandsOn: ; 5207 (1:5207) ld h, $c1 ld a, [H_CURRENTSPRITEOFFSET] add $4 ld l, a ld a, [hli] ; c1x4: screen Y position add $4 ; align to 2*2 tile blocks (Y position is always off 4 pixels to the top) and $f0 ; in case object is currently moving srl a ; screen Y tile * 4 ld c, a ld b, $0 inc l ld a, [hl] ; c1x6: screen Y position srl a srl a srl a ; screen X tile add $14 ; screen X tile + 20 ld d, $0 ld e, a ld hl, wTileMap add hl, bc add hl, bc add hl, bc add hl, bc add hl, bc add hl, de ; wTileMap + 20*(screen Y tile + 1) + screen X tile ret ; loads [de+a] into a LoadDEPlusA: ; 522f (1:522f) add e ld e, a jr nc, .noCarry inc d .noCarry ld a, [de] ret Func_5236: ; 5236 (1:5236) ld a, [$d730] bit 7, a ret z ld hl, $d72e bit 7, [hl] set 7, [hl] jp z, Func_52a6 ld hl, $cc97 ld a, [$cd37] add l ld l, a jr nc, .asm_5251 inc h .asm_5251 ld a, [hl] cp $40 jr nz, .asm_525f call Func_52b2 ld c, $4 ld a, $fe jr .asm_5289 .asm_525f cp $0 jr nz, .asm_526c call Func_52b2 ld c, $0 ld a, $2 jr .asm_5289 .asm_526c cp $80 jr nz, .asm_5279 call Func_52b7 ld c, $8 ld a, $fe jr .asm_5289 .asm_5279 cp $c0 jr nz, .asm_5286 call Func_52b7 ld c, $c ld a, $2 jr .asm_5289 .asm_5286 cp $ff ret .asm_5289 ld b, a ld a, [hl] add b ld [hl], a ld a, [H_CURRENTSPRITEOFFSET] add $9 ld l, a ld a, c ld [hl], a call Func_52c3 ld hl, $cf18 dec [hl] ret nz ld a, $8 ld [$cf18], a ld hl, $cd37 inc [hl] ret Func_52a6: ; 52a6 (1:52a6) xor a ld [$cd37], a ld a, $8 ld [$cf18], a jp Func_52c3 Func_52b2: ; 52b2 (1:52b2) ld a, $4 ld b, a jr asm_52ba Func_52b7: ; 52b7 (1:52b7) ld a, $6 ld b, a asm_52ba: ; 52ba (1:52ba) ld hl, wSpriteStateData1 ld a, [H_CURRENTSPRITEOFFSET] add l add b ld l, a ret Func_52c3: ; 52c3 (1:52c3) ld hl, wSpriteStateData2 ld a, [H_CURRENTSPRITEOFFSET] add $e ld l, a ld a, [hl] dec a swap a ld b, a ld hl, wSpriteStateData1 ld a, [H_CURRENTSPRITEOFFSET] add $9 ld l, a ld a, [hl] cp $0 jr z, .asm_52ea cp $4 jr z, .asm_52ea cp $8 jr z, .asm_52ea cp $c jr z, .asm_52ea ret .asm_52ea add b ld b, a ld [$ffe9], a call Func_5301 ld hl, wSpriteStateData1 ld a, [H_CURRENTSPRITEOFFSET] add $2 ld l, a ld a, [$ffe9] ld b, a ld a, [$ffea] add b ld [hl], a ret Func_5301: ; 5301 (1:5301) ld a, [H_CURRENTSPRITEOFFSET] add $7 ld l, a ld a, [hl] inc a ld [hl], a cp $4 ret nz xor a ld [hl], a inc l ld a, [hl] inc a and $3 ld [hl], a ld [$ffea], a ret INCLUDE "engine/cable_club.asm" LoadTrainerInfoTextBoxTiles: ; 5ae6 (1:5ae6) ld de, TrainerInfoTextBoxTileGraphics ; $7b98 ld hl, $9760 ld bc, (BANK(TrainerInfoTextBoxTileGraphics) << 8) +$09 jp CopyVideoData INCLUDE "engine/menu/main_menu.asm" INCLUDE "engine/oak_speech.asm" Func_62ce: ; 62ce (1:62ce) call Func_62ff ld a,$19 call Predef ld hl,$D732 bit 2,[hl] res 2,[hl] jr z,.next ld a,[$D71A] jr .next2 .next bit 1,[hl] jr z,.next3 call Func_64ea .next3 ld a,0 .next2 ld b,a ld a,[$D72D] and a jr nz,.next4 ld a,b .next4 ld hl,$D732 bit 4,[hl] ret nz ld [wLastMap],a ret Func_62ff: ; 62ff (1:62ff) ld a, [$d72d] cp BATTLE_CENTER jr nz, .asm_6314 ld hl, BattleCenterSpec1 ; $6428 ld a, [$ffaa] cp $2 jr z, .asm_6334 ld hl, BattleCenterSpec2 ; $6430 jr .asm_6334 .asm_6314 cp TRADE_CENTER jr nz, .asm_6326 ld hl, TradeCenterSpec1 ; $6438 ld a, [$ffaa] cp $2 jr z, .asm_6334 ld hl, TradeCenterSpec2 ; $6440 jr .asm_6334 .asm_6326 ld a, [$d732] bit 1, a jr nz, .asm_6346 bit 2, a jr nz, .asm_6346 ld hl, FirstMapSpec ; $6420 .asm_6334 ld de, W_CURMAP ; $d35e ld c, $7 .asm_6339 ld a, [hli] ld [de], a inc de dec c jr nz, .asm_6339 ld a, [hli] ld [W_CURMAPTILESET], a ; $d367 xor a jr .asm_63b3 .asm_6346 ld a, [wLastMap] ld hl, $d732 bit 4, [hl] jr nz, .asm_635b bit 6, [hl] res 6, [hl] jr z, .asm_638e ld a, [wLastBlackoutMap] jr .asm_6391 .asm_635b ld hl, $d72d res 4, [hl] ld a, [$d71d] ld b, a ld [W_CURMAP], a ; $d35e ld a, [$d71e] ld c, a ld hl, DungeonWarpList ; $63bf ld de, $0 ld a, $6 ld [$d12f], a .asm_6376 ld a, [hli] cp b jr z, .asm_637d inc hl jr .asm_6381 .asm_637d ld a, [hli] cp c jr z, .asm_6388 .asm_6381 ld a, [$d12f] add e ld e, a jr .asm_6376 .asm_6388 ld hl, DungeonWarpData ; $63d8 add hl, de jr .asm_63a4 .asm_638e ld a, [$d71a] .asm_6391 ld b, a ld [W_CURMAP], a ; $d35e ld hl, FlyWarpDataPtr ; $6448 .asm_6398 ld a, [hli] inc hl cp b jr z, .asm_63a1 inc hl inc hl jr .asm_6398 .asm_63a1 ld a, [hli] ld h, [hl] ld l, a .asm_63a4 ld de, $d35f ld c, $6 .asm_63a9 ld a, [hli] ld [de], a inc de dec c jr nz, .asm_63a9 xor a ld [W_CURMAPTILESET], a ; $d367 .asm_63b3 ld [$d4e2], a ld [$d4e3], a ld a, $ff ld [$d42f], a ret INCLUDE "data/special_warps.asm" ; This function appears to never be used. ; It is likely a debugging feature to give the player Tsunekazu Ishihara's ; favorite Pokemon. This is indicated by the overpowered Exeggutor, which ; Ishihara (president of Creatures Inc.) said was his favorite Pokemon in an ABC ; interview on February 8, 2000. ; "Exeggutor is my favorite. That's because I was always using this character ; while I was debugging the program." ; http://www.ign.com/articles/2000/02/09/abc-news-pokamon-chat-transcript SetIshiharaTeam: ; 64ca (1:64ca) ld de, IshiharaTeam .loop ld a, [de] cp $ff ret z ld [$cf91], a inc de ld a, [de] ld [W_CURENEMYLVL], a inc de call AddPokemonToParty jr .loop IshiharaTeam: ; 64df (1:64df) db EXEGGUTOR,90 db MEW,20 db JOLTEON,56 db DUGTRIO,56 db ARTICUNO,57 db $FF Func_64ea: ; 64ea (1:64ea) ret INCLUDE "engine/menu/naming_screen.asm" INCLUDE "engine/oak_speech2.asm" ; subtracts the amount the player paid from their money ; sets carry flag if there is enough money and unsets carry flag if not SubtractAmountPaidFromMoney_: ; 6b21 (1:6b21) ld de,wPlayerMoney ld hl,$ff9f ; total price of items ld c,3 ; length of money in bytes call StringCmp ret c ld de,wPlayerMoney + 2 ld hl,$ffa1 ; total price of items ld c,3 ; length of money in bytes ld a,$0c call Predef ; subtract total price from money ld a,$13 ld [$d125],a call DisplayTextBoxID ; redraw money text box and a ret HandleItemListSwapping: ; 6b44 (1:6b44) ld a,[wListMenuID] cp a,ITEMLISTMENU jp nz,DisplayListMenuIDLoop ; only rearrange item list menus push hl ld hl,$cf8b ld a,[hli] ld h,[hl] ld l,a inc hl ; hl = beginning of list entries ld a,[wCurrentMenuItem] ld b,a ld a,[wListScrollOffset] add b add a ld c,a ld b,0 add hl,bc ; hl = address of currently selected item entry ld a,[hl] pop hl inc a jp z,DisplayListMenuIDLoop ; ignore attempts to swap the Cancel menu item ld a,[$cc35] ; ID of item chosen for swapping (counts from 1) and a ; has the first item to swap already been chosen? jr nz,.swapItems ; if not, set the currently selected item as the first item ld a,[wCurrentMenuItem] inc a ld b,a ld a,[wListScrollOffset] ; index of top (visible) menu item within the list add b ld [$cc35],a ; ID of item chosen for swapping (counts from 1) ld c,20 call DelayFrames jp DisplayListMenuIDLoop .swapItems ld a,[wCurrentMenuItem] inc a ld b,a ld a,[wListScrollOffset] add b ld b,a ld a,[$cc35] ; ID of item chosen for swapping (counts from 1) cp b ; is the currently selected item the same as the first item to swap? jp z,DisplayListMenuIDLoop ; ignore attempts to swap an item with itself dec a ld [$cc35],a ; ID of item chosen for swapping (counts from 1) ld c,20 call DelayFrames push hl push de ld hl,$cf8b ld a,[hli] ld h,[hl] ld l,a inc hl ; hl = beginning of list entries ld d,h ld e,l ; de = beginning of list entries ld a,[wCurrentMenuItem] ld b,a ld a,[wListScrollOffset] add b add a ld c,a ld b,0 add hl,bc ; hl = address of currently selected item entry ld a,[$cc35] ; ID of item chosen for swapping (counts from 1) add a add e ld e,a jr nc,.noCarry inc d .noCarry ; de = address of first item to swap ld a,[de] ld b,a ld a,[hli] cp b jr z,.swapSameItemType .swapDifferentItems ld [$ff95],a ; [$ff95] = second item ID ld a,[hld] ld [$ff96],a ; [$ff96] = second item quantity ld a,[de] ld [hli],a ; put first item ID in second item slot inc de ld a,[de] ld [hl],a ; put first item quantity in second item slot ld a,[$ff96] ld [de],a ; put second item quantity in first item slot dec de ld a,[$ff95] ld [de],a ; put second item ID in first item slot xor a ld [$cc35],a ; 0 means no item is currently being swapped pop de pop hl jp DisplayListMenuIDLoop .swapSameItemType inc de ld a,[hl] ld b,a ld a,[de] add b ; a = sum of both item quantities cp a,100 ; is the sum too big for one item slot? jr c,.combineItemSlots ; swap enough items from the first slot to max out the second slot if they can't be combined sub a,99 ld [de],a ld a,99 ld [hl],a jr .done .combineItemSlots ld [hl],a ; put the sum in the second item slot ld hl,$cf8b ld a,[hli] ld h,[hl] ld l,a dec [hl] ; decrease the number of items ld a,[hl] ld [$d12a],a ; update number of items variable cp a,1 jr nz,.skipSettingMaxMenuItemID ld [wMaxMenuItem],a ; if the number of items is only one now, update the max menu item ID .skipSettingMaxMenuItemID dec de ld h,d ld l,e inc hl inc hl ; hl = address of item after first item to swap .moveItemsUpLoop ; erase the first item slot and move up all the following item slots to fill the gap ld a,[hli] ld [de],a inc de inc a ; reached the $ff terminator? jr z,.afterMovingItemsUp ld a,[hli] ld [de],a inc de jr .moveItemsUpLoop .afterMovingItemsUp xor a ld [wListScrollOffset],a ld [wCurrentMenuItem],a .done xor a ld [$cc35],a ; 0 means no item is currently being swapped pop de pop hl jp DisplayListMenuIDLoop INCLUDE "engine/overworld/pokemart.asm" INCLUDE "engine/learn_move.asm" INCLUDE "engine/overworld/pokecenter.asm" SetLastBlackoutMap: ; Set the map to return to when ; blacking out or using Teleport or Dig. ; Safari rest houses don't count. push hl ld hl, SafariZoneRestHouses ld a, [W_CURMAP] ld b, a .loop ld a, [hli] cp -1 jr z, .notresthouse cp b jr nz, .loop jr .done .notresthouse ld a, [wLastMap] ld [wLastBlackoutMap], a .done pop hl ret SafariZoneRestHouses: db SAFARI_ZONE_REST_HOUSE_2 db SAFARI_ZONE_REST_HOUSE_3 db SAFARI_ZONE_REST_HOUSE_4 db -1 ; function that performs initialization for DisplayTextID DisplayTextIDInit: ; 7096 (1:7096) xor a ld [$cf94],a ld a,[$cf0c] bit 0,a jr nz,.skipDrawingTextBoxBorder ld a,[$ff8c] ; text ID (or sprite ID) and a jr nz,.notStartMenu ; if text ID is 0 (i.e. the start menu) ; Note that the start menu text border is also drawn in the function directly ; below this, so this seems unnecessary. ld a,[$d74b] bit 5,a ; does the player have the pokedex? ; start menu with pokedex FuncCoord 10, 0 ; $c3aa ld hl,Coord ld b,$0e ld c,$08 jr nz,.drawTextBoxBorder ; start menu without pokedex FuncCoord 10, 0 ; $c3aa ld hl,Coord ld b,$0c ld c,$08 jr .drawTextBoxBorder ; if text ID is not 0 (i.e. not the start menu) then do a standard dialogue text box .notStartMenu FuncCoord 0, 12 ; $c490 ld hl,Coord ld b,$04 ld c,$12 .drawTextBoxBorder call TextBoxBorder .skipDrawingTextBoxBorder ld hl,$cfc4 set 0,[hl] ld hl,wFlags_0xcd60 bit 4,[hl] res 4,[hl] jr nz,.skipMovingSprites call UpdateSprites ; move sprites .skipMovingSprites ; loop to copy C1X9 (direction the sprite is facing) to C2X9 for each sprite ; this is done because when you talk to an NPC, they turn to look your way ; the original direction they were facing must be restored after the dialogue is over ld hl,$c119 ld c,$0f ld de,$0010 .spriteFacingDirectionCopyLoop ld a,[hl] inc h ld [hl],a dec h add hl,de dec c jr nz,.spriteFacingDirectionCopyLoop ; loop to force all the sprites in the middle of animation to stand still ; (so that they don't like they're frozen mid-step during the dialogue) ld hl,$c102 ld de,$0010 ld c,e .spriteStandStillLoop ld a,[hl] cp a,$ff ; is the sprite visible? jr z,.nextSprite ; if it is visible and a,$fc ld [hl],a .nextSprite add hl,de dec c jr nz,.spriteStandStillLoop ld b,$9c ; window background address call CopyScreenTileBufferToVRAM ; transfer background in WRAM to VRAM xor a ld [$ffb0],a ; put the window on the screen call LoadFontTilePatterns ld a,$01 ld [H_AUTOBGTRANSFERENABLED],a ; enable continuous WRAM to VRAM transfer each V-blank ret ; function that displays the start menu DrawStartMenu: ; 710b (1:710b) ld a,[$d74b] bit 5,a ; does the player have the pokedex? ; menu with pokedex FuncCoord 10, 0 ; $c3aa ld hl,Coord ld b,$0e ld c,$08 jr nz,.drawTextBoxBorder ; shorter menu if the player doesn't have the pokedex FuncCoord 10, 0 ; $c3aa ld hl,Coord ld b,$0c ld c,$08 .drawTextBoxBorder call TextBoxBorder ld a,%11001011 ; bit mask for down, up, start, B, and A buttons ld [$cc29],a ld a,$02 ld [$cc24],a ; Y position of first menu choice ld a,$0b ld [$cc25],a ; X position of first menu choice ld a,[$cc2d] ; remembered menu selection from last time ld [$cc26],a ld [$cc2a],a xor a ld [$cc37],a ld hl,$d730 set 6,[hl] ; no pauses between printing each letter FuncCoord 12, 2 ; $c3d4 ld hl,Coord ld a,[$d74b] bit 5,a ; does the player have the pokedex? ; case for not having pokdex ld a,$06 jr z,.storeMenuItemCount ; case for having pokedex ld de,StartMenuPokedexText call PrintStartMenuItem ld a,$07 .storeMenuItemCount ld [$cc28],a ; number of menu items ld de,StartMenuPokemonText call PrintStartMenuItem ld de,StartMenuItemText call PrintStartMenuItem ld de,W_PLAYERNAME ; player's name call PrintStartMenuItem ld a,[$d72e] bit 6,a ; is the player using the link feature? ; case for not using link feature ld de,StartMenuSaveText jr z,.printSaveOrResetText ; case for using link feature ld de,StartMenuResetText .printSaveOrResetText call PrintStartMenuItem ld de,StartMenuOptionText call PrintStartMenuItem ld de,StartMenuExitText call PlaceString ld hl,$d730 res 6,[hl] ; turn pauses between printing letters back on ret StartMenuPokedexText: ; 718f (1:718f) db "POKéDEX@" StartMenuPokemonText: ; 7197 (1:7197) db "POKéMON@" StartMenuItemText: ; 719f (1:719f) db "ITEM@" StartMenuSaveText: ; 71a4 (1:71a4) db "SAVE@" StartMenuResetText: ; 71a9 (1:71a9) db "RESET@" StartMenuExitText: ; 71af (1:71af) db "EXIT@" StartMenuOptionText: ; 71b4 (1:71b4) db "OPTION@" PrintStartMenuItem: ; 71bb (1:71bb) push hl call PlaceString pop hl ld de,$28 add hl,de ret INCLUDE "engine/overworld/cable_club_npc.asm" ; function to draw various text boxes ; INPUT: ; [$D125] = text box ID DisplayTextBoxID_: ; 72ea (1:72ea) ld a,[$d125] ; a = text box ID cp a,$14 jp z,DisplayYesNoTextBox ld c,a ld hl,TextBoxFunctionTable ld de,3 call SearchTextBoxTable jr c,.functionTableMatch ld hl,TextBoxCoordTable ld de,5 call SearchTextBoxTable jr c,.coordTableMatch ld hl,TextBoxTextAndCoordTable ld de,9 call SearchTextBoxTable jr c,.textAndCoordTableMatch .done ret .functionTableMatch ld a,[hli] ld h,[hl] ld l,a ; hl = address of function ld de,.done push de jp [hl] ; jump to the function .coordTableMatch call GetTextBoxIDCoords call GetAddressOfScreenCoords call TextBoxBorder ret .textAndCoordTableMatch call GetTextBoxIDCoords push hl call GetAddressOfScreenCoords call TextBoxBorder pop hl call GetTextBoxIDText ld a,[$d730] push af ld a,[$d730] set 6,a ; no pauses between printing each letter ld [$d730],a call PlaceString pop af ld [$d730],a call UpdateSprites ; move sprites ret ; function to search a table terminated with $ff for a byte matching c in increments of de ; sets carry flag if a match is found and clears carry flag if not SearchTextBoxTable: ; 734c (1:734c) dec de .loop ld a,[hli] cp a,$ff jr z,.notFound cp c jr z,.found add hl,de jr .loop .found scf .notFound ret ; function to load coordinates from the TextBoxCoordTable or the TextBoxTextAndCoordTable ; INPUT: ; hl = address of coordinates ; OUTPUT: ; b = height ; c = width ; d = row of upper left corner ; e = column of upper left corner GetTextBoxIDCoords: ; 735a (1:735a) ld a,[hli] ; column of upper left corner ld e,a ld a,[hli] ; row of upper left corner ld d,a ld a,[hli] ; column of lower right corner sub e dec a ld c,a ; c = width ld a,[hli] ; row of lower right corner sub d dec a ld b,a ; b = height ret ; function to load a text address and text coordinates from the TextBoxTextAndCoordTable GetTextBoxIDText: ; 7367 (1:7367) ld a,[hli] ld e,a ld a,[hli] ld d,a ; de = address of text push de ; save text address ld a,[hli] ld e,a ; column of upper left corner of text ld a,[hl] ld d,a ; row of upper left corner of text call GetAddressOfScreenCoords pop de ; restore text address ret ; function to point hl to the screen coordinates ; INPUT: ; d = row ; e = column ; OUTPUT: ; hl = address of upper left corner of text box GetAddressOfScreenCoords: ; 7375 (1:7375) push bc ld hl,wTileMap ld bc,20 .loop ; loop to add d rows to the base address ld a,d and a jr z,.addedRows add hl,bc dec d jr .loop .addedRows pop bc add hl,de ret ; Format: ; 00: text box ID ; 01-02: function address TextBoxFunctionTable: ; 7387 (1:7387) dbw $13, Func_74ba dbw $15, Func_74ea dbw $04, Func_76e1 db $ff ; terminator ; Format: ; 00: text box ID ; 01: column of upper left corner ; 02: row of upper left corner ; 03: column of lower right corner ; 04: row of lower right corner TextBoxCoordTable: ; 7391 (1:7391) db $01, 0, 12, 19, 17 db $03, 0, 0, 19, 14 db $07, 0, 0, 11, 6 db $0d, 4, 2, 19, 12 db $10, 7, 0, 19, 17 db $11, 6, 4, 14, 13 db $ff ; terminator ; Format: ; 00: text box ID ; 01: column of upper left corner ; 02: row of upper left corner ; 03: column of lower right corner ; 04: row of lower right corner ; 05-06: address of text ; 07: column of beginning of text ; 08: row of beginning of text ; table of window positions and corresponding text [key, start column, start row, end column, end row, text pointer [2 bytes], text column, text row] TextBoxTextAndCoordTable: ; 73b0 (1:73b0) db $05 ; text box ID db 0,0,14,17 ; text box coordinates dw JapaneseMochimonoText db 3,0 ; text coordinates db $06 ; text box ID db 13,10,19,14 ; text box coordinates dw UseTossText db 15,11 ; text coordinates db $08 ; text box ID db 0,0,7,5 ; text box coordinates dw JapaneseSaveMessageText db 2,2 ; text coordinates db $09 ; text box ID db 0,6,5,10 ; text box coordinates dw JapaneseSpeedOptionsText db 2,7 ; text coordinates db $0b ; text box ID db 8,12,19,17 ; text box coordinates dw BattleMenuText db 10,14 ; text coordinates db $1b ; text box ID db 0,12,19,17 ; text box coordinates dw SafariZoneBattleMenuText db 2,14 ; text coordinates db $0c ; text box ID db 11,11,19,17 ; text box coordinates dw SwitchStatsCancelText db 13,12 ; text coordinates db $0e ; text box ID db 0,0,10,6 ; text box coordinates dw BuySellQuitText db 2,1 ; text coordinates db $0f ; text box ID db 11,0,19,2 ; text box coordinates dw MoneyText db 13,0 ; text coordinates db $12 ; text box ID db 7,6,11,10 ; text box coordinates dw JapaneseAhText db 8,8 ; text coordinates db $1a ; text box ID db 11,8,19,17 ; text box coordinates dw JapanesePokedexMenu db 12,10 ; text coordinates ; note that there is no terminator BuySellQuitText: ; 7413 (1:7413) db "BUY" next "SELL" next "QUIT@@" UseTossText: ; 7422 (1:7422) db "USE" next "TOSS@" JapaneseSaveMessageText: ; 742b (1:742b) db "きろく" next "メッセージ@" JapaneseSpeedOptionsText: ; 7435 (1:7435) db "はやい" next "おそい@" MoneyText: ; 743d (1:743d) db "MONEY@" JapaneseMochimonoText: ; 7443 (1:7443) db "もちもの@" JapaneseMainMenuText: ; 7448 (1:7448) db "つづきから" next "さいしょから@" BattleMenuText: ; 7455 (1:7455) db "FIGHT ",$E1,$E2 next "ITEM RUN@" SafariZoneBattleMenuText: ; 7468 (1:7468) db "BALL× BAIT" next "THROW ROCK RUN@" SwitchStatsCancelText: ; 7489 (1:7489) db "SWITCH" next "STATS" next "CANCEL@" JapaneseAhText: ; 749d (1:749d) db "アッ!@" JapanesePokedexMenu: ; 74a1 (1:74a1) db "データをみる" next "なきごえ" next "ぶんぷをみる" next "キャンセル@" Func_74ba: ; 74ba (1:74ba) ld hl, $d730 set 6, [hl] ld a, $f ld [$d125], a call DisplayTextBoxID FuncCoord 13, 1 ; $c3c1 ld hl, Coord ld b, $1 ld c, $6 call ClearScreenArea FuncCoord 12, 1 ; $c3c0 ld hl, Coord ld de, wPlayerMoney ; $d347 ld c, $a3 call PrintBCDNumber ld hl, $d730 res 6, [hl] ret CurrencyString: ; 74e2 (1:74e2) db " ¥@" Func_74ea: ; 74ea (1:74ea) ld a, [$d730] set 6, a ld [$d730], a xor a ld [$d12d], a ld a, $e ld [$d125], a call DisplayTextBoxID ld a, $3 ld [wMenuWatchedKeys], a ; $cc29 ld a, $2 ld [wMaxMenuItem], a ; $cc28 ld a, $1 ld [wTopMenuItemY], a ; $cc24 ld a, $1 ld [wTopMenuItemX], a ; $cc25 xor a ld [wCurrentMenuItem], a ; $cc26 ld [wLastMenuItem], a ; $cc2a ld [$cc37], a ld a, [$d730] res 6, a ld [$d730], a call HandleMenuInput call PlaceUnfilledArrowMenuCursor bit 0, a jr nz, .asm_7539 bit 1, a jr z, .asm_7539 ld a, $2 ld [$d12e], a jr .asm_754c .asm_7539 ld a, $1 ld [$d12e], a ld a, [wCurrentMenuItem] ; $cc26 ld [$d12d], a ld b, a ld a, [wMaxMenuItem] ; $cc28 cp b jr z, .asm_754c ret .asm_754c ld a, $2 ld [$d12e], a ld a, [wCurrentMenuItem] ; $cc26 ld [$d12d], a scf ret DisplayYesNoTextBox: ; 7559 (1:7559) push hl ld a, [$d730] set 6, a ld [$d730], a xor a ld [$d12d], a ld [$d12e], a ld a, $3 ld [wMenuWatchedKeys], a ; $cc29 ld a, $1 ld [wMaxMenuItem], a ; $cc28 ld a, b ld [wTopMenuItemY], a ; $cc24 ld a, c ld [wTopMenuItemX], a ; $cc25 xor a ld [wLastMenuItem], a ; $cc2a ld [$cc37], a push hl ld hl, $d12c bit 7, [hl] res 7, [hl] jr z, .asm_758d inc a .asm_758d ld [wCurrentMenuItem], a ; $cc26 pop hl push hl push hl call Func_763e ld a, [$d12c] ld hl, MenuStrings ; $7671 ld e, a ld d, $0 ld a, $5 .loop add hl, de dec a jr nz, .loop ld a, [hli] ld c, a ld a, [hli] ld b, a ld e, l ld d, h pop hl push de ld a, [$d12c] cp $5 jr nz, .asm_75b9 call Func_5ab3 jr .asm_75bc .asm_75b9 call TextBoxBorder .asm_75bc call UpdateSprites pop hl ld a, [hli] and a ld bc, $16 jr z, .asm_75ca ld bc, $2a .asm_75ca ld a, [hli] ld e, a ld a, [hli] ld d, a pop hl add hl, bc call PlaceString ld hl, $d730 res 6, [hl] ld a, [$d12c] cp $7 jr nz, .asm_7603 xor a ld [$d12c], a ld a, [wFlags_0xcd60] push af push hl ld hl, wFlags_0xcd60 bit 5, [hl] set 5, [hl] pop hl .asm_75f0 call HandleMenuInput bit 1, a jr nz, .asm_75f0 pop af pop hl ld [wFlags_0xcd60], a ld a, (SFX_02_40 - SFX_Headers_02) / 3 call PlaySound jr .asm_760f .asm_7603 xor a ld [$d12c], a call HandleMenuInput pop hl bit 1, a jr nz, .asm_7627 .asm_760f ld a, [wCurrentMenuItem] ; $cc26 ld [$d12d], a and a jr nz, .asm_7627 ld a, $1 ld [$d12e], a ld c, $f call DelayFrames call Func_7656 and a ret .asm_7627 ld a, $1 ld [wCurrentMenuItem], a ; $cc26 ld [$d12d], a ld a, $2 ld [$d12e], a ld c, $f call DelayFrames call Func_7656 scf ret Func_763e: ; 763e (1:763e) ld de, $cee9 ld bc, $506 .asm_7644 ld a, [hli] ld [de], a inc de dec c jr nz, .asm_7644 push bc ld bc, $e add hl, bc pop bc ld c, $6 dec b jr nz, .asm_7644 ret Func_7656: ; 7656 (1:7656) ld de, $cee9 ld bc, $506 .asm_765c ld a, [de] inc de ld [hli], a dec c jr nz, .asm_765c push bc ld bc, $e add hl, bc pop bc ld c, $6 dec b jr nz, .asm_765c call UpdateSprites ret MenuStrings: ; 7671 (1:7671) db 4,3,0 dw .YesNoMenu db 6,3,0 dw .NorthWestMenu db 6,3,0 dw .SouthEastMenu db 6,3,0 dw .YesNoMenu db 6,3,0 dw .NorthEastMenu db 7,3,0 dw .TradeCancelMenu db 7,4,1 dw .HealCancelMenu db 4,3,0 dw .NoYesMenu .NoYesMenu ; 7699 (1:3699) db "NO",$4E,"YES@" .YesNoMenu ; 76a0 (1:36a0) db "YES",$4E,"NO@" .NorthWestMenu ; 76a7 (1:36a7) db "NORTH",$4E,"WEST@" .SouthEastMenu ; 76b2 (1:36b2) db "SOUTH",$4E,"EAST@" .NorthEastMenu ; 76bd (1:36bd) db "NORTH",$4E,"EAST@" .TradeCancelMenu ; 76c8 (1:36c8) db "TRADE",$4E,"CANCEL@" .HealCancelMenu ; 76d5 (1:36d5) db "HEAL",$4E,"CANCEL@" Func_76e1: ; 76e1 (1:36e1) xor a ld hl, wWhichTrade ; $cd3d ld [hli], a ld [hli], a ld [hli], a ld [hli], a ld [hli], a ld [hl], $c call GetMonFieldMoves ld a, [$cd41] and a jr nz, .asm_770f FuncCoord 11, 11 ; $c487 ld hl, Coord ld b, $5 ld c, $7 call TextBoxBorder call UpdateSprites ld a, $c ld [$fff7], a FuncCoord 13, 12 ; $c49d ld hl, Coord ld de, PokemonMenuEntries ; $77c2 jp PlaceString .asm_770f push af FuncCoord 0, 11 ; $c47c ld hl, Coord ld a, [$cd42] dec a ld e, a ld d, $0 add hl, de ld b, $5 ld a, $12 sub e ld c, a pop af ld de, $ffd8 .asm_7725 add hl, de inc b inc b dec a jr nz, .asm_7725 ld de, $ffec add hl, de inc b call TextBoxBorder call UpdateSprites FuncCoord 0, 12 ; $c490 ld hl, Coord ld a, [$cd42] inc a ld e, a ld d, $0 add hl, de ld de, $ffd8 ld a, [$cd41] .asm_7747 add hl, de dec a jr nz, .asm_7747 xor a ld [$cd41], a ld de, wWhichTrade ; $cd3d .asm_7752 push hl ld hl, FieldMoveNames ; $778d ld a, [de] and a jr z, .asm_7776 inc de ld b, a .asm_775c dec b jr z, .asm_7766 .asm_775f ld a, [hli] cp $50 jr nz, .asm_775f jr .asm_775c .asm_7766 ld b, h ld c, l pop hl push de ld d, b ld e, c call PlaceString ld bc, $28 add hl, bc pop de jr .asm_7752 .asm_7776 pop hl ld a, [$cd42] ld [$fff7], a FuncCoord 0, 12 ; $c490 ld hl, Coord ld a, [$cd42] inc a ld e, a ld d, $0 add hl, de ld de, PokemonMenuEntries ; $77c2 jp PlaceString FieldMoveNames: ; 778d (1:778d) db "CUT@" db "FLY@" db "@" db "SURF@" db "STRENGTH@" db "FLASH@" db "DIG@" db "TELEPORT@" db "SOFTBOILED@" PokemonMenuEntries: ; 77c2 (1:77c2) db "STATS" next "SWITCH" next "CANCEL@" GetMonFieldMoves: ; 77d6 (1:77d6) ld a, [wWhichPokemon] ; $cf92 ld hl, W_PARTYMON1_MOVE1 ; $d173 ld bc, $2c call AddNTimes ld d, h ld e, l ld c, $5 ld hl, wWhichTrade ; $cd3d .asm_77e9 push hl .asm_77ea dec c jr z, .asm_7821 ld a, [de] ; de is RAM address of move and a jr z, .asm_7821 ld b, a inc de ; go to next move ld hl, FieldMoveDisplayData ; $7823 .asm_77f6 ld a, [hli] cp $ff jr z, .asm_77ea cp b jr z, .asm_7802 inc hl inc hl jr .asm_77f6 .asm_7802 ld a, b ld [$cd43], a ld a, [hli] ld b, [hl] pop hl ld [hli], a ld a, [$cd41] inc a ld [$cd41], a ld a, [$cd42] cp b jr c, .asm_781b ld a, b ld [$cd42], a .asm_781b ld a, [$cd43] ld b, a jr .asm_77e9 .asm_7821 pop hl ret ; Format: [Move id], [list priority], [leftmost tile] ; Move id = id of move ; List priority = lower number means higher priority when field moves are displayed ; these priorities must be unique ; Leftmost tile = -1 + tile column in which the first letter of the move's name should be displayed ; "SOFTBOILED" is $08 because it has 4 more letters than "SURF", for example, whose value is $0C FieldMoveDisplayData: ; 7823 (1:7823) db CUT, $01, $0C db FLY, $02, $0C db $B4, $03, $0C ; unused field move db SURF, $04, $0C db STRENGTH, $05, $0A db FLASH, $06, $0C db DIG, $07, $0C db TELEPORT, $08, $0A db SOFTBOILED, $09, $08 db $ff ; list terminator INCLUDE "engine/battle/1.asm" INCLUDE "engine/menu/players_pc.asm" _RemovePokemon: ; 7b68 (1:7b68) ld hl, W_NUMINPARTY ; $d163 ld a, [$cf95] and a jr z, .asm_7b74 ld hl, W_NUMINBOX ; $da80 .asm_7b74 ld a, [hl] dec a ld [hli], a ld a, [wWhichPokemon] ; $cf92 ld c, a ld b, $0 add hl, bc ld e, l ld d, h inc de .asm_7b81 ld a, [de] inc de ld [hli], a inc a jr nz, .asm_7b81 ld hl, W_PARTYMON1OT ; $d273 ld d, $5 ld a, [$cf95] and a jr z, .asm_7b97 ld hl, W_BOXMON1OT ld d, $13 .asm_7b97 ld a, [wWhichPokemon] ; $cf92 call SkipFixedLengthTextEntries ld a, [wWhichPokemon] ; $cf92 cp d jr nz, .asm_7ba6 ld [hl], $ff ret .asm_7ba6 ld d, h ld e, l ld bc, $b add hl, bc ld bc, W_PARTYMON1NAME ; $d2b5 ld a, [$cf95] and a jr z, .asm_7bb8 ld bc, W_BOXMON1NAME .asm_7bb8 call CopyDataUntil ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA) ld bc, $2c ld a, [$cf95] and a jr z, .asm_7bcd ld hl, W_BOXMON1DATA ld bc, $21 .asm_7bcd ld a, [wWhichPokemon] ; $cf92 call AddNTimes ld d, h ld e, l ld a, [$cf95] and a jr z, .asm_7be4 ld bc, $21 add hl, bc ld bc, W_BOXMON1OT jr .asm_7beb .asm_7be4 ld bc, $2c add hl, bc ld bc, W_PARTYMON1OT ; $d273 .asm_7beb call CopyDataUntil ld hl, W_PARTYMON1NAME ; $d2b5 ld a, [$cf95] and a jr z, .asm_7bfa ld hl, W_BOXMON1NAME .asm_7bfa ld bc, $b ld a, [wWhichPokemon] ; $cf92 call AddNTimes ld d, h ld e, l ld bc, $b add hl, bc ld bc, wPokedexOwned ; $d2f7 ld a, [$cf95] and a jr z, .asm_7c15 ld bc, $dee2 .asm_7c15 jp CopyDataUntil Func_7c18: ; 7c18 (1:7c18) ld hl, $d730 set 6, [hl] ld a, $3d call Predef ld hl, $d730 res 6, [hl] call ReloadMapData ld c, $a call DelayFrames ld a, $3a call Predef ld a, [$d11e] dec a ld c, a ld b, $1 ld hl, wPokedexSeen ld a, $10 call Predef ld a, $1 ld [$cc3c], a ret SECTION "bank3",ROMX,BANK[$3] _GetJoypadState:: ld a, [H_JOYPADSTATE] cp A_BUTTON + B_BUTTON + SELECT + START ; soft reset jp z, HandleJoypadResetButtons ld b, a ld a, [H_OLDPRESSEDBUTTONS] ld e, a xor b ld d, a and e ld [H_NEWLYRELEASEDBUTTONS], a ld a, d and b ld [H_NEWLYPRESSEDBUTTONS], a ld a, b ld [H_OLDPRESSEDBUTTONS], a ld a, [$d730] bit 5, a jr nz, DiscardButtonPresses ld a, [H_OLDPRESSEDBUTTONS] ld [H_CURRENTPRESSEDBUTTONS], a ld a, [wJoypadForbiddenButtonsMask] and a ret z cpl ld b, a ld a, [H_CURRENTPRESSEDBUTTONS] and b ld [H_CURRENTPRESSEDBUTTONS], a ld a, [H_NEWLYPRESSEDBUTTONS] and b ld [H_NEWLYPRESSEDBUTTONS], a ret ; clears all button presses DiscardButtonPresses: ; c034 (3:4034) xor a ld [H_CURRENTPRESSEDBUTTONS], a ld [H_NEWLYPRESSEDBUTTONS], a ld [H_NEWLYRELEASEDBUTTONS], a ret HandleJoypadResetButtons: ; c03c (3:403c) call DelayFrame ld a, $30 ld [rJOYP], a ; reset joypad state (to enusre the user really intends to reset) ld hl, H_SOFTRESETCOUNTER dec [hl] jp z, SoftReset jp GetJoypadState INCLUDE "data/map_songs.asm" INCLUDE "data/map_header_banks.asm" Func_c335: ; c335 (3:4335) ld a, $90 ld [$ffb0], a ld [rWY], a ; $ff4a xor a ld [H_AUTOBGTRANSFERENABLED], a ; $ffba ld [$d13b], a ld [W_LONEATTACKNO], a ; $d05c ld [H_NEWLYPRESSEDBUTTONS], a ld [H_NEWLYRELEASEDBUTTONS], a ld [H_CURRENTPRESSEDBUTTONS], a ld [$cd6a], a ld [$d5a3], a ld hl, $d73f ld [hli], a ld [hl], a ld hl, wWhichTrade ; $cd3d ld bc, $1e call FillMemory ret Func_c35f: ; c35f (3:435f) ld a, [$d3ae] and a ret z ld c, a ld hl, $d3af .asm_c368 ld a, [W_YCOORD] ; $d361 cp [hl] jr nz, .asm_c383 inc hl ld a, [W_XCOORD] ; $d362 cp [hl] jr nz, .asm_c384 inc hl ld a, [hli] ld [$d42f], a ld a, [hl] ld [H_DOWNARROWBLINKCNT1], a ; $ff8b ld hl, $d736 set 2, [hl] ret .asm_c383 inc hl .asm_c384 inc hl inc hl inc hl dec c jr nz, .asm_c368 ret CheckForceBikeOrSurf: ; c38b (3:438b) ld hl, $D732 bit 5, [hl] ret nz ld hl, ForcedBikeOrSurfMaps ld a, [W_YCOORD] ld b, a ld a, [W_XCOORD] ld c, a ld a, [W_CURMAP] ld d, a .loop ld a, [hli] cp $ff ret z ;if we reach FF then it's not part of the list cp d ;compare to current map jr nz, .incorrectMap ld a, [hli] cp b ;compare y-coord jr nz, .incorrectY ld a, [hli] cp c ;compare x-coord jr nz, .loop ; incorrect x-coord, check next item ld a, [W_CURMAP] cp SEAFOAM_ISLANDS_4 ld a, $2 ld [W_SEAFOAMISLANDS4CURSCRIPT], a jr z, .forceSurfing ld a, [W_CURMAP] cp SEAFOAM_ISLANDS_5 ld a, $2 ld [W_SEAFOAMISLANDS5CURSCRIPT], a jr z, .forceSurfing ;force bike riding ld hl, $d732 set 5, [hl] ld a, $1 ld [$d700], a ld [$d11a], a jp ForceBikeOrSurf .incorrectMap inc hl .incorrectY inc hl jr .loop .forceSurfing ld a, $2 ld [$d700], a ld [$d11a], a jp ForceBikeOrSurf INCLUDE "data/force_bike_surf.asm" Func_c3ff: ; c3ff (3:43ff) push hl push de push bc ld a, [$c109] srl a ld c, a ld b, $0 ld hl, PointerTable_c422 ; $4422 add hl, bc ld a, [hli] ld h, [hl] ld l, a ld a, [W_YCOORD] ; $d361 ld b, a ld a, [W_XCOORD] ; $d362 ld c, a ld de, .asm_c41e ; $441e push de jp [hl] .asm_c41e pop bc pop de pop hl ret PointerTable_c422: ; c422 (3:4422) dw .asm_c42a dw .asm_4434 dw .asm_443A dw .asm_4440 .asm_c42a ld a, [W_CURMAPHEIGHT] ; $d368 add a dec a cp b jr z, .setCarry jr .resetCarry .asm_4434 ld a, b and a jr z, .setCarry jr .resetCarry .asm_443A ld a, c and a jr z, .setCarry jr .resetCarry .asm_4440 ld a, [W_CURMAPWIDTH] ; $d369 add a dec a cp c jr z, .setCarry jr .resetCarry .resetCarry and a ret .setCarry scf ret Func_c44e: ; c44e (3:444e) push hl push de push bc call Func_c589 ld a, [W_CURMAP] ; $d35e cp SS_ANNE_5 jr z, .ssAnne5 ld a, [$c109] srl a ld c, a ld b, $0 ld hl, .pointerTable_c477 ; $4477 add hl, bc ld a, [hli] ld h, [hl] ld l, a ld a, [$cfc6] ld de, $1 call IsInArray .asm_c473 pop bc pop de pop hl ret .pointerTable_c477: ; c477 (3:4477) dw .arrayData_c47f dw .arrayData_c487 dw .arrayData_c48a dw .arrayData_c48d .arrayData_c47f db $01,$12,$17,$3D,$04,$18,$33,$FF .arrayData_c487 db $01,$5C,$FF .arrayData_c48a db $1A,$4B,$FF .arrayData_c48d db $0F,$4E,$FF .ssAnne5 ld a, [$cfc6] cp $15 jr nz, .asm_c49a scf jr .asm_c473 .asm_c49a and a jr .asm_c473 Func_c49d: ; c49d (3:449d) push hl push de push bc callba HandleDoors jr c, .asm_c4c8 ld a, [W_CURMAPTILESET] ; $d367 add a ld c, a ld b, $0 ld hl, WarpTileIDPointers ; $44cc add hl, bc ld a, [hli] ld h, [hl] ld l, a ld de, $1 FuncCoord 8, 9 ; $c45c ld a, [Coord] call IsInArray jr nc, .asm_c4c8 ld hl, $d736 res 2, [hl] .asm_c4c8 pop bc pop de pop hl ret INCLUDE "data/warp_tile_ids.asm" PrintSafariZoneSteps: ; c52f (3:452f) ld a, [W_CURMAP] ; $d35e cp SAFARI_ZONE_EAST ret c cp UNKNOWN_DUNGEON_2 ret nc ld hl, wTileMap ld b, $3 ld c, $7 call TextBoxBorder FuncCoord 1, 1 ; $c3b5 ld hl, Coord ld de, wSafariSteps ; $d70d ld bc, $203 call PrintNumber FuncCoord 4, 1 ; $c3b8 ld hl, Coord ld de, SafariSteps ; $4579 call PlaceString FuncCoord 1, 3 ; $c3dd ld hl, Coord ld de, SafariBallText call PlaceString ld a, [W_NUMSAFARIBALLS] ; $da47 cp $a jr nc, .asm_c56d FuncCoord 5, 3 ; $c3e1 ld hl, Coord ld a, $7f ld [hl], a .asm_c56d FuncCoord 6, 3 ; $c3e2 ld hl, Coord ld de, W_NUMSAFARIBALLS ; $da47 ld bc, $102 jp PrintNumber SafariSteps: ; c579 (3:4579) db "/500@" SafariBallText: ; c57e (3:457e) db "BALL×× @" Func_c586: ; c586 (3:4586) call GetPredefRegisters Func_c589: ; c589 (3:4589) ld a, [W_YCOORD] ; $d361 ld d, a ld a, [W_XCOORD] ; $d362 ld e, a ld a, [$c109] and a jr nz, .asm_c59d FuncCoord 8, 11 ; $c484 ld a, [Coord] inc d jr .asm_c5b9 .asm_c59d cp $4 jr nz, .asm_c5a7 FuncCoord 8, 7 ; $c434 ld a, [Coord] dec d jr .asm_c5b9 .asm_c5a7 cp $8 jr nz, .asm_c5b1 FuncCoord 6, 9 ; $c45a ld a, [Coord] dec e jr .asm_c5b9 .asm_c5b1 cp $c jr nz, .asm_c5b9 FuncCoord 10, 9 ; $c45e ld a, [Coord] inc e .asm_c5b9 ld c, a ld [$cfc6], a ret Func_c5be: ; c5be (3:45be) xor a ld [$ffdb], a ld hl, W_YCOORD ; $d361 ld a, [hli] ld d, a ld e, [hl] ld a, [$c109] and a jr nz, .asm_c5d8 ld hl, $ffdb set 0, [hl] FuncCoord 8, 13 ; $c4ac ld a, [Coord] inc d jr .asm_c603 .asm_c5d8 cp $4 jr nz, .asm_c5e7 ld hl, $ffdb set 1, [hl] FuncCoord 8, 5 ; $c40c ld a, [Coord] dec d jr .asm_c603 .asm_c5e7 cp $8 jr nz, .asm_c5f6 ld hl, $ffdb set 2, [hl] FuncCoord 4, 9 ; $c458 ld a, [Coord] dec e jr .asm_c603 .asm_c5f6 cp $c jr nz, .asm_c603 ld hl, $ffdb set 3, [hl] FuncCoord 12, 9 ; $c460 ld a, [Coord] inc e .asm_c603 ld c, a ld [$d71c], a ld [$cfc6], a ret Func_c60b: ; c60b (3:460b) call Func_c5be ld hl, $d530 ld a, [hli] ld h, [hl] ld l, a .asm_c614 ld a, [hli] cp $ff jr z, .asm_c632 cp c jr nz, .asm_c614 ld hl, $c7e call Func_c44 ld a, $ff jr c, .asm_c632 ld a, [$d71c] cp $15 ld a, $ff jr z, .asm_c632 call Func_c636 .asm_c632 ld [$d71c], a ret Func_c636: ; c636 (3:4636) ld a, [$d718] dec a swap a ld d, $0 ld e, a ld hl, $c214 add hl, de ld a, [hli] ld [$ffdc], a ld a, [hl] ld [$ffdd], a ld a, [W_NUMSPRITES] ; $d4e1 ld c, a ld de, $f ld hl, $c214 ld a, [$ffdb] and $3 jr z, .asm_c678 .asm_c659 inc hl ld a, [$ffdd] cp [hl] jr nz, .asm_c672 dec hl ld a, [hli] ld b, a ld a, [$ffdb] rrca jr c, .asm_c66c ld a, [$ffdc] dec a jr .asm_c66f .asm_c66c ld a, [$ffdc] inc a .asm_c66f cp b jr z, .asm_c697 .asm_c672 dec c jr z, .asm_c69a add hl, de jr .asm_c659 .asm_c678 ld a, [hli] ld b, a ld a, [$ffdc] cp b jr nz, .asm_c691 ld b, [hl] ld a, [$ffdb] bit 2, a jr nz, .asm_c68b ld a, [$ffdd] inc a jr .asm_c68e .asm_c68b ld a, [$ffdd] dec a .asm_c68e cp b jr z, .asm_c697 .asm_c691 dec c jr z, .asm_c69a add hl, de jr .asm_c678 .asm_c697 ld a, $ff ret .asm_c69a xor a ret Func_c69c: ; c69c (3:469c) ld a, [$d730] add a jp c, .asm_c74f ld a, [W_NUMINPARTY] ; $d163 and a jp z, .asm_c74f call Func_c8de ld a, [$d13b] and $3 jp nz, .asm_c74f ld [wWhichPokemon], a ; $cf92 ld hl, W_PARTYMON1_STATUS ; $d16f ld de, W_PARTYMON1 ; $d164 .asm_c6be ld a, [hl] and $8 jr z, .asm_c6fd dec hl dec hl ld a, [hld] ld b, a ld a, [hli] or b jr z, .asm_c6fb ld a, [hl] dec a ld [hld], a inc a jr nz, .asm_c6d5 dec [hl] inc hl jr .asm_c6fb .asm_c6d5 ld a, [hli] or [hl] jr nz, .asm_c6fb push hl inc hl inc hl ld [hl], a ld a, [de] ld [$d11e], a push de ld a, [wWhichPokemon] ; $cf92 ld hl, W_PARTYMON1NAME ; $d2b5 call GetPartyMonName xor a ld [wJoypadForbiddenButtonsMask], a call EnableAutoTextBoxDrawing ld a, $d0 ld [H_DOWNARROWBLINKCNT2], a ; $ff8c call DisplayTextID pop de pop hl .asm_c6fb inc hl inc hl .asm_c6fd inc de ld a, [de] inc a jr z, .asm_c70e ld bc, $2c add hl, bc push hl ld hl, wWhichPokemon ; $cf92 inc [hl] pop hl jr .asm_c6be .asm_c70e ld hl, W_PARTYMON1_STATUS ; $d16f ld a, [W_NUMINPARTY] ; $d163 ld d, a ld e, $0 .asm_c717 ld a, [hl] and $8 or e ld e, a ld bc, $2c add hl, bc dec d jr nz, .asm_c717 ld a, e and a jr z, .asm_c733 ld b, $2 ld a, $1f call Predef ; indirect jump to Func_480eb (480eb (12:40eb)) ld a, (SFX_02_43 - SFX_Headers_02) / 3 call PlaySound .asm_c733 ld a, $14 call Predef ; indirect jump to AnyPlayerPokemonAliveCheck (3ca83 (f:4a83)) ld a, d and a jr nz, .asm_c74f call EnableAutoTextBoxDrawing ld a, $d1 ld [H_DOWNARROWBLINKCNT2], a ; $ff8c call DisplayTextID ld hl, $d72e set 5, [hl] ld a, $ff jr .asm_c750 .asm_c74f xor a .asm_c750 ld [$d12d], a ret Func_c754: ; c754 (3:4754) call GetPredefRegisters push hl ld d, $0 ld a, [W_CURMAPTILESET] ; $d367 add a add a ld b, a add a add b jr nc, .asm_c765 inc d .asm_c765 ld e, a ld hl, Tilesets add hl, de ld de, $d52b ld c, $b .asm_c76f ld a, [hli] ld [de], a inc de dec c jr nz, .asm_c76f ld a, [hl] ld [$ffd7], a xor a ld [$ffd8], a pop hl ld a, [W_CURMAPTILESET] ; $d367 push hl push de ld hl, DungeonTilesets ; $47b2 ld de, $1 call IsInArray pop de pop hl jr c, .asm_c797 ld a, [W_CURMAPTILESET] ; $d367 ld b, a ld a, [H_DOWNARROWBLINKCNT1] ; $ff8b cp b jr z, .asm_c7b1 .asm_c797 ld a, [$d42f] cp $ff jr z, .asm_c7b1 call LoadDestinationWarpPosition ld a, [W_YCOORD] ; $d361 and $1 ld [W_YBLOCKCOORD], a ; $d363 ld a, [W_XCOORD] ; $d362 and $1 ld [W_XBLOCKCOORD], a ; $d364 .asm_c7b1 ret INCLUDE "data/dungeon_tilesets.asm" INCLUDE "data/tileset_headers.asm" Func_c8de: ; c8de (3:48de) ld a, [W_DAYCARE_IN_USE] and a ret z ld hl, $da6f inc [hl] ret nz dec hl inc [hl] ret nz dec hl inc [hl] ld a, [hl] cp $50 ret c ld a, $50 ld [hl], a ret INCLUDE "data/hide_show_data.asm" PrintUsedStrengthText: ; cd99 (3:4d99) ld hl, $d728 set 0, [hl] ld hl, UsedStrengthText call PrintText ld hl, CanMoveBouldersText jp PrintText UsedStrengthText: ; cdaa (3:4daa) TX_FAR _UsedStrengthText db $08 ; asm ld a, [$cf91] call PlayCry call Delay3 jp TextScriptEnd CanMoveBouldersText: ; cdbb (3:4dbb) TX_FAR _CanMoveBouldersText db "@" CheckForForcedBikeSurf: ; cdc0 (3:4dc0) ld hl, $d728 set 1, [hl] ld a, [$d732] bit 5, a jr nz, .asm_cdec ld a, [W_CURMAP] ; $d35e cp SEAFOAM_ISLANDS_5 ret nz ld a, [$d881] and $3 cp $3 ret z ld hl, CoordsData_cdf7 ; $4df7 call ArePlayerCoordsInArray ret nc ld hl, $d728 res 1, [hl] ld hl, CurrentTooFastText jp PrintText .asm_cdec ld hl, $d728 res 1, [hl] ld hl, CyclingIsFunText jp PrintText CoordsData_cdf7: ; cdf7 (3:4df7) db $0B,$07,$FF CurrentTooFastText: ; cdfa (3:4dfa) TX_FAR _CurrentTooFastText db "@" CyclingIsFunText: ; cdff (3:4dff) TX_FAR _CyclingIsFunText db "@" ; function to add an item (in varying quantities) to the player's bag or PC box ; INPUT: ; hl = address of inventory (either wNumBagItems or wNumBoxItems) ; [$CF91] = item ID ; [$CF96] = item quantity ; sets carry flag if successful, unsets carry flag if unsuccessful AddItemToInventory_: ; ce04 (3:4e04) ld a,[$cf96] ; a = item quantity push af push bc push de push hl push hl ld d,50 ; PC box can hold 50 items ld a,wNumBagItems & $FF cp l jr nz,.checkIfInventoryFull ld a,wNumBagItems >> 8 cp h jr nz,.checkIfInventoryFull ; if the destination is the bag ld d,20 ; bag can hold 20 items .checkIfInventoryFull ld a,[hl] sub d ld d,a ld a,[hli] and a jr z,.addNewItem .loop ld a,[hli] ld b,a ; b = ID of current item in table ld a,[$cf91] ; a = ID of item being added cp b ; does the current item in the table match the item being added? jp z,.increaseItemQuantity ; if so, increase the item's quantity inc hl ld a,[hl] cp a,$ff ; is it the end of the table? jr nz,.loop .addNewItem ; add an item not yet in the inventory pop hl ld a,d and a ; is there room for a new item slot? jr z,.done ; if there is room inc [hl] ; increment the number of items in the inventory ld a,[hl] ; the number of items will be the index of the new item add a dec a ld c,a ld b,0 add hl,bc ; hl = address to store the item ld a,[$cf91] ld [hli],a ; store item ID ld a,[$cf96] ld [hli],a ; store item quantity ld [hl],$ff ; store terminator jp .success .increaseItemQuantity ; increase the quantity of an item already in the inventory ld a,[$cf96] ld b,a ; b = quantity to add ld a,[hl] ; a = existing item quantity add b ; a = new item quantity cp a,100 jp c,.storeNewQuantity ; if the new quantity is less than 100, store it ; if the new quantity is greater than or equal to 100, ; try to max out the current slot and add the rest in a new slot sub a,99 ld [$cf96],a ; a = amount left over (to put in the new slot) ld a,d and a ; is there room for a new item slot? jr z,.increaseItemQuantityFailed ; if so, store 99 in the current slot and store the rest in a new slot ld a,99 ld [hli],a jp .loop .increaseItemQuantityFailed pop hl and a jr .done .storeNewQuantity ld [hl],a pop hl .success scf .done pop hl pop de pop bc pop bc ld a,b ld [$cf96],a ; restore the initial value from when the function was called ret ; function to remove an item (in varying quantities) from the player's bag or PC box ; INPUT: ; hl = address of inventory (either wNumBagItems or wNumBoxItems) ; [$CF92] = index (within the inventory) of the item to remove ; [$CF96] = quantity to remove RemoveItemFromInventory_: ; ce74 (3:4e74) push hl inc hl ld a,[wWhichPokemon] ; index (within the inventory) of the item being removed sla a add l ld l,a jr nc,.noCarry inc h .noCarry inc hl ld a,[$cf96] ; quantity being removed ld e,a ld a,[hl] ; a = current quantity sub e ld [hld],a ; store new quantity ld [$cf97],a and a jr nz,.skipMovingUpSlots ; if the remaining quantity is 0, ; remove the emptied item slot and move up all the following item slots .moveSlotsUp ld e,l ld d,h inc de inc de ; de = address of the slot following the emptied one .loop ; loop to move up the following slots ld a,[de] inc de ld [hli],a cp a,$ff jr nz,.loop ; update menu info xor a ld [wListScrollOffset],a ld [wCurrentMenuItem],a ld [$cc2c],a ld [$d07e],a pop hl ld a,[hl] ; a = number of items in inventory dec a ; decrement the number of items ld [hl],a ; store new number of items ld [$d12a],a cp a,2 jr c,.done ld [wMaxMenuItem],a jr .done .skipMovingUpSlots pop hl .done ret ; wild pokemon data: from 4EB8 to 55C7 LoadWildData: ; ceb8 (3:4eb8) ld hl,WildDataPointers ld a,[W_CURMAP] ; get wild data for current map ld c,a ld b,0 add hl,bc add hl,bc ld a,[hli] ld h,[hl] ld l,a ; hl now points to wild data for current map ld a,[hli] ld [W_GRASSRATE],a and a jr z,.NoGrassData ; if no grass data, skip to surfing data push hl ld de,W_GRASSMONS ; otherwise, load grass data ld bc,$0014 call CopyData pop hl ld bc,$0014 add hl,bc .NoGrassData ld a,[hli] ld [W_WATERRATE],a and a ret z ; if no water data, we're done ld de,W_WATERMONS ; otherwise, load surfing data ld bc,$0014 jp CopyData INCLUDE "data/wild_mons.asm" INCLUDE "engine/items/items.asm" DrawBadges: ; ea03 (3:6a03) ; Draw 4x2 gym leader faces, with the faces replaced by ; badges if they are owned. Used in the player status screen. ; In Japanese versions, names are displayed above faces. ; Instead of removing relevant code, the name graphics were erased. ; Tile ids for face/badge graphics. ld de, $cd3f ld hl, .FaceBadgeTiles ld bc, 8 call CopyData ; Booleans for each badge. ld hl, $cd49 ld bc, 8 xor a call FillMemory ; Alter these based on owned badges. ld de, $cd49 ld hl, $cd3f ld a, [W_OBTAINEDBADGES] ld b, a ld c, 8 .CheckBadge srl b jr nc, .NextBadge ld a, [hl] add 4 ; Badge graphics are after each face ld [hl], a ld a, 1 ld [de], a .NextBadge inc hl inc de dec c jr nz, .CheckBadge ; Draw two rows of badges. ld hl, $cd3d ld a, $d8 ; [1] ld [hli], a ld [hl], $60 ; First name FuncCoord 2, 11 ld hl, Coord ld de, $cd49 call .DrawBadgeRow FuncCoord 2, 14 ld hl, Coord ld de, $cd49 + 4 ; call .DrawBadgeRow ; ret .DrawBadgeRow ; ea4c (3:6a4c) ; Draw 4 badges. ld c, 4 .DrawBadge push de push hl ; Badge no. ld a, [$cd3d] ld [hli], a inc a ld [$cd3d], a ; Names aren't printed if the badge is owned. ld a, [de] and a ld a, [$cd3e] jr nz, .SkipName call .PlaceTiles jr .PlaceBadge .SkipName inc a inc a inc hl .PlaceBadge ld [$cd3e], a ld de, 20 - 1 add hl, de ld a, [$cd3f] call .PlaceTiles add hl, de call .PlaceTiles ; Shift badge array back one byte. push bc ld hl, $cd3f + 1 ld de, $cd3f ld bc, 8 call CopyData pop bc pop hl ld de, 4 add hl, de pop de inc de dec c jr nz, .DrawBadge ret .PlaceTiles ld [hli], a inc a ld [hl], a inc a ret .FaceBadgeTiles db $20, $28, $30, $38, $40, $48, $50, $58 GymLeaderFaceAndBadgeTileGraphics: ; ea9e (3:6a9e) INCBIN "gfx/badges.w16.2bpp" Func_ee9e: ; ee9e (3:6e9e) call GetPredefRegisters ld hl, $c6e8 ld a, [W_CURMAPWIDTH] ; $d369 add $6 ld e, a ld d, $0 add hl, de add hl, de add hl, de ld e, $3 add hl, de ld e, a ld a, b and a jr z, .asm_eebb .asm_eeb7 add hl, de dec b jr nz, .asm_eeb7 .asm_eebb add hl, bc ld a, [$d09f] ld [hl], a ld a, [$d35f] ld c, a ld a, [$d360] ld b, a call Func_ef4e ret c push hl ld l, e ld h, $0 ld e, $6 ld d, h add hl, hl add hl, hl add hl, de add hl, bc pop bc call Func_ef4e ret c Func_eedc: ; eedc (3:6edc) ld a, [W_ISINBATTLE] ; $d057 inc a ret z ld a, [H_AUTOBGTRANSFERENABLED] ; $ffba push af ld a, [$ffd7] push af xor a ld [H_AUTOBGTRANSFERENABLED], a ; $ffba ld [$ffd7], a call LoadCurrentMapView call GoPAL_SET_CF1C ld hl, $d526 ld a, [hli] ld h, [hl] ld l, a ld de, $ffc0 add hl, de ld a, h and $3 or $98 ld a, l ld [$cee9], a ld a, h ld [$ceea], a ld a, $2 ld [$ffbe], a ld c, $9 .asm_ef0f push bc push hl push hl ld hl, $c378 ld de, $14 ld a, [$ffbe] .asm_ef1a add hl, de dec a jr nz, .asm_ef1a call ScheduleRowRedrawHelper pop hl ld de, $20 ld a, [$ffbe] ld c, a .asm_ef28 add hl, de ld a, h and $3 or $98 dec c jr nz, .asm_ef28 ld [$ffd2], a ld a, l ld [H_SCREENEDGEREDRAWADDR], a ; $ffd1 ld a, $2 ld [H_SCREENEDGEREDRAW], a ; $ffd0 call DelayFrame ld hl, $ffbe inc [hl] inc [hl] pop hl pop bc dec c jr nz, .asm_ef0f pop af ld [$ffd7], a pop af ld [H_AUTOBGTRANSFERENABLED], a ; $ffba ret Func_ef4e: ; ef4e (3:6f4e) ld a, h sub b ret nz ld a, l sub c ret INCLUDE "engine/overworld/cut.asm" Func_f113: ; f113 (3:7113) ld a, [W_CURMAP] ; $d35e cp ROUTE_1 jr nc, .notInTown ld c, a ld b, $1 ld hl, W_TOWNVISITEDFLAG ; mark town as visited (for flying) ld a, $10 ; FlagActionPredef call Predef .notInTown ld hl, MapHSPointers ld a, [W_CURMAP] ; $d35e ld b, $0 ld c, a add hl, bc add hl, bc ld a, [hli] ; load missable objects pointer in hl ld h, [hl] Func_f132: ; f132 (3:7132) ld l, a push hl ld de, MapHS00 ; calculate difference between out pointer and the base pointer ld a, l sub e jr nc, .asm_f13c dec h .asm_f13c ld l, a ld a, h sub d ld h, a ld a, h ld [H_DIVIDEND], a ld a, l ld [H_DIVIDEND+1], a xor a ld [H_DIVIDEND+2], a ld [H_DIVIDEND+3], a ld a, $3 ld [H_DIVISOR], a ld b, $2 call Divide ; divide difference by 3, resulting in the global offset (number of missable items before ours) ld a, [W_CURMAP] ; $d35e ld b, a ld a, [H_DIVIDEND+3] ld c, a ; store global offset in c ld de, W_MISSABLEOBJECTLIST pop hl .writeMissableObjectsListLoop ld a, [hli] cp $ff jr z, .done ; end of list cp b jr nz, .done ; not for current map anymore ld a, [hli] inc hl ld [de], a ; write (map-local) sprite ID inc de ld a, c inc c ld [de], a ; write (global) missable object index inc de jr .writeMissableObjectsListLoop .done ld a, $ff ld [de], a ; write sentinel ret InitializeMissableObjectsFlags: ; f175 (3:7175) ld hl, W_MISSABLEOBJECTFLAGS ld bc, $20 xor a call FillMemory ; clear missable objects flags ld hl, MapHS00 xor a ld [$d048], a .missableObjectsLoop ld a, [hli] cp $ff ; end of list ret z push hl inc hl ld a, [hl] cp Hide jr nz, .asm_f19d ld hl, W_MISSABLEOBJECTFLAGS ld a, [$d048] ld c, a ld b, $1 call MissableObjectFlagAction ; set flag iff Item is hidden .asm_f19d ld hl, $d048 inc [hl] pop hl inc hl inc hl jr .missableObjectsLoop ; tests if current sprite is a missable object that is hidden/has been removed IsMissableObjectHidden: ; f1a6 (3:71a6) ld a, [H_CURRENTSPRITEOFFSET] swap a ld b, a ld hl, W_MISSABLEOBJECTLIST .loop ld a, [hli] cp $ff jr z, .notHidden ; not missable -> not hidden cp b ld a, [hli] jr nz, .loop ld c, a ld b, $2 ld hl, W_MISSABLEOBJECTFLAGS call MissableObjectFlagAction ld a, c and a jr nz, .hidden .notHidden xor a .hidden ld [$ffe5], a ret ; adds missable object (items, leg. pokemon, etc.) to the map ; [$cc4d]: index of the missable object to be added (global index) AddMissableObject: ; f1c8 (3:71c8) ld hl, W_MISSABLEOBJECTFLAGS ld a, [$cc4d] ld c, a ld b, $0 call MissableObjectFlagAction ; reset "removed" flag jp UpdateSprites ; removes missable object (items, leg. pokemon, etc.) from the map ; [$cc4d]: index of the missable object to be removed (global index) RemoveMissableObject: ; f1d7 (3:71d7) ld hl, W_MISSABLEOBJECTFLAGS ld a, [$cc4d] ld c, a ld b, $1 call MissableObjectFlagAction ; set "removed" flag jp UpdateSprites MissableObjectFlagAction: ; identical to FlagAction push hl push de push bc ; bit ld a, c ld d, a and 7 ld e, a ; byte ld a, d srl a srl a srl a add l ld l, a jr nc, .ok inc h .ok ; d = 1 << e (bitmask) inc e ld d, 1 .shift dec e jr z, .shifted sla d jr .shift .shifted ld a, b and a jr z, .reset cp 2 jr z, .read .set ld a, [hl] ld b, a ld a, d or b ld [hl], a jr .done .reset ld a, [hl] ld b, a ld a, d xor $ff and b ld [hl], a jr .done .read ld a, [hl] ld b, a ld a, d and b .done pop bc pop de pop hl ld c, a ret Func_f225: ; f225 (3:7225) ld a, [$d728] bit 0, a ret z ld a, [wFlags_0xcd60] bit 1, a ret nz xor a ld [H_DOWNARROWBLINKCNT2], a ; $ff8c call IsSpriteInFrontOfPlayer ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c ld [$d718], a and a jp z, Func_f2dd ld hl, $c101 ld d, $0 ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c swap a ld e, a add hl, de res 7, [hl] call GetSpriteMovementByte2Pointer ld a, [hl] cp $10 jp nz, Func_f2dd ld hl, wFlags_0xcd60 bit 6, [hl] set 6, [hl] ret z ld a, [H_CURRENTPRESSEDBUTTONS] and $f0 ret z ld a, $5a call Predef ; indirect jump to Func_c60b (c60b (3:460b)) ld a, [$d71c] and a jp nz, Func_f2dd ld a, [H_CURRENTPRESSEDBUTTONS] ld b, a ld a, [$c109] cp $4 jr z, .asm_f289 cp $8 jr z, .asm_f291 cp $c jr z, .asm_f299 bit 7, b ret z ld de, MovementData_f2af jr .asm_f29f .asm_f289 bit 6, b ret z ld de, MovementData_f2ad jr .asm_f29f .asm_f291 bit 5, b ret z ld de, MovementData_f2b1 jr .asm_f29f .asm_f299 bit 4, b ret z ld de, MovementData_f2b3 .asm_f29f call MoveSprite ld a, (SFX_02_53 - SFX_Headers_02) / 3 call PlaySound ld hl, wFlags_0xcd60 set 1, [hl] ret MovementData_f2ad: ; f2ad (3:72ad) db $40,$FF MovementData_f2af: ; f2af (3:72af) db $00,$FF MovementData_f2b1: ; f2b1 (3:72b1) db $80,$FF MovementData_f2b3: ; f2b3 (3:72b3) db $C0,$FF Func_f2b5: ; f2b5 (3:72b5) ld a, [$d730] bit 0, a ret nz callab Func_79f54 call DiscardButtonPresses ld [wJoypadForbiddenButtonsMask], a call Func_f2dd set 7, [hl] ld a, [$d718] ld [H_DOWNARROWBLINKCNT2], a ; $ff8c call GetSpriteMovementByte2Pointer ld [hl], $10 ld a, (SFX_02_56 - SFX_Headers_02) / 3 jp PlaySound Func_f2dd: ; f2dd (3:72dd) ld hl, wFlags_0xcd60 res 1, [hl] res 6, [hl] ret _AddPokemonToParty: ; f2e5 (3:72e5) ld de, W_NUMINPARTY ; $d163 ld a, [$cc49] and $f jr z, .asm_f2f2 ld de, wEnemyPartyCount ; $d89c .asm_f2f2 ld a, [de] inc a cp $7 ret nc ld [de], a ld a, [de] ld [$ffe4], a add e ld e, a jr nc, .asm_f300 inc d .asm_f300 ld a, [$cf91] ld [de], a inc de ld a, $ff ld [de], a ld hl, W_PARTYMON1OT ; $d273 ld a, [$cc49] and $f jr z, .asm_f315 ld hl, W_ENEMYMON1OT .asm_f315 ld a, [$ffe4] dec a call SkipFixedLengthTextEntries ld d, h ld e, l ld hl, W_PLAYERNAME ; $d158 ld bc, $b call CopyData ld a, [$cc49] and a jr nz, .asm_f33f ld hl, W_PARTYMON1NAME ; $d2b5 ld a, [$ffe4] dec a call SkipFixedLengthTextEntries ld a, $2 ld [$d07d], a ld a, $4e call Predef ; indirect jump to Func_64eb (64eb (1:64eb)) .asm_f33f ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA) ld a, [$cc49] and $f jr z, .asm_f34c ld hl, wEnemyMons ; $d8a4 .asm_f34c ld a, [$ffe4] dec a ld bc, $2c call AddNTimes ld e, l ld d, h push hl ld a, [$cf91] ld [$d0b5], a call GetMonHeader ld hl, W_MONHEADER ld a, [hli] ld [de], a inc de pop hl push hl ld a, [$cc49] and $f ld a, $98 ; set enemy trainer mon IVs to fixed average values ld b, $88 jr nz, .writeFreshMonData ld a, [$cf91] ld [$d11e], a push de ld a, $3a call Predef ; indirect jump to IndexToPokedex (41010 (10:5010)) pop de ld a, [$d11e] dec a ld c, a ld b, $2 ld hl, wPokedexOwned ; $d2f7 call FlagAction ld a, c ld [$d153], a ld a, [$d11e] dec a ld c, a ld b, $1 push bc call FlagAction pop bc ld hl, wPokedexSeen ; $d30a call FlagAction pop hl push hl ld a, [W_ISINBATTLE] ; $d057 and a jr nz, .copyEnemyMonData call Random ; generate random IVs ld b, a call Random .writeFreshMonData ; f3b3 push bc ld bc, $1b add hl, bc pop bc ld [hli], a ld [hl], b ; write IVs ld bc, $fff4 add hl, bc ld a, $1 ld c, a xor a ld b, a call CalcStat ; calc HP stat (set cur Hp to max HP) ld a, [H_MULTIPLICAND+1] ld [de], a inc de ld a, [H_MULTIPLICAND+2] ld [de], a inc de xor a ld [de], a ; level (?) inc de ld [de], a ; status ailments inc de jr .copyMonTypesAndMoves .copyEnemyMonData ld bc, $1b add hl, bc ld a, [W_ENEMYMONATKDEFIV] ; copy IVs from cur enemy mon ld [hli], a ld a, [W_ENEMYMONSPDSPCIV] ld [hl], a ld a, [W_ENEMYMONCURHP] ; copy HP from cur enemy mon ld [de], a inc de ld a, [W_ENEMYMONCURHP+1] ld [de], a inc de xor a ld [de], a ; level (?) inc de ld a, [W_ENEMYMONSTATUS] ; copy status ailments from cur enemy mon ld [de], a inc de .copyMonTypesAndMoves ld hl, W_MONHTYPES ld a, [hli] ; type 1 ld [de], a inc de ld a, [hli] ; type 2 ld [de], a inc de ld a, [hli] ; unused (?) ld [de], a ld hl, W_MONHMOVES ld a, [hli] inc de push de ld [de], a ld a, [hli] inc de ld [de], a ld a, [hli] inc de ld [de], a ld a, [hli] inc de ld [de], a push de dec de dec de dec de xor a ld [$cee9], a ld a, $3e call Predef ; indirect jump to WriteMonMoves (3afb8 (e:6fb8)) pop de ld a, [wPlayerID] ; set trainer ID to player ID inc de ld [de], a ld a, [wPlayerID + 1] inc de ld [de], a push de ld a, [W_CURENEMYLVL] ld d, a callab CalcExperience pop de inc de ld a, [H_MULTIPLICAND] ; write experience ld [de], a inc de ld a, [H_MULTIPLICAND+1] ld [de], a inc de ld a, [H_MULTIPLICAND+2] ld [de], a xor a ld b, $a .writeEVsLoop ; set all EVs to 0 inc de ld [de], a dec b jr nz, .writeEVsLoop inc de inc de pop hl call AddPokemonToParty_WriteMovePP inc de ld a, [W_CURENEMYLVL] ; $d127 ld [de], a inc de ld a, [W_ISINBATTLE] ; $d057 dec a jr nz, .calcFreshStats ld hl, W_ENEMYMONMAXHP ; $cff4 ld bc, $a call CopyData ; copy stats of cur enemy mon pop hl jr .done .calcFreshStats pop hl ld bc, $10 add hl, bc ld b, $0 call CalcStats ; calculate fresh set of stats .done scf ret LoadMovePPs: ; f473 (3:7473) call GetPredefRegisters ; fallthrough AddPokemonToParty_WriteMovePP: ; f476 (3:7476) ld b, $4 .pploop ld a, [hli] ; read move ID and a jr z, .empty dec a push hl push de push bc ld hl, Moves ld bc, $6 call AddNTimes ld de, $cd6d ld a, BANK(Moves) call FarCopyData pop bc pop de pop hl ld a, [$cd72] ; sixth move byte = pp .empty inc de ld [de], a dec b jr nz, .pploop ; there are still moves to read ret ; adds enemy mon [$cf91] (at position [$cf92] in enemy list) to own party ; used in the cable club trade center _AddEnemyMonToPlayerParty: ; f49d (3:749d) ld hl, W_NUMINPARTY ld a, [hl] cp $6 scf ret z ; party full, return failure inc a ld [hl], a ; add 1 to party members ld c, a ld b, $0 add hl, bc ld a, [$cf91] ld [hli], a ; add mon as last list entry ld [hl], $ff ; write new sentinel ld hl, W_PARTYMON1DATA ld a, [W_NUMINPARTY] dec a ld bc, W_PARTYMON2DATA - W_PARTYMON1DATA call AddNTimes ld e, l ld d, h ld hl, $cf98 call CopyData ; write new mon's data (from $cf98) ld hl, W_PARTYMON1OT ld a, [W_NUMINPARTY] dec a call SkipFixedLengthTextEntries ld d, h ld e, l ld hl, W_ENEMYMON1OT ld a, [wWhichPokemon] call SkipFixedLengthTextEntries ld bc, $000b call CopyData ; write new mon's OT name (from an enemy mon) ld hl, W_PARTYMON1NAME ld a, [W_NUMINPARTY] dec a call SkipFixedLengthTextEntries ld d, h ld e, l ld hl, W_ENEMYMON1NAME ld a, [wWhichPokemon] call SkipFixedLengthTextEntries ld bc, $000b call CopyData ; write new mon's nickname (from an enemy mon) ld a, [$cf91] ld [$d11e], a ld a, $3a call Predef ld a, [$d11e] dec a ld c, a ld b, $1 ld hl, wPokedexOwned push bc call FlagAction ; add to owned pokemon pop bc ld hl, wPokedexSeen call FlagAction ; add to seen pokemon and a ret ; return success Func_f51e: ; f51e (3:751e) ld a, [$cf95] and a jr z, .checkPartyMonSlots cp $2 jr z, .checkPartyMonSlots cp $3 ld hl, W_DAYCAREMONDATA jr z, .asm_f575 ld hl, W_NUMINBOX ; $da80 ld a, [hl] cp $14 jr nz, .partyOrBoxNotFull jr .boxFull .checkPartyMonSlots ld hl, W_NUMINPARTY ; $d163 ld a, [hl] cp $6 jr nz, .partyOrBoxNotFull .boxFull scf ret .partyOrBoxNotFull inc a ld [hl], a ; increment number of mons in party/box ld c, a ld b, $0 add hl, bc ld a, [$cf95] cp $2 ld a, [W_DAYCAREMONDATA] jr z, .asm_f556 ld a, [$cf91] .asm_f556 ld [hli], a ; write new mon ID ld [hl], $ff ; write new sentinel ld a, [$cf95] dec a ld hl, W_PARTYMON1DATA ; $d16b ld bc, W_PARTYMON2DATA - W_PARTYMON1DATA ; $2c ld a, [W_NUMINPARTY] ; $d163 jr nz, .skipToNewMonEntry ld hl, W_BOXMON1DATA ld bc, W_BOXMON2DATA - W_BOXMON1DATA ; $21 ld a, [W_NUMINBOX] ; $da80 .skipToNewMonEntry dec a call AddNTimes .asm_f575 push hl ld e, l ld d, h ld a, [$cf95] and a ld hl, W_BOXMON1DATA ld bc, W_BOXMON2DATA - W_BOXMON1DATA ; $21 jr z, .asm_f591 cp $2 ld hl, W_DAYCAREMONDATA jr z, .asm_f597 ld hl, W_PARTYMON1DATA ; $d16b ld bc, W_PARTYMON2DATA - W_PARTYMON1DATA ; $2c .asm_f591 ld a, [wWhichPokemon] ; $cf92 call AddNTimes .asm_f597 push hl push de ld bc, $21 call CopyData pop de pop hl ld a, [$cf95] and a jr z, .asm_f5b4 cp $2 jr z, .asm_f5b4 ld bc, $21 add hl, bc ld a, [hl] inc de inc de inc de ld [de], a .asm_f5b4 ld a, [$cf95] cp $3 ld de, W_DAYCAREMONOT jr z, .asm_f5d3 dec a ld hl, W_PARTYMON1OT ; $d273 ld a, [W_NUMINPARTY] ; $d163 jr nz, .asm_f5cd ld hl, W_BOXMON1OT ld a, [W_NUMINBOX] ; $da80 .asm_f5cd dec a call SkipFixedLengthTextEntries ld d, h ld e, l .asm_f5d3 ld hl, W_BOXMON1OT ld a, [$cf95] and a jr z, .asm_f5e6 ld hl, W_DAYCAREMONOT cp $2 jr z, .asm_f5ec ld hl, W_PARTYMON1OT ; $d273 .asm_f5e6 ld a, [wWhichPokemon] ; $cf92 call SkipFixedLengthTextEntries .asm_f5ec ld bc, $b call CopyData ld a, [$cf95] cp $3 ld de, W_DAYCAREMONNAME jr z, .asm_f611 dec a ld hl, W_PARTYMON1NAME ; $d2b5 ld a, [W_NUMINPARTY] ; $d163 jr nz, .asm_f60b ld hl, W_BOXMON1NAME ld a, [W_NUMINBOX] ; $da80 .asm_f60b dec a call SkipFixedLengthTextEntries ld d, h ld e, l .asm_f611 ld hl, W_BOXMON1NAME ld a, [$cf95] and a jr z, .asm_f624 ld hl, W_DAYCAREMONNAME cp $2 jr z, .asm_f62a ld hl, W_PARTYMON1NAME ; $d2b5 .asm_f624 ld a, [wWhichPokemon] ; $cf92 call SkipFixedLengthTextEntries .asm_f62a ld bc, $b call CopyData pop hl ld a, [$cf95] cp $1 jr z, .asm_f664 cp $3 jr z, .asm_f664 push hl srl a add $2 ld [$cc49], a call LoadMonData callba Func_58f43 ld a, d ld [W_CURENEMYLVL], a ; $d127 pop hl ld bc, $21 add hl, bc ld [hli], a ld d, h ld e, l ld bc, $ffee add hl, bc ld b, $1 call CalcStats .asm_f664 and a ret FlagActionPredef: call GetPredefRegisters FlagAction: ; Perform action b on bit c ; in the bitfield at hl. ; 0: reset ; 1: set ; 2: read ; Return the result in c. push hl push de push bc ; bit ld a, c ld d, a and 7 ld e, a ; byte ld a, d srl a srl a srl a add l ld l, a jr nc, .ok inc h .ok ; d = 1 << e (bitmask) inc e ld d, 1 .shift dec e jr z, .shifted sla d jr .shift .shifted ld a, b and a jr z, .reset cp 2 jr z, .read .set ld b, [hl] ld a, d or b ld [hl], a jr .done .reset ld b, [hl] ld a, d xor $ff and b ld [hl], a jr .done .read ld b, [hl] ld a, d and b .done pop bc pop de pop hl ld c, a ret HealParty: ; Restore HP and PP. ld hl, W_PARTYMON1 ld de, W_PARTYMON1_HP .healmon ld a, [hli] cp $ff jr z, .done push hl push de ld hl, $0003 ; status add hl, de xor a ld [hl], a push de ld b, $4 ; A Pokémon has 4 moves .pp ld hl, $0007 ; moves add hl, de ld a, [hl] and a jr z, .nextmove dec a ld hl, $001c ; pp add hl, de push hl push de push bc ld hl, Moves ld bc, $0006 call AddNTimes ld de, $cd6d ld a, BANK(Moves) call FarCopyData ld a, [$cd72] ; default pp pop bc pop de pop hl inc de push bc ld b, a ld a, [hl] and $c0 add b ld [hl], a pop bc .nextmove dec b jr nz, .pp pop de ld hl, $0021 ; max hp - cur hp add hl, de ld a, [hli] ld [de], a inc de ld a, [hl] ld [de], a pop de pop hl push hl ld bc, $002c ; next mon ld h, d ld l, e add hl, bc ld d, h ld e, l pop hl jr .healmon .done xor a ld [wWhichPokemon], a ld [$d11e], a ld a, [W_NUMINPARTY] ld b, a .ppup push bc call RestoreBonusPP pop bc ld hl, wWhichPokemon inc [hl] dec b jr nz, .ppup ret ; predef $9 ; predef $a ; predef $d ; predef $e Func_f71e: ; f71e (3:771e) call GetPredefRegisters xor a ld [$ffa5], a ld [$ffa6], a ld [$ffa7], a ld d, $1 .asm_f72a ld a, [$ffa2] and $f0 jr nz, .asm_f75b inc d ld a, [$ffa2] swap a and $f0 ld b, a ld a, [$ffa3] swap a ld [$ffa3], a and $f or b ld [$ffa2], a ld a, [$ffa3] and $f0 ld b, a ld a, [$ffa4] swap a ld [$ffa4], a and $f or b ld [$ffa3], a ld a, [$ffa4] and $f0 ld [$ffa4], a jr .asm_f72a .asm_f75b push de push de call Func_f800 pop de ld a, b swap a and $f0 ld [$ffa5], a dec d jr z, .asm_f7bc push de call Func_f7d7 call Func_f800 pop de ld a, [$ffa5] or b ld [$ffa5], a dec d jr z, .asm_f7bc push de call Func_f7d7 call Func_f800 pop de ld a, b swap a and $f0 ld [$ffa6], a dec d jr z, .asm_f7bc push de call Func_f7d7 call Func_f800 pop de ld a, [$ffa6] or b ld [$ffa6], a dec d jr z, .asm_f7bc push de call Func_f7d7 call Func_f800 pop de ld a, b swap a and $f0 ld [$ffa7], a dec d jr z, .asm_f7bc push de call Func_f7d7 call Func_f800 pop de ld a, [$ffa7] or b ld [$ffa7], a .asm_f7bc ld a, [$ffa5] ld [$ffa2], a ld a, [$ffa6] ld [$ffa3], a ld a, [$ffa7] ld [$ffa4], a pop de ld a, $6 sub d and a ret z .asm_f7ce push af call Func_f7d7 pop af dec a jr nz, .asm_f7ce ret Func_f7d7: ; f7d7 (3:77d7) ld a, [$ffa4] swap a and $f ld b, a ld a, [$ffa3] swap a ld [$ffa3], a and $f0 or b ld [$ffa4], a ld a, [$ffa3] and $f ld b, a ld a, [$ffa2] swap a ld [$ffa2], a and $f0 or b ld [$ffa3], a ld a, [$ffa2] and $f ld [$ffa2], a ret Func_f800: ; f800 (3:7800) ld bc, $3 .asm_f803 ld de, $ff9f ld hl, $ffa2 push bc call StringCmp pop bc ret c inc b ld de, $ffa1 ld hl, $ffa4 push bc call Func_f839 pop bc jr .asm_f803 Func_f81d: ; f81d (3:781d) call GetPredefRegisters and a ld b, c .asm_f822 ld a, [de] adc [hl] daa ld [de], a dec de dec hl dec c jr nz, .asm_f822 jr nc, .asm_f835 ld a, $99 inc de .asm_f830 ld [de], a inc de dec b jr nz, .asm_f830 .asm_f835 ret Func_f836: ; f836 (3:7836) call GetPredefRegisters Func_f839: ; f839 (3:7839) and a ld b, c .asm_f83b ld a, [de] sbc [hl] daa ld [de], a dec de dec hl dec c jr nz, .asm_f83b jr nc, .asm_f84f ld a, $0 inc de .asm_f849 ld [de], a inc de dec b jr nz, .asm_f849 scf .asm_f84f ret InitializePlayerData: call Random ld a, [hRandomSub] ld [wPlayerID], a call Random ld a, [hRandomAdd] ld [wPlayerID + 1], a ld a, $ff ld [$d71b], a ; XXX what's this? ld hl, W_NUMINPARTY call InitializeEmptyList ld hl, W_NUMINBOX call InitializeEmptyList ld hl, wNumBagItems call InitializeEmptyList ld hl, wNumBoxItems call InitializeEmptyList START_MONEY EQU $3000 ld hl, wPlayerMoney + 1 ld a, START_MONEY / $100 ld [hld], a xor a ld [hli], a inc hl ld [hl], a ld [$cc49], a ld hl, W_OBTAINEDBADGES ld [hli], a ld [hl], a ld hl, wPlayerCoins ld [hli], a ld [hl], a ld hl, W_GAMEPROGRESSFLAGS ld bc, $c8 call FillMemory ; clear all game progress flags jp InitializeMissableObjectsFlags InitializeEmptyList: xor a ; count ld [hli], a dec a ; terminator ld [hl], a ret IsItemInBag_: ; f8a5 (3:78a5) call GetPredefRegisters ld hl, wNumBagItems ; $d31d .asm_f8ab inc hl ld a, [hli] cp $ff jr z, .asm_f8b7 cp b jr nz, .asm_f8ab ld a, [hl] ld b, a ret .asm_f8b7 ld b, $0 ret Func_f8ba: ; f8ba (3:78ba) xor a ld hl, $ff97 ld [hli], a ld [hli], a ld [hli], a ld [hl], a ld hl, $cc97 ld de, $0 Func_f8c8: ; f8c8 (3:78c8) ld a, [H_REMAINDER] ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld b, a ld a, [H_DIVIDEND] ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) call CalcDifference ld d, a and a jr nz, .asm_f8da ld a, [$ff98] set 0, a ld [$ff98], a .asm_f8da ld a, [$ff9a] ld b, a ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND) call CalcDifference ld e, a and a jr nz, .asm_f8ec ld a, [$ff98] set 1, a ld [$ff98], a .asm_f8ec ld a, [$ff98] cp $3 jr z, .asm_f926 ld a, e cp d jr c, .asm_f90a ld a, [$ff9d] bit 1, a jr nz, .asm_f900 ld d, $c0 jr .asm_f902 .asm_f900 ld d, $80 .asm_f902 ld a, [$ff9a] add $1 ld [$ff9a], a jr .asm_f91c .asm_f90a ld a, [$ff9d] bit 0, a jr nz, .asm_f914 ld d, $0 jr .asm_f916 .asm_f914 ld d, $40 .asm_f916 ld a, [H_REMAINDER] ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) add $1 ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) .asm_f91c ld a, d ld [hli], a ld a, [$ff97] inc a ld [$ff97], a jp Func_f8c8 .asm_f926 ld [hl], $ff ret Func_f929: ; f929 (3:7929) xor a ld [$ff9d], a ld a, [$c104] ld d, a ld a, [$c106] ld e, a ld hl, wSpriteStateData1 ld a, [H_DIVIDEND] ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) add l add $4 ld l, a jr nc, .asm_f940 inc h .asm_f940 ld a, d ld b, a ld a, [hli] call CalcDifference jr nc, .asm_f953 push hl ld hl, $ff9d bit 0, [hl] set 0, [hl] pop hl jr .asm_f95c .asm_f953 push hl ld hl, $ff9d bit 0, [hl] res 0, [hl] pop hl .asm_f95c push hl ld hl, $ffe5 ld [hli], a ld a, $10 ld [hli], a call Func_366b ld a, [hl] ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) pop hl inc hl ld b, e ld a, [hl] call CalcDifference jr nc, .asm_f97e push hl ld hl, $ff9d bit 1, [hl] set 1, [hl] pop hl jr .asm_f987 .asm_f97e push hl ld hl, $ff9d bit 1, [hl] res 1, [hl] pop hl .asm_f987 ld [$ffe5], a ld a, $10 ld [$ffe6], a call Func_366b ld a, [$ffe7] ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND) ld a, [$ff9b] and a ret z ld a, [$ff9d] cpl and $3 ld [$ff9d], a ret Func_f9a0: ; f9a0 (3:79a0) ld a, [$ff95] ld [$cd37], a dec a ld de, $ccd3 ld hl, $cc97 add l ld l, a jr nc, .asm_f9b1 inc h .asm_f9b1 ld a, [hld] call Func_f9bf ld [de], a inc de ld a, [$ff95] dec a ld [$ff95], a jr nz, .asm_f9b1 ret Func_f9bf: ; f9bf (3:79bf) push hl ld b, a ld hl, DataTable_f9d2 .asm_f9c4 ld a, [hli] cp $ff jr z, .asm_f9d0 cp b jr z, .asm_f9cf inc hl jr .asm_f9c4 .asm_f9cf ld a, [hl] .asm_f9d0 pop hl ret DataTable_f9d2: ; f9d2 (3:79d2) db $40, $40, $00, $80, $80, $20, $c0, $10, $ff Func_f9db: ; f9db (3:79db) ret INCLUDE "engine/hp_bar.asm" INCLUDE "engine/hidden_object_functions3.asm" SECTION "bank4",ROMX,BANK[$4] OakAideSprite: INCBIN "gfx/sprites/oak_aide.2bpp" RockerSprite: INCBIN "gfx/sprites/rocker.2bpp" SwimmerSprite: INCBIN "gfx/sprites/swimmer.2bpp" WhitePlayerSprite: INCBIN "gfx/sprites/white_player.2bpp" GymHelperSprite: INCBIN "gfx/sprites/gym_helper.2bpp" OldPersonSprite: INCBIN "gfx/sprites/old_person.2bpp" MartGuySprite: INCBIN "gfx/sprites/mart_guy.2bpp" FisherSprite: INCBIN "gfx/sprites/fisher.2bpp" OldMediumWomanSprite: INCBIN "gfx/sprites/old_medium_woman.2bpp" NurseSprite: INCBIN "gfx/sprites/nurse.2bpp" CableClubWomanSprite: INCBIN "gfx/sprites/cable_club_woman.2bpp" MrMasterballSprite: INCBIN "gfx/sprites/mr_masterball.2bpp" LaprasGiverSprite: INCBIN "gfx/sprites/lapras_giver.2bpp" WardenSprite: INCBIN "gfx/sprites/warden.2bpp" SsCaptainSprite: INCBIN "gfx/sprites/ss_captain.2bpp" Fisher2Sprite: INCBIN "gfx/sprites/fisher2.2bpp" BlackbeltSprite: INCBIN "gfx/sprites/blackbelt.2bpp" GuardSprite: INCBIN "gfx/sprites/guard.2bpp" BallSprite: INCBIN "gfx/sprites/ball.2bpp" OmanyteSprite: INCBIN "gfx/sprites/omanyte.2bpp" BoulderSprite: INCBIN "gfx/sprites/boulder.2bpp" PaperSheetSprite: INCBIN "gfx/sprites/paper_sheet.2bpp" BookMapDexSprite: INCBIN "gfx/sprites/book_map_dex.2bpp" ClipboardSprite: INCBIN "gfx/sprites/clipboard.2bpp" SnorlaxSprite: INCBIN "gfx/sprites/snorlax.2bpp" OldAmberSprite: INCBIN "gfx/sprites/old_amber.2bpp" LyingOldManSprite: INCBIN "gfx/sprites/lying_old_man.2bpp" PokemonLogoGraphics: INCBIN "gfx/pokemon_logo.w128.2bpp" FontGraphics: INCBIN "gfx/font.w128.1bpp" ABTiles: INCBIN "gfx/AB.2bpp" HpBarAndStatusGraphics: INCBIN "gfx/hp_bar_and_status.2bpp" BattleHudTiles1: INCBIN "gfx/battle_hud1.1bpp" BattleHudTiles2: INCBIN "gfx/battle_hud2.1bpp" BattleHudTiles3: INCBIN "gfx/battle_hud3.1bpp" NintendoCopyrightLogoGraphics: INCBIN "gfx/copyright.h8.2bpp" GamefreakLogoGraphics: INCBIN "gfx/gamefreak.h8.2bpp" TextBoxGraphics: INCBIN "gfx/text_box.2bpp" PokedexTileGraphics: INCBIN "gfx/pokedex.2bpp" WorldMapTileGraphics: INCBIN "gfx/town_map.2bpp" PlayerCharacterTitleGraphics: INCBIN "gfx/player_title.2bpp" INCLUDE "engine/battle/4.asm" INCLUDE "engine/menu/status_screen.asm" INCLUDE "engine/menu/party_menu.asm" RedPicFront:: INCBIN "pic/trainer/red.pic" ShrinkPic1:: INCBIN "pic/trainer/shrink1.pic" ShrinkPic2:: INCBIN "pic/trainer/shrink2.pic" INCLUDE "engine/turn_sprite.asm" INCLUDE "engine/menu/start_sub_menus.asm" INCLUDE "engine/items/tms.asm" INCLUDE "engine/battle/4_2.asm" INCLUDE "engine/random.asm" SECTION "bank5",ROMX,BANK[$5] RedCyclingSprite: INCBIN "gfx/sprites/cycling.2bpp" RedSprite: INCBIN "gfx/sprites/red.2bpp" BlueSprite: INCBIN "gfx/sprites/blue.2bpp" OakSprite: INCBIN "gfx/sprites/oak.2bpp" BugCatcherSprite: INCBIN "gfx/sprites/bug_catcher.2bpp" SlowbroSprite: INCBIN "gfx/sprites/slowbro.2bpp" LassSprite: INCBIN "gfx/sprites/lass.2bpp" BlackHairBoy1Sprite: INCBIN "gfx/sprites/black_hair_boy_1.2bpp" LittleGirlSprite: INCBIN "gfx/sprites/little_girl.2bpp" BirdSprite: INCBIN "gfx/sprites/bird.2bpp" FatBaldGuySprite: INCBIN "gfx/sprites/fat_bald_guy.2bpp" GamblerSprite: INCBIN "gfx/sprites/gambler.2bpp" BlackHairBoy2Sprite: INCBIN "gfx/sprites/black_hair_boy_2.2bpp" GirlSprite: INCBIN "gfx/sprites/girl.2bpp" HikerSprite: INCBIN "gfx/sprites/hiker.2bpp" FoulardWomanSprite: INCBIN "gfx/sprites/foulard_woman.2bpp" GentlemanSprite: INCBIN "gfx/sprites/gentleman.2bpp" DaisySprite: INCBIN "gfx/sprites/daisy.2bpp" BikerSprite: INCBIN "gfx/sprites/biker.2bpp" SailorSprite: INCBIN "gfx/sprites/sailor.2bpp" CookSprite: INCBIN "gfx/sprites/cook.2bpp" BikeShopGuySprite: INCBIN "gfx/sprites/bike_shop_guy.2bpp" MrFujiSprite: INCBIN "gfx/sprites/mr_fuji.2bpp" GiovanniSprite: INCBIN "gfx/sprites/giovanni.2bpp" RocketSprite: INCBIN "gfx/sprites/rocket.2bpp" MediumSprite: INCBIN "gfx/sprites/medium.2bpp" WaiterSprite: INCBIN "gfx/sprites/waiter.2bpp" ErikaSprite: INCBIN "gfx/sprites/erika.2bpp" MomGeishaSprite: INCBIN "gfx/sprites/mom_geisha.2bpp" BrunetteGirlSprite: INCBIN "gfx/sprites/brunette_girl.2bpp" LanceSprite: INCBIN "gfx/sprites/lance.2bpp" MomSprite: INCBIN "gfx/sprites/mom.2bpp" BaldingGuySprite: INCBIN "gfx/sprites/balding_guy.2bpp" YoungBoySprite: INCBIN "gfx/sprites/young_boy.2bpp" GameboyKidSprite: INCBIN "gfx/sprites/gameboy_kid.2bpp" ClefairySprite: INCBIN "gfx/sprites/clefairy.2bpp" AgathaSprite: INCBIN "gfx/sprites/agatha.2bpp" BrunoSprite: INCBIN "gfx/sprites/bruno.2bpp" LoreleiSprite: INCBIN "gfx/sprites/lorelei.2bpp" SeelSprite: INCBIN "gfx/sprites/seel.2bpp" INCLUDE "engine/load_pokedex_tiles.asm" INCLUDE "engine/overworld/map_sprites.asm" INCLUDE "engine/overworld/emotion_bubbles.asm" INCLUDE "engine/evolve_trade.asm" INCLUDE "engine/battle/5.asm" INCLUDE "engine/menu/pc.asm" SECTION "bank6",ROMX,BANK[$6] INCLUDE "data/mapHeaders/celadoncity.asm" INCLUDE "data/mapObjects/celadoncity.asm" CeladonCityBlocks: INCBIN "maps/celadoncity.blk" INCLUDE "data/mapHeaders/pallettown.asm" INCLUDE "data/mapObjects/pallettown.asm" PalletTownBlocks: INCBIN "maps/pallettown.blk" INCLUDE "data/mapHeaders/viridiancity.asm" INCLUDE "data/mapObjects/viridiancity.asm" ViridianCityBlocks: INCBIN "maps/viridiancity.blk" INCLUDE "data/mapHeaders/pewtercity.asm" INCLUDE "data/mapObjects/pewtercity.asm" PewterCityBlocks: INCBIN "maps/pewtercity.blk" INCLUDE "data/mapHeaders/ceruleancity.asm" INCLUDE "data/mapObjects/ceruleancity.asm" CeruleanCityBlocks: INCBIN "maps/ceruleancity.blk" INCLUDE "data/mapHeaders/vermilioncity.asm" INCLUDE "data/mapObjects/vermilioncity.asm" VermilionCityBlocks: INCBIN "maps/vermilioncity.blk" INCLUDE "data/mapHeaders/fuchsiacity.asm" INCLUDE "data/mapObjects/fuchsiacity.asm" FuchsiaCityBlocks: INCBIN "maps/fuchsiacity.blk" INCLUDE "engine/play_time.asm" INCLUDE "scripts/pallettown.asm" INCLUDE "scripts/viridiancity.asm" INCLUDE "scripts/pewtercity.asm" INCLUDE "scripts/ceruleancity.asm" INCLUDE "scripts/vermilioncity.asm" INCLUDE "scripts/celadoncity.asm" INCLUDE "scripts/fuchsiacity.asm" INCLUDE "data/mapHeaders/blueshouse.asm" INCLUDE "scripts/blueshouse.asm" INCLUDE "data/mapObjects/blueshouse.asm" BluesHouseBlocks: INCBIN "maps/blueshouse.blk" INCLUDE "data/mapHeaders/vermilionhouse3.asm" INCLUDE "scripts/vermilionhouse3.asm" INCLUDE "data/mapObjects/vermilionhouse3.asm" VermilionHouse3Blocks: INCBIN "maps/vermilionhouse3.blk" INCLUDE "data/mapHeaders/indigoplateaulobby.asm" INCLUDE "scripts/indigoplateaulobby.asm" INCLUDE "data/mapObjects/indigoplateaulobby.asm" IndigoPlateauLobbyBlocks: INCBIN "maps/indigoplateaulobby.blk" INCLUDE "data/mapHeaders/silphco4.asm" INCLUDE "scripts/silphco4.asm" INCLUDE "data/mapObjects/silphco4.asm" SilphCo4Blocks: INCBIN "maps/silphco4.blk" INCLUDE "data/mapHeaders/silphco5.asm" INCLUDE "scripts/silphco5.asm" INCLUDE "data/mapObjects/silphco5.asm" SilphCo5Blocks: INCBIN "maps/silphco5.blk" INCLUDE "data/mapHeaders/silphco6.asm" INCLUDE "scripts/silphco6.asm" INCLUDE "data/mapObjects/silphco6.asm" SilphCo6Blocks: INCBIN "maps/silphco6.blk" INCLUDE "engine/overworld/npc_movement.asm" INCLUDE "engine/overworld/doors.asm" INCLUDE "engine/overworld/ledges.asm" SECTION "bank7",ROMX,BANK[$7] INCLUDE "data/mapHeaders/cinnabarisland.asm" INCLUDE "data/mapObjects/cinnabarisland.asm" CinnabarIslandBlocks: INCBIN "maps/cinnabarisland.blk" INCLUDE "data/mapHeaders/route1.asm" INCLUDE "data/mapObjects/route1.asm" Route1Blocks: INCBIN "maps/route1.blk" UndergroundPathEntranceRoute8Blocks: INCBIN "maps/undergroundpathentranceroute8.blk" OaksLabBlocks: INCBIN "maps/oakslab.blk" Route16HouseBlocks: Route2HouseBlocks: SaffronHouse1Blocks: SaffronHouse2Blocks: VermilionHouse1Blocks: NameRaterBlocks: LavenderHouse1Blocks: LavenderHouse2Blocks: CeruleanHouse1Blocks: PewterHouse1Blocks: PewterHouse2Blocks: ViridianHouseBlocks: INCBIN "maps/viridianhouse.blk" CeladonMansion5Blocks: SchoolBlocks: INCBIN "maps/school.blk" CeruleanHouseTrashedBlocks: INCBIN "maps/ceruleanhousetrashed.blk" DiglettsCaveEntranceRoute11Blocks: DiglettsCaveRoute2Blocks: INCBIN "maps/diglettscaveroute2.blk" INCLUDE "text/monster_names.asm" INCLUDE "engine/clear_save.asm" INCLUDE "engine/predefs7.asm" INCLUDE "scripts/cinnabarisland.asm" INCLUDE "scripts/route1.asm" INCLUDE "data/mapHeaders/oakslab.asm" INCLUDE "scripts/oakslab.asm" INCLUDE "data/mapObjects/oakslab.asm" INCLUDE "data/mapHeaders/viridianmart.asm" INCLUDE "scripts/viridianmart.asm" INCLUDE "data/mapObjects/viridianmart.asm" ViridianMartBlocks: INCBIN "maps/viridianmart.blk" INCLUDE "data/mapHeaders/school.asm" INCLUDE "scripts/school.asm" INCLUDE "data/mapObjects/school.asm" INCLUDE "data/mapHeaders/viridianhouse.asm" INCLUDE "scripts/viridianhouse.asm" INCLUDE "data/mapObjects/viridianhouse.asm" INCLUDE "data/mapHeaders/pewterhouse1.asm" INCLUDE "scripts/pewterhouse1.asm" INCLUDE "data/mapObjects/pewterhouse1.asm" INCLUDE "data/mapHeaders/pewterhouse2.asm" INCLUDE "scripts/pewterhouse2.asm" INCLUDE "data/mapObjects/pewterhouse2.asm" INCLUDE "data/mapHeaders/ceruleanhousetrashed.asm" INCLUDE "scripts/ceruleanhousetrashed.asm" INCLUDE "data/mapObjects/ceruleanhousetrashed.asm" INCLUDE "data/mapHeaders/ceruleanhouse1.asm" INCLUDE "scripts/ceruleanhouse1.asm" INCLUDE "data/mapObjects/ceruleanhouse1.asm" INCLUDE "data/mapHeaders/bikeshop.asm" INCLUDE "scripts/bikeshop.asm" INCLUDE "data/mapObjects/bikeshop.asm" BikeShopBlocks: INCBIN "maps/bikeshop.blk" INCLUDE "data/mapHeaders/lavenderhouse1.asm" INCLUDE "scripts/lavenderhouse1.asm" INCLUDE "data/mapObjects/lavenderhouse1.asm" INCLUDE "data/mapHeaders/lavenderhouse2.asm" INCLUDE "scripts/lavenderhouse2.asm" INCLUDE "data/mapObjects/lavenderhouse2.asm" INCLUDE "data/mapHeaders/namerater.asm" INCLUDE "scripts/namerater.asm" INCLUDE "data/mapObjects/namerater.asm" INCLUDE "data/mapHeaders/vermilionhouse1.asm" INCLUDE "scripts/vermilionhouse1.asm" INCLUDE "data/mapObjects/vermilionhouse1.asm" INCLUDE "data/mapHeaders/vermiliondock.asm" INCLUDE "scripts/vermiliondock.asm" INCLUDE "data/mapObjects/vermiliondock.asm" VermilionDockBlocks: INCBIN "maps/vermiliondock.blk" INCLUDE "data/mapHeaders/celadonmansion5.asm" INCLUDE "scripts/celadonmansion5.asm" INCLUDE "data/mapObjects/celadonmansion5.asm" INCLUDE "data/mapHeaders/fuchsiamart.asm" INCLUDE "scripts/fuchsiamart.asm" INCLUDE "data/mapObjects/fuchsiamart.asm" FuchsiaMartBlocks: INCBIN "maps/fuchsiamart.blk" INCLUDE "data/mapHeaders/saffronhouse1.asm" INCLUDE "scripts/saffronhouse1.asm" INCLUDE "data/mapObjects/saffronhouse1.asm" INCLUDE "data/mapHeaders/saffronhouse2.asm" INCLUDE "scripts/saffronhouse2.asm" INCLUDE "data/mapObjects/saffronhouse2.asm" INCLUDE "data/mapHeaders/diglettscaveroute2.asm" INCLUDE "scripts/diglettscaveroute2.asm" INCLUDE "data/mapObjects/diglettscaveroute2.asm" INCLUDE "data/mapHeaders/route2house.asm" INCLUDE "scripts/route2house.asm" INCLUDE "data/mapObjects/route2house.asm" INCLUDE "data/mapHeaders/route5gate.asm" INCLUDE "scripts/route5gate.asm" INCLUDE "data/mapObjects/route5gate.asm" Route5GateBlocks: INCBIN "maps/route5gate.blk" INCLUDE "data/mapHeaders/route6gate.asm" INCLUDE "scripts/route6gate.asm" INCLUDE "data/mapObjects/route6gate.asm" Route6GateBlocks: INCBIN "maps/route6gate.blk" INCLUDE "data/mapHeaders/route7gate.asm" INCLUDE "scripts/route7gate.asm" INCLUDE "data/mapObjects/route7gate.asm" Route7GateBlocks: INCBIN "maps/route7gate.blk" INCLUDE "data/mapHeaders/route8gate.asm" INCLUDE "scripts/route8gate.asm" INCLUDE "data/mapObjects/route8gate.asm" Route8GateBlocks: INCBIN "maps/route8gate.blk" INCLUDE "data/mapHeaders/undergroundpathentranceroute8.asm" INCLUDE "scripts/undergroundpathentranceroute8.asm" INCLUDE "data/mapObjects/undergroundpathentranceroute8.asm" INCLUDE "data/mapHeaders/powerplant.asm" INCLUDE "scripts/powerplant.asm" INCLUDE "data/mapObjects/powerplant.asm" PowerPlantBlocks: INCBIN "maps/powerplant.blk" INCLUDE "data/mapHeaders/diglettscaveroute11.asm" INCLUDE "scripts/diglettscaveroute11.asm" INCLUDE "data/mapObjects/diglettscaveroute11.asm" INCLUDE "data/mapHeaders/route16house.asm" INCLUDE "scripts/route16house.asm" INCLUDE "data/mapObjects/route16house.asm" INCLUDE "data/mapHeaders/route22gate.asm" INCLUDE "scripts/route22gate.asm" INCLUDE "data/mapObjects/route22gate.asm" Route22GateBlocks: INCBIN "maps/route22gate.blk" INCLUDE "data/mapHeaders/billshouse.asm" INCLUDE "scripts/billshouse.asm" INCLUDE "data/mapObjects/billshouse.asm" BillsHouseBlocks: INCBIN "maps/billshouse.blk" INCLUDE "engine/menu/oaks_pc.asm" INCLUDE "engine/hidden_object_functions7.asm" SECTION "bank9",ROMX,BANK[$9] RhydonPicFront:: INCBIN "pic/bmon/rhydon.pic" RhydonPicBack:: INCBIN "pic/monback/rhydonb.pic" KangaskhanPicFront:: INCBIN "pic/bmon/kangaskhan.pic" KangaskhanPicBack:: INCBIN "pic/monback/kangaskhanb.pic" NidoranMPicFront:: INCBIN "pic/bmon/nidoranm.pic" NidoranMPicBack:: INCBIN "pic/monback/nidoranmb.pic" ClefairyPicFront:: INCBIN "pic/bmon/clefairy.pic" ClefairyPicBack:: INCBIN "pic/monback/clefairyb.pic" SpearowPicFront:: INCBIN "pic/bmon/spearow.pic" SpearowPicBack:: INCBIN "pic/monback/spearowb.pic" VoltorbPicFront:: INCBIN "pic/bmon/voltorb.pic" VoltorbPicBack:: INCBIN "pic/monback/voltorbb.pic" NidokingPicFront:: INCBIN "pic/bmon/nidoking.pic" NidokingPicBack:: INCBIN "pic/monback/nidokingb.pic" SlowbroPicFront:: INCBIN "pic/bmon/slowbro.pic" SlowbroPicBack:: INCBIN "pic/monback/slowbrob.pic" IvysaurPicFront:: INCBIN "pic/bmon/ivysaur.pic" IvysaurPicBack:: INCBIN "pic/monback/ivysaurb.pic" ExeggutorPicFront:: INCBIN "pic/bmon/exeggutor.pic" ExeggutorPicBack:: INCBIN "pic/monback/exeggutorb.pic" LickitungPicFront:: INCBIN "pic/bmon/lickitung.pic" LickitungPicBack:: INCBIN "pic/monback/lickitungb.pic" ExeggcutePicFront:: INCBIN "pic/bmon/exeggcute.pic" ExeggcutePicBack:: INCBIN "pic/monback/exeggcuteb.pic" GrimerPicFront:: INCBIN "pic/bmon/grimer.pic" GrimerPicBack:: INCBIN "pic/monback/grimerb.pic" GengarPicFront:: INCBIN "pic/bmon/gengar.pic" GengarPicBack:: INCBIN "pic/monback/gengarb.pic" NidoranFPicFront:: INCBIN "pic/bmon/nidoranf.pic" NidoranFPicBack:: INCBIN "pic/monback/nidoranfb.pic" NidoqueenPicFront:: INCBIN "pic/bmon/nidoqueen.pic" NidoqueenPicBack:: INCBIN "pic/monback/nidoqueenb.pic" CubonePicFront:: INCBIN "pic/bmon/cubone.pic" CubonePicBack:: INCBIN "pic/monback/cuboneb.pic" RhyhornPicFront:: INCBIN "pic/bmon/rhyhorn.pic" RhyhornPicBack:: INCBIN "pic/monback/rhyhornb.pic" LaprasPicFront:: INCBIN "pic/bmon/lapras.pic" LaprasPicBack:: INCBIN "pic/monback/laprasb.pic" ArcaninePicFront:: INCBIN "pic/bmon/arcanine.pic" ArcaninePicBack:: INCBIN "pic/monback/arcanineb.pic" GyaradosPicFront:: INCBIN "pic/bmon/gyarados.pic" GyaradosPicBack:: INCBIN "pic/monback/gyaradosb.pic" ShellderPicFront:: INCBIN "pic/bmon/shellder.pic" ShellderPicBack:: INCBIN "pic/monback/shellderb.pic" TentacoolPicFront:: INCBIN "pic/bmon/tentacool.pic" TentacoolPicBack:: INCBIN "pic/monback/tentacoolb.pic" GastlyPicFront:: INCBIN "pic/bmon/gastly.pic" GastlyPicBack:: INCBIN "pic/monback/gastlyb.pic" ScytherPicFront:: INCBIN "pic/bmon/scyther.pic" ScytherPicBack:: INCBIN "pic/monback/scytherb.pic" StaryuPicFront:: INCBIN "pic/bmon/staryu.pic" StaryuPicBack:: INCBIN "pic/monback/staryub.pic" BlastoisePicFront:: INCBIN "pic/bmon/blastoise.pic" BlastoisePicBack:: INCBIN "pic/monback/blastoiseb.pic" PinsirPicFront:: INCBIN "pic/bmon/pinsir.pic" PinsirPicBack:: INCBIN "pic/monback/pinsirb.pic" TangelaPicFront:: INCBIN "pic/bmon/tangela.pic" TangelaPicBack:: INCBIN "pic/monback/tangelab.pic" INCLUDE "engine/battle/9.asm" SECTION "bankA",ROMX,BANK[$A] GrowlithePicFront:: INCBIN "pic/bmon/growlithe.pic" GrowlithePicBack:: INCBIN "pic/monback/growlitheb.pic" OnixPicFront:: INCBIN "pic/bmon/onix.pic" OnixPicBack:: INCBIN "pic/monback/onixb.pic" FearowPicFront:: INCBIN "pic/bmon/fearow.pic" FearowPicBack:: INCBIN "pic/monback/fearowb.pic" PidgeyPicFront:: INCBIN "pic/bmon/pidgey.pic" PidgeyPicBack:: INCBIN "pic/monback/pidgeyb.pic" SlowpokePicFront:: INCBIN "pic/bmon/slowpoke.pic" SlowpokePicBack:: INCBIN "pic/monback/slowpokeb.pic" KadabraPicFront:: INCBIN "pic/bmon/kadabra.pic" KadabraPicBack:: INCBIN "pic/monback/kadabrab.pic" GravelerPicFront:: INCBIN "pic/bmon/graveler.pic" GravelerPicBack:: INCBIN "pic/monback/gravelerb.pic" ChanseyPicFront:: INCBIN "pic/bmon/chansey.pic" ChanseyPicBack:: INCBIN "pic/monback/chanseyb.pic" MachokePicFront:: INCBIN "pic/bmon/machoke.pic" MachokePicBack:: INCBIN "pic/monback/machokeb.pic" MrMimePicFront:: INCBIN "pic/bmon/mr.mime.pic" MrMimePicBack:: INCBIN "pic/monback/mr.mimeb.pic" HitmonleePicFront:: INCBIN "pic/bmon/hitmonlee.pic" HitmonleePicBack:: INCBIN "pic/monback/hitmonleeb.pic" HitmonchanPicFront:: INCBIN "pic/bmon/hitmonchan.pic" HitmonchanPicBack:: INCBIN "pic/monback/hitmonchanb.pic" ArbokPicFront:: INCBIN "pic/bmon/arbok.pic" ArbokPicBack:: INCBIN "pic/monback/arbokb.pic" ParasectPicFront:: INCBIN "pic/bmon/parasect.pic" ParasectPicBack:: INCBIN "pic/monback/parasectb.pic" PsyduckPicFront:: INCBIN "pic/bmon/psyduck.pic" PsyduckPicBack:: INCBIN "pic/monback/psyduckb.pic" DrowzeePicFront:: INCBIN "pic/bmon/drowzee.pic" DrowzeePicBack:: INCBIN "pic/monback/drowzeeb.pic" GolemPicFront:: INCBIN "pic/bmon/golem.pic" GolemPicBack:: INCBIN "pic/monback/golemb.pic" MagmarPicFront:: INCBIN "pic/bmon/magmar.pic" MagmarPicBack:: INCBIN "pic/monback/magmarb.pic" ElectabuzzPicFront:: INCBIN "pic/bmon/electabuzz.pic" ElectabuzzPicBack:: INCBIN "pic/monback/electabuzzb.pic" MagnetonPicFront:: INCBIN "pic/bmon/magneton.pic" MagnetonPicBack:: INCBIN "pic/monback/magnetonb.pic" KoffingPicFront:: INCBIN "pic/bmon/koffing.pic" KoffingPicBack:: INCBIN "pic/monback/koffingb.pic" MankeyPicFront:: INCBIN "pic/bmon/mankey.pic" MankeyPicBack:: INCBIN "pic/monback/mankeyb.pic" SeelPicFront:: INCBIN "pic/bmon/seel.pic" SeelPicBack:: INCBIN "pic/monback/seelb.pic" DiglettPicFront:: INCBIN "pic/bmon/diglett.pic" DiglettPicBack:: INCBIN "pic/monback/diglettb.pic" TaurosPicFront:: INCBIN "pic/bmon/tauros.pic" TaurosPicBack:: INCBIN "pic/monback/taurosb.pic" FarfetchdPicFront:: INCBIN "pic/bmon/farfetchd.pic" FarfetchdPicBack:: INCBIN "pic/monback/farfetchdb.pic" VenonatPicFront:: INCBIN "pic/bmon/venonat.pic" VenonatPicBack:: INCBIN "pic/monback/venonatb.pic" DragonitePicFront:: INCBIN "pic/bmon/dragonite.pic" DragonitePicBack:: INCBIN "pic/monback/dragoniteb.pic" DoduoPicFront:: INCBIN "pic/bmon/doduo.pic" DoduoPicBack:: INCBIN "pic/monback/doduob.pic" PoliwagPicFront:: INCBIN "pic/bmon/poliwag.pic" PoliwagPicBack:: INCBIN "pic/monback/poliwagb.pic" JynxPicFront:: INCBIN "pic/bmon/jynx.pic" JynxPicBack:: INCBIN "pic/monback/jynxb.pic" MoltresPicFront:: INCBIN "pic/bmon/moltres.pic" MoltresPicBack:: INCBIN "pic/monback/moltresb.pic" INCLUDE "engine/battle/a.asm" SECTION "bankB",ROMX,BANK[$B] ArticunoPicFront:: INCBIN "pic/bmon/articuno.pic" ArticunoPicBack:: INCBIN "pic/monback/articunob.pic" ZapdosPicFront:: INCBIN "pic/bmon/zapdos.pic" ZapdosPicBack:: INCBIN "pic/monback/zapdosb.pic" DittoPicFront:: INCBIN "pic/bmon/ditto.pic" DittoPicBack:: INCBIN "pic/monback/dittob.pic" MeowthPicFront:: INCBIN "pic/bmon/meowth.pic" MeowthPicBack:: INCBIN "pic/monback/meowthb.pic" KrabbyPicFront:: INCBIN "pic/bmon/krabby.pic" KrabbyPicBack:: INCBIN "pic/monback/krabbyb.pic" VulpixPicFront:: INCBIN "pic/bmon/vulpix.pic" VulpixPicBack:: INCBIN "pic/monback/vulpixb.pic" NinetalesPicFront:: INCBIN "pic/bmon/ninetales.pic" NinetalesPicBack:: INCBIN "pic/monback/ninetalesb.pic" PikachuPicFront:: INCBIN "pic/bmon/pikachu.pic" PikachuPicBack:: INCBIN "pic/monback/pikachub.pic" RaichuPicFront:: INCBIN "pic/bmon/raichu.pic" RaichuPicBack:: INCBIN "pic/monback/raichub.pic" DratiniPicFront:: INCBIN "pic/bmon/dratini.pic" DratiniPicBack:: INCBIN "pic/monback/dratinib.pic" DragonairPicFront:: INCBIN "pic/bmon/dragonair.pic" DragonairPicBack:: INCBIN "pic/monback/dragonairb.pic" KabutoPicFront:: INCBIN "pic/bmon/kabuto.pic" KabutoPicBack:: INCBIN "pic/monback/kabutob.pic" KabutopsPicFront:: INCBIN "pic/bmon/kabutops.pic" KabutopsPicBack:: INCBIN "pic/monback/kabutopsb.pic" HorseaPicFront:: INCBIN "pic/bmon/horsea.pic" HorseaPicBack:: INCBIN "pic/monback/horseab.pic" SeadraPicFront:: INCBIN "pic/bmon/seadra.pic" SeadraPicBack:: INCBIN "pic/monback/seadrab.pic" SandshrewPicFront:: INCBIN "pic/bmon/sandshrew.pic" SandshrewPicBack:: INCBIN "pic/monback/sandshrewb.pic" SandslashPicFront:: INCBIN "pic/bmon/sandslash.pic" SandslashPicBack:: INCBIN "pic/monback/sandslashb.pic" OmanytePicFront:: INCBIN "pic/bmon/omanyte.pic" OmanytePicBack:: INCBIN "pic/monback/omanyteb.pic" OmastarPicFront:: INCBIN "pic/bmon/omastar.pic" OmastarPicBack:: INCBIN "pic/monback/omastarb.pic" JigglypuffPicFront:: INCBIN "pic/bmon/jigglypuff.pic" JigglypuffPicBack:: INCBIN "pic/monback/jigglypuffb.pic" WigglytuffPicFront:: INCBIN "pic/bmon/wigglytuff.pic" WigglytuffPicBack:: INCBIN "pic/monback/wigglytuffb.pic" EeveePicFront:: INCBIN "pic/bmon/eevee.pic" EeveePicBack:: INCBIN "pic/monback/eeveeb.pic" FlareonPicFront:: INCBIN "pic/bmon/flareon.pic" FlareonPicBack:: INCBIN "pic/monback/flareonb.pic" JolteonPicFront:: INCBIN "pic/bmon/jolteon.pic" JolteonPicBack:: INCBIN "pic/monback/jolteonb.pic" VaporeonPicFront:: INCBIN "pic/bmon/vaporeon.pic" VaporeonPicBack:: INCBIN "pic/monback/vaporeonb.pic" MachopPicFront:: INCBIN "pic/bmon/machop.pic" MachopPicBack:: INCBIN "pic/monback/machopb.pic" ZubatPicFront:: INCBIN "pic/bmon/zubat.pic" ZubatPicBack:: INCBIN "pic/monback/zubatb.pic" EkansPicFront:: INCBIN "pic/bmon/ekans.pic" EkansPicBack:: INCBIN "pic/monback/ekansb.pic" ParasPicFront:: INCBIN "pic/bmon/paras.pic" ParasPicBack:: INCBIN "pic/monback/parasb.pic" PoliwhirlPicFront:: INCBIN "pic/bmon/poliwhirl.pic" PoliwhirlPicBack:: INCBIN "pic/monback/poliwhirlb.pic" PoliwrathPicFront:: INCBIN "pic/bmon/poliwrath.pic" PoliwrathPicBack:: INCBIN "pic/monback/poliwrathb.pic" WeedlePicFront:: INCBIN "pic/bmon/weedle.pic" WeedlePicBack:: INCBIN "pic/monback/weedleb.pic" KakunaPicFront:: INCBIN "pic/bmon/kakuna.pic" KakunaPicBack:: INCBIN "pic/monback/kakunab.pic" BeedrillPicFront:: INCBIN "pic/bmon/beedrill.pic" BeedrillPicBack:: INCBIN "pic/monback/beedrillb.pic" FossilKabutopsPic:: INCBIN "pic/bmon/fossilkabutops.pic" INCLUDE "engine/battle/b.asm" TrainerInfoTextBoxTileGraphics: INCBIN "gfx/trainer_info.2bpp" BlankLeaderNames: INCBIN "gfx/blank_leader_names.2bpp" CircleTile: INCBIN "gfx/circle_tile.2bpp" BadgeNumbersTileGraphics: INCBIN "gfx/badge_numbers.2bpp" INCLUDE "engine/items/tmhm.asm" INCLUDE "engine/battle/b_2.asm" INCLUDE "engine/game_corner_slots2.asm" SECTION "bankC",ROMX,BANK[$C] DodrioPicFront:: INCBIN "pic/bmon/dodrio.pic" DodrioPicBack:: INCBIN "pic/monback/dodriob.pic" PrimeapePicFront:: INCBIN "pic/bmon/primeape.pic" PrimeapePicBack:: INCBIN "pic/monback/primeapeb.pic" DugtrioPicFront:: INCBIN "pic/bmon/dugtrio.pic" DugtrioPicBack:: INCBIN "pic/monback/dugtriob.pic" VenomothPicFront:: INCBIN "pic/bmon/venomoth.pic" VenomothPicBack:: INCBIN "pic/monback/venomothb.pic" DewgongPicFront:: INCBIN "pic/bmon/dewgong.pic" DewgongPicBack:: INCBIN "pic/monback/dewgongb.pic" CaterpiePicFront:: INCBIN "pic/bmon/caterpie.pic" CaterpiePicBack:: INCBIN "pic/monback/caterpieb.pic" MetapodPicFront:: INCBIN "pic/bmon/metapod.pic" MetapodPicBack:: INCBIN "pic/monback/metapodb.pic" ButterfreePicFront:: INCBIN "pic/bmon/butterfree.pic" ButterfreePicBack:: INCBIN "pic/monback/butterfreeb.pic" MachampPicFront:: INCBIN "pic/bmon/machamp.pic" MachampPicBack:: INCBIN "pic/monback/machampb.pic" GolduckPicFront:: INCBIN "pic/bmon/golduck.pic" GolduckPicBack:: INCBIN "pic/monback/golduckb.pic" HypnoPicFront:: INCBIN "pic/bmon/hypno.pic" HypnoPicBack:: INCBIN "pic/monback/hypnob.pic" GolbatPicFront:: INCBIN "pic/bmon/golbat.pic" GolbatPicBack:: INCBIN "pic/monback/golbatb.pic" MewtwoPicFront:: INCBIN "pic/bmon/mewtwo.pic" MewtwoPicBack:: INCBIN "pic/monback/mewtwob.pic" SnorlaxPicFront:: INCBIN "pic/bmon/snorlax.pic" SnorlaxPicBack:: INCBIN "pic/monback/snorlaxb.pic" MagikarpPicFront:: INCBIN "pic/bmon/magikarp.pic" MagikarpPicBack:: INCBIN "pic/monback/magikarpb.pic" MukPicFront:: INCBIN "pic/bmon/muk.pic" MukPicBack:: INCBIN "pic/monback/mukb.pic" KinglerPicFront:: INCBIN "pic/bmon/kingler.pic" KinglerPicBack:: INCBIN "pic/monback/kinglerb.pic" CloysterPicFront:: INCBIN "pic/bmon/cloyster.pic" CloysterPicBack:: INCBIN "pic/monback/cloysterb.pic" ElectrodePicFront:: INCBIN "pic/bmon/electrode.pic" ElectrodePicBack:: INCBIN "pic/monback/electrodeb.pic" ClefablePicFront:: INCBIN "pic/bmon/clefable.pic" ClefablePicBack:: INCBIN "pic/monback/clefableb.pic" WeezingPicFront:: INCBIN "pic/bmon/weezing.pic" WeezingPicBack:: INCBIN "pic/monback/weezingb.pic" PersianPicFront:: INCBIN "pic/bmon/persian.pic" PersianPicBack:: INCBIN "pic/monback/persianb.pic" MarowakPicFront:: INCBIN "pic/bmon/marowak.pic" MarowakPicBack:: INCBIN "pic/monback/marowakb.pic" HaunterPicFront:: INCBIN "pic/bmon/haunter.pic" HaunterPicBack:: INCBIN "pic/monback/haunterb.pic" AbraPicFront:: INCBIN "pic/bmon/abra.pic" AbraPicBack:: INCBIN "pic/monback/abrab.pic" AlakazamPicFront:: INCBIN "pic/bmon/alakazam.pic" AlakazamPicBack:: INCBIN "pic/monback/alakazamb.pic" PidgeottoPicFront:: INCBIN "pic/bmon/pidgeotto.pic" PidgeottoPicBack:: INCBIN "pic/monback/pidgeottob.pic" PidgeotPicFront:: INCBIN "pic/bmon/pidgeot.pic" PidgeotPicBack:: INCBIN "pic/monback/pidgeotb.pic" StarmiePicFront:: INCBIN "pic/bmon/starmie.pic" StarmiePicBack:: INCBIN "pic/monback/starmieb.pic" RedPicBack:: INCBIN "pic/trainer/redb.pic" OldManPic:: INCBIN "pic/trainer/oldman.pic" INCLUDE "engine/battle/c.asm" SECTION "bankD",ROMX,BANK[$D] BulbasaurPicFront:: INCBIN "pic/bmon/bulbasaur.pic" BulbasaurPicBack:: INCBIN "pic/monback/bulbasaurb.pic" VenusaurPicFront:: INCBIN "pic/bmon/venusaur.pic" VenusaurPicBack:: INCBIN "pic/monback/venusaurb.pic" TentacruelPicFront:: INCBIN "pic/bmon/tentacruel.pic" TentacruelPicBack:: INCBIN "pic/monback/tentacruelb.pic" GoldeenPicFront:: INCBIN "pic/bmon/goldeen.pic" GoldeenPicBack:: INCBIN "pic/monback/goldeenb.pic" SeakingPicFront:: INCBIN "pic/bmon/seaking.pic" SeakingPicBack:: INCBIN "pic/monback/seakingb.pic" PonytaPicFront:: INCBIN "pic/bmon/ponyta.pic" RapidashPicFront:: INCBIN "pic/bmon/rapidash.pic" PonytaPicBack:: INCBIN "pic/monback/ponytab.pic" RapidashPicBack:: INCBIN "pic/monback/rapidashb.pic" RattataPicFront:: INCBIN "pic/bmon/rattata.pic" RattataPicBack:: INCBIN "pic/monback/rattatab.pic" RaticatePicFront:: INCBIN "pic/bmon/raticate.pic" RaticatePicBack:: INCBIN "pic/monback/raticateb.pic" NidorinoPicFront:: INCBIN "pic/bmon/nidorino.pic" NidorinoPicBack:: INCBIN "pic/monback/nidorinob.pic" NidorinaPicFront:: INCBIN "pic/bmon/nidorina.pic" NidorinaPicBack:: INCBIN "pic/monback/nidorinab.pic" GeodudePicFront:: INCBIN "pic/bmon/geodude.pic" GeodudePicBack:: INCBIN "pic/monback/geodudeb.pic" PorygonPicFront:: INCBIN "pic/bmon/porygon.pic" PorygonPicBack:: INCBIN "pic/monback/porygonb.pic" AerodactylPicFront:: INCBIN "pic/bmon/aerodactyl.pic" AerodactylPicBack:: INCBIN "pic/monback/aerodactylb.pic" MagnemitePicFront:: INCBIN "pic/bmon/magnemite.pic" MagnemitePicBack:: INCBIN "pic/monback/magnemiteb.pic" CharmanderPicFront:: INCBIN "pic/bmon/charmander.pic" CharmanderPicBack:: INCBIN "pic/monback/charmanderb.pic" SquirtlePicFront:: INCBIN "pic/bmon/squirtle.pic" SquirtlePicBack:: INCBIN "pic/monback/squirtleb.pic" CharmeleonPicFront:: INCBIN "pic/bmon/charmeleon.pic" CharmeleonPicBack:: INCBIN "pic/monback/charmeleonb.pic" WartortlePicFront:: INCBIN "pic/bmon/wartortle.pic" WartortlePicBack:: INCBIN "pic/monback/wartortleb.pic" CharizardPicFront:: INCBIN "pic/bmon/charizard.pic" CharizardPicBack:: INCBIN "pic/monback/charizardb.pic" FossilAerodactylPic:: INCBIN "pic/bmon/fossilaerodactyl.pic" GhostPic:: INCBIN "pic/other/ghost.pic" OddishPicFront:: INCBIN "pic/bmon/oddish.pic" OddishPicBack:: INCBIN "pic/monback/oddishb.pic" GloomPicFront:: INCBIN "pic/bmon/gloom.pic" GloomPicBack:: INCBIN "pic/monback/gloomb.pic" VileplumePicFront:: INCBIN "pic/bmon/vileplume.pic" VileplumePicBack:: INCBIN "pic/monback/vileplumeb.pic" BellsproutPicFront:: INCBIN "pic/bmon/bellsprout.pic" BellsproutPicBack:: INCBIN "pic/monback/bellsproutb.pic" WeepinbellPicFront:: INCBIN "pic/bmon/weepinbell.pic" WeepinbellPicBack:: INCBIN "pic/monback/weepinbellb.pic" VictreebelPicFront:: INCBIN "pic/bmon/victreebel.pic" VictreebelPicBack:: INCBIN "pic/monback/victreebelb.pic" INCLUDE "engine/titlescreen2.asm" INCLUDE "engine/battle/d.asm" INCLUDE "engine/slot_machine.asm" INCLUDE "engine/overworld/pewter_guys.asm" INCLUDE "engine/multiply_divide.asm" INCLUDE "engine/game_corner_slots.asm" SECTION "bankE",ROMX,BANK[$E] INCLUDE "data/moves.asm" BaseStats: INCLUDE "data/base_stats.asm" INCLUDE "data/cries.asm" INCLUDE "engine/battle/e.asm" TradingAnimationGraphics: INCBIN "gfx/game_boy.norepeat.2bpp" INCBIN "gfx/link_cable.2bpp" TradingAnimationGraphics2: ; Pokeball traveling through the link cable. INCBIN "gfx/trade2.2bpp" INCLUDE "engine/evos_moves.asm" INCLUDE "engine/battle/e_2.asm" SECTION "bankF",ROMX,BANK[$F] INCLUDE "engine/battle/core.asm" SECTION "bank10",ROMX,BANK[$10] INCLUDE "engine/menu/pokedex.asm" INCLUDE "engine/trade.asm" INCLUDE "engine/intro.asm" INCLUDE "engine/trade2.asm" SECTION "bank11",ROMX,BANK[$11] INCLUDE "data/mapHeaders/lavendertown.asm" INCLUDE "data/mapObjects/lavendertown.asm" LavenderTownBlocks: INCBIN "maps/lavendertown.blk" ViridianPokecenterBlocks: INCBIN "maps/viridianpokecenter.blk" SafariZoneRestHouse1Blocks: SafariZoneRestHouse2Blocks: SafariZoneRestHouse3Blocks: SafariZoneRestHouse4Blocks: INCBIN "maps/safarizoneresthouse1.blk" INCLUDE "scripts/lavendertown.asm" INCLUDE "engine/pokedex_rating.asm" INCLUDE "data/mapHeaders/viridianpokecenter.asm" INCLUDE "scripts/viridianpokecenter.asm" INCLUDE "data/mapObjects/viridianpokecenter.asm" INCLUDE "data/mapHeaders/mansion1.asm" INCLUDE "scripts/mansion1.asm" INCLUDE "data/mapObjects/mansion1.asm" Mansion1Blocks: INCBIN "maps/mansion1.blk" INCLUDE "data/mapHeaders/rocktunnel1.asm" INCLUDE "scripts/rocktunnel1.asm" INCLUDE "data/mapObjects/rocktunnel1.asm" RockTunnel1Blocks: INCBIN "maps/rocktunnel1.blk" INCLUDE "data/mapHeaders/seafoamislands1.asm" INCLUDE "scripts/seafoamislands1.asm" INCLUDE "data/mapObjects/seafoamislands1.asm" SeafoamIslands1Blocks: INCBIN "maps/seafoamislands1.blk" INCLUDE "data/mapHeaders/ssanne3.asm" INCLUDE "scripts/ssanne3.asm" INCLUDE "data/mapObjects/ssanne3.asm" SSAnne3Blocks: INCBIN "maps/ssanne3.blk" INCLUDE "data/mapHeaders/victoryroad3.asm" INCLUDE "scripts/victoryroad3.asm" INCLUDE "data/mapObjects/victoryroad3.asm" VictoryRoad3Blocks: INCBIN "maps/victoryroad3.blk" INCLUDE "data/mapHeaders/rockethideout1.asm" INCLUDE "scripts/rockethideout1.asm" INCLUDE "data/mapObjects/rockethideout1.asm" RocketHideout1Blocks: INCBIN "maps/rockethideout1.blk" INCLUDE "data/mapHeaders/rockethideout2.asm" INCLUDE "scripts/rockethideout2.asm" INCLUDE "data/mapObjects/rockethideout2.asm" RocketHideout2Blocks: INCBIN "maps/rockethideout2.blk" INCLUDE "data/mapHeaders/rockethideout3.asm" INCLUDE "scripts/rockethideout3.asm" INCLUDE "data/mapObjects/rockethideout3.asm" RocketHideout3Blocks: INCBIN "maps/rockethideout3.blk" INCLUDE "data/mapHeaders/rockethideout4.asm" INCLUDE "scripts/rockethideout4.asm" INCLUDE "data/mapObjects/rockethideout4.asm" RocketHideout4Blocks: INCBIN "maps/rockethideout4.blk" INCLUDE "data/mapHeaders/rockethideoutelevator.asm" INCLUDE "scripts/rockethideoutelevator.asm" INCLUDE "data/mapObjects/rockethideoutelevator.asm" RocketHideoutElevatorBlocks: INCBIN "maps/rockethideoutelevator.blk" INCLUDE "data/mapHeaders/silphcoelevator.asm" INCLUDE "scripts/silphcoelevator.asm" INCLUDE "data/mapObjects/silphcoelevator.asm" SilphCoElevatorBlocks: INCBIN "maps/silphcoelevator.blk" INCLUDE "data/mapHeaders/safarizoneeast.asm" INCLUDE "scripts/safarizoneeast.asm" INCLUDE "data/mapObjects/safarizoneeast.asm" SafariZoneEastBlocks: INCBIN "maps/safarizoneeast.blk" INCLUDE "data/mapHeaders/safarizonenorth.asm" INCLUDE "scripts/safarizonenorth.asm" INCLUDE "data/mapObjects/safarizonenorth.asm" SafariZoneNorthBlocks: INCBIN "maps/safarizonenorth.blk" INCLUDE "data/mapHeaders/safarizonecenter.asm" INCLUDE "scripts/safarizonecenter.asm" INCLUDE "data/mapObjects/safarizonecenter.asm" SafariZoneCenterBlocks: INCBIN "maps/safarizonecenter.blk" INCLUDE "data/mapHeaders/safarizoneresthouse1.asm" INCLUDE "scripts/safarizoneresthouse1.asm" INCLUDE "data/mapObjects/safarizoneresthouse1.asm" INCLUDE "data/mapHeaders/safarizoneresthouse2.asm" INCLUDE "scripts/safarizoneresthouse2.asm" INCLUDE "data/mapObjects/safarizoneresthouse2.asm" INCLUDE "data/mapHeaders/safarizoneresthouse3.asm" INCLUDE "scripts/safarizoneresthouse3.asm" INCLUDE "data/mapObjects/safarizoneresthouse3.asm" INCLUDE "data/mapHeaders/safarizoneresthouse4.asm" INCLUDE "scripts/safarizoneresthouse4.asm" INCLUDE "data/mapObjects/safarizoneresthouse4.asm" INCLUDE "data/mapHeaders/unknowndungeon2.asm" INCLUDE "scripts/unknowndungeon2.asm" INCLUDE "data/mapObjects/unknowndungeon2.asm" UnknownDungeon2Blocks: INCBIN "maps/unknowndungeon2.blk" INCLUDE "data/mapHeaders/unknowndungeon3.asm" INCLUDE "scripts/unknowndungeon3.asm" INCLUDE "data/mapObjects/unknowndungeon3.asm" UnknownDungeon3Blocks: INCBIN "maps/unknowndungeon3.blk" INCLUDE "data/mapHeaders/rocktunnel2.asm" INCLUDE "scripts/rocktunnel2.asm" INCLUDE "data/mapObjects/rocktunnel2.asm" RockTunnel2Blocks: INCBIN "maps/rocktunnel2.blk" INCLUDE "data/mapHeaders/seafoamislands2.asm" INCLUDE "scripts/seafoamislands2.asm" INCLUDE "data/mapObjects/seafoamislands2.asm" SeafoamIslands2Blocks: INCBIN "maps/seafoamislands2.blk" INCLUDE "data/mapHeaders/seafoamislands3.asm" INCLUDE "scripts/seafoamislands3.asm" INCLUDE "data/mapObjects/seafoamislands3.asm" SeafoamIslands3Blocks: INCBIN "maps/seafoamislands3.blk" INCLUDE "data/mapHeaders/seafoamislands4.asm" INCLUDE "scripts/seafoamislands4.asm" INCLUDE "data/mapObjects/seafoamislands4.asm" SeafoamIslands4Blocks: INCBIN "maps/seafoamislands4.blk" INCLUDE "data/mapHeaders/seafoamislands5.asm" INCLUDE "scripts/seafoamislands5.asm" INCLUDE "data/mapObjects/seafoamislands5.asm" SeafoamIslands5Blocks: INCBIN "maps/seafoamislands5.blk" INCLUDE "engine/overworld/hidden_objects.asm" SECTION "bank12",ROMX,BANK[$12] INCLUDE "data/mapHeaders/route7.asm" INCLUDE "data/mapObjects/route7.asm" Route7Blocks: INCBIN "maps/route7.blk" CeladonPokecenterBlocks: RockTunnelPokecenterBlocks: MtMoonPokecenterBlocks: INCBIN "maps/mtmoonpokecenter.blk" Route18GateBlocks: Route15GateBlocks: Route11GateBlocks: INCBIN "maps/route11gate.blk" Route18GateUpstairsBlocks: Route16GateUpstairsBlocks: Route12GateUpstairsBlocks: Route15GateUpstairsBlocks: Route11GateUpstairsBlocks: INCBIN "maps/route11gateupstairs.blk" INCLUDE "engine/predefs12.asm" INCLUDE "scripts/route7.asm" INCLUDE "data/mapHeaders/redshouse1f.asm" INCLUDE "scripts/redshouse1f.asm" INCLUDE "data/mapObjects/redshouse1f.asm" RedsHouse1FBlocks: INCBIN "maps/redshouse1f.blk" INCLUDE "data/mapHeaders/celadonmart3.asm" INCLUDE "scripts/celadonmart3.asm" INCLUDE "data/mapObjects/celadonmart3.asm" CeladonMart3Blocks: INCBIN "maps/celadonmart3.blk" INCLUDE "data/mapHeaders/celadonmart4.asm" INCLUDE "scripts/celadonmart4.asm" INCLUDE "data/mapObjects/celadonmart4.asm" CeladonMart4Blocks: INCBIN "maps/celadonmart4.blk" INCLUDE "data/mapHeaders/celadonmartroof.asm" INCLUDE "scripts/celadonmartroof.asm" INCLUDE "data/mapObjects/celadonmartroof.asm" CeladonMartRoofBlocks: INCBIN "maps/celadonmartroof.blk" INCLUDE "data/mapHeaders/celadonmartelevator.asm" INCLUDE "scripts/celadonmartelevator.asm" INCLUDE "data/mapObjects/celadonmartelevator.asm" CeladonMartElevatorBlocks: INCBIN "maps/celadonmartelevator.blk" INCLUDE "data/mapHeaders/celadonmansion1.asm" INCLUDE "scripts/celadonmansion1.asm" INCLUDE "data/mapObjects/celadonmansion1.asm" CeladonMansion1Blocks: INCBIN "maps/celadonmansion1.blk" INCLUDE "data/mapHeaders/celadonmansion2.asm" INCLUDE "scripts/celadonmansion2.asm" INCLUDE "data/mapObjects/celadonmansion2.asm" CeladonMansion2Blocks: INCBIN "maps/celadonmansion2.blk" INCLUDE "data/mapHeaders/celadonmansion3.asm" INCLUDE "scripts/celadonmansion3.asm" INCLUDE "data/mapObjects/celadonmansion3.asm" CeladonMansion3Blocks: INCBIN "maps/celadonmansion3.blk" INCLUDE "data/mapHeaders/celadonmansion4.asm" INCLUDE "scripts/celadonmansion4.asm" INCLUDE "data/mapObjects/celadonmansion4.asm" CeladonMansion4Blocks: INCBIN "maps/celadonmansion4.blk" INCLUDE "data/mapHeaders/celadonpokecenter.asm" INCLUDE "scripts/celadonpokecenter.asm" INCLUDE "data/mapObjects/celadonpokecenter.asm" INCLUDE "data/mapHeaders/celadongym.asm" INCLUDE "scripts/celadongym.asm" INCLUDE "data/mapObjects/celadongym.asm" CeladonGymBlocks: INCBIN "maps/celadongym.blk" INCLUDE "data/mapHeaders/celadongamecorner.asm" INCLUDE "scripts/celadongamecorner.asm" INCLUDE "data/mapObjects/celadongamecorner.asm" CeladonGameCornerBlocks: INCBIN "maps/celadongamecorner.blk" INCLUDE "data/mapHeaders/celadonmart5.asm" INCLUDE "scripts/celadonmart5.asm" INCLUDE "data/mapObjects/celadonmart5.asm" CeladonMart5Blocks: INCBIN "maps/celadonmart5.blk" INCLUDE "data/mapHeaders/celadonprizeroom.asm" INCLUDE "scripts/celadonprizeroom.asm" INCLUDE "data/mapObjects/celadonprizeroom.asm" CeladonPrizeRoomBlocks: INCBIN "maps/celadonprizeroom.blk" INCLUDE "data/mapHeaders/celadondiner.asm" INCLUDE "scripts/celadondiner.asm" INCLUDE "data/mapObjects/celadondiner.asm" CeladonDinerBlocks: INCBIN "maps/celadondiner.blk" INCLUDE "data/mapHeaders/celadonhouse.asm" INCLUDE "scripts/celadonhouse.asm" INCLUDE "data/mapObjects/celadonhouse.asm" CeladonHouseBlocks: INCBIN "maps/celadonhouse.blk" INCLUDE "data/mapHeaders/celadonhotel.asm" INCLUDE "scripts/celadonhotel.asm" INCLUDE "data/mapObjects/celadonhotel.asm" CeladonHotelBlocks: INCBIN "maps/celadonhotel.blk" INCLUDE "data/mapHeaders/mtmoonpokecenter.asm" INCLUDE "scripts/mtmoonpokecenter.asm" INCLUDE "data/mapObjects/mtmoonpokecenter.asm" INCLUDE "data/mapHeaders/rocktunnelpokecenter.asm" INCLUDE "scripts/rocktunnelpokecenter.asm" INCLUDE "data/mapObjects/rocktunnelpokecenter.asm" INCLUDE "data/mapHeaders/route11gate.asm" INCLUDE "scripts/route11gate.asm" INCLUDE "data/mapObjects/route11gate.asm" INCLUDE "data/mapHeaders/route11gateupstairs.asm" INCLUDE "scripts/route11gateupstairs.asm" INCLUDE "data/mapObjects/route11gateupstairs.asm" INCLUDE "data/mapHeaders/route12gate.asm" INCLUDE "scripts/route12gate.asm" INCLUDE "data/mapObjects/route12gate.asm" Route12GateBlocks: INCBIN "maps/route12gate.blk" INCLUDE "data/mapHeaders/route12gateupstairs.asm" INCLUDE "scripts/route12gateupstairs.asm" INCLUDE "data/mapObjects/route12gateupstairs.asm" INCLUDE "data/mapHeaders/route15gate.asm" INCLUDE "scripts/route15gate.asm" INCLUDE "data/mapObjects/route15gate.asm" INCLUDE "data/mapHeaders/route15gateupstairs.asm" INCLUDE "scripts/route15gateupstairs.asm" INCLUDE "data/mapObjects/route15gateupstairs.asm" INCLUDE "data/mapHeaders/route16gate.asm" INCLUDE "scripts/route16gate.asm" INCLUDE "data/mapObjects/route16gate.asm" Route16GateBlocks: INCBIN "maps/route16gate.blk" INCLUDE "data/mapHeaders/route16gateupstairs.asm" INCLUDE "scripts/route16gateupstairs.asm" INCLUDE "data/mapObjects/route16gateupstairs.asm" INCLUDE "data/mapHeaders/route18gate.asm" INCLUDE "scripts/route18gate.asm" INCLUDE "data/mapObjects/route18gate.asm" INCLUDE "data/mapHeaders/route18gateupstairs.asm" INCLUDE "scripts/route18gateupstairs.asm" INCLUDE "data/mapObjects/route18gateupstairs.asm" INCLUDE "data/mapHeaders/mtmoon1.asm" INCLUDE "scripts/mtmoon1.asm" INCLUDE "data/mapObjects/mtmoon1.asm" MtMoon1Blocks: INCBIN "maps/mtmoon1.blk" INCLUDE "data/mapHeaders/mtmoon3.asm" INCLUDE "scripts/mtmoon3.asm" INCLUDE "data/mapObjects/mtmoon3.asm" MtMoon3Blocks: INCBIN "maps/mtmoon3.blk" INCLUDE "data/mapHeaders/safarizonewest.asm" INCLUDE "scripts/safarizonewest.asm" INCLUDE "data/mapObjects/safarizonewest.asm" SafariZoneWestBlocks: INCBIN "maps/safarizonewest.blk" INCLUDE "data/mapHeaders/safarizonesecrethouse.asm" INCLUDE "scripts/safarizonesecrethouse.asm" INCLUDE "data/mapObjects/safarizonesecrethouse.asm" SafariZoneSecretHouseBlocks: INCBIN "maps/safarizonesecrethouse.blk" SECTION "bank13",ROMX,BANK[$13] TrainerPics:: YoungsterPic:: INCBIN "pic/trainer/youngster.pic" BugCatcherPic:: INCBIN "pic/trainer/bugcatcher.pic" LassPic:: INCBIN "pic/trainer/lass.pic" SailorPic:: INCBIN "pic/trainer/sailor.pic" JrTrainerMPic:: INCBIN "pic/trainer/jr.trainerm.pic" JrTrainerFPic:: INCBIN "pic/trainer/jr.trainerf.pic" PokemaniacPic:: INCBIN "pic/trainer/pokemaniac.pic" SuperNerdPic:: INCBIN "pic/trainer/supernerd.pic" HikerPic:: INCBIN "pic/trainer/hiker.pic" BikerPic:: INCBIN "pic/trainer/biker.pic" BurglarPic:: INCBIN "pic/trainer/burglar.pic" EngineerPic:: INCBIN "pic/trainer/engineer.pic" FisherPic:: INCBIN "pic/trainer/fisher.pic" SwimmerPic:: INCBIN "pic/trainer/swimmer.pic" CueBallPic:: INCBIN "pic/trainer/cueball.pic" GamblerPic:: INCBIN "pic/trainer/gambler.pic" BeautyPic:: INCBIN "pic/trainer/beauty.pic" PsychicPic:: INCBIN "pic/trainer/psychic.pic" RockerPic:: INCBIN "pic/trainer/rocker.pic" JugglerPic:: INCBIN "pic/trainer/juggler.pic" TamerPic:: INCBIN "pic/trainer/tamer.pic" BirdKeeperPic:: INCBIN "pic/trainer/birdkeeper.pic" BlackbeltPic:: INCBIN "pic/trainer/blackbelt.pic" Rival1Pic:: INCBIN "pic/trainer/rival1.pic" ProfOakPic:: INCBIN "pic/trainer/prof.oak.pic" ChiefPic:: ScientistPic:: INCBIN "pic/trainer/scientist.pic" GiovanniPic:: INCBIN "pic/trainer/giovanni.pic" RocketPic:: INCBIN "pic/trainer/rocket.pic" CooltrainerMPic:: INCBIN "pic/trainer/cooltrainerm.pic" CooltrainerFPic:: INCBIN "pic/trainer/cooltrainerf.pic" BrunoPic:: INCBIN "pic/trainer/bruno.pic" BrockPic:: INCBIN "pic/trainer/brock.pic" MistyPic:: INCBIN "pic/trainer/misty.pic" LtSurgePic:: INCBIN "pic/trainer/lt.surge.pic" ErikaPic:: INCBIN "pic/trainer/erika.pic" KogaPic:: INCBIN "pic/trainer/koga.pic" BlainePic:: INCBIN "pic/trainer/blaine.pic" SabrinaPic:: INCBIN "pic/trainer/sabrina.pic" GentlemanPic:: INCBIN "pic/trainer/gentleman.pic" Rival2Pic:: INCBIN "pic/trainer/rival2.pic" Rival3Pic:: INCBIN "pic/trainer/rival3.pic" LoreleiPic:: INCBIN "pic/trainer/lorelei.pic" ChannelerPic:: INCBIN "pic/trainer/channeler.pic" AgathaPic:: INCBIN "pic/trainer/agatha.pic" LancePic:: INCBIN "pic/trainer/lance.pic" INCLUDE "data/mapHeaders/battlecenterm.asm" INCLUDE "scripts/battlecenterm.asm" INCLUDE "data/mapObjects/battlecenterm.asm" BattleCenterMBlocks: INCBIN "maps/battlecenterm.blk" INCLUDE "data/mapHeaders/tradecenterm.asm" INCLUDE "scripts/tradecenterm.asm" INCLUDE "data/mapObjects/tradecenterm.asm" TradeCenterMBlocks: INCBIN "maps/tradecenterm.blk" INCLUDE "engine/give_pokemon.asm" INCLUDE "engine/predefs.asm" SECTION "bank14",ROMX,BANK[$14] INCLUDE "data/mapHeaders/route22.asm" INCLUDE "data/mapObjects/route22.asm" Route22Blocks: INCBIN "maps/route22.blk" INCLUDE "data/mapHeaders/route20.asm" INCLUDE "data/mapObjects/route20.asm" Route20Blocks: INCBIN "maps/route20.blk" INCLUDE "data/mapHeaders/route23.asm" INCLUDE "data/mapObjects/route23.asm" Route23Blocks: INCBIN "maps/route23.blk" INCLUDE "data/mapHeaders/route24.asm" INCLUDE "data/mapObjects/route24.asm" Route24Blocks: INCBIN "maps/route24.blk" INCLUDE "data/mapHeaders/route25.asm" INCLUDE "data/mapObjects/route25.asm" Route25Blocks: INCBIN "maps/route25.blk" INCLUDE "data/mapHeaders/indigoplateau.asm" INCLUDE "scripts/indigoplateau.asm" INCLUDE "data/mapObjects/indigoplateau.asm" IndigoPlateauBlocks: INCBIN "maps/indigoplateau.blk" INCLUDE "data/mapHeaders/saffroncity.asm" INCLUDE "data/mapObjects/saffroncity.asm" SaffronCityBlocks: INCBIN "maps/saffroncity.blk" INCLUDE "scripts/saffroncity.asm" INCLUDE "scripts/route20.asm" INCLUDE "scripts/route22.asm" INCLUDE "scripts/route23.asm" INCLUDE "scripts/route24.asm" INCLUDE "scripts/route25.asm" INCLUDE "data/mapHeaders/victoryroad2.asm" INCLUDE "scripts/victoryroad2.asm" INCLUDE "data/mapObjects/victoryroad2.asm" VictoryRoad2Blocks: INCBIN "maps/victoryroad2.blk" INCLUDE "data/mapHeaders/mtmoon2.asm" INCLUDE "scripts/mtmoon2.asm" INCLUDE "data/mapObjects/mtmoon2.asm" MtMoon2Blocks: INCBIN "maps/mtmoon2.blk" INCLUDE "data/mapHeaders/silphco7.asm" INCLUDE "scripts/silphco7.asm" INCLUDE "data/mapObjects/silphco7.asm" SilphCo7Blocks: INCBIN "maps/silphco7.blk" INCLUDE "data/mapHeaders/mansion2.asm" INCLUDE "scripts/mansion2.asm" INCLUDE "data/mapObjects/mansion2.asm" Mansion2Blocks: INCBIN "maps/mansion2.blk" INCLUDE "data/mapHeaders/mansion3.asm" INCLUDE "scripts/mansion3.asm" INCLUDE "data/mapObjects/mansion3.asm" Mansion3Blocks: INCBIN "maps/mansion3.blk" INCLUDE "data/mapHeaders/mansion4.asm" INCLUDE "scripts/mansion4.asm" INCLUDE "data/mapObjects/mansion4.asm" Mansion4Blocks: INCBIN "maps/mansion4.blk" INCLUDE "engine/battle/14.asm" INCLUDE "engine/overworld/card_key.asm" INCLUDE "engine/menu/prize_menu.asm" INCLUDE "engine/hidden_object_functions14.asm" SECTION "bank15",ROMX,BANK[$15] INCLUDE "data/mapHeaders/route2.asm" INCLUDE "data/mapObjects/route2.asm" Route2Blocks: INCBIN "maps/route2.blk" INCLUDE "data/mapHeaders/route3.asm" INCLUDE "data/mapObjects/route3.asm" Route3Blocks: INCBIN "maps/route3.blk" INCLUDE "data/mapHeaders/route4.asm" INCLUDE "data/mapObjects/route4.asm" Route4Blocks: INCBIN "maps/route4.blk" INCLUDE "data/mapHeaders/route5.asm" INCLUDE "data/mapObjects/route5.asm" Route5Blocks: INCBIN "maps/route5.blk" INCLUDE "data/mapHeaders/route9.asm" INCLUDE "data/mapObjects/route9.asm" Route9Blocks: INCBIN "maps/route9.blk" INCLUDE "data/mapHeaders/route13.asm" INCLUDE "data/mapObjects/route13.asm" Route13Blocks: INCBIN "maps/route13.blk" INCLUDE "data/mapHeaders/route14.asm" INCLUDE "data/mapObjects/route14.asm" Route14Blocks: INCBIN "maps/route14.blk" INCLUDE "data/mapHeaders/route17.asm" INCLUDE "data/mapObjects/route17.asm" Route17Blocks: INCBIN "maps/route17.blk" INCLUDE "data/mapHeaders/route19.asm" INCLUDE "data/mapObjects/route19.asm" Route19Blocks: INCBIN "maps/route19.blk" INCLUDE "data/mapHeaders/route21.asm" INCLUDE "data/mapObjects/route21.asm" Route21Blocks: INCBIN "maps/route21.blk" VermilionHouse2Blocks: Route12HouseBlocks: DayCareMBlocks: INCBIN "maps/daycarem.blk" FuchsiaHouse3Blocks: INCBIN "maps/fuchsiahouse3.blk" INCLUDE "engine/battle/15.asm" INCLUDE "scripts/route2.asm" INCLUDE "scripts/route3.asm" INCLUDE "scripts/route4.asm" INCLUDE "scripts/route5.asm" INCLUDE "scripts/route9.asm" INCLUDE "scripts/route13.asm" INCLUDE "scripts/route14.asm" INCLUDE "scripts/route17.asm" INCLUDE "scripts/route19.asm" INCLUDE "scripts/route21.asm" INCLUDE "data/mapHeaders/vermilionhouse2.asm" INCLUDE "scripts/vermilionhouse2.asm" INCLUDE "data/mapObjects/vermilionhouse2.asm" INCLUDE "data/mapHeaders/celadonmart2.asm" INCLUDE "scripts/celadonmart2.asm" INCLUDE "data/mapObjects/celadonmart2.asm" CeladonMart2Blocks: INCBIN "maps/celadonmart2.blk" INCLUDE "data/mapHeaders/fuchsiahouse3.asm" INCLUDE "scripts/fuchsiahouse3.asm" INCLUDE "data/mapObjects/fuchsiahouse3.asm" INCLUDE "data/mapHeaders/daycarem.asm" INCLUDE "scripts/daycarem.asm" INCLUDE "data/mapObjects/daycarem.asm" INCLUDE "data/mapHeaders/route12house.asm" INCLUDE "scripts/route12house.asm" INCLUDE "data/mapObjects/route12house.asm" INCLUDE "data/mapHeaders/silphco8.asm" INCLUDE "scripts/silphco8.asm" INCLUDE "data/mapObjects/silphco8.asm" SilphCo8Blocks: INCBIN "maps/silphco8.blk" INCLUDE "engine/menu/diploma.asm" INCLUDE "engine/overworld/trainers.asm" SECTION "bank16",ROMX,BANK[$16] INCLUDE "data/mapHeaders/route6.asm" INCLUDE "data/mapObjects/route6.asm" Route6Blocks: INCBIN "maps/route6.blk" INCLUDE "data/mapHeaders/route8.asm" INCLUDE "data/mapObjects/route8.asm" Route8Blocks: INCBIN "maps/route8.blk" INCLUDE "data/mapHeaders/route10.asm" INCLUDE "data/mapObjects/route10.asm" Route10Blocks: INCBIN "maps/route10.blk" INCLUDE "data/mapHeaders/route11.asm" INCLUDE "data/mapObjects/route11.asm" Route11Blocks: INCBIN "maps/route11.blk" INCLUDE "data/mapHeaders/route12.asm" INCLUDE "data/mapObjects/route12.asm" Route12Blocks: INCBIN "maps/route12.blk" INCLUDE "data/mapHeaders/route15.asm" INCLUDE "data/mapObjects/route15.asm" Route15Blocks: INCBIN "maps/route15.blk" INCLUDE "data/mapHeaders/route16.asm" INCLUDE "data/mapObjects/route16.asm" Route16Blocks: INCBIN "maps/route16.blk" INCLUDE "data/mapHeaders/route18.asm" INCLUDE "data/mapObjects/route18.asm" Route18Blocks: INCBIN "maps/route18.blk" INCBIN "maps/unusedblocks58d7d.blk" INCLUDE "engine/battle/16.asm" INCLUDE "engine/experience.asm" INCLUDE "engine/overworld/oaks_aide.asm" INCLUDE "scripts/route6.asm" INCLUDE "scripts/route8.asm" INCLUDE "scripts/route10.asm" INCLUDE "scripts/route11.asm" INCLUDE "scripts/route12.asm" INCLUDE "scripts/route15.asm" INCLUDE "scripts/route16.asm" INCLUDE "scripts/route18.asm" INCLUDE "data/mapHeaders/fanclub.asm" INCLUDE "scripts/fanclub.asm" INCLUDE "data/mapObjects/fanclub.asm" FanClubBlocks: INCBIN "maps/fanclub.blk" INCLUDE "data/mapHeaders/silphco2.asm" INCLUDE "scripts/silphco2.asm" INCLUDE "data/mapObjects/silphco2.asm" SilphCo2Blocks: INCBIN "maps/silphco2.blk" INCLUDE "data/mapHeaders/silphco3.asm" INCLUDE "scripts/silphco3.asm" INCLUDE "data/mapObjects/silphco3.asm" SilphCo3Blocks: INCBIN "maps/silphco3.blk" INCLUDE "data/mapHeaders/silphco10.asm" INCLUDE "scripts/silphco10.asm" INCLUDE "data/mapObjects/silphco10.asm" SilphCo10Blocks: INCBIN "maps/silphco10.blk" INCLUDE "data/mapHeaders/lance.asm" INCLUDE "scripts/lance.asm" INCLUDE "data/mapObjects/lance.asm" LanceBlocks: INCBIN "maps/lance.blk" INCLUDE "data/mapHeaders/halloffameroom.asm" INCLUDE "scripts/halloffameroom.asm" INCLUDE "data/mapObjects/halloffameroom.asm" HallofFameRoomBlocks: INCBIN "maps/halloffameroom.blk" INCLUDE "engine/overworld/saffron_guards.asm" SECTION "bank17",ROMX,BANK[$17] SaffronMartBlocks: LavenderMartBlocks: CeruleanMartBlocks: VermilionMartBlocks: INCBIN "maps/vermilionmart.blk" CopycatsHouse2FBlocks: RedsHouse2FBlocks: INCBIN "maps/redshouse2f.blk" Museum1FBlocks: INCBIN "maps/museum1f.blk" Museum2FBlocks: INCBIN "maps/museum2f.blk" SaffronPokecenterBlocks: VermilionPokecenterBlocks: LavenderPokecenterBlocks: PewterPokecenterBlocks: INCBIN "maps/pewterpokecenter.blk" UndergroundPathEntranceRoute7Blocks: UndergroundPathEntranceRoute7CopyBlocks: UndergroundPathEntranceRoute6Blocks: UndergroundPathEntranceRoute5Blocks: INCBIN "maps/undergroundpathentranceroute5.blk" Route2GateBlocks: ViridianForestEntranceBlocks: ViridianForestExitBlocks: INCBIN "maps/viridianforestexit.blk" INCLUDE "data/mapHeaders/redshouse2f.asm" INCLUDE "scripts/redshouse2f.asm" INCLUDE "data/mapObjects/redshouse2f.asm" INCLUDE "engine/predefs17.asm" INCLUDE "data/mapHeaders/museum1f.asm" INCLUDE "scripts/museum1f.asm" INCLUDE "data/mapObjects/museum1f.asm" INCLUDE "data/mapHeaders/museum2f.asm" INCLUDE "scripts/museum2f.asm" INCLUDE "data/mapObjects/museum2f.asm" INCLUDE "data/mapHeaders/pewtergym.asm" INCLUDE "scripts/pewtergym.asm" INCLUDE "data/mapObjects/pewtergym.asm" PewterGymBlocks: INCBIN "maps/pewtergym.blk" INCLUDE "data/mapHeaders/pewterpokecenter.asm" INCLUDE "scripts/pewterpokecenter.asm" INCLUDE "data/mapObjects/pewterpokecenter.asm" INCLUDE "data/mapHeaders/ceruleanpokecenter.asm" INCLUDE "scripts/ceruleanpokecenter.asm" INCLUDE "data/mapObjects/ceruleanpokecenter.asm" CeruleanPokecenterBlocks: INCBIN "maps/ceruleanpokecenter.blk" INCLUDE "data/mapHeaders/ceruleangym.asm" INCLUDE "scripts/ceruleangym.asm" INCLUDE "data/mapObjects/ceruleangym.asm" CeruleanGymBlocks: INCBIN "maps/ceruleangym.blk" INCLUDE "data/mapHeaders/ceruleanmart.asm" INCLUDE "scripts/ceruleanmart.asm" INCLUDE "data/mapObjects/ceruleanmart.asm" INCLUDE "data/mapHeaders/lavenderpokecenter.asm" INCLUDE "scripts/lavenderpokecenter.asm" INCLUDE "data/mapObjects/lavenderpokecenter.asm" INCLUDE "data/mapHeaders/lavendermart.asm" INCLUDE "scripts/lavendermart.asm" INCLUDE "data/mapObjects/lavendermart.asm" INCLUDE "data/mapHeaders/vermilionpokecenter.asm" INCLUDE "scripts/vermilionpokecenter.asm" INCLUDE "data/mapObjects/vermilionpokecenter.asm" INCLUDE "data/mapHeaders/vermilionmart.asm" INCLUDE "scripts/vermilionmart.asm" INCLUDE "data/mapObjects/vermilionmart.asm" INCLUDE "data/mapHeaders/vermiliongym.asm" INCLUDE "scripts/vermiliongym.asm" INCLUDE "data/mapObjects/vermiliongym.asm" VermilionGymBlocks: INCBIN "maps/vermiliongym.blk" INCLUDE "data/mapHeaders/copycatshouse2f.asm" INCLUDE "scripts/copycatshouse2f.asm" INCLUDE "data/mapObjects/copycatshouse2f.asm" INCLUDE "data/mapHeaders/fightingdojo.asm" INCLUDE "scripts/fightingdojo.asm" INCLUDE "data/mapObjects/fightingdojo.asm" FightingDojoBlocks: INCBIN "maps/fightingdojo.blk" INCLUDE "data/mapHeaders/saffrongym.asm" INCLUDE "scripts/saffrongym.asm" INCLUDE "data/mapObjects/saffrongym.asm" SaffronGymBlocks: INCBIN "maps/saffrongym.blk" INCLUDE "data/mapHeaders/saffronmart.asm" INCLUDE "scripts/saffronmart.asm" INCLUDE "data/mapObjects/saffronmart.asm" INCLUDE "data/mapHeaders/silphco1.asm" INCLUDE "scripts/silphco1.asm" INCLUDE "data/mapObjects/silphco1.asm" SilphCo1Blocks: INCBIN "maps/silphco1.blk" INCLUDE "data/mapHeaders/saffronpokecenter.asm" INCLUDE "scripts/saffronpokecenter.asm" INCLUDE "data/mapObjects/saffronpokecenter.asm" INCLUDE "data/mapHeaders/viridianforestexit.asm" INCLUDE "scripts/viridianforestexit.asm" INCLUDE "data/mapObjects/viridianforestexit.asm" INCLUDE "data/mapHeaders/route2gate.asm" INCLUDE "scripts/route2gate.asm" INCLUDE "data/mapObjects/route2gate.asm" INCLUDE "data/mapHeaders/viridianforestentrance.asm" INCLUDE "scripts/viridianforestentrance.asm" INCLUDE "data/mapObjects/viridianforestentrance.asm" INCLUDE "data/mapHeaders/undergroundpathentranceroute5.asm" INCLUDE "scripts/undergroundpathentranceroute5.asm" INCLUDE "data/mapObjects/undergroundpathentranceroute5.asm" INCLUDE "data/mapHeaders/undergroundpathentranceroute6.asm" INCLUDE "scripts/undergroundpathentranceroute6.asm" INCLUDE "data/mapObjects/undergroundpathentranceroute6.asm" INCLUDE "data/mapHeaders/undergroundpathentranceroute7.asm" INCLUDE "scripts/undergroundpathentranceroute7.asm" INCLUDE "data/mapObjects/undergroundpathentranceroute7.asm" INCLUDE "data/mapHeaders/undergroundpathentranceroute7copy.asm" INCLUDE "scripts/undergroundpathentranceroute7copy.asm" INCLUDE "data/mapObjects/undergroundpathentranceroute7copy.asm" INCLUDE "data/mapHeaders/silphco9.asm" INCLUDE "scripts/silphco9.asm" INCLUDE "data/mapObjects/silphco9.asm" SilphCo9Blocks: INCBIN "maps/silphco9.blk" INCLUDE "data/mapHeaders/victoryroad1.asm" INCLUDE "scripts/victoryroad1.asm" INCLUDE "data/mapObjects/victoryroad1.asm" VictoryRoad1Blocks: INCBIN "maps/victoryroad1.blk" INCLUDE "engine/predefs17_2.asm" INCLUDE "engine/hidden_object_functions17.asm" SECTION "bank18",ROMX,BANK[$18] ViridianForestBlocks: INCBIN "maps/viridianforest.blk" UndergroundPathNSBlocks: INCBIN "maps/undergroundpathns.blk" UndergroundPathWEBlocks: INCBIN "maps/undergroundpathwe.blk" INCBIN "maps/unusedblocks60258.blk" SSAnne10Blocks: SSAnne9Blocks: INCBIN "maps/ssanne9.blk" INCLUDE "data/mapHeaders/pokemontower1.asm" INCLUDE "scripts/pokemontower1.asm" INCLUDE "data/mapObjects/pokemontower1.asm" PokemonTower1Blocks: INCBIN "maps/pokemontower1.blk" INCLUDE "data/mapHeaders/pokemontower2.asm" INCLUDE "scripts/pokemontower2.asm" INCLUDE "data/mapObjects/pokemontower2.asm" PokemonTower2Blocks: INCBIN "maps/pokemontower2.blk" INCLUDE "data/mapHeaders/pokemontower3.asm" INCLUDE "scripts/pokemontower3.asm" INCLUDE "data/mapObjects/pokemontower3.asm" PokemonTower3Blocks: INCBIN "maps/pokemontower3.blk" INCLUDE "data/mapHeaders/pokemontower4.asm" INCLUDE "scripts/pokemontower4.asm" INCLUDE "data/mapObjects/pokemontower4.asm" PokemonTower4Blocks: INCBIN "maps/pokemontower4.blk" INCLUDE "data/mapHeaders/pokemontower5.asm" INCLUDE "scripts/pokemontower5.asm" INCLUDE "data/mapObjects/pokemontower5.asm" PokemonTower5Blocks: INCBIN "maps/pokemontower5.blk" INCLUDE "data/mapHeaders/pokemontower6.asm" INCLUDE "scripts/pokemontower6.asm" INCLUDE "data/mapObjects/pokemontower6.asm" PokemonTower6Blocks: INCBIN "maps/pokemontower6.blk" INCBIN "maps/unusedblocks60cef.blk" INCLUDE "data/mapHeaders/pokemontower7.asm" INCLUDE "scripts/pokemontower7.asm" INCLUDE "data/mapObjects/pokemontower7.asm" PokemonTower7Blocks: INCBIN "maps/pokemontower7.blk" INCLUDE "data/mapHeaders/celadonmart1.asm" INCLUDE "scripts/celadonmart1.asm" INCLUDE "data/mapObjects/celadonmart1.asm" CeladonMart1Blocks: INCBIN "maps/celadonmart1.blk" INCLUDE "engine/overworld/cinnabar_lab.asm" INCLUDE "data/mapHeaders/viridianforest.asm" INCLUDE "scripts/viridianforest.asm" INCLUDE "data/mapObjects/viridianforest.asm" INCLUDE "data/mapHeaders/ssanne1.asm" INCLUDE "scripts/ssanne1.asm" INCLUDE "data/mapObjects/ssanne1.asm" SSAnne1Blocks: INCBIN "maps/ssanne1.blk" INCLUDE "data/mapHeaders/ssanne2.asm" INCLUDE "scripts/ssanne2.asm" INCLUDE "data/mapObjects/ssanne2.asm" SSAnne2Blocks: INCBIN "maps/ssanne2.blk" INCLUDE "data/mapHeaders/ssanne4.asm" INCLUDE "scripts/ssanne4.asm" INCLUDE "data/mapObjects/ssanne4.asm" SSAnne4Blocks: INCBIN "maps/ssanne4.blk" INCLUDE "data/mapHeaders/ssanne5.asm" INCLUDE "scripts/ssanne5.asm" INCLUDE "data/mapObjects/ssanne5.asm" SSAnne5Blocks: INCBIN "maps/ssanne5.blk" INCLUDE "data/mapHeaders/ssanne6.asm" INCLUDE "scripts/ssanne6.asm" INCLUDE "data/mapObjects/ssanne6.asm" SSAnne6Blocks: INCBIN "maps/ssanne6.blk" INCLUDE "data/mapHeaders/ssanne7.asm" INCLUDE "scripts/ssanne7.asm" INCLUDE "data/mapObjects/ssanne7.asm" SSAnne7Blocks: INCBIN "maps/ssanne7.blk" INCLUDE "data/mapHeaders/ssanne8.asm" INCLUDE "scripts/ssanne8.asm" INCLUDE "data/mapObjects/ssanne8.asm" SSAnne8Blocks: INCBIN "maps/ssanne8.blk" INCLUDE "data/mapHeaders/ssanne9.asm" INCLUDE "scripts/ssanne9.asm" INCLUDE "data/mapObjects/ssanne9.asm" INCLUDE "data/mapHeaders/ssanne10.asm" INCLUDE "scripts/ssanne10.asm" INCLUDE "data/mapObjects/ssanne10.asm" INCLUDE "data/mapHeaders/undergroundpathns.asm" INCLUDE "scripts/undergroundpathns.asm" INCLUDE "data/mapObjects/undergroundpathns.asm" INCLUDE "data/mapHeaders/undergroundpathwe.asm" INCLUDE "scripts/undergroundpathwe.asm" INCLUDE "data/mapObjects/undergroundpathwe.asm" INCLUDE "data/mapHeaders/diglettscave.asm" INCLUDE "scripts/diglettscave.asm" INCLUDE "data/mapObjects/diglettscave.asm" DiglettsCaveBlocks: INCBIN "maps/diglettscave.blk" INCLUDE "data/mapHeaders/silphco11.asm" INCLUDE "scripts/silphco11.asm" INCLUDE "data/mapObjects/silphco11.asm" SilphCo11Blocks: INCBIN "maps/silphco11.blk" INCLUDE "engine/hidden_object_functions18.asm" SECTION "bank19",ROMX,BANK[$19] Overworld_GFX: INCBIN "gfx/tilesets/overworld.w128.t2.2bpp" Overworld_Block: INCBIN "gfx/blocksets/overworld.bst" RedsHouse1_GFX: RedsHouse2_GFX: INCBIN "gfx/tilesets/reds_house.w128.t7.2bpp" RedsHouse1_Block: RedsHouse2_Block: INCBIN "gfx/blocksets/reds_house.bst" House_GFX: INCBIN "gfx/tilesets/house.w128.t2.2bpp" House_Block: INCBIN "gfx/blocksets/house.bst" Mansion_GFX: INCBIN "gfx/tilesets/mansion.w128.t2.2bpp" Mansion_Block: INCBIN "gfx/blocksets/mansion.bst" ShipPort_GFX: INCBIN "gfx/tilesets/ship_port.w128.t2.2bpp" ShipPort_Block: INCBIN "gfx/blocksets/ship_port.bst" Interior_GFX: INCBIN "gfx/tilesets/interior.w128.t1.2bpp" Interior_Block: INCBIN "gfx/blocksets/interior.bst" Plateau_GFX: INCBIN "gfx/tilesets/plateau.w128.t10.2bpp" Plateau_Block: INCBIN "gfx/blocksets/plateau.bst" SECTION "bank1A",ROMX,BANK[$1A] INCLUDE "engine/battle/1a.asm" Version_GFX: IF _RED INCBIN "gfx/red/redgreenversion.h8.1bpp" ; 10 tiles ENDC IF _BLUE INCBIN "gfx/blue/blueversion.h8.1bpp" ; 8 tiles ENDC Dojo_GFX: Gym_GFX: INCBIN "gfx/tilesets/gym.w128.2bpp" Dojo_Block: Gym_Block: INCBIN "gfx/blocksets/gym.bst" Mart_GFX: Pokecenter_GFX: INCBIN "gfx/tilesets/pokecenter.w128.2bpp" Mart_Block: Pokecenter_Block: INCBIN "gfx/blocksets/pokecenter.bst" ForestGate_GFX: Museum_GFX: Gate_GFX: INCBIN "gfx/tilesets/gate.w128.t1.2bpp" ForestGate_Block: Museum_Block: Gate_Block: INCBIN "gfx/blocksets/gate.bst" Forest_GFX: INCBIN "gfx/tilesets/forest.w128.2bpp" Forest_Block: INCBIN "gfx/blocksets/forest.bst" Facility_GFX: INCBIN "gfx/tilesets/facility.w128.2bpp" Facility_Block: INCBIN "gfx/blocksets/facility.bst" SECTION "bank1B",ROMX,BANK[$1B] Cemetery_GFX: INCBIN "gfx/tilesets/cemetery.w128.t4.2bpp" Cemetery_Block: INCBIN "gfx/blocksets/cemetery.bst" Cavern_GFX: INCBIN "gfx/tilesets/cavern.w128.t14.2bpp" Cavern_Block: INCBIN "gfx/blocksets/cavern.bst" Lobby_GFX: INCBIN "gfx/tilesets/lobby.w128.t2.2bpp" Lobby_Block: INCBIN "gfx/blocksets/lobby.bst" Ship_GFX: INCBIN "gfx/tilesets/ship.w128.t6.2bpp" Ship_Block: INCBIN "gfx/blocksets/ship.bst" Lab_GFX: INCBIN "gfx/tilesets/lab.w128.t4.2bpp" Lab_Block: INCBIN "gfx/blocksets/lab.bst" Club_GFX: INCBIN "gfx/tilesets/club.w128.t5.2bpp" Club_Block: INCBIN "gfx/blocksets/club.bst" Underground_GFX: INCBIN "gfx/tilesets/underground.w128.t7.2bpp" Underground_Block: INCBIN "gfx/blocksets/underground.bst" SECTION "bank1C",ROMX,BANK[$1C] INCLUDE "engine/gamefreak.asm" INCLUDE "engine/hall_of_fame.asm" INCLUDE "engine/overworld/healing_machine.asm" INCLUDE "engine/overworld/player_animations.asm" INCLUDE "engine/battle/1c.asm" INCLUDE "engine/town_map.asm" INCLUDE "engine/mon_party_sprites.asm" INCLUDE "engine/in_game_trades.asm" INCLUDE "engine/palettes.asm" INCLUDE "engine/save.asm" SECTION "bank1D",ROMX,BANK[$1D] CopycatsHouse1FBlocks: INCBIN "maps/copycatshouse1f.blk" CinnabarMartBlocks: PewterMartBlocks: INCBIN "maps/pewtermart.blk" FuchsiaHouse1Blocks: INCBIN "maps/fuchsiahouse1.blk" CinnabarPokecenterBlocks: FuchsiaPokecenterBlocks: INCBIN "maps/fuchsiapokecenter.blk" CeruleanHouse2Blocks: INCBIN "maps/ceruleanhouse2.blk" INCLUDE "engine/HoF_room_pc.asm" INCLUDE "engine/status_ailments.asm" INCLUDE "engine/items/itemfinder.asm" INCLUDE "scripts/ceruleancity2.asm" INCLUDE "data/mapHeaders/viridiangym.asm" INCLUDE "scripts/viridiangym.asm" INCLUDE "data/mapObjects/viridiangym.asm" ViridianGymBlocks: INCBIN "maps/viridiangym.blk" INCLUDE "data/mapHeaders/pewtermart.asm" INCLUDE "scripts/pewtermart.asm" INCLUDE "data/mapObjects/pewtermart.asm" INCLUDE "data/mapHeaders/unknowndungeon1.asm" INCLUDE "scripts/unknowndungeon1.asm" INCLUDE "data/mapObjects/unknowndungeon1.asm" UnknownDungeon1Blocks: INCBIN "maps/unknowndungeon1.blk" INCLUDE "data/mapHeaders/ceruleanhouse2.asm" INCLUDE "scripts/ceruleanhouse2.asm" INCLUDE "data/mapObjects/ceruleanhouse2.asm" INCLUDE "engine/menu/vending_machine.asm" INCLUDE "data/mapHeaders/fuchsiahouse1.asm" INCLUDE "scripts/fuchsiahouse1.asm" INCLUDE "data/mapObjects/fuchsiahouse1.asm" INCLUDE "data/mapHeaders/fuchsiapokecenter.asm" INCLUDE "scripts/fuchsiapokecenter.asm" INCLUDE "data/mapObjects/fuchsiapokecenter.asm" INCLUDE "data/mapHeaders/fuchsiahouse2.asm" INCLUDE "scripts/fuchsiahouse2.asm" INCLUDE "data/mapObjects/fuchsiahouse2.asm" FuchsiaHouse2Blocks: INCBIN "maps/fuchsiahouse2.blk" INCLUDE "data/mapHeaders/safarizoneentrance.asm" INCLUDE "scripts/safarizoneentrance.asm" INCLUDE "data/mapObjects/safarizoneentrance.asm" SafariZoneEntranceBlocks: INCBIN "maps/safarizoneentrance.blk" INCLUDE "data/mapHeaders/fuchsiagym.asm" INCLUDE "scripts/fuchsiagym.asm" INCLUDE "data/mapObjects/fuchsiagym.asm" FuchsiaGymBlocks: INCBIN "maps/fuchsiagym.blk" INCLUDE "data/mapHeaders/fuchsiameetingroom.asm" INCLUDE "scripts/fuchsiameetingroom.asm" INCLUDE "data/mapObjects/fuchsiameetingroom.asm" FuchsiaMeetingRoomBlocks: INCBIN "maps/fuchsiameetingroom.blk" INCLUDE "data/mapHeaders/cinnabargym.asm" INCLUDE "scripts/cinnabargym.asm" INCLUDE "data/mapObjects/cinnabargym.asm" CinnabarGymBlocks: INCBIN "maps/cinnabargym.blk" INCLUDE "data/mapHeaders/lab1.asm" INCLUDE "scripts/lab1.asm" INCLUDE "data/mapObjects/lab1.asm" Lab1Blocks: INCBIN "maps/lab1.blk" INCLUDE "data/mapHeaders/lab2.asm" INCLUDE "scripts/lab2.asm" INCLUDE "data/mapObjects/lab2.asm" Lab2Blocks: INCBIN "maps/lab2.blk" INCLUDE "data/mapHeaders/lab3.asm" INCLUDE "scripts/lab3.asm" INCLUDE "data/mapObjects/lab3.asm" Lab3Blocks: INCBIN "maps/lab3.blk" INCLUDE "data/mapHeaders/lab4.asm" INCLUDE "scripts/lab4.asm" INCLUDE "data/mapObjects/lab4.asm" Lab4Blocks: INCBIN "maps/lab4.blk" INCLUDE "data/mapHeaders/cinnabarpokecenter.asm" INCLUDE "scripts/cinnabarpokecenter.asm" INCLUDE "data/mapObjects/cinnabarpokecenter.asm" INCLUDE "data/mapHeaders/cinnabarmart.asm" INCLUDE "scripts/cinnabarmart.asm" INCLUDE "data/mapObjects/cinnabarmart.asm" INCLUDE "data/mapHeaders/copycatshouse1f.asm" INCLUDE "scripts/copycatshouse1f.asm" INCLUDE "data/mapObjects/copycatshouse1f.asm" INCLUDE "data/mapHeaders/gary.asm" INCLUDE "scripts/gary.asm" INCLUDE "data/mapObjects/gary.asm" GaryBlocks: INCBIN "maps/gary.blk" INCLUDE "data/mapHeaders/lorelei.asm" INCLUDE "scripts/lorelei.asm" INCLUDE "data/mapObjects/lorelei.asm" LoreleiBlocks: INCBIN "maps/lorelei.blk" INCLUDE "data/mapHeaders/bruno.asm" INCLUDE "scripts/bruno.asm" INCLUDE "data/mapObjects/bruno.asm" BrunoBlocks: INCBIN "maps/bruno.blk" INCLUDE "data/mapHeaders/agatha.asm" INCLUDE "scripts/agatha.asm" INCLUDE "data/mapObjects/agatha.asm" AgathaBlocks: INCBIN "maps/agatha.blk" INCLUDE "engine/menu/league_pc.asm" INCLUDE "engine/overworld/hidden_items.asm" SECTION "bank1E",ROMX,BANK[$1E] INCLUDE "engine/battle/animations.asm" INCLUDE "engine/overworld/cut2.asm" INCLUDE "engine/overworld/ssanne.asm" RedFishingTilesFront: INCBIN "gfx/red_fishing_tile_front.2bpp" RedFishingTilesBack: INCBIN "gfx/red_fishing_tile_back.2bpp" RedFishingTilesSide: INCBIN "gfx/red_fishing_tile_side.2bpp" RedFishingRodTiles: INCBIN "gfx/red_fishingrod_tiles.2bpp" INCLUDE "data/animations.asm" INCLUDE "engine/evolution.asm" INCLUDE "engine/overworld/elevator.asm" INCLUDE "engine/items/tm_prices.asm"