Routines |
Prev: 32061 | Up: Map | Next: 32363 |
Used by the routines at LifeLost, InitialiseNewGame, Print_GameOver, PlayGame, Handler_Showdown, GirlWonRound, PlayerWonRound, PlayerLostRound, GirlLostRound, MarkCards, PlayerAction_Drop, PlayerAction_Raise, PlayerAction_Hold, HandlerRaising, GirlArtificialIntelligence, GirlAction_Raise and GirlAction_Hold.
|
||||||||
19 is the highest message block ID.
|
||||||||
Messaging_Girl | 32151 | LD (36079),A | Write the given message block ID to *CurrentMessageBlock. | |||||
32154 | CP 19 | Return if the message block ID is equal to or higher than 19. | ||||||
32156 | RET NC | |||||||
32157 | INC A | Increment A by one. | ||||||
32158 | LD HL,36014 | HL=36014 (i.e. Table_InGameMessaging-3). | ||||||
Find the relevant message block.
|
||||||||
FindMessagingBlock | 32161 | INC HL | Increment HL by three. | |||||
32162 | INC HL | |||||||
32163 | INC HL | |||||||
32164 | DEC A | Decrease A by one and keep jumping back to FindMessagingBlock until it is zero. | ||||||
32165 | JR NZ,FindMessagingBlock | |||||||
Reference the message block data.
|
||||||||
32167 | LD E,(HL) | Load the referenced message block into DE. | ||||||
32168 | INC HL | |||||||
32169 | LD D,(HL) | |||||||
32170 | INC HL | Write the number of messages in this message block to *CurrentNumberOfMessagesInBlock. | ||||||
32171 | LD A,(HL) | |||||||
32172 | LD (36074),A | |||||||
32175 | LD (36075),DE | Write DE to both *PointerToStartOfCurrentMessageBlock and *PointerCurrentMessageString. | ||||||
32179 | LD (36077),DE | |||||||
Loop through each message in this message block until the random number generator returns a number less than 10. This is likely a completely arbitrary number.
|
||||||||
PickRandomMessage | 32183 | LD B,A | B=the number of messages in this message block. | |||||
PickRandomMessage_Loop | 32184 | CALL GetRandomNumber | Call GetRandomNumber. | |||||
32187 | CP 10 | Jump to Prepare_GirlMessaging if the picked random number is lower than 10. | ||||||
32189 | JR C,Prepare_GirlMessaging | |||||||
Each message is 0054 bytes long, so here we're moving to the address of the next message.
|
||||||||
32191 | LD DE,54 | HL=*PointerCurrentMessageString+0054. | ||||||
32194 | LD HL,(36077) | |||||||
32197 | ADD HL,DE | |||||||
32198 | LD (36077),HL | Write HL to *PointerCurrentMessageString. | ||||||
32201 | DJNZ PickRandomMessage_Loop | Decrease counter by one and loop back to PickRandomMessage_Loop until counter is zero. | ||||||
Nothing was picked, so refresh the message count and repoint *PointerCurrentMessageString to the first message again.
|
||||||||
32203 | LD HL,(36075) | Write *PointerToStartOfCurrentMessageBlock to *PointerCurrentMessageString. | ||||||
32206 | LD (36077),HL | |||||||
32209 | LD A,(36074) | A=*CurrentNumberOfMessagesInBlock. | ||||||
32212 | JR PickRandomMessage | Jump to PickRandomMessage. | ||||||
A message has been picked, so prepare the display for printing it.
|
||||||||
Prepare_GirlMessaging | 32214 | XOR A | Set the current line as 0. | |||||
Print_GirlMessaging_Loop | 32215 | PUSH AF | Stash the current line on the stack. | |||||
Set the speech bubble attributes.
|
||||||||
32216 | LD A,16 | Set INK: BLACK. | ||||||
32218 | RST 16 | |||||||
32219 | XOR A | |||||||
32220 | RST 16 | |||||||
32221 | LD A,17 | Set PAPER: WHITE. | ||||||
32223 | RST 16 | |||||||
32224 | LD A,7 | |||||||
32226 | RST 16 | |||||||
32227 | LD A,22 | PRINT AT: 0, 13. | ||||||
32229 | RST 16 | |||||||
32230 | POP AF | |||||||
32231 | PUSH AF | |||||||
32232 | RST 16 | |||||||
32233 | LD A,13 | |||||||
32235 | RST 16 | |||||||
32236 | LD A,19 | BRIGHT: ON. | ||||||
32238 | RST 16 | |||||||
32239 | LD A,1 | |||||||
32241 | RST 16 | |||||||
32242 | LD DE,(36077) | DE=*PointerCurrentMessageString. | ||||||
32246 | LD BC,14 | Set the line length 0014 in BC. | ||||||
32249 | POP AF | Restore the current line from the stack. | ||||||
The last line is two characters less than the previous lines. This gives us a slight "speech bubble" effect. Kind of... Sorta...
|
||||||||
32250 | CP 3 | Are we on line 3? | ||||||
32252 | PUSH AF | Stash the current line on the stack. | ||||||
32253 | JR NZ,Print_GirlMessaging | Jump to Print_GirlMessaging if we're not yet on line 3. | ||||||
32255 | DEC BC | Decrease the message length by two. | ||||||
32256 | DEC BC | |||||||
Print the current line.
|
||||||||
Print_GirlMessaging | 32257 | CALL Print40ColumnText | Call Print40ColumnText. | |||||
On return, DE points to the start of the next line - so update the pointer.
|
||||||||
32260 | LD (36077),DE | Write DE to *PointerCurrentMessageString. | ||||||
32264 | POP AF | Restore the current line from the stack. | ||||||
32265 | CP 3 | Jump to Printed_GirlMessaging if we're on line 3. | ||||||
32267 | JR Z,Printed_GirlMessaging | |||||||
32269 | INC A | Increment A by one. | ||||||
32270 | JR Print_GirlMessaging_Loop | Jump to Print_GirlMessaging_Loop. | ||||||
The messaging has been printed.
|
||||||||
Printed_GirlMessaging | 32272 | LD A,(36079) | Jump to Messaging_Girl_0 if *CurrentMessageBlock is equal to either 17 or 15. | |||||
32275 | CP 17 | |||||||
32277 | JR Z,Messaging_Girl_0 | |||||||
32279 | CP 15 | |||||||
32281 | JR Z,Messaging_Girl_0 | |||||||
32283 | JR GirlMessaging_GetInput | Jump to GirlMessaging_GetInput. | ||||||
Messaging_Girl_0 | 32285 | LD A,0 | Write 0 to *37573. | |||||
32287 | LD (37573),A | |||||||
GirlMessaging_GetInput | 32290 | CALL Controls | Call Controls. | |||||
32293 | CP 5 | Jump to GirlMessaging_GetInput if A is higher than 5. | ||||||
32295 | JR NC,GirlMessaging_GetInput | |||||||
32297 | LD A,(36079) | Jump to RemoveSpeechBubble if *CurrentMessageBlock is not equal to 18. | ||||||
32300 | CP 18 | |||||||
32302 | JR NZ,RemoveSpeechBubble | |||||||
32304 | LD HL,22528 | HL=22528 (screen buffer location). | ||||||
32307 | LD DE,22591 | DE=22591 (attribute buffer location). | ||||||
32310 | LD C,32 | C=32. | ||||||
Messaging_Girl_1 | 32312 | PUSH HL | Stash HL and DE on the stack. | |||||
32313 | PUSH DE | |||||||
32314 | LD B,6 | B=6. | ||||||
Messaging_Girl_2 | 32316 | XOR A | A=0. | |||||
32317 | LD (HL),0 | Write 0 to *HL. | ||||||
32319 | LD (DE),A | Write A to *DE. | ||||||
32320 | PUSH DE | Stash DE on the stack. | ||||||
32321 | LD DE,64 | HL+=0064. | ||||||
32324 | ADD HL,DE | |||||||
32325 | PUSH HL | IX=HL (using the stack). | ||||||
32326 | POP IX | |||||||
32328 | POP HL | Restore HL from the stack. | ||||||
32329 | ADD HL,DE | HL+=DE. | ||||||
32330 | EX DE,HL | Exchange the DE and HL registers. | ||||||
32331 | PUSH IX | HL=IX (using the stack). | ||||||
32333 | POP HL | |||||||
32334 | DJNZ Messaging_Girl_2 | Decrease counter by one and loop back to Messaging_Girl_2 until counter is zero. | ||||||
32336 | LD A,14 | A=14. | ||||||
Messaging_Girl_3 | 32338 | DJNZ Messaging_Girl_3 | Decrease counter by one and loop back to Messaging_Girl_3 until counter is zero. | |||||
32340 | DEC A | Decrease A by one. | ||||||
32341 | JR NZ,Messaging_Girl_3 | Jump to Messaging_Girl_3 until A is zero. | ||||||
32343 | POP DE | Restore DE and HL from the stack. | ||||||
32344 | POP HL | |||||||
32345 | INC HL | Increment HL by one. | ||||||
32346 | DEC DE | Decrease DE by one. | ||||||
32347 | DEC C | Decrease C by one. | ||||||
32348 | JR NZ,Messaging_Girl_1 | Jump to Messaging_Girl_1 until C is zero. | ||||||
Count to 327680 to give the player a chance to read the messaging.
|
||||||||
32350 | LD B,5 | Set a counter for 5 loops. | ||||||
Messaging_Girl_PauseLoop | 32352 | LD HL,0 | HL=0000. | |||||
Messaging_Girl_InnerPauseLoop | 32355 | DEC HL | Decrease HL by one. | |||||
32356 | LD A,H | Loop back to Messaging_Girl_InnerPauseLoop until HL is zero. | ||||||
32357 | OR L | |||||||
32358 | JR NZ,Messaging_Girl_InnerPauseLoop | |||||||
32360 | DJNZ Messaging_Girl_PauseLoop | Decrease the counter by one and loop back to Messaging_Girl_PauseLoop until the counter is zero. | ||||||
32362 | RET | Return. |
Prev: 32061 | Up: Map | Next: 32363 |