diff options
author | U-Fish-PC\Daniel <corrnondacqb@yahoo.com> | 2014-05-22 18:13:20 -0400 |
---|---|---|
committer | U-Fish-PC\Daniel <corrnondacqb@yahoo.com> | 2014-05-22 18:13:20 -0400 |
commit | 15427f532085846ab6b51719be687951a094cb6c (patch) | |
tree | edea9b189e91641a12dd521756894df84aeeace7 /engine/slot_machine.asm | |
parent | ea3ba4cde3706b7c77efb705555ec0c86321cbe2 (diff) |
Pull a lot of engine out of main.asm
Diffstat (limited to 'engine/slot_machine.asm')
-rwxr-xr-x | engine/slot_machine.asm | 873 |
1 files changed, 873 insertions, 0 deletions
diff --git a/engine/slot_machine.asm b/engine/slot_machine.asm new file mode 100755 index 00000000..a3c83e64 --- /dev/null +++ b/engine/slot_machine.asm @@ -0,0 +1,873 @@ +PromptUserToPlaySlots: ; 3730e (d:730e) + call SaveScreenTilesToBuffer2 + ld a, BANK(DisplayTextIDInit) + ld [$cf0c], a + ld b, a + ld hl, DisplayTextIDInit + call Bankswitch + ld hl, PlaySlotMachineText + call PrintText + call YesNoChoice + ld a, [wCurrentMenuItem] + and a + jr nz, .skip + dec a + ld [$cfcb], a + ld hl, $cd4f + xor a + ld [hli], a + ld [hl], $2 + ld a, $4c + call Predef + call GBPalWhiteOutWithDelay3 + call LoadSlotMachineTiles + call LoadFontTilePatterns + ld b, $5 + call GoPAL_SET + call GBPalNormal + ld a, $e4 + ld [$ff48], a + ld hl, $d730 + set 6, [hl] + xor a + ld [W_SUBANIMSUBENTRYADDR], a + ld hl, wTrainerSpriteOffset + ld bc, $0014 + call FillMemory + call MainSlotMachineLoop + ld hl, $d730 + res 6, [hl] + xor a + ld [W_SUBANIMSUBENTRYADDR], a + call GBPalWhiteOutWithDelay3 + ld a, $1 + ld [$cfcb], a + call GoPAL_SET_CF1C + call Func_3e08 + call ReloadTilesetTilePatterns +.skip + call LoadScreenTilesFromBuffer2 + call Delay3 + call GBPalNormal + ld a, [$cc5e] + push af + jp CloseTextDisplay + +PlaySlotMachineText: ; 37390 (d:7390) + TX_FAR _PlaySlotMachineText + db "@" + +MainSlotMachineLoop: ; 37395 (d:7395) + call SlotMachine_37754 + xor a + ld hl, $cd4a + ld [hli], a + ld [hl], a + call SlotMachine_3775f + ld hl, BetHowManySlotMachineText + call PrintText + call SaveScreenTilesToBuffer1 +.loop + ld a, $3 + ld [wMenuWatchedKeys], a + ld a, $2 + ld [wMaxMenuItem], a + ld a, $c + ld [wTopMenuItemY], a + ld a, $f + ld [wTopMenuItemX], a + xor a + ld [wCurrentMenuItem], a + ld [wLastMenuItem], a + ld [$cc37], a + ld hl, $c48a + ld b, $5 + ld c, $4 + call TextBoxBorder + ld hl, $c4a0 + ld de, CoinMultiplierSlotMachineText + call PlaceString + call HandleMenuInput + and $2 + jp nz, LoadScreenTilesFromBuffer1 + ld a, [wCurrentMenuItem] + ld b, a + ld a, $3 + sub b + ld [$cd50], a + ld hl, wPlayerCoins + ld c, a + ld a, [hli] + and a + jr nz, .skip1 + ld a, [hl] + cp c + jr nc, .skip1 + ld hl, NotEnoughCoinsSlotMachineText + call PrintText + jr .loop +.skip1 + call LoadScreenTilesFromBuffer1 + call SlotMachine_37741 + call SlotMachine_377d5 + call SlotMachine_37480 + ld a, $4 + ld hl, $cd4d + ld [hli], a + ld [hli], a + ld [hl], a + call WaitForSoundToFinish + ld a, (SFX_1f_66 - SFX_Headers_1f) / 3 + call PlaySound + ld hl, StartSlotMachineText + call PrintText + call SlotMachine_374ad + call SlotMachine_37588 + ld hl, wPlayerCoins + ld a, [hli] + or [hl] + jr nz, .skip2 + ld hl, OutOfCoinsSlotMachineText + call PrintText + ld c, $3c + jp DelayFrames +.skip2 + ld hl, OneMoreGoSlotMachineText + call PrintText + ld hl, $c49e + ld bc, $0d0f + xor a + ld [$d12c], a + ld a, $14 + ld [$d125], a + call DisplayTextBoxID + ld a, [wCurrentMenuItem] + and a + ret nz + call SlotMachine_377ce + jp MainSlotMachineLoop + +CoinMultiplierSlotMachineText: ; 3745e (d:745e) + db "×3" + next "×2" + next "×1@" + +OutOfCoinsSlotMachineText: ; 37467 (d:7467) + TX_FAR _OutOfCoinsSlotMachineText + db "@" + +BetHowManySlotMachineText: ; 3746c (d:746c) + TX_FAR _BetHowManySlotMachineText + db "@" + +StartSlotMachineText: ; 37471 (d:7471) + TX_FAR _StartSlotMachineText + db "@" + +NotEnoughCoinsSlotMachineText: ; 37476 (d:7476) + TX_FAR _NotEnoughCoinsSlotMachineText + db "@" + +OneMoreGoSlotMachineText: ; 3747b (d:747b) + TX_FAR _OneMoreGoSlotMachineText + db "@" + +SlotMachine_37480: ; 37480 (d:7480) + ld hl, $cd4c + bit 7, [hl] + ret nz + ld a, [W_SUBANIMSUBENTRYADDR] + and a + jr nz, .skip1 + call GenRandom + and a + jr z, .skip2 + ld b, a + ld a, [$cc5b] + cp b + jr c, .skip3 + ld a, $d2 + cp b + jr c, .skip1 + ld [hl], $0 + ret +.skip1 + set 6, [hl] + ret +.skip2 + ld a, $3c + ld [W_SUBANIMSUBENTRYADDR], a + ret +.skip3 + set 7, [hl] + ret + +SlotMachine_374ad: ; 374ad (d:74ad) + ld c, $14 +.loop1 + push bc + call SlotMachine_37813 + call SlotMachine_37823 + call SlotMachine_37833 + ld c, $2 + call DelayFrames + pop bc + dec c + jr nz, .loop1 + xor a + ld [wTrainerSpriteOffset], a +.loop2 + call SlotMachine_37882 + call SlotMachine_374df + call SlotMachine_374fb + call SlotMachine_37517 + ret c + ld a, [$cf1b] + xor $1 + inc a + ld c, a + call DelayFrames + jr .loop2 + +SlotMachine_374df: ; 374df (d:74df) + ld a, [wTrainerSpriteOffset] + cp $1 + jr c, .skip + ld de, wTrainerEngageDistance + ld a, [de] + rra + jr nc, .skip + ld hl, $cd4d + ld a, [hl] + and a + ret z + dec [hl] + call SlotMachine_3752c + ret nz +.skip + jp SlotMachine_37813 + +SlotMachine_374fb: ; 374fb (d:74fb) + ld a, [wTrainerSpriteOffset] + cp $2 + jr c, .skip + ld de, wTrainerFacingDirection + ld a, [de] + rra + jr nc, .skip + ld hl, $cd4e + ld a, [hl] + and a + ret z + dec [hl] + call SlotMachine_37552 + ret z +.skip + jp SlotMachine_37823 + +SlotMachine_37517: ; 37517 (d:7517) + ld a, [wTrainerSpriteOffset] + cp $3 + jr c, .skip + ld de, wTrainerScreenY + ld a, [de] + rra + jr nc, .skip + scf + ret +.skip + call SlotMachine_37833 + and a + ret + +SlotMachine_3752c: ; 3752c (d:752c) + call SlotMachine_GetWheelOneTile + ld hl, wTrainerScreenX + ld a, [$cd4c] + and $80 + jr nz, .skip1 + inc hl + ld a, [hl] + cp $a + jr nz, .skip2 + ret +.skip1 + ld c, $3 +.loop + ld a, [hli] + cp $2 + jr c, .skip2 + dec c + jr nz, .loop + ret +.skip2 + inc a + ld hl, $cd4d + ld [hl], $0 + ret + +SlotMachine_37552: ; 37552 (d:7552) + call SlotMachine_GetWheelTwoTile + ld a, [$cd4c] + and $80 + jr nz, .skip1 + call SlotMachine_3756e + ret nz + jr .skip2 +.skip1 + call SlotMachine_3756e + ld a, [de] + cp $7 + ret nc +.skip2 + xor a + ld [$cd4e], a + ret + +SlotMachine_3756e: ; 3756e (d:756e) + ld hl, wTrainerScreenX + ld de, $cd44 + ld a, [de] + cp [hl] + ret z + inc de + ld a, [de] + cp [hl] + ret z + inc hl + cp [hl] + ret z + inc hl + cp [hl] + ret z + inc de + ld a, [de] + cp [hl] + ret z + dec de + dec de + ret + +SlotMachine_37588: ; 37588 (d:7588) + call SlotMachine_GetWheelThreeTile + ld a, [$cd50] + cp $2 + jr z, .skip1 + cp $1 + jr z, .skip2 + ld hl, wTrainerScreenX + ld de, $cd45 + ld bc, $cd49 + call SlotMachine_CheckForMatch + jp z, .skip5 + ld hl, $cd43 + ld de, $cd45 + ld bc, $cd47 + call SlotMachine_CheckForMatch + jr z, .skip5 +.skip1 + ld hl, $cd43 + ld de, $cd46 + ld bc, $cd49 + call SlotMachine_CheckForMatch + jr z, .skip5 + ld hl, wTrainerScreenX + ld de, $cd44 + ld bc, $cd47 + call SlotMachine_CheckForMatch + jr z, .skip5 +.skip2 + ld hl, $cd42 + ld de, $cd45 + ld bc, $cd48 + call SlotMachine_CheckForMatch + jr z, .skip5 + ld a, [$cd4c] + and $c0 + jr z, .skip3 + ld hl, $cd4f + dec [hl] + jr nz, .skip4 +.skip3 + ld hl, NotThisTimeText + call PrintText +.loop + xor a + ld [$c002], a + ret +.skip4 + call SlotMachine_37833 + call DelayFrame + call SlotMachine_37833 + call DelayFrame + jp SlotMachine_37588 +.skip5 + ld a, [$cd4c] + and $c0 + jr z, .skip4 + and $80 + jr nz, .skip6 + ld a, [hl] + cp $7 + jr c, .skip4 +.skip6 + ld a, [hl] + sub $2 + ld [wTrainerScreenX], a + ld hl, SlotRewardPointers + ld c, a + ld b, $0 + add hl, bc + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + push de + ld a, [hli] + ld h, [hl] + ld l, a + ld de, $cf4b + ld bc, $0004 + call CopyData + pop hl + ld de, .asm_37638 + push de + jp [hl] + +.asm_37638 + ld a, [$ff47] + xor $40 + ld [$ff47], a + ld c, $5 + call DelayFrames + dec b + jr nz, .asm_37638 + ld hl, $cd4a + ld [hl], d + inc hl + ld [hl], e + call SlotMachine_3775f + ld hl, SlotsMachineText_37665 + call PrintText + call WaitForTextScrollButtonPress + call SlotMachine_3776b + call SlotMachine_3775f + ld a, $e4 + ld [$ff48], a + jp .loop + +SlotsMachineText_37665: ; 37665 (d:7665) + db $08 ; asm + push bc + call SlotMachine_37728 + ld hl, LinedUpText + pop bc + inc bc + inc bc + inc bc + inc bc + ret + +LinedUpText: ; 37673 (d:7673) + TX_FAR _LinedUpText + db "@" + +SlotRewardPointers: ; 37678 (d:7678) + dw SlotReward300Func + dw SlotReward300Text + dw SlotReward100Func + dw SlotReward100Text + dw SlotReward8Func + dw SlotReward8Text + dw SlotReward15Func + dw SlotReward15Text + dw SlotReward15Func + dw SlotReward15Text + dw SlotReward15Func + dw SlotReward15Text + +SlotReward300Text: ; 37690 (d:7690) + db "300@" + +SlotReward100Text: ; 37694 (d:7694) + db "100@" + +SlotReward8Text: ; 37698 (d:7698) + db "8@" + +SlotReward15Text: ; 3769a (d:769a) + db "15@" + +NotThisTimeText: ; 3769d (d:769d) + TX_FAR _NotThisTimeText + db "@" + +; compares the slot machine tiles at bc, de, and hl +SlotMachine_CheckForMatch: ; 376a2 (d:76a2) + ld a, [de] + cp [hl] + ret nz + ld a, [bc] + cp [hl] + ret + +SlotMachine_GetWheelThreeTile: ; 376a8 (d:76a8) + ld de, $cd47 + ld hl, SlotMachineWheel3 + ld a, [wTrainerScreenY] + call SlotMachine_GetWheelTile + +SlotMachine_GetWheelTwoTile: ; 376b4 (d:76b4) + ld de, $cd44 + ld hl, SlotMachineWheel2 + ld a, [wTrainerFacingDirection] + call SlotMachine_GetWheelTile + +SlotMachine_GetWheelOneTile: ; 376c0 (d:76c0) + ld de, wTrainerScreenX + ld hl, SlotMachineWheel1 + ld a, [wTrainerEngageDistance] + +SlotMachine_GetWheelTile: ; 376c9 (d:76c9) + ld c, a + ld b, $0 + add hl, bc + ld c, $3 +.loop + ld a, [hli] + ld [de], a + inc de + inc hl + dec c + jr nz, .loop + ret + +SlotReward8Func: ; 376d7 (d:76d7) + ld hl, W_SUBANIMSUBENTRYADDR + ld a, [hl] + and a + jr z, .skip + dec [hl] +.skip + ld b, $2 + ld de, 8 + ret + +SlotReward15Func: ; 376e5 (d:76e5) + ld hl, W_SUBANIMSUBENTRYADDR + ld a, [hl] + and a + jr z, .skip + dec [hl] +.skip + ld b, $4 + ld de, 15 + ret + +SlotReward100Func: ; 376f3 (d:76f3) + ld a, (SFX_1f_42 - SFX_Headers_1f) / 3 + call PlaySound + xor a + ld [$cd4c], a + ld b, $8 + ld de, 100 + ret + +SlotReward300Func: ; 37702 (d:7702) + ld hl, YeahText + call PrintText + ld a, (SFX_1f_3b - SFX_Headers_1f) / 3 + call PlaySound + call GenRandom + cp $80 + ld a, $0 + jr c, .skip + ld [$cd4c], a +.skip + ld [W_SUBANIMSUBENTRYADDR], a + ld b, $14 + ld de, 300 + ret + +YeahText: ; 37722 (d:7722) + TX_FAR _YeahText + db $0a, "@" + +SlotMachine_37728: ; 37728 (d:7728) + ld hl, $c4ba + ld a, [wTrainerScreenX] + add $25 + ld [hli], a + inc a + ld [hld], a + inc a + ld de, $ffec + add hl, de + ld [hli], a + inc a + ld [hl], a + ld hl, $c4f2 + ld [hl], $ee + ret + +SlotMachine_37741: ; 37741 (d:7741) + ld hl, $cd4b + ld a, [$cd50] + ld [hld], a + xor a + ld [hli], a + ld de, $d5a5 + ld c, $2 + ld a, $c + call Predef + +SlotMachine_37754: ; 37754 (d:7754) + ld hl, $c3b9 + ld de, wPlayerCoins + ld c, $2 + jp PrintBCDNumber + +SlotMachine_3775f: ; 3775f (d:775f) + ld hl, $c3bf + ld de, $cd4a + ld bc, $8204 + jp PrintNumber + +SlotMachine_3776b: ; 3776b (d:776b) + ld a, $1 + ld [$c002], a + call WaitForSoundToFinish + ld hl, $cd46 + xor a + ld [hli], a + inc a + ld [hl], a + ld a, $5 + ld [W_SUBANIMTRANSFORM], a +.loop + ld a, [$cd4b] + ld l, a + ld a, [$cd4a] + ld h, a + or l + ret z + ld de, $ffff + add hl, de + ld a, l + ld [$cd4b], a + ld a, h + ld [$cd4a], a + ld hl, $cd47 + ld de, $d5a5 + ld c, $2 + ld a, $b + call Predef + call SlotMachine_37754 + call SlotMachine_3775f + ld a, (SFX_1f_65 - SFX_Headers_1f) / 3 + call PlaySound + ld a, [W_SUBANIMTRANSFORM] + dec a + jr nz, .skip1 + ld a, [$ff48] + xor $40 + ld [$ff48], a + ld a, $5 +.skip1 + ld [W_SUBANIMTRANSFORM], a + ld a, [wTrainerScreenX] + cp $7 + ld c, $8 + jr nc, .skip2 + srl c +.skip2 + call DelayFrames + jr .loop + +SlotMachine_377ce: ; 377ce (d:77ce) + ld a, $23 + ld [$d08a], a + jr SlotMachine_377e3 + +SlotMachine_377d5: ; 377d5 (d:77d5) + ld a, $14 + ld [$d08a], a + ld a, [$cd50] + dec a + jr z, SlotMachine_377fb + dec a + jr z, SlotMachine_377ef + +SlotMachine_377e3: ; 377e3 (d:77e3) + ld hl, $c3cb + call SlotMachine_377fe + ld hl, $c46b + call SlotMachine_377fe + +SlotMachine_377ef: ; 377ef (d:77ef) + ld hl, $c3f3 + call SlotMachine_377fe + ld hl, $c443 + call SlotMachine_377fe + +SlotMachine_377fb: ; 377fb (d:77fb) + ld hl, $c41b + +SlotMachine_377fe: ; 377fe (d:77fe) + ld a, [$d08a] + ld [hl], a + ld bc, $000d + add hl, bc + ld [hl], a + ld bc, $0007 + add hl, bc + inc a + ld [hl], a + ld bc, $000d + add hl, bc + ld [hl], a + ret + +SlotMachine_37813: ; 37813 (d:7813) + ld bc, SlotMachineWheel1 + ld de, wTrainerEngageDistance + ld hl, wOAMBuffer + ld a, $30 + ld [W_BASECOORDX], a + jr SlotMachine_37841 + +SlotMachine_37823: ; 37823 (d:7823) + ld bc, SlotMachineWheel2 + ld de, wTrainerFacingDirection + ld hl, $c330 + ld a, $50 + ld [W_BASECOORDX], a + jr SlotMachine_37841 + +SlotMachine_37833: ; 37833 (d:7833) + ld bc, SlotMachineWheel3 + ld de, wTrainerScreenY + ld hl, $c360 + ld a, $70 + ld [W_BASECOORDX], a + +SlotMachine_37841: ; 37841 (d:7841) + ld a, $58 + ld [W_BASECOORDY], a + push de + ld a, [de] + ld d, b + add c + ld e, a + jr nc, SlotMachine_3784e + inc d + +SlotMachine_3784e: ; 3784e (d:784e) + ld a, [W_BASECOORDY] + ld [hli], a + ld a, [W_BASECOORDX] + ld [hli], a + ld a, [de] + ld [hli], a + ld a, $80 + ld [hli], a + ld a, [W_BASECOORDY] + ld [hli], a + ld a, [W_BASECOORDX] + add $8 + ld [hli], a + ld a, [de] + inc a + ld [hli], a + ld a, $80 + ld [hli], a + inc de + ld a, [W_BASECOORDY] + sub $8 + ld [W_BASECOORDY], a + cp $28 + jr nz, SlotMachine_3784e + pop de + ld a, [de] + inc a + cp $1e + jr nz, .skip + xor a +.skip + ld [de], a + ret + +SlotMachine_37882: ; 37882 (d:7882) + call DelayFrame + call GetJoypadStateLowSensitivity + ld a, [$ffb5] + and $1 + ret z + ld hl, wTrainerSpriteOffset + ld a, [hl] + dec a + ld de, $cd4d + jr z, .skip + dec a + ld de, $cd4e + jr z, .skip +.loop + inc [hl] + ld a, (SFX_1f_64 - SFX_Headers_1f) / 3 + jp PlaySound +.skip + ld a, [de] + and a + ret nz + jr .loop + +LoadSlotMachineTiles: ; 378a8 (d:78a8) + call DisableLCD + ld hl, SlotMachineTiles2 + ld de, $8000 + ld bc, $01c0 + ld a, BANK(SlotMachineTiles2) + call FarCopyData2 + ld hl, SlotMachineTiles1 + ld de, $9000 + ld bc, $0250 + ld a, BANK(SlotMachineTiles1) + call FarCopyData2 + ld hl, SlotMachineTiles2 + ld de, $9250 + ld bc, $01c0 + ld a, BANK(SlotMachineTiles2) + call FarCopyData2 + ld hl, SlotMachineMap + ld de, wTileMap + ld bc, $00f0 + call CopyData + call EnableLCD + ld hl, wTrainerEngageDistance + ld a, $1c + ld [hli], a + ld [hli], a + ld [hl], a + call SlotMachine_37813 + call SlotMachine_37823 + jp SlotMachine_37833 + +SlotMachineMap: ; 378f5 (d:78f5) + INCBIN "gfx/tilemaps/slotmachine.map" + +SLOTS7 EQU $0200 +SLOTSBAR EQU $0604 +SLOTSCHERRY EQU $0A08 +SLOTSFISH EQU $0E0C +SLOTSBIRD EQU $1210 +SLOTSMOUSE EQU $1614 + +INCLUDE "data/slot_machine_wheels.asm" + +SlotMachineTiles1: ; 37a51 (d:7a51) +IF _RED + INCBIN "gfx/red/slotmachine1.2bpp" +ENDC +IF _BLUE + INCBIN "gfx/blue/slotmachine1.2bpp" +ENDC |