diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2015-11-16 21:46:36 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2015-11-16 21:46:36 -0500 |
commit | 042fc4bfe5f55df87712d33b6f832a591b136f1a (patch) | |
tree | 6709cb7a5b303aadaa094ce216c86e7f5f117ba0 /event | |
parent | ba871547eda6e17e988f4e1dfa7b899050205d5e (diff) |
Split up some more banks in main.asm
Diffstat (limited to 'event')
-rw-r--r-- | event/buena.asm | 2 | ||||
-rwxr-xr-x | event/daycare.asm | 768 | ||||
-rwxr-xr-x | event/field_moves.asm | 312 | ||||
-rwxr-xr-x | event/magnet_train.asm | 485 |
4 files changed, 1566 insertions, 1 deletions
diff --git a/event/buena.asm b/event/buena.asm index 3662f110d..7079c0259 100644 --- a/event/buena.asm +++ b/event/buena.asm @@ -11,7 +11,7 @@ SpecialBuenasPassword: ; 8af6b add $2 ld [wMenuBorderRightCoord], a call BackUpTiles - call Function1e5d ; menu + call DoNthMenu ; menu callba Function4ae5e ld b, $0 ld a, [MenuSelection] diff --git a/event/daycare.asm b/event/daycare.asm new file mode 100755 index 000000000..3ea64d38c --- /dev/null +++ b/event/daycare.asm @@ -0,0 +1,768 @@ +Special_DayCareMan: ; 166d6 + ld hl, wDaycareMan + bit 0, [hl] + jr nz, .asm_166fe + ld hl, wDaycareMan + ld a, $0 + call Function1678f + jr c, .asm_16724 + call Function16798 + jr c, .asm_16721 + callba Functionde2a + ld hl, wDaycareMan + set 0, [hl] + call Function167f6 + call Function16a3b + ret + +.asm_166fe + callba Functione698 + ld hl, wBreedMon1Nick + call Function1686d + call Function16807 + jr c, .asm_16721 + callba Functiondd21 + call Function16850 + ld hl, wDaycareMan + res 0, [hl] + res 5, [hl] + jr .asm_16724 + +.asm_16721 + call Function1689b + +.asm_16724 + ld a, $13 + call Function1689b + ret +; 1672a + +Special_DayCareLady: ; 1672a + ld hl, wDaycareLady + bit 0, [hl] + jr nz, .asm_16752 + ld hl, wDaycareLady + ld a, $2 + call Function16781 + jr c, .asm_1677b + call Function16798 + jr c, .asm_16778 + callba Functionde37 + ld hl, wDaycareLady + set 0, [hl] + call Function167f6 + call Function16a3b + ret + +.asm_16752 + callba Functione6b3 + ld hl, wBreedMon2Nick + call Function1686d + call Function16807 + jr c, .asm_16778 + callba Functiondd42 + call Function16850 + ld hl, wDaycareLady + res 0, [hl] + ld hl, wDaycareMan + res 5, [hl] + jr .asm_1677b + +.asm_16778 + call Function1689b + +.asm_1677b + ld a, $13 + call Function1689b + ret +; 16781 + +Function16781: ; 16781 + bit 7, [hl] + jr nz, .asm_16788 + set 7, [hl] + inc a + +.asm_16788 + call Function1689b + call YesNoBox + ret +; 1678f + +Function1678f: ; 1678f + set 7, [hl] + call Function1689b + call YesNoBox + ret +; 16798 + +Function16798: ; 16798 + ld a, [PartyCount] + cp 2 + jr c, .asm_167e5 + ld a, 4 + call Function1689b + ld b, 6 + callba Function5001d + jr c, .asm_167dd + ld a, [CurPartySpecies] + cp EGG + jr z, .asm_167e1 + callba CheckCurPartyMonFainted + jr c, .asm_167e9 + ld hl, PartyMon1Item + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [CurPartyMon] + call AddNTimes + ld d, [hl] + callba ItemIsMail + jr c, .asm_167ed + ld hl, PartyMonNicknames + ld a, [CurPartyMon] + call GetNick + and a + ret + +.asm_167dd + ld a, $12 + scf + ret + +.asm_167e1 + ld a, $6 + scf + ret + +.asm_167e5 + ld a, $7 + scf + ret + +.asm_167e9 + ld a, $8 + scf + ret + +.asm_167ed + ld a, $a + scf + ret +; 167f1 + +UnknownText_0x167f1: ; 0x167f1 + ; + text_jump UnknownText_0x1bdaa7 + db "@" +; 0x167f6 + +Function167f6: ; 167f6 + ld a, $5 + call Function1689b + ld a, [CurPartySpecies] + call PlayCry + ld a, $9 + call Function1689b + ret +; 16807 + +Function16807: ; 16807 + ld a, [StringBuffer2 + 1] + and a + jr nz, .asm_16819 + ld a, $f + call Function1689b + call YesNoBox + jr c, .asm_16844 + jr .asm_1682d + +.asm_16819 + ld a, $b + call Function1689b + call YesNoBox + jr c, .asm_16844 + ld a, $c + call Function1689b + call YesNoBox + jr c, .asm_16844 + +.asm_1682d + ld de, Money + ld bc, StringBuffer2 + 2 + callba CompareMoney + jr c, .asm_16848 + ld a, [PartyCount] + cp $6 + jr nc, .asm_1684c + and a + ret + +.asm_16844 + ld a, $12 + scf + ret + +.asm_16848 + ld a, $11 + scf + ret + +.asm_1684c + ld a, $10 + scf + ret +; 16850 + +Function16850: ; 16850 + ld bc, StringBuffer2 + 2 + ld de, Money + callba TakeMoney + ld a, $d + call Function1689b + ld a, [CurPartySpecies] + call PlayCry + ld a, $e + call Function1689b + ret +; 1686d + +Function1686d: ; 1686d + ld a, b + ld [StringBuffer2], a + ld a, d + ld [StringBuffer2 + 1], a + ld de, StringBuffer1 + ld bc, NAME_LENGTH + call CopyBytes + ld hl, 0 + ld bc, $64 + ld a, [StringBuffer2 + 1] + call AddNTimes + ld de, $64 + add hl, de + xor a + ld [StringBuffer2 + 2], a + ld a, h + ld [StringBuffer2 + 3], a + ld a, l + ld [StringBuffer2 + 4], a + ret +; 1689b + +Function1689b: ; 1689b + ld e, a + ld d, 0 + ld hl, TextTable_168aa +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + call PrintText + ret +; 168aa + +TextTable_168aa: ; 168aa + dw UnknownText_0x168d2 + dw UnknownText_0x168d7 + dw UnknownText_0x168dc + dw UnknownText_0x168e1 + dw UnknownText_0x168e6 + dw UnknownText_0x168ff + dw UnknownText_0x168f0 + dw UnknownText_0x168eb + dw UnknownText_0x168fa + dw UnknownText_0x16904 + dw UnknownText_0x168f5 + dw UnknownText_0x16909 + dw UnknownText_0x1690e + dw UnknownText_0x16913 + dw UnknownText_0x16918 + dw UnknownText_0x1691d + dw UnknownText_0x16922 + dw UnknownText_0x16927 + dw UnknownText_0x1692c + dw UnknownText_0x16931 +; 168d2 + +UnknownText_0x168d2: ; 0x168d2 + ; I'm the DAY-CARE MAN. Want me to raise a #MON? + text_jump UnknownText_0x1bdaa9 + db "@" +; 0x168d7 + +UnknownText_0x168d7: ; 0x168d7 + ; I'm the DAY-CARE MAN. Do you know about EGGS? I was raising #MON with my wife, you see. We were shocked to find an EGG! How incredible is that? So, want me to raise a #MON? + text_jump UnknownText_0x1bdad8 + db "@" +; 0x168dc + +UnknownText_0x168dc: ; 0x168dc + ; I'm the DAY-CARE LADY. Should I raise a #MON for you? + text_jump UnknownText_0x1bdb85 + db "@" +; 0x168e1 + +UnknownText_0x168e1: ; 0x168e1 + ; I'm the DAY-CARE LADY. Do you know about EGGS? My husband and I were raising some #MON, you see. We were shocked to find an EGG! How incredible could that be? Should I raise a #MON for you? + text_jump UnknownText_0x1bdbbb + db "@" +; 0x168e6 + +UnknownText_0x168e6: ; 0x168e6 + ; What should I raise for you? + text_jump UnknownText_0x1bdc79 + db "@" +; 0x168eb + +UnknownText_0x168eb: ; 0x168eb + ; Oh? But you have just one #MON. + text_jump UnknownText_0x1bdc97 + db "@" +; 0x168f0 + +UnknownText_0x168f0: ; 0x168f0 + ; Sorry, but I can't accept an EGG. + text_jump UnknownText_0x1bdcb8 + db "@" +; 0x168f5 + +UnknownText_0x168f5: ; 0x168f5 + ; Remove MAIL before you come see me. + text_jump UnknownText_0x1bdcda + db "@" +; 0x168fa + +UnknownText_0x168fa: ; 0x168fa + ; If you give me that, what will you battle with? + text_jump UnknownText_0x1bdcff + db "@" +; 0x168ff + +UnknownText_0x168ff: ; 0x168ff + ; OK. I'll raise your @ . + text_jump UnknownText_0x1bdd30 + db "@" +; 0x16904 + +UnknownText_0x16904: ; 0x16904 + ; Come back for it later. + text_jump UnknownText_0x1bdd4b + db "@" +; 0x16909 + +UnknownText_0x16909: ; 0x16909 + ; Are we geniuses or what? Want to see your @ ? + text_jump UnknownText_0x1bdd64 + db "@" +; 0x1690e + +UnknownText_0x1690e: ; 0x1690e + ; Your @ has grown a lot. By level, it's grown by @ . If you want your #MON back, it will cost ¥@ . + text_jump UnknownText_0x1bdd96 + db "@" +; 0x16913 + +UnknownText_0x16913: ; 0x16913 + ; Perfect! Here's your #MON. + text_jump UnknownText_0x1bde04 + db "@" +; 0x16918 + +UnknownText_0x16918: ; 0x16918 + ; got back @ . + text_jump UnknownText_0x1bde1f + db "@" +; 0x1691d + +UnknownText_0x1691d: ; 0x1691d + ; Huh? Back already? Your @ needs a little more time with us. If you want your #MON back, it will cost ¥100. + text_jump UnknownText_0x1bde32 + db "@" +; 0x16922 + +UnknownText_0x16922: ; 0x16922 + ; You have no room for it. + text_jump UnknownText_0x1bdea2 + db "@" +; 0x16927 + +UnknownText_0x16927: ; 0x16927 + ; You don't have enough money. + text_jump UnknownText_0x1bdebc + db "@" +; 0x1692c + +UnknownText_0x1692c: ; 0x1692c + ; Oh, fine then. + text_jump UnknownText_0x1bded9 + db "@" +; 0x16931 + +UnknownText_0x16931: ; 0x16931 + ; Come again. + text_jump UnknownText_0x1bdee9 + db "@" +; 0x16936 + +Special_DayCareManOutside: ; 16936 + ld hl, wDaycareMan + bit 6, [hl] + jr nz, Function16949 + ld hl, UnknownText_0x16944 + call PrintText + ret + +UnknownText_0x16944: ; 0x16944 + ; Not yet… + text_jump UnknownText_0x1bdef6 + db "@" +; 0x16949 + +Function16949: ; 16949 + ld hl, UnknownText_0x16993 + call PrintText + call YesNoBox + jr c, .asm_1697c + ld a, [PartyCount] + cp PARTY_LENGTH + jr nc, .asm_16987 + call Function169ac + ld hl, wDaycareMan + res 6, [hl] + call Function16a3b + ld hl, UnknownText_0x16998 + call PrintText + ld de, SFX_GET_EGG_FROM_DAYCARE_LADY + call PlaySFX + ld c, 120 + call DelayFrames + ld hl, UnknownText_0x1699d + jr .asm_1697f + +.asm_1697c + ld hl, UnknownText_0x169a2 + +.asm_1697f + call PrintText + xor a + ld [ScriptVar], a + ret + +.asm_16987 + ld hl, UnknownText_0x169a7 + call PrintText + ld a, $1 + ld [ScriptVar], a + ret +; 16993 + +UnknownText_0x16993: ; 0x16993 + ; Ah, it's you! We were raising your #MON, and my goodness, were we surprised! Your #MON had an EGG! We don't know how it got there, but your #MON had it. You want it? + text_jump UnknownText_0x1bdf00 + db "@" +; 0x16998 + +UnknownText_0x16998: ; 0x16998 + ; received the EGG! + text_jump UnknownText_0x1bdfa5 + db "@" +; 0x1699d + +UnknownText_0x1699d: ; 0x1699d + ; Take good care of it. + text_jump UnknownText_0x1bdfba + db "@" +; 0x169a2 + +UnknownText_0x169a2: ; 0x169a2 + ; Well then, I'll keep it. Thanks! + text_jump UnknownText_0x1bdfd1 + db "@" +; 0x169a7 + +UnknownText_0x169a7: ; 0x169a7 + ; You have no room in your party. Come back later. + text_jump UnknownText_0x1bdff2 + db "@" +; 0x169ac + +Function169ac: ; 169ac + ld a, [wEggMonLevel] + ld [CurPartyLevel], a + ld hl, PartyCount + ld a, [hl] + cp PARTY_LENGTH + jr nc, .asm_16a2f + inc a + ld [hl], a + ld c, a + ld b, 0 + add hl, bc + ld a, EGG + ld [hli], a + ld a, [wEggMonSpecies] + ld [CurSpecies], a + ld [CurPartySpecies], a + ld a, $ff + ld [hl], a + ld hl, PartyMonNicknames + ld bc, PKMN_NAME_LENGTH + call Function16a31 + ld hl, wEggNick + call CopyBytes + ld hl, PartyMonOT + ld bc, NAME_LENGTH + call Function16a31 + ld hl, wEggOT + call CopyBytes + ld hl, PartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH + call Function16a31 + ld hl, wEggMon + ld bc, wEggMonEnd - wEggMon + call CopyBytes + call GetBaseData + ld a, [PartyCount] + dec a + ld hl, PartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld b, h + ld c, l + ld hl, MON_ID + 1 + add hl, bc + push hl + ld hl, MON_MAXHP + add hl, bc + ld d, h + ld e, l + pop hl + push bc + ld b, $0 + predef CalcPkmnStats + pop bc + ld hl, MON_HP + add hl, bc + xor a + ld [hli], a + ld [hl], a + and a + ret + +.asm_16a2f + scf + ret +; 16a31 + +Function16a31: ; 16a31 + ld a, [PartyCount] + dec a + call AddNTimes + ld d, h + ld e, l + ret +; 16a3b + +Function16a3b: ; 16a3b + ld a, [wDaycareLady] + bit 0, a + ret z + ld a, [wDaycareMan] + bit 0, a + ret z + callab Function16e1d + ld a, [wd265] + and a + ret z + inc a + ret z + ld hl, wDaycareMan + set 5, [hl] +.asm_16a59 + call Random + cp 150 + jr c, .asm_16a59 + ld [wStepsToEgg], a + jp Function16a66 +; 16a66 + +Function16a66: ; 16a66 + xor a + ld hl, wEggMon + ld bc, wEggMonEnd - wEggMon + call ByteFill + ld hl, wEggNick + ld bc, PKMN_NAME_LENGTH + call ByteFill + ld hl, wEggOT + ld bc, NAME_LENGTH + call ByteFill + ld a, [wBreedMon1DVs] + ld [TempMonDVs], a + ld a, [wBreedMon1DVs + 1] + ld [TempMonDVs + 1], a + ld a, [wBreedMon1Species] + ld [CurPartySpecies], a + ld a, $3 + ld [MonType], a + ld a, [wBreedMon1Species] + cp DITTO + ld a, $1 + jr z, .asm_16ab6 + ld a, [wBreedMon2Species] + cp DITTO + ld a, $0 + jr z, .asm_16ab6 + callba GetGender + ld a, $0 + jr z, .asm_16ab6 + inc a + +.asm_16ab6 + ld [wDittoInDaycare], a + and a + ld a, [wBreedMon1Species] + jr z, .asm_16ac2 + ld a, [wBreedMon2Species] + +.asm_16ac2 + ld [CurPartySpecies], a + callab GetPreEvolution + callab GetPreEvolution + ld a, EGG_LEVEL + ld [CurPartyLevel], a + + ld a, [CurPartySpecies] + cp NIDORAN_F + jr nz, .asm_16ae8 + call Random + cp $80 + ld a, NIDORAN_F + jr c, .asm_16ae8 + ld a, NIDORAN_M +.asm_16ae8 + ld [CurPartySpecies], a + ld [CurSpecies], a + ld [wEggMonSpecies], a + + call GetBaseData + ld hl, wEggNick + ld de, String_16be0 + call CopyName2 + ld hl, PlayerName + ld de, wEggOT + ld bc, NAME_LENGTH + call CopyBytes + xor a + ld [wEggMonItem], a + ld de, wEggMonMoves + xor a + ld [Buffer1], a + predef FillMoves + callba Function170bf + ld hl, wEggMonID + ld a, [PlayerID] + ld [hli], a + ld a, [PlayerID + 1] + ld [hl], a + ld a, [CurPartyLevel] + ld d, a + callab CalcExpAtLevel + ld hl, wEggMonExp + ld a, [hMultiplicand] + ld [hli], a + ld a, [$ffb5] + ld [hli], a + ld a, [$ffb6] + ld [hl], a + xor a + ld b, $a + ld hl, wEggMonStatExp +.asm_16b46 + ld [hli], a + dec b + jr nz, .asm_16b46 + ld hl, wEggMonDVs + call Random + ld [hli], a + ld [TempMonDVs], a + call Random + ld [hld], a + ld [TempMonDVs + 1], a + ld de, wBreedMon1DVs + ld a, [wBreedMon1Species] + cp DITTO + jr z, .asm_16b98 + ld de, wBreedMon2DVs + ld a, [wBreedMon2Species] + cp DITTO + jr z, .asm_16b98 + ld a, $3 + ld [MonType], a + push hl + callba GetGender + pop hl + ld de, wBreedMon1DVs + ld bc, wBreedMon2DVs + jr c, .asm_16bab + jr z, .asm_16b90 + ld a, [wDittoInDaycare] + and a + jr z, .asm_16b98 + ld d, b + ld e, c + jr .asm_16b98 + +.asm_16b90 + ld a, [wDittoInDaycare] + and a + jr nz, .asm_16b98 + ld d, b + ld e, c + +.asm_16b98 + ld a, [de] + inc de + and $f + ld b, a + ld a, [hl] + and $f0 + add b + ld [hli], a + ld a, [de] + and $7 + ld b, a + ld a, [hl] + and $f8 + add b + ld [hl], a + +.asm_16bab + ld hl, StringBuffer1 + ld de, wd050 + ld bc, NAME_LENGTH + call CopyBytes + ld hl, wEggMonMoves + ld de, wEggMonPP + predef FillPP + ld hl, wd050 + ld de, StringBuffer1 + ld bc, NAME_LENGTH + call CopyBytes + ld a, [BaseEggSteps] + ld hl, wEggMonHappiness + ld [hli], a + xor a +rept 2 + ld [hli], a +endr + ld [hl], a + ld a, [CurPartyLevel] + ld [wEggMonLevel], a + ret +; 16be0 + +String_16be0: ; 16be0 + db "EGG@" +; 16be4 diff --git a/event/field_moves.asm b/event/field_moves.asm new file mode 100755 index 000000000..d6fa4a0bb --- /dev/null +++ b/event/field_moves.asm @@ -0,0 +1,312 @@ +PlayWhirlpoolSound: ; 8c7d4 + call WaitSFX + ld de, SFX_SURF + call PlaySFX + call WaitSFX + ret +; 8c7e1 + +BlindingFlash: ; 8c7e1 + callba FadeOutPalettes + ld hl, StatusFlags + set 2, [hl] + callba Function8c0e5 + callba Function8c001 + ld b, SCGB_09 + call GetSGBLayout + callba Function49409 + callba FadeInPalettes + ret +; 8c80a + +ShakeHeadbuttTree: ; 8c80a + callba Function8cf53 + ld de, CutGrassGFX + ld hl, VTiles1 + lb bc, BANK(CutGrassGFX), 4 + call Request2bpp + ld de, HeadbuttTreeGFX + ld hl, VTiles1 tile $04 + lb bc, BANK(HeadbuttTreeGFX), 8 + call Request2bpp + call Function8cad3 + ld a, SPRITE_ANIM_INDEX_1B + call _InitSpriteAnimStruct + ld hl, $3 + add hl, bc + ld [hl], $84 + ld a, $90 + ld [wc3b5], a + callba Function8cf7a + call GetHeadbuttTreeRelativeLocation + ld a, $20 + ld [wcf64], a + call WaitSFX + ld de, SFX_SANDSTORM + call PlaySFX +.loop + ld hl, wcf64 + ld a, [hl] + and a + jr z, .done + dec [hl] + ld a, $90 + ld [wc3b5], a + callba Function8cf7a + call DelayFrame + jr .loop + +.done + call OverworldTextModeSwitch + call WaitBGMap + xor a + ld [hBGMapMode], a + callba Function8cf53 + ld hl, Sprites + $90 + ld bc, $10 + xor a + call ByteFill + ld de, Font + ld hl, VTiles1 + lb bc, BANK(Font), $c + call Get1bpp + call ReplaceKrisSprite + ret +; 8c893 + +HeadbuttTreeGFX: ; 8c893 +INCBIN "gfx/unknown/08c893.2bpp" +; 8c913 + +GetHeadbuttTreeRelativeLocation: ; 8c913 + xor a + ld [hBGMapMode], a + ld a, [PlayerDirection] + and %00001100 + srl a + ld e, a + ld d, 0 + ld hl, TreeRelativeLocationTable + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + + ld a, $5 + ld [hli], a + ld [hld], a + ld bc, SCREEN_WIDTH + add hl, bc + ld [hli], a + ld [hld], a + call WaitBGMap + xor a + ld [hBGMapMode], a + ret +; 8c938 + +TreeRelativeLocationTable: ; 8c938 + dwcoord 8, 8 + 2 ; RIGHT + dwcoord 8, 8 - 2 ; LEFT + dwcoord 8 - 2, 8 ; DOWN + dwcoord 8 + 2, 8 ; UP +; 8c940 + +OWCutAnimation: ; 8c940 + ld a, e + and $1 + ld [wJumptableIndex], a + call .LoadCutGFX + call WaitSFX + ld de, SFX_PLACE_PUZZLE_PIECE_DOWN + call PlaySFX +.loop + ld a, [wJumptableIndex] + bit 7, a + jr nz, .finish + ld a, $90 + ld [wc3b5], a + callab Function8cf7a + call OWCutJumptable + call DelayFrame + jr .loop + +.finish + ret +; 8c96d + +.LoadCutGFX: ; 8c96d + callab Function8cf53 ; pointless to farcall + ld de, CutGrassGFX + ld hl, VTiles1 + lb bc, BANK(CutGrassGFX), 4 + call Request2bpp + ld de, CutTreeGFX + ld hl, VTiles1 tile $4 + lb bc, BANK(CutTreeGFX), 4 + call Request2bpp + ret +; 8c98c + +CutTreeGFX: ; c898c +INCBIN "gfx/misc/cut_tree.2bpp" +; c89cc + +CutGrassGFX: ; 8c9cc +INCBIN "gfx/misc/cut_grass.2bpp" +; 8ca0c + +OWCutJumptable: ; 8ca0c + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, .jumptable +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 8ca1b + + +.jumptable: ; 8ca1b (23:4a1b) + dw Function8ca23 + dw Function8ca3c + dw Function8ca5c + dw Function8ca64 + + +Function8ca23: ; 8ca23 (23:4a23) + call Function8cad3 + ld a, SPRITE_ANIM_INDEX_17 ; leaf + call _InitSpriteAnimStruct + ld hl, $3 + add hl, bc + ld [hl], $84 + ld a, $20 + ld [wcf64], a + ld hl, wJumptableIndex +rept 2 + inc [hl] +endr + ret + +Function8ca3c: ; 8ca3c (23:4a3c) + call Function8ca8e + xor a + call Function8ca73 + ld a, $10 + call Function8ca73 + ld a, $20 + call Function8ca73 + ld a, $30 + call Function8ca73 + ld a, $20 + ld [wcf64], a + ld hl, wJumptableIndex + inc [hl] + ret + +Function8ca5c: ; 8ca5c (23:4a5c) + ld a, $1 + ld [hBGMapMode], a + ld hl, wJumptableIndex + inc [hl] + +Function8ca64: ; 8ca64 (23:4a64) + ld hl, wcf64 + ld a, [hl] + and a + jr z, .asm_8ca6d + dec [hl] + ret +.asm_8ca6d + ld hl, wJumptableIndex + set 7, [hl] + ret + +Function8ca73: ; 8ca73 (23:4a73) + push de + push af + ld a, SPRITE_ANIM_INDEX_16 ; fly takeoff + call _InitSpriteAnimStruct + ld hl, $3 + add hl, bc + ld [hl], $80 + ld hl, $e + add hl, bc + ld [hl], $4 + pop af + ld hl, $c + add hl, bc + ld [hl], a + pop de + ret + +Function8ca8e: ; 8ca8e (23:4a8e) + ld de, 0 + ld a, [wd197] + bit 0, a + jr z, .asm_8ca9a + set 0, e +.asm_8ca9a + ld a, [wd196] + bit 0, a + jr z, .asm_8caa3 + set 1, e +.asm_8caa3 + ld a, [PlayerDirection] + and $c + add e + ld e, a + ld hl, Unknown_8cab3 +rept 2 + add hl, de +endr + ld e, [hl] + inc hl + ld d, [hl] + ret +; 8cab3 (23:4ab3) + +Unknown_8cab3: ; 8cab3 + db $58, $60 + db $48, $60 + db $58, $70 + db $48, $70 + db $58, $40 + db $48, $40 + db $58, $50 + db $48, $50 + db $38, $60 + db $48, $60 + db $38, $50 + db $48, $50 + db $58, $60 + db $68, $60 + db $58, $50 + db $68, $50 +; 8cad3 + +Function8cad3: ; 8cad3 (23:4ad3) + ld a, [PlayerDirection] + and $c + srl a + ld e, a + ld d, 0 + ld hl, Unknown_8cae5 + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ret +; 8cae5 (23:4ae5) + +Unknown_8cae5: ; 8cae5 + db $50, $68 + db $50, $48 + db $40, $58 + db $60, $58 +; 8caed diff --git a/event/magnet_train.asm b/event/magnet_train.asm new file mode 100755 index 000000000..2c215ee63 --- /dev/null +++ b/event/magnet_train.asm @@ -0,0 +1,485 @@ +Special_MagnetTrain: ; 8cc04 + ld a, [ScriptVar] + and a + jr nz, .ToGoldenrod + ld a, 1 ; forwards + lb bc, $40, $60 + ld de, $fca0 + jr .continue + +.ToGoldenrod + ld a, -1 ; backwards + lb bc, $c0, $a0 + ld de, $b460 + +.continue + ld h, a + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld a, h + ld [w5_d191], a + ld a, c + ld [w5_d192], a + ld a, b + ld [w5_d193], a + ld a, e + ld [w5_d194], a + ld a, d + ld [w5_d195], a + ld a, [hSCX] + push af + ld a, [hSCY] + push af + call Function8ccc9 + ld hl, hVBlank + ld a, [hl] + push af + ld [hl], $1 +.loop + ld a, [wJumptableIndex] + and a + jr z, .initialize + bit 7, a + jr nz, .done + callab Function8cf69 + call Function8cdf7 + call Function8cc99 + call Function3b0c + call DelayFrame + jr .loop + +.initialize + call Function8ceae + jr .loop + +.done + pop af + ld [hVBlank], a + call ClearBGPalettes + xor a + ld [hLCDStatCustom], a + ld [hLCDStatCustom + 1], a + ld [hLCDStatCustom + 2], a + ld [hSCX], a + ld [Requested2bppSource], a + ld [Requested2bppSource + 1], a + ld [Requested2bppDest], a + ld [Requested2bppDest + 1], a + ld [Requested2bpp], a + call ClearTileMap + pop af + ld [hSCY], a + pop af + ld [hSCX], a + xor a + ld [hBGMapMode], a + pop af + ld [rSVBK], a + ret +; 8cc99 + +Function8cc99: ; 8cc99 + ld hl, LYOverridesBackup + ld c, $2f + ld a, [wcf64] + add a + ld [hSCX], a + call Function8ccc4 + ld c, $30 + ld a, [wcf65] + call Function8ccc4 + ld c, $31 + ld a, [wcf64] + add a + call Function8ccc4 + ld a, [wd191] + ld d, a + ld hl, wcf64 + ld a, [hl] +rept 2 + add d +endr + ld [hl], a + ret +; 8ccc4 + +Function8ccc4: ; 8ccc4 +.asm_8ccc4 + ld [hli], a + dec c + jr nz, .asm_8ccc4 + ret +; 8ccc9 + +Function8ccc9: ; 8ccc9 + call ClearBGPalettes + call ClearSprites + call DisableLCD + callab Function8cf53 + call SetMagnetTrainPals + call DrawMagnetTrain + ld a, $90 + ld [hWY], a + call EnableLCD + xor a + ld [hBGMapMode], a + ld [hSCX], a + ld [hSCY], a + ld a, [rSVBK] + push af + ld a, $1 + ld [rSVBK], a + callba GetPlayerIcon + pop af + ld [rSVBK], a + ld hl, VTiles0 + ld c, $4 + call Request2bpp + ld hl, $c0 + add hl, de + ld d, h + ld e, l + ld hl, VTiles0 tile $04 + ld c, $4 + call Request2bpp + call Function8cda6 + ld hl, wJumptableIndex + xor a + ld [hli], a + ld a, [wd192] +rept 3 + ld [hli], a +endr + ld de, MUSIC_MAGNET_TRAIN + call PlayMusic2 + ret +; 8cd27 + +DrawMagnetTrain: ; 8cd27 + ld hl, VBGMap0 + xor a +.asm_8cd2b + call GetMagnetTrainBGTiles + ld b, 32 / 2 + call .FillAlt + inc a + cp $12 + jr c, .asm_8cd2b + ld hl, VBGMap0 tile $0c + ld de, MagnetTrainTilemap1 + ld c, 20 + call .FillLine + ld hl, VBGMap0 tile $0e + ld de, MagnetTrainTilemap2 + ld c, 20 + call .FillLine + ld hl, VBGMap0 tile $10 + ld de, MagnetTrainTilemap3 + ld c, 20 + call .FillLine + ld hl, VBGMap0 tile $12 + ld de, MagnetTrainTilemap4 + ld c, 20 + call .FillLine + ret +; 8cd65 + +.FillLine ; 8cd65 + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .FillLine + ret +; 8cd6c + +.FillAlt ; 8cd6c + ld [hl], e + inc hl + ld [hl], d + inc hl + dec b + jr nz, .FillAlt + ret +; 8cd74 + +GetMagnetTrainBGTiles: ; 8cd74 + push hl + ld e, a + ld d, 0 + ld hl, MagnetTrainBGTiles +rept 2 + add hl, de +endr + ld e, [hl] + inc hl + ld d, [hl] + pop hl + ret +; 8cd82 + +MagnetTrainBGTiles: ; 8cd82 +; Alternating tiles for each line +; of the Magnet Train tilemap. + db $4c, $4d ; bush + db $5c, $5d ; bush + db $4c, $4d ; bush + db $5c, $5d ; bush + db $08, $08 ; fence + db $18, $18 ; fence + db $1f, $1f ; track + db $31, $31 ; track + db $11, $11 ; track + db $11, $11 ; track + db $0d, $0d ; track + db $31, $31 ; track + db $04, $04 ; fence + db $18, $18 ; fence + db $4c, $4d ; bush + db $5c, $5d ; bush + db $4c, $4d ; bush + db $5c, $5d ; bush +; 8cda6 + +Function8cda6: ; 8cda6 + ld hl, LYOverrides + ld bc, $90 + ld a, [wd192] + call ByteFill + ld hl, LYOverridesBackup + ld bc, $90 + ld a, [wd192] + call ByteFill + ld a, $43 + ld [hLCDStatCustom], a + ret +; 8cdc3 + +SetMagnetTrainPals: ; 8cdc3 + ld a, $1 + ld [rVBK], a + + ; bushes + ld hl, VBGMap0 + ld bc, 8 tiles + ld a, $2 + call ByteFill + + ; train + ld hl, VBGMap0 tile $08 + ld bc, 20 tiles + xor a + call ByteFill + + ; more bushes + ld hl, VBGMap0 tile $1c + ld bc, 8 tiles + ld a, $2 + call ByteFill + + ; train window + ld hl, VBGMap0 tile $10 + 7 + ld bc, 6 + ld a, $4 + call ByteFill + + ld a, $0 + ld [rVBK], a + ret +; 8cdf7 + +Function8cdf7: ; 8cdf7 + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, Jumptable_8ce06 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 8ce06 + +Jumptable_8ce06: ; 8ce06 + dw Function8ce19 + dw Function8ce6d + dw Function8ce47 + dw Function8ce6d + dw Function8ce7a + dw Function8ce6d + dw Function8cea2 +; 8ce14 + +Function8ce14: ; 8ce14 + ld hl, wJumptableIndex + inc [hl] + ret +; 8ce19 + +Function8ce19: ; 8ce19 + ld d, $55 + ld a, [wd194 + 1] + ld e, a + ld b, SPRITE_ANIM_INDEX_15 + ld a, [rSVBK] + push af + ld a, $1 + ld [rSVBK], a + ld a, [PlayerGender] + bit 0, a + jr z, .asm_8ce31 + ld b, SPRITE_ANIM_INDEX_1F + +.asm_8ce31 + pop af + ld [rSVBK], a + ld a, b + call _InitSpriteAnimStruct + ld hl, $3 + add hl, bc + ld [hl], $0 + call Function8ce14 + ld a, $80 + ld [wcf66], a + ret +; 8ce47 + +Function8ce47: ; 8ce47 + ld hl, wd193 + ld a, [wcf65] + cp [hl] + jr z, .asm_8ce64 + ld e, a + ld a, [wd191] + xor $ff + inc a + add e + ld [wcf65], a + ld hl, wc3c0 + ld a, [wd191] + add [hl] + ld [hl], a + ret + +.asm_8ce64 + call Function8ce14 + ld a, $80 + ld [wcf66], a + ret +; 8ce6d + +Function8ce6d: ; 8ce6d + ld hl, wcf66 + ld a, [hl] + and a + jr z, .asm_8ce76 + dec [hl] + ret + +.asm_8ce76 + call Function8ce14 + ret +; 8ce7a + +Function8ce7a: ; 8ce7a + ld hl, wd194 + ld a, [wcf65] + cp [hl] + jr z, .asm_8ce9e + ld e, a + ld a, [wd191] + xor $ff + inc a + ld d, a + ld a, e +rept 2 + add d +endr + ld [wcf65], a + ld hl, wc3c0 + ld a, [wd191] + ld d, a + ld a, [hl] +rept 2 + add d +endr + ld [hl], a + ret + + ret + +.asm_8ce9e + call Function8ce14 + ret +; 8cea2 + +Function8cea2: ; 8cea2 + ld a, $80 + ld [wJumptableIndex], a + ld de, SFX_TRAIN_ARRIVED + call PlaySFX + ret +; 8ceae + +Function8ceae: ; 8ceae + callba Function8cf69 + call Function8cdf7 + call Function8cc99 + call Function3b0c + call DelayFrame + ld a, [rSVBK] + push af + ld a, $1 + ld [rSVBK], a + ld a, [TimeOfDayPal] + push af + ld a, [wPermission] + push af + ld a, [TimeOfDay] + and $3 + ld [TimeOfDayPal], a + ld a, $1 + ld [wPermission], a + ld b, SCGB_09 + call GetSGBLayout + call UpdateTimePals + ld a, [rBGP] + ld [wcfc7], a + ld a, [rOBP0] + ld [wcfc8], a + ld a, [rOBP1] + ld [wcfc9], a + pop af + ld [wPermission], a + pop af + ld [TimeOfDayPal], a + pop af + ld [rSVBK], a + ret +; 8ceff + +MagnetTrainTilemap1: + db $1f, $05, $06, $0a, $0a + db $0a, $09, $0a, $0a, $0a + db $0a, $0a, $0a, $09, $0a + db $0a, $0a, $0b, $0c, $1f +MagnetTrainTilemap2: + db $14, $15, $16, $1a, $1a + db $1a, $19, $1a, $1a, $1a + db $1a, $1a, $1a, $19, $1a + db $1a, $1a, $1b, $1c, $1d +MagnetTrainTilemap3: + db $24, $25, $26, $27, $07 + db $2f, $29, $28, $28, $28 + db $28, $28, $28, $29, $07 + db $2f, $2a, $2b, $2c, $2d +MagnetTrainTilemap4: + db $20, $1f, $2e, $1f, $17 + db $00, $2e, $1f, $1f, $1f + db $1f, $1f, $1f, $2e, $17 + db $00, $1f, $2e, $1f, $0f +; 8cf4f |