ref: 5aac8afae7a3514b76f684237f3de59e6a27977e
dir: /engine/odd_eggs.asm/
GiveOddEgg: ; 1fb4b6 ; Figure out which egg to give. ; Compare a random word to ; probabilities out of 0xffff. call Random ld hl, OddEggProbabilities ld c, 0 ld b, c .loop ld a, [hli] ld e, a ld a, [hli] ld d, a ; Break on $ffff. ld a, d cp $ffff / $100 jr nz, .not_done ld a, e cp $ffff % $100 jr z, .done .not_done ; Break when [hRandom] <= de. ld a, [hRandom + 1] cp d jr c, .done jr z, .ok jr .next .ok ld a, [hRandom + 0] cp e jr c, .done jr z, .done .next inc bc jr .loop .done ld hl, OddEggs ld a, OddEgg2 - OddEgg1 call AddNTimes ld de, OddEggSpecies ld bc, PARTYMON_STRUCT_LENGTH + 2 * PKMN_NAME_LENGTH call CopyBytes ld a, EGG_TICKET ld [CurItem], a ld a, 1 ld [wItemQuantityChangeBuffer], a ld a, -1 ld [CurItemQuantity], a ld hl, NumItems call TossItem ; load species in wcd2a ld a, EGG ld [wMobileMonSpeciesBuffer], a ; load pointer to (wMobileMonSpeciesBuffer - 1) in wMobileMonSpeciesPointerBuffer ld a, (wMobileMonSpeciesBuffer - 1) % $100 ld [wMobileMonSpeciesPointerBuffer], a ld a, (wMobileMonSpeciesBuffer - 1) / $100 ld [wMobileMonSpeciesPointerBuffer + 1], a ; load pointer to OddEggSpecies in wMobileMonStructurePointerBuffer ld a, OddEggSpecies % $100 ld [wMobileMonStructurePointerBuffer], a ld a, OddEggSpecies / $100 ld [wMobileMonStructurePointerBuffer + 1], a ; load Odd Egg Name in wTempOddEggNickname ld hl, .Odd ld de, wTempOddEggNickname ld bc, PKMN_NAME_LENGTH call CopyBytes ; load pointer to wTempOddEggNickname in wMobileMonOTNamePointerBuffer ld a, wTempOddEggNickname % $100 ld [wMobileMonOTNamePointerBuffer], a ld a, wTempOddEggNickname / $100 ld [wMobileMonOTNamePointerBuffer + 1], a ; load pointer to wOddEggName in wMobileMonNicknamePointerBuffer ld a, wOddEggName % $100 ld [wMobileMonNicknamePointerBuffer], a ld a, wOddEggName / $100 ld [wMobileMonNicknamePointerBuffer + 1], a callba AddMobileMonToParty ret ; 1fb546 .Odd: db "ODD@@@@@@@@@" INCLUDE "data/odd_eggs.asm"