diff options
-rw-r--r-- | constants/pokemon_data_constants.asm | 1 | ||||
-rwxr-xr-x | engine/events/lucky_number.asm | 224 | ||||
-rw-r--r-- | main.asm | 5 |
3 files changed, 226 insertions, 4 deletions
diff --git a/constants/pokemon_data_constants.asm b/constants/pokemon_data_constants.asm index da0008b1..bdcb83f7 100644 --- a/constants/pokemon_data_constants.asm +++ b/constants/pokemon_data_constants.asm @@ -108,6 +108,7 @@ PARTY_LENGTH EQU 6 ; boxes MONS_PER_BOX EQU 20 NUM_BOXES EQU 14 +NUM_BOXES_JAPANESE EQU 9 ; hall of fame HOF_MON_LENGTH EQU 1 + 2 + 2 + 1 + (MON_NAME_LENGTH - 1) ; species, id, dvs, level, nick diff --git a/engine/events/lucky_number.asm b/engine/events/lucky_number.asm new file mode 100755 index 00000000..2a6991ac --- /dev/null +++ b/engine/events/lucky_number.asm @@ -0,0 +1,224 @@ +CheckForLuckyNumberWinners: + xor a + ld [wScriptVar], a + ld [wTempByteValue], a + ld a, [wPartyCount] + and a + ret z + ld d, a + ld hl, wPartyMon1ID + ld bc, wPartySpecies +.PartyLoop: + ld a, [bc] + inc bc + cp EGG + call nz, .CompareLuckyNumberToMonID + push bc + ld bc, PARTYMON_STRUCT_LENGTH + add hl, bc + pop bc + dec d + jr nz, .PartyLoop + ld a, BANK(sBox) + call OpenSRAM + ld a, [sBoxCount] + and a + jr z, .SkipOpenBox + ld d, a + ld hl, sBoxMon1ID + ld bc, sBoxSpecies +.OpenBoxLoop: + ld a, [bc] + inc bc + cp EGG + jr z, .SkipOpenBoxMon + call .CompareLuckyNumberToMonID + jr nc, .SkipOpenBoxMon + ld a, TRUE + ld [wTempByteValue], a + +.SkipOpenBoxMon: + push bc + ld bc, BOXMON_STRUCT_LENGTH + add hl, bc + pop bc + dec d + jr nz, .OpenBoxLoop + +.SkipOpenBox: + call CloseSRAM + ld c, $0 +.BoxesLoop: + ld a, [wCurBox] + and $f + cp c + jr z, .SkipBox + ld hl, .BoxBankAddresses + ld b, 0 + add hl, bc + add hl, bc + add hl, bc + ld a, [hli] + call OpenSRAM + ld a, [hli] + ld h, [hl] + ld l, a ; hl now contains the address of the loaded box in SRAM + ld a, [hl] + and a + jr z, .SkipBox ; no mons in this box + push bc + ld b, h + ld c, l + inc bc + ld de, sBoxMon1ID - sBox + add hl, de + ld d, a +.BoxNLoop: + ld a, [bc] + inc bc + cp EGG + jr z, .SkipBoxMon + + call .CompareLuckyNumberToMonID ; sets wScriptVar and wCurPartySpecies appropriately + jr nc, .SkipBoxMon + ld a, TRUE + ld [wTempByteValue], a + +.SkipBoxMon: + push bc + ld bc, BOXMON_STRUCT_LENGTH + add hl, bc + pop bc + dec d + jr nz, .BoxNLoop + pop bc + +.SkipBox: + inc c + ld a, c + cp NUM_BOXES_JAPANESE + jr c, .BoxesLoop + + call CloseSRAM + ld a, [wScriptVar] + and a + ret z ; found nothing + + ld a, [wTempByteValue] + and a + push af + ld a, [wCurPartySpecies] + ld [wNamedObjectIndexBuffer], a + call GetPokemonName + ld hl, .LuckyNumberMatchPartyText + pop af + jr z, .print + ld hl, .LuckyNumberMatchPCText + +.print + jp PrintText + +.CompareLuckyNumberToMonID: + push bc + push de + push hl + ld d, h + ld e, l + ld hl, wBuffer1 + lb bc, PRINTNUM_LEADINGZEROS | 2, 5 + call PrintNum + ld hl, wLuckyNumberDigitsBuffer + ld de, wLuckyIDNumber + lb bc, PRINTNUM_LEADINGZEROS | 2, 5 + call PrintNum + ld b, 5 + ld c, 0 + ld hl, wLuckyNumberDigitsBuffer + 4 + ld de, wBuffer1 + 4 +.loop + ld a, [de] + cp [hl] + jr nz, .done + dec de + dec hl + inc c + dec b + jr nz, .loop + +.done + pop hl + push hl + ld de, MON_SPECIES - MON_ID + add hl, de + ld a, [hl] + pop hl + pop de + push af + ld a, c + ld b, 1 + cp 5 + jr z, .okay + ld b, 2 + cp 3 + jr nc, .okay + ld b, 3 + cp 2 + jr nz, .nomatch + +.okay + inc b + ld a, [wScriptVar] + and a + jr z, .bettermatch + cp b + jr c, .nomatch + +.bettermatch + dec b + ld a, b + ld [wScriptVar], a + pop bc + ld a, b + ld [wCurPartySpecies], a + pop bc + scf + ret + +.nomatch + pop bc + pop bc + and a + ret + +.BoxBankAddresses: + dba sBox1 + dba sBox2 + dba sBox3 + dba sBox4 + dba sBox5 + dba sBox6 + dba sBox7 + dba sBox8 + dba sBox9 + dba sBox10 + dba sBox11 + dba sBox12 + dba sBox13 + dba sBox14 + +.LuckyNumberMatchPartyText: + text_far _LuckyNumberMatchPartyText + text_end + +.LuckyNumberMatchPCText: + text_far _LuckyNumberMatchPCText + text_end + +PrintTodaysLuckyNumber: + ld hl, wStringBuffer3 + ld de, wLuckyIDNumber + lb bc, PRINTNUM_LEADINGZEROS | 2, 5 + call PrintNum + ld a, "@" + ld [wStringBuffer3 + 5], a + ret @@ -374,11 +374,8 @@ INCLUDE "engine/pokemon/mail_2.asm" SECTION "bank31_2", ROMX INCLUDE "engine/events/pokerus/check_pokerus.asm" +INCLUDE "engine/events/lucky_number.asm" -CheckForLuckyNumberWinners:: - dr $c7a5a, $c7bad -PrintTodaysLuckyNumber:: - dr $c7bad, $c7bbf CheckPartyFullAfterContest:: dr $c7bbf, $c7cd0 GiveANickname_YesNo:: |