Routines |
Prev: 8600 | Up: Map | Next: 8749 |
Used by the routine at GameInitialise.
|
|||||
|
|||||
ChooseLocationOrTakeJob | 8666 | LD B,$01 | Call 8055 with a count of 01. | ||
8668 | CALL $8055 | ||||
866B | LD HL,$EFFB | Jump to ChooseLocationOrTakeJob if bit 0 ("Ticker On/ Off") of *GameState_2 is set. | |||
866E | BIT 0,(HL) | ||||
8670 | JR NZ,ChooseLocationOrTakeJob | ||||
8672 | CALL ClearMenuScreenAreas | Call ClearMenuScreenAreas. | |||
Prints "Destination Fare".
|
|||||
8675 | LD HL,$8C68 | HL=Messaging_TravelHeader. | |||
8678 | LD DE,$504A | DE=504A (screen buffer location). | |||
867B | CALL Print_String | Call Print_String. | |||
867E | LD HL,$506A | HL=506A (screen buffer location). | |||
8681 | LD B,$0B | Underline the header with 0B character blocks of FF. | |||
8683 | CALL Underline | ||||
8686 | LD HL,$5078 | HL=5078 (screen buffer location). | |||
8689 | LD B,$04 | Underline the header with 04 character blocks of FF. | |||
868B | CALL Underline | ||||
868E | LD A,$80 | Initialise *TemporaryScreenLocation to 80. | |||
8690 | LD ($7811),A | ||||
8693 | LD IX,($EFF2) | Loads the active players current location into BC (using either *1UP_Location or *2UP_Location). | |||
8697 | LD C,(IX+$08) | ||||
869A | LD B,(IX+$09) | ||||
869D | PUSH BC | Stash the active players current location on the stack. | |||
869E | LD IX,$0002 | Move the pointer in IX by 0002. | |||
86A2 | ADD IX,BC | ||||
86A4 | LD L,(IX+$00) | Load the current locations map co-ordinates into HL. | |||
86A7 | LD H,(IX+$01) | ||||
86AA | LD ($7805),HL | Write the current locations map co-ordinates to *CurrentLocationCoordinates. | |||
Prints each destination (and cost) to the screen.
|
|||||
86AD | LD BC,$0002 | Set the increment value in BC so IX will point to the first flight destination from where the player is located. | |||
PrintDestinations_Loop | 86B0 | ADD IX,BC | Move the pointer in IX by the increment value in BC. | ||
86B2 | LD L,(IX+$00) | Fetch the destination and store it in HL. | |||
86B5 | LD H,(IX+$01) | ||||
86B8 | LD A,$60 | Jump to AllDestinationsPrinted if all destinations have been printed. | |||
86BA | CP H | ||||
86BB | JR NC,AllDestinationsPrinted | ||||
86BD | LD DE,$0011 | Move the pointer in HL to the destination name, the data before the name string is always 0011 bytes. | |||
86C0 | ADD HL,DE | ||||
Load the screen position for printing into DE.
|
|||||
86C1 | LD D,$50 | D=50. | |||
86C3 | LD A,($7811) | A=*TemporaryScreenLocation. | |||
86C6 | OR %00001001 | Set bits 0 and 3. | |||
86C8 | LD E,A | E=A. | |||
Print the destination location name to the screen.
|
|||||
86C9 | CALL Print_String | Call Print_String. | |||
Calculate where to print the cost.
|
|||||
86CC | LD A,E | A=E. | |||
86CD | AND %11100000 | Keep only bits 5-7. | |||
86CF | OR %00011000 | Set bits 3-4. | |||
86D1 | LD E,A | E=A. | |||
86D2 | AND %11100000 | Keep only bits 5-7. | |||
86D4 | ADD A,$20 | A+=20. | |||
86D6 | LD ($7811),A | Write A to *TemporaryScreenLocation. | |||
86D9 | PUSH IX | Stash IX on the stack. | |||
86DB | PUSH IX | HL=IX (using the stack). | |||
86DD | POP HL | ||||
86DE | INC HL | Move HL to the last digit of the cost, ready for printing. | |||
86DF | INC HL | ||||
86E0 | INC HL | ||||
86E1 | LD BC,$0202 | Set the number format in BC. | |||
86E4 | CALL PrintNumbers | Call PrintNumbers. | |||
86E7 | POP IX | Restore IX from the stack. | |||
86E9 | LD HL,$FFFC | Move the printing position in DE back to the start of the cost. | |||
86EC | ADD HL,DE | ||||
86ED | EX DE,HL | ||||
Now print "£".
|
|||||
86EE | LD HL,$8C26 | HL=Messaging_£. | |||
86F1 | CALL Print_String | Call Print_String. | |||
86F4 | LD BC,$0004 | Set the increment in BC to point to the next destination. | |||
86F7 | JR PrintDestinations_Loop | Jump to PrintDestinations_Loop. | |||
Now deduce if the current location has a playable game or not.
|
|||||
AllDestinationsPrinted | 86F9 | POP HL | Restore the current location into HL (from the stack). | ||
86FA | LD DE,$0010 | Move HL to this locations "state" and load the state into A. | |||
86FD | ADD HL,DE | ||||
86FE | LD A,(HL) | ||||
86FF | AND A | Jump to ShiftLocationState if *Pointer_ActivePlayer is pointing to 1UP_Name (is this player one?) | |||
8700 | LD HL,($EFF2) | ||||
8703 | LD DE,$8C28 | ||||
8706 | SBC HL,DE | ||||
8708 | JR Z,ShiftLocationState | ||||
This is player two, so shift the location state right through two positions.
|
|||||
870A | RRCA | Set the carry flag if 2UP has completed the sub-game at this location. | |||
ShiftLocationState | 870B | RRCA | Set the carry flag if 1UP has completed the sub-game at this destination). | ||
870C | LD B,$E0 | B=E0. | |||
Decide which message to print; "Job completed" or "Accept job offered".
|
|||||
870E | LD HL,$8C7A | HL=Messaging_JobComplete. | |||
8711 | JR C,PrintJobMessaging | Jump to PrintJobMessaging if the game at this location has already been completed. | |||
8713 | LD B,$00 | B=00. | |||
8715 | LD HL,$8C87 | HL=Messaging_AcceptJobOffered. | |||
Calculate where to print the messaging.
|
|||||
PrintJobMessaging | 8718 | LD A,($7811) | A=*TemporaryScreenLocation. | ||
871B | OR %00001010 | Set bits 1 and 3. | |||
871D | LD E,A | E=A. | |||
871E | LD D,$50 | D=50. | |||
8720 | AND %11100000 | Keep only bits 5-7. | |||
8722 | ADD A,B | A+=B. | |||
8723 | LD ($7811),A | Write A to *TemporaryScreenLocation. | |||
8726 | PUSH BC | Stash BC on the stack. | |||
Print either "Job completed" or "Accept job offered" to the screen.
|
|||||
8727 | CALL Print_String | Call Print_String. | |||
872A | POP AF | Restore AF from the stack. | |||
872B | CP $00 | Return if A is equal to 00. | |||
872D | RET Z | ||||
872E | LD IX,($EFF2) | IX=Pointer_ActivePlayer. | |||
8732 | CALL Check_AffordToFly | Call Check_AffordToFly. | |||
8735 | RET NC | Return if the player can afford the "cheapest" destination. | |||
The active player can't afford to fly anywhere.
|
|||||
8736 | RES 7,(IX+$0F) | Reset bit 7 of *IX+0F. | |||
873A | LD B,$64 | Call 8055 with a count of 64. | |||
873C | CALL $8055 | ||||
873F | CALL ClearMenuScreenAreas | Call ClearMenuScreenAreas. | |||
8742 | CALL Messaging_GenerateTicker | Call Messaging_GenerateTicker. | |||
8745 | POP HL | Restore HL from the stack. | |||
8746 | JP Handler_SubGame_6 | Jump to Handler_SubGame_6. |
Prev: 8600 | Up: Map | Next: 8749 |