![]() |
Routines |
| Prev: 96CC | Up: Map | Next: 971E |
|
Used by the routine at PlayGame.
|
||||
|
The hand has been "evaluated" at this point, so don't do anything if there is already a chance of winning.
|
||||
| GirlMarkCards | 96D1 | LD A,($949B) | A=*TableHandEvaluation_Type. | |
| 96D4 | LD HL,$971E | HL=OutcomeTypes. | ||
| 96D7 | LD B,$04 | Set a counter in B of the number of game "outcome" types we want to check against. | ||
|
Loop through each outcome type and see if the current hand contains this outcome.
|
||||
| CheckOutcomes_Loop | 96D9 | CP (HL) | Return if the current hand has a positive outcome type. | |
| 96DA | RET Z | |||
| 96DB | INC HL | Increment the outcomes pointer by one. | ||
| 96DC | DJNZ CheckOutcomes_Loop | Decrease counter by one and loop back to CheckOutcomes_Loop until counter is zero. | ||
|
The girls hand has no cards which form one of the "special" outcomes (special, as in, which aren't able to be found by counting duplicate card face values).
|
||||
| 96DE | CALL GetRandomNumber | Call GetRandomNumber. | ||
| 96E1 | CP $0A | Jump to FindCardsToMark if the random number is lower than 0A. | ||
| 96E3 | JR C,FindCardsToMark | |||
|
Two pairs is also somewhat of a "special" outcome, so handle it separately.
|
||||
| 96E5 | LD A,($949B) | Jump to FindLowestSingleCard if *TableHandEvaluation_Type is equal to "Two Pairs". | ||
| 96E8 | CP $03 | |||
| 96EA | JR Z,FindLowestSingleCard | |||
|
Handle all other cases.
|
||||
| FindCardsToMark | 96EC | LD A,($949C) | Fetch the "special" card from *TableHandEvaluation_BaseCard and store it in D. | |
| 96EF | LD D,A | |||
| 96F0 | LD HL,$96CC | HL=GirlsHand. | ||
| 96F3 | LD B,$05 | Set a counter in B for the total number of cards in a hand. | ||
| 96F5 | LD C,$03 | Set a counter in C of 03 this is how many cards we want to select to be redrawn. | ||
| FindCardsToMark_Loop | 96F7 | LD A,(HL) | Fetch the card. | |
| 96F8 | AND %00001111 | Convert it into a suit-less value (by keeping only bits 0-3). | ||
| 96FA | CP D | If this card is the "special card" stored in D, jump to FindCardsToMark_Next. | ||
| 96FB | JR Z,FindCardsToMark_Next | |||
|
Set the card in the hand to be redrawn.
|
||||
| 96FD | LD (HL),$FF | Write FF to *HL. | ||
| 96FF | DEC C | Decrease the selection counter by one. | ||
| 9700 | RET Z | Return if the selection counter is zero. | ||
| FindCardsToMark_Next | 9701 | INC HL | Increment the girls hand pointer by one. | |
| 9702 | DJNZ FindCardsToMark_Loop | Decrease the card counter by one and loop back to FindCardsToMark_Loop until the counter is zero and all cards in the hand have been checked. | ||
| 9704 | RET | Return. | ||
|
Find the lowest card value which doesn't have any duplicates.
|
||||
| FindLowestSingleCard | 9705 | LD HL,$953F | HL=953F (e.g. Table_CardDuplicates-01). | |
| FindLowestSingleCard_Loop | 9708 | INC HL | Increment duplicate table pointer by one. | |
| 9709 | LD A,(HL) | Fetch the duplicate count value. | ||
| 970A | DEC A | Keep jumping back to FindLowestSingleCard_Loop if there's more than one of this value in the hand. | ||
| 970B | JR NZ,FindLowestSingleCard_Loop | |||
|
The card is a single and has no other duplicate face values in the hand.
|
||||
| 970D | CALL CalculateCard | Call CalculateCard to convert the position in the duplicate count table to a card value. | ||
| 9710 | LD D,A | Store the card value in D. | ||
| 9711 | LD HL,$96CB | HL=96CB (e.g. GirlsHand-01). | ||
| FindCard_Loop | 9714 | INC HL | Increment the girls hand pointer by one. | |
| 9715 | LD A,(HL) | Fetch the card. | ||
| 9716 | AND %00001111 | Convert it into a suit-less value (by keeping only bits 0-3). | ||
| 9718 | CP D | Keep jumping back to FindCard_Loop until this card matches the stored card value in D. | ||
| 9719 | JR NZ,FindCard_Loop | |||
|
Set the card in the hand to be redrawn.
|
||||
| 971B | LD (HL),$FF | Write FF to *HL. | ||
| 971D | RET | Return. | ||
| Prev: 96CC | Up: Map | Next: 971E |