Prev: 8EEE Up: Map Next: 9109
8F43: Handle the dice in the gambling room.
Input
Output
Room_jvGambling 8F43 LD HL,$0200
8F46 LD (Account_Cost),HL
8F49 LD IX,Gamble_Dice1
8F4D LD HL,Gamble_Counter
8F50 LD A,(HL)
8F51 AND A
8F52 JR NZ,Room_jvGambling_5
Restart the game cycle.
8F54 LD (Room_Flags),A
8F57 LD HL,$BB7A
8F5A LD (HL),$FF
8F5C LD DE,$BB7B
8F5F LD BC,$0007
8F62 LDIR
8F64 CALL Message_Display
8F67 DEFM "place your bets"
8F76 DEFB $5E
Update state counter.
Room_jvGambling_0 8F77 LD HL,Gamble_Counter
8F7A INC (HL)
Draw dice.
Room_jvGambling_1 8F7B LD IX,Gamble_Dice1
8F7F LD B,$02
Room_jvGambling_2 8F81 PUSH BC
8F82 CALL char_BlitScrolledVert
8F85 LD BC,$000C
8F88 ADD IX,BC
8F8A POP BC
8F8B DJNZ Room_jvGambling_2
8F8D LD HL,Gamble_leftValue
8F90 LD DE,$BB7A
8F93 LD BC,$0008
8F96 LD A,(_7f6e)
8F99 AND A
8F9A JR NZ,Room_jvGambling_4
Room_jvGambling_3 8F9C LD A,(DE)
8F9D CP (HL)
8F9E JP NZ,Room_jvGambling_4
8FA1 INC HL
8FA2 INC DE
8FA3 DEC C
8FA4 JR NZ,Room_jvGambling_3
8FA6 RET
Room_jvGambling_4 8FA7 LDIR
8FA9 XOR A
8FAA LD (_7f6e),A
8FAD JP Gamble_DisplayStakes
Game cycle.
Room_jvGambling_5 8FB0 CP $50
8FB2 JR C,Room_jvGambling_0 < $50, "place bets" mode, just update.
8FB4 JR NZ,Room_jvGambling_6 > $50,other modes
8FB6 LD (Room_Flags),A
No more bets mode.
8FB9 CALL Message_Display
8FBC DEFM "no more bets"
8FC8 DEFB $5E
8FC9 LD A,(_b11e) Put random value into role countdown for both dice.
8FCC ADD A,(IY+$3E)
8FCF LD B,A
8FD0 AND $0F
8FD2 ADD A,$12
8FD4 LD (IX+$03),A
8FD7 LD A,B
8FD8 RRA
8FD9 RRA
8FDA RRA
8FDB RRA
8FDC AND $0F
8FDE ADD A,$12
8FE0 LD (IX+$0F),A
8FE3 JP Room_jvGambling_0
Room_jvGambling_6 8FE6 CP $53
8FE8 JR NC,Room_jvGambling_12
8FEA PUSH IX
8FEC LD B,$02 Two dice.
Room_jvGambling_7 8FEE LD A,(IX+$03) Check countdown for dice.
8FF1 AND A
8FF2 JR Z,Room_jvGambling_11 Skip if hit zero.
8FF4 LD A,(IX+$04) Increase offset by 2
8FF7 ADD A,$02
8FF9 CP $08 Until it gets to 8, move onto the next character.
8FFB JR C,Room_jvGambling_10
8FFD LD A,(IX+$00)
9000 INC A
9001 CP (IX+$02) Check to see if the current character is out of bounds and reset back to the first.
9004 JR C,Room_jvGambling_8
9006 LD A,(IX+$01)
Room_jvGambling_8 9009 LD (IX+$00),A Update current character.
900C DEC (IX+$03) Count down.
900F JR NZ,Room_jvGambling_9
9011 INC (HL) Increase current mode to show this dice has stopped.
Room_jvGambling_9 9012 XOR A Reset bitmap offset so that full dice face is shown.
Room_jvGambling_10 9013 LD (IX+$04),A
Room_jvGambling_11 9016 LD DE,$000C Move onto next dice.
9019 ADD IX,DE
901B DJNZ Room_jvGambling_7
901D POP IX Get first dice info address.
901F JP Room_jvGambling_1
Room_jvGambling_12 9022 CP $5A
9024 JP NZ,Room_jvGambling_0
Display results
9027 XOR A
9028 LD (Room_Flags),A
902B LD (HL),$D7 Clear message line.
902D CALL Message_Display
9030 DEFB $5E
9031 LD A,(IX+$00)
9034 ADD A,(IX+$0C)
9037 SUB $A0
9039 PUSH AF Display the value.
903A LD C,A
903B LD B,$00
903D CALL $1A1B
9040 CALL Print_StrFromStack
9043 DEFM ": "
9045 DEFB $5E
9046 POP AF
9047 CP $07
9049 JP Z,Room_Gambling_HouseWins
904C CP $05
904E JR C,Room_Gambling_CheckA
9050 CP $0A
9052 JR NC,Room_Gambling_CheckA
9054 JP Room_Gambling_CheckB
Check for 'A' winning.
Room_Gambling_CheckA 9057 CALL Search_NonZero See if stake 'A' holds any money.
905A DEFW Gamble_leftValue
905C DEFB $04
905D JP Z,Room_Gambling_HouseWins
9060 LD HL,Gamble_leftValue '2:1' Add double the amount staked into winnings.
9063 LD DE,TempAl
9066 LD BC,$0004
9069 LDIR
906B LD HL,TempAl
906E LD DE,TempAl
9071 CALL ValueAddAsBCDCarry
9074 LD HL,Gamble_leftValue
9077 LD DE,TempAl
907A CALL ValueAddAsBCDCarry
907D CALL Print_StrFromStack Display message.
9080 DEFM "a wins "
9087 DEFB $5E
9088 LD HL,TempAl Along with the new amount.
908B CALL Display_DecimalValue.
908E CALL Block_ClearMem Clear stake 'B'
9091 DEFW Gamble_rightValue
9093 DEFB $04
9094 LD HL,(Room_CurrentInfoDataPtr) Update the background.
9097 INC HL
9098 INC HL
9099 LD A,(HL)
909A LD (HL),$00
909C AND A
909D CALL NZ,Bg_DrawAll
90A0 JP Room_jvGambling_0
Check for 'B' winning.
Room_Gambling_CheckB 90A3 CALL Search_NonZero See if stake 'B' is zero.
90A6 DEFW Gamble_rightValue Ptr to stake 'B'
90A8 DEFB $04 number ofbytes to test.
90A9 JR Z,Room_Gambling_HouseWins
90AB LD HL,Gamble_rightValue 'evens' : Double the amount in the stake.
90AE LD DE,TempAl
90B1 LD BC,$0004
90B4 LDIR
90B6 LD HL,Gamble_rightValue
90B9 LD DE,TempAl
90BC CALL ValueAddAsBCDCarry
90BF CALL Print_StrFromStack Display message.
90C2 DEFM "b wins "
90C9 DEFB $5E
90CA LD HL,TempAl
90CD CALL Display_DecimalValue. Display updated stake.
90D0 CALL Block_ClearMem Clear stake 'A'.
90D3 DEFW Gamble_leftValue
90D5 DEFB $04
90D6 LD HL,(Room_CurrentInfoDataPtr) Update the background.
90D9 INC HL
90DA LD A,(HL)
90DB LD (HL),$00
90DD AND A
90DE CALL NZ,Bg_DrawAll
90E1 JP Room_jvGambling_0
House Wins
Room_Gambling_HouseWins 90E4 CALL Block_ClearMem Clear all stakes.
90E7 DEFW Gamble_leftValue Ptr to stake that lost.
90E9 DEFB $08
90EA LD HL,(Room_CurrentInfoDataPtr) Redraw the background.
90ED INC HL
90EE LD A,(HL)
90EF LD (HL),$00
90F1 INC HL
90F2 OR (HL)
90F3 LD (HL),$00
90F5 CALL NZ,Bg_DrawAll
90F8 CALL Print_StrFromStack Display the message.
90FB DEFM "house wins"
9105 DEFB $5E
9106 JP Room_jvGambling_0
Prev: 8EEE Up: Map Next: 9109