_DummyGame: call .LoadGFXAndPals call DelayFrame .loop call .JumptableLoop jr nc, .loop ret .LoadGFXAndPals: call DisableLCD ld b, SCGB_DIPLOMA call GetSGBLayout callfar ClearSpriteAnims ld hl, DummyGameLZ ld de, vTiles2 tile $00 call Decompress ld hl, DummyGameGFX ld de, vTiles0 tile $00 ld bc, 4 tiles ld a, BANK(DummyGameGFX) call FarCopyBytes ld a, SPRITE_ANIM_DICT_ARROW_CURSOR ld hl, wSpriteAnimDict ld [hli], a ld [hl], $00 hlcoord 0, 0 ld bc, SCREEN_HEIGHT * SCREEN_WIDTH xor a call ByteFill xor a ldh [hSCY], a ldh [hSCX], a ldh [rWY], a ld [wJumptableIndex], a ld a, $1 ldh [hBGMapMode], a ld a, LCDC_DEFAULT ldh [rLCDC], a ld a, $e4 call DmgToCgbBGPals ld a, $e0 call DmgToCgbObjPal0 ret .JumptableLoop: ld a, [wJumptableIndex] bit 7, a jr nz, .quit call .ExecuteJumptable callfar PlaySpriteAnimations call DelayFrame and a ret .quit scf ret .ExecuteJumptable: jumptable .Jumptable, wJumptableIndex .Jumptable: dw .RestartGame dw .ResetBoard dw .InitBoardTilemapAndCursorObject dw .CheckTriesRemaining dw .PickCard1 dw .PickCard2 dw .DelayPickAgain dw .RevealAll dw .AskPlayAgain .RestartGame: call DummyGame_InitStrings ld hl, wJumptableIndex inc [hl] ret .ResetBoard: call UnusedCursor_InterpretJoypad_AnimateCursor jr nc, .proceed ld hl, wJumptableIndex set 7, [hl] ret .proceed call DummyGame_InitBoard ld hl, wJumptableIndex inc [hl] xor a ld [wDummyGameCounter], a ld hl, wDummyGameLastMatches rept 4 ld [hli], a endr ld [hl], a ld [wDummyGameNumCardsMatched], a .InitBoardTilemapAndCursorObject: ld hl, wDummyGameCounter ld a, [hl] cp 45 jr nc, .spawn_object inc [hl] call DummyGame_Card2Coord xor a ld [wDummyGameLastCardPicked], a call DummyGame_PlaceCard ret .spawn_object depixel 6, 3, 4, 4 ld a, SPRITE_ANIM_INDEX_DUMMY_GAME call InitSpriteAnimStruct ld a, 5 ld [wDummyGameNumberTriesRemaining], a ld hl, wJumptableIndex inc [hl] ret .CheckTriesRemaining: ld a, [wDummyGameNumberTriesRemaining] hlcoord 17, 0 add "0" ld [hl], a ld hl, wDummyGameNumberTriesRemaining ld a, [hl] and a jr nz, .next_try ld a, $7 ld [wJumptableIndex], a ret .next_try dec [hl] xor a ld [wDummyGameCardChoice], a ld hl, wJumptableIndex inc [hl] .PickCard1: ld a, [wDummyGameCardChoice] and a ret z dec a ld e, a ld d, 0 ld hl, wDummyGameCards add hl, de ld a, [hl] cp -1 ret z ld [wDummyGameLastCardPicked], a ld [wDummyGameCard1], a ld a, e ld [wDummyGameCard1Location], a call DummyGame_Card2Coord call DummyGame_PlaceCard xor a ld [wDummyGameCardChoice], a ld hl, wJumptableIndex inc [hl] ret .PickCard2: ld a, [wDummyGameCardChoice] and a ret z dec a ld hl, wDummyGameCard1Location cp [hl] ret z ld e, a ld d, 0 ld hl, wDummyGameCards add hl, de ld a, [hl] cp -1 ret z ld [wDummyGameLastCardPicked], a ld [wDummyGameCard2], a ld a, e ld [wDummyGameCard2Location], a call DummyGame_Card2Coord call DummyGame_PlaceCard ld a, 64 ld [wDummyGameCounter], a ld hl, wJumptableIndex inc [hl] .DelayPickAgain: ld hl, wDummyGameCounter ld a, [hl] and a jr z, .PickAgain dec [hl] ret .PickAgain: call DummyGame_CheckMatch ld a, $3 ld [wJumptableIndex], a ret .RevealAll: ldh a, [hJoypadPressed] and A_BUTTON ret z xor a ld [wDummyGameCounter], a .RevelationLoop: ld hl, wDummyGameCounter ld a, [hl] cp 45 jr nc, .finish_round inc [hl] push af call DummyGame_Card2Coord pop af push hl ld e, a ld d, $0 ld hl, wDummyGameCards add hl, de ld a, [hl] pop hl cp -1 jr z, .RevelationLoop ld [wDummyGameLastCardPicked], a call DummyGame_PlaceCard jr .RevelationLoop .finish_round call WaitPressAorB_BlinkCursor ld hl, wJumptableIndex inc [hl] .AskPlayAgain: call UnusedCursor_InterpretJoypad_AnimateCursor jr nc, .restart ld hl, wJumptableIndex set 7, [hl] ret .restart xor a ld [wJumptableIndex], a ret DummyGame_CheckMatch: ld hl, wDummyGameCard1 ld a, [hli] cp [hl] jr nz, .no_match ld a, [wDummyGameCard1Location] call DummyGame_Card2Coord call DummyGame_DeleteCard ld a, [wDummyGameCard2Location] call DummyGame_Card2Coord call DummyGame_DeleteCard ld a, [wDummyGameCard1Location] ld e, a ld d, $0 ld hl, wDummyGameCards add hl, de ld [hl], -1 ld a, [wDummyGameCard2Location] ld e, a ld d, 0 ld hl, wDummyGameCards add hl, de ld [hl], -1 ld hl, wDummyGameLastMatches .find_empty_slot ld a, [hli] and a jr nz, .find_empty_slot dec hl ld a, [wDummyGameCard1] ld [hl], a ld [wDummyGameLastCardPicked], a ld hl, wDummyGameNumCardsMatched ld e, [hl] inc [hl] inc [hl] ld d, 0 hlcoord 5, 0 add hl, de call DummyGame_PlaceCard ld hl, .VictoryText call PrintText ret .no_match xor a ld [wDummyGameLastCardPicked], a ld a, [wDummyGameCard1Location] call DummyGame_Card2Coord call DummyGame_PlaceCard ld a, [wDummyGameCard2Location] call DummyGame_Card2Coord call DummyGame_PlaceCard ld hl, DummyGameDarnText call PrintText ret .VictoryText: text_asm push bc hlcoord 2, 13 call DummyGame_PlaceCard ld hl, DummyGameYeahText pop bc inc bc inc bc inc bc ret DummyGameYeahText: text_far _DummyGameYeahText text_end DummyGameDarnText: text_far _DummyGameDarnText text_end DummyGame_InitBoard: ld hl, wDummyGameCards ld bc, wDummyGameCardsEnd - wDummyGameCards xor a call ByteFill call DummyGame_GetDistributionOfTiles ld c, 2 ld b, [hl] call DummyGame_SampleTilePlacement ld c, 8 ld b, [hl] call DummyGame_SampleTilePlacement ld c, 4 ld b, [hl] call DummyGame_SampleTilePlacement ld c, 7 ld b, [hl] call DummyGame_SampleTilePlacement ld c, 3 ld b, [hl] call DummyGame_SampleTilePlacement ld c, 6 ld b, [hl] call DummyGame_SampleTilePlacement ld c, 1 ld b, [hl] call DummyGame_SampleTilePlacement ld c, 5 ld hl, wDummyGameCards ld b, wDummyGameCardsEnd - wDummyGameCards .loop ld a, [hl] and a jr nz, .no_load ld [hl], c .no_load inc hl dec b jr nz, .loop ret DummyGame_SampleTilePlacement: push hl ld de, wDummyGameCards .loop call Random and %00111111 cp 45 jr nc, .loop ld l, a ld h, 0 add hl, de ld a, [hl] and a jr nz, .loop ld [hl], c dec b jr nz, .loop pop hl inc hl ret DummyGame_GetDistributionOfTiles: ld a, [wMenuCursorY] dec a ld l, a ld h, 0 add hl, hl add hl, hl add hl, hl ld de, .distributions add hl, de ret .distributions db $02, $03, $06, $06, $06, $08, $08, $06 db $02, $02, $04, $06, $06, $08, $08, $09 db $02, $02, $02, $04, $07, $08, $08, $0c DummyGame_PlaceCard: ld a, [wDummyGameLastCardPicked] sla a sla a add 4 ld [hli], a inc a ld [hld], a inc a ld bc, SCREEN_WIDTH add hl, bc ld [hli], a inc a ld [hl], a ld c, 3 call DelayFrames ret DummyGame_DeleteCard: ld a, $1 ld [hli], a ld [hld], a ld bc, SCREEN_WIDTH add hl, bc ld [hli], a ld [hl], a ld c, 3 call DelayFrames ret DummyGame_InitStrings: hlcoord 0, 0 ld bc, SCREEN_WIDTH * SCREEN_HEIGHT ld a, $1 call ByteFill hlcoord 0, 0 ld de, .japstr1 call PlaceString hlcoord 15, 0 ld de, .japstr2 call PlaceString ld hl, .dummy_text call PrintText ret .dummy_text db "@" .japstr1 db "とったもの@" .japstr2 db "あと かい@" DummyGame_Card2Coord: ld d, 0 .find_row sub 9 jr c, .found_row inc d jr .find_row .found_row add 9 ld e, a hlcoord 1, 2 ld bc, 2 * SCREEN_WIDTH .loop2 ld a, d and a jr z, .done add hl, bc dec d jr .loop2 .done sla e add hl, de ret DummyGame_InterpretJoypad_AnimateCursor: ld a, [wJumptableIndex] cp $7 jr nc, .quit call JoyTextDelay ld hl, hJoypadPressed ld a, [hl] and A_BUTTON jr nz, .pressed_a ld a, [hl] and D_LEFT jr nz, .pressed_left ld a, [hl] and D_RIGHT jr nz, .pressed_right ld a, [hl] and D_UP jr nz, .pressed_up ld a, [hl] and D_DOWN jr nz, .pressed_down ret .quit ld hl, SPRITEANIMSTRUCT_INDEX add hl, bc ld [hl], $0 ret .pressed_a ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] inc a ld [wDummyGameCardChoice], a ret .pressed_left ld hl, SPRITEANIMSTRUCT_XOFFSET add hl, bc ld a, [hl] and a ret z sub 1 tiles ld [hl], a ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc dec [hl] ret .pressed_right ld hl, SPRITEANIMSTRUCT_XOFFSET add hl, bc ld a, [hl] cp (9 - 1) tiles ret z add 1 tiles ld [hl], a ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc inc [hl] ret .pressed_up ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld a, [hl] and a ret z sub 1 tiles ld [hl], a ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] sub 9 ld [hl], a ret .pressed_down ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld a, [hl] cp (5 - 1) tiles ret z add 1 tiles ld [hl], a ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] add 9 ld [hl], a ret DummyGameLZ: INCBIN "gfx/dummy_game/dummy_game.2bpp.lz"