Prev: A799 Up: Map Next: AB87
A7A0: Café encounter — main routine
Entry point for the café visit. Fades in and draws the scene.
Polls for 's' (exit café). If the mobster appears first, 's' and 'n' are used to accept or refuse his deals.
On 's' with no mobster: waiter brings the bill and hero leaves.
Setup
cafe_encounter A7A0 CALL fade_in_blue Fade in (fade_in_blue)
A7A3 CALL draw_cafe_bg Draw café background (draw_cafe_bg)
A7A6 CALL cafe_scene_step Draw café logo (cafe_scene_step)
A7A9 LD HL,$3031 HL = "01" (initial café tab)
A7AC LD ($C338),HL Store to var_cafe_tab (café tab)
A7AF LD A,$01 A = 1
A7B1 LD ($AB87),A Set café visit counter (var_cafe_visits) = 1 (first visit)
Wait for player to press 's' (exit café)
cafe_encounter_0 A7B4 LD A,$00 Clear LAST K — begin input poll
A7B6 LD ($5C08),A
A7B9 LD E,$05 E = 5 (outer timeout)
cafe_encounter_1 A7BB LD C,$00 C = 0 (256 mid iterations)
cafe_encounter_2 A7BD LD B,$00 B = 0 (256 inner iterations)
cafe_encounter_3 A7BF LD A,($5C08) Poll LAST K ($5C08)
A7C2 CP $73 If 's' (exit) pressed → waiter brings bill (cafe_encounter_34)
A7C4 JP Z,cafe_encounter_34
A7C7 DJNZ cafe_encounter_3 DJNZ inner loop
A7C9 DEC C DEC C — mid loop
A7CA JR NZ,cafe_encounter_2
A7CC DEC E DEC E — outer timeout loop
A7CD JR NZ,cafe_encounter_1
Timeout — redraw and retry
A7CF CALL cafe_scene_step Redraw café logo (cafe_scene_step)
A7D2 CALL prng_tick Advance PRNG (prng_tick)
A7D5 LD A,($C34A) If PRNG2 != 0 → restart poll (cafe_encounter_0)
A7D8 CP $00
A7DA JP Z,cafe_encounter_4
A7DD JP cafe_encounter_0 Restart poll (cafe_encounter_0)
Dispatch — waiter or mobster
cafe_encounter_4 A7E0 CALL prng_tick Advance PRNG again (prng_tick)
A7E3 LD A,($C34A) If PRNG2 == 2 → alternative café event (cafe_encounter_33)
A7E6 CP $02
A7E8 JP Z,cafe_encounter_33
A7EB CALL cafe_mobster_approach Mobster approaches (cafe_mobster_approach)
A7EE LD A,$11 Set PAPER=0 (black, erase colour)
A7F0 RST $10
A7F1 LD A,$00
A7F3 RST $10
A7F4 LD D,$05 D = 5 (row)
A7F6 LD E,$13 E = 19 (column)
A7F8 LD L,$04 L = $04 (fill character)
A7FA LD C,$04 C = 4 (row count)
A7FC CALL cafe_fill_rect Fill table rectangle (cafe_fill_rect) — erase mobster from background
A7FF LD HL,$ABC3 Erase mobster sprite remnant (LABC3)
A802 CALL draw_frame
Check inventory — what to offer hero
A805 LD A,($C33C) If no wallet (var_inv_wallet == 0) → mobster offers to sell wallet (cafe_encounter_12)
A808 CP $00
A80A JP Z,cafe_encounter_12
A80D LD A,($C33D) If no gun (var_inv_gun == 0) → mobster offers to sell gun (cafe_encounter_18)
A810 CP $00
A812 JP Z,cafe_encounter_18
A815 LD A,($C337) If no drugs (var_inv_drugs == 0) → mobster offers to sell drugs (cafe_encounter_24)
A818 CP $00
A81A JP Z,cafe_encounter_24
Drugs deal — hero has drugs
A81D LD A,$03 Delay 3
A81F CALL delay_a
A822 LD DE,$E9F9 Set CHARS=$E9F9, draw "Sei que tem aí droga" (frame_bubble_mobster_r6c22)
A825 CALL set_chars
A828 LD HL,$ABFA
A82B CALL draw_frame
A82E LD A,$0A Delay 10
A830 CALL delay_a
A833 LD DE,$E899 Set CHARS=$E899, draw "Ofereço-lhe 1000$00" (frame_bubble_mobster_r6c22)
A836 CALL set_chars
A839 LD HL,$ABFA
A83C CALL draw_frame
A83F CALL prng_tick Advance PRNG (prng_tick)
A842 LD B,$0A B = 10 (bid amount)
A844 LD A,($C34A) Load PRNG2 (var_prng2)
A847 CP $01 If PRNG2 == 1 → price 1500$00 (cafe_encounter_10)
A849 JP Z,cafe_encounter_10
A84C CP $02 If PRNG2 == 2 → price 2000$00 (cafe_encounter_11)
A84E JP Z,cafe_encounter_11
cafe_encounter_5 A851 PUSH BC PUSH BC (save bid amount)
A852 LD A,$00 Clear LAST K — wait for player input
A854 LD ($C34C),A
cafe_encounter_6 A857 CALL wait_keypress Wait for keypress (wait_keypress)
A85A LD A,($C34C) Load key (var_last_key)
A85D CP $73 If 's' (accept) → sell drugs (cafe_encounter_7)
A85F JP Z,cafe_encounter_7
A862 CP $6E If 'n' (refuse) → decline deal (cafe_encounter_9)
A864 JP Z,cafe_encounter_9
A867 JP cafe_encounter_6 Loop back to wait (cafe_encounter_6)
Hero sells drugs to mobster
cafe_encounter_7 A86A LD DE,$E659 Set CHARS=$E659, draw "Aceito" (frame_bubble_hero_r5c0)
A86D CALL set_chars
A870 LD HL,$ABCE
A873 CALL draw_frame
A876 LD A,$00 A = 0
A878 LD ($C337),A Clear drugs flag (var_inv_drugs)
A87B POP BC POP BC (restore bid amount into B)
A87C CALL money_add Add B to score (money_add)
Post-deal — advance scene
cafe_encounter_8 A87F CALL prng_tick Advance PRNG (prng_tick)
Post-deal cleanup
A882 LD A,$02 Delay 2
A884 CALL delay_a
A887 LD HL,$AC11 Clear mobster bubble (frame_clear_mobster_r6c22)
A88A CALL draw_frame
A88D LD A,$05 Delay 5
A88F CALL delay_a
A892 LD HL,$ABE5 Clear hero bubble (frame_clear_hero_r5c0)
A895 CALL draw_frame
A898 CALL cafe_scene_step Redraw café logo (cafe_scene_step)
A89B CALL cafe_mobster_seq1 Advance scene (cafe_mobster_seq1)
A89E LD HL,$AC52 Erase mobster from table (frame_cafe_erase_mobster)
A8A1 CALL draw_frame
A8A4 JP cafe_encounter_0 Restart poll (cafe_encounter_0)
Hero declines deal
cafe_encounter_9 A8A7 LD DE,$E6B9 Set CHARS=$E6B9, draw "Não" (frame_bubble_hero_r5c0)
A8AA CALL set_chars
A8AD LD HL,$ABCE
A8B0 CALL draw_frame
A8B3 LD HL,$AC11 Clear mobster bubble (frame_clear_mobster_r6c22)
A8B6 CALL draw_frame
A8B9 CALL cafe_scene_step Redraw café logo (cafe_scene_step)
A8BC POP BC POP BC
A8BD LD A,$04 Delay 4
A8BF CALL delay_a
A8C2 LD HL,$ABE5 Clear hero bubble (frame_clear_hero_r5c0)
A8C5 CALL draw_frame
A8C8 JP cafe_encounter_8 Jump to post-deal (cafe_encounter_8)
Drugs sell offer — price variant 1: 1500$00 (B=15)
cafe_encounter_10 A8CB LD A,$16 Print AT(7,23) — overlay price digit in bubble
A8CD RST $10
A8CE LD A,$07
A8D0 RST $10
A8D1 LD A,$17
A8D3 RST $10
A8D4 LD A,$2C
A8D6 RST $10
A8D7 LD B,$0F B = 15 (units for money deduction)
A8D9 JP cafe_encounter_5 Jump to player input (cafe_encounter_5) — hero still chooses s/n
Drugs sell offer — price variant 2: 2000$00 (B=20)
cafe_encounter_11 A8DC LD A,$16 Print AT(7,23) — overlay price digit in bubble
A8DE RST $10
A8DF LD A,$07
A8E1 RST $10
A8E2 LD A,$17
A8E4 RST $10
A8E5 LD A,$2D
A8E7 RST $10
A8E8 LD B,$14 B = 20 (units for money deduction)
A8EA JP cafe_encounter_5 Jump to player input (cafe_encounter_5) — hero still chooses s/n
No wallet — mobster offers hero's stolen wallet
cafe_encounter_12 A8ED LD DE,$E7D9 Set CHARS=$E7D9, draw "Tenho a sua carteira" (frame_bubble_mobster_r6c22)
A8F0 CALL set_chars
A8F3 LD HL,$ABFA
A8F6 CALL draw_frame
A8F9 LD A,$09 Delay 9
A8FB CALL delay_a
A8FE LD DE,$E909 Set CHARS=$E909, draw "Aceita por 1000$00" (frame_bubble_mobster_r6c22)
A901 CALL set_chars
A904 LD HL,$ABFA
A907 CALL draw_frame
A90A CALL prng_tick Advance PRNG (prng_tick)
A90D LD B,$0A B = 10 (bid amount)
A90F LD DE,$3130 DE = "10" (price digits)
A912 LD A,($C34A) PRNG2 == 1 → wallet at 800$00 (cafe_encounter_16)
A915 CP $01
A917 JP Z,cafe_encounter_16
A91A CP $02 PRNG2 == 2 → wallet at 300$00 (cafe_encounter_17)
A91C JP Z,cafe_encounter_17
cafe_encounter_13 A91F PUSH BC PUSH BC
A920 CALL purchase_handler Check money vs price (purchase_handler)
A923 LD A,($C33B) If cannot afford wallet → hero says "Não tenho dinheiro" (cafe_hero_arrested_0)
A926 CP $00
A928 CALL Z,cafe_hero_arrested_0
A92B LD A,($C33B) If confirmed cannot pay → cancel deal (cafe_encounter_8)
A92E CP $00
A930 JP Z,cafe_encounter_8 Jump to cancel (cafe_encounter_8)
A933 LD A,$00 Clear LAST K
A935 LD ($C34C),A
cafe_encounter_14 A938 CALL wait_keypress Wait for keypress (wait_keypress)
A93B LD A,($C34C) Load key (var_last_key)
A93E CP $73 If 's' (accept) → buy wallet (cafe_encounter_15)
A940 JP Z,cafe_encounter_15
A943 CP $6E If 'n' (refuse) → decline deal (cafe_encounter_9)
A945 JP Z,cafe_encounter_9
A948 JR cafe_encounter_14 Loop back (cafe_encounter_14)
Hero buys wallet
cafe_encounter_15 A94A LD DE,$E659 Set CHARS=$E659, draw "Aceito" (frame_bubble_hero_r5c0)
A94D CALL set_chars
A950 LD HL,$ABCE
A953 CALL draw_frame
A956 LD A,$01 A = 1
A958 LD ($C33C),A Set wallet flag (var_inv_wallet)
A95B POP BC POP BC
A95C CALL deduct_money Deduct money (deduct_money)
A95F CALL cafe_scene_step Redraw café logo (cafe_scene_step)
A962 JP cafe_encounter_8 Jump to post-deal (cafe_encounter_8)
Wallet price variant 1 — 800$00 (B=8)
cafe_encounter_16 A965 LD A,$16 Print AT(7,23) — overlay digit (price variant 1)
A967 RST $10
A968 LD A,$07
A96A RST $10
A96B LD A,$17
A96D RST $10
A96E LD A,$2C
A970 RST $10
A971 LD DE,$3038 DE = "08"
A974 LD B,$08 B = 8
A976 JP cafe_encounter_13 Jump to player input (cafe_encounter_13)
Wallet price variant 2 — 300$00 (B=3)
cafe_encounter_17 A979 LD A,$16 Print AT(7,23) — overlay digit (price variant 2)
A97B RST $10
A97C LD A,$07
A97E RST $10
A97F LD A,$17
A981 RST $10
A982 LD A,$2D
A984 RST $10
A985 LD DE,$3033 DE = "03"
A988 LD B,$03 B = 3
A98A JP cafe_encounter_13 Jump to player input (cafe_encounter_13)
No gun — mobster offers gun
cafe_encounter_18 A98D LD DE,$E839 Set CHARS=$E839, draw "Tenho aqui uma arma" (frame_bubble_mobster_r6c22)
A990 CALL set_chars
A993 LD HL,$ABFA
A996 CALL draw_frame
A999 LD A,$09 Delay 9
A99B CALL delay_a
A99E LD DE,$E909 Set CHARS=$E909, draw "Aceita por 1000$00" (frame_bubble_mobster_r6c22)
A9A1 CALL set_chars
A9A4 LD HL,$ABFA
A9A7 CALL draw_frame
A9AA CALL prng_tick Advance PRNG (prng_tick)
A9AD CALL cafe_scene_transition Transition café scene (cafe_scene_transition)
A9B0 LD B,$0A B = 10 (bid amount)
A9B2 LD DE,$3130 DE = "10" (price digits)
A9B5 LD A,($C34A) PRNG2 == 1 → gun at 800$00 (cafe_encounter_22)
A9B8 CP $01
A9BA JP Z,cafe_encounter_22
A9BD CP $02 PRNG2 == 2 → gun at 300$00 (cafe_encounter_23)
A9BF JP Z,cafe_encounter_23
cafe_encounter_19 A9C2 PUSH BC PUSH BC
A9C3 CALL purchase_handler Check money vs price (purchase_handler)
A9C6 LD A,($C33B) If cannot afford gun → hero says "Não tenho dinheiro" (cafe_hero_arrested_0)
A9C9 CP $00
A9CB JP Z,cafe_hero_arrested_0
A9CE LD A,($C33B) If confirmed cannot pay → cancel deal (cafe_encounter_8)
A9D1 JP Z,cafe_encounter_8 Jump to cancel (cafe_encounter_8)
A9D4 LD A,$00 Clear LAST K
A9D6 LD ($C34C),A
cafe_encounter_20 A9D9 CALL wait_keypress Wait for keypress (wait_keypress)
A9DC LD A,($C34C) Load key (var_last_key)
A9DF CP $73 If 's' (accept) → buy gun (cafe_encounter_21)
A9E1 JP Z,cafe_encounter_21
A9E4 CP $6E If 'n' (refuse) → decline deal (cafe_encounter_9)
A9E6 JP Z,cafe_encounter_9
A9E9 JR cafe_encounter_20 Loop back (cafe_encounter_20)
Hero buys gun
cafe_encounter_21 A9EB LD DE,$E659 Set CHARS=$E659, draw "Aceito" (frame_bubble_hero_r5c0)
A9EE CALL set_chars
A9F1 LD HL,$ABCE
A9F4 CALL draw_frame
A9F7 LD A,$01 Set gun-active flag (enables weapon use)
A9F9 LD ($C33D),A
A9FC POP BC POP BC
A9FD CALL deduct_money Deduct money (deduct_money)
AA00 JP cafe_encounter_8 Jump to post-deal (cafe_encounter_8)
Gun price variant 1 — 800$00 (B=8)
cafe_encounter_22 AA03 LD A,$16 Print AT(7,23) — overlay digit (price variant 1)
AA05 RST $10
AA06 LD A,$07
AA08 RST $10
AA09 LD A,$17
AA0B RST $10
AA0C LD A,$2C
AA0E RST $10
AA0F LD B,$08 B = 8
AA11 LD DE,$3038 DE = "08"
AA14 JP cafe_encounter_19 Jump to player input (cafe_encounter_19)
Gun price variant 2 — 300$00 (B=3)
cafe_encounter_23 AA17 LD A,$16 Print AT(7,23) — overlay digit (price variant 2)
AA19 RST $10
AA1A LD A,$07
AA1C RST $10
AA1D LD A,$17
AA1F RST $10
AA20 LD A,$2D
AA22 RST $10
AA23 LD B,$03 B = 3
AA25 LD DE,$3033 DE = "03"
AA28 JP cafe_encounter_19 Jump to player input (cafe_encounter_19)
No drugs — mobster offers drugs (boi, LSD or axe)
cafe_encounter_24 AA2B CALL prng_tick Advance PRNG (prng_tick)
AA2E LD DE,$E979 Set CHARS=$E979, draw "Tenho Boi para vender" (frame_bubble_mobster_r6c22) — PRNG may switch to LSD or axe
AA31 CALL set_chars
AA34 LD HL,$ABFA
AA37 CALL draw_frame
AA3A LD A,($C34A) PRNG2 == 1 → offer LSD instead (cafe_encounter_31)
AA3D CP $01
AA3F JP Z,cafe_encounter_31
AA42 CP $02 PRNG2 == 2 → offer axe instead (cafe_encounter_32)
AA44 JP Z,cafe_encounter_32
cafe_encounter_25 AA47 LD A,$08 Delay 8
AA49 CALL delay_a
AA4C LD DE,$E909 Set CHARS=$E909, draw "Aceita por 1000$00" (frame_bubble_mobster_r6c22)
AA4F CALL set_chars
AA52 LD HL,$ABFA
AA55 CALL draw_frame
AA58 CALL prng_tick Advance PRNG (prng_tick)
AA5B LD B,$0A B = 10 (bid amount)
AA5D LD DE,$3130 DE = "10" (price digits)
AA60 LD A,($C34A) PRNG2 == 1 → boi at 800$00 (cafe_encounter_29)
AA63 CP $01
AA65 JP Z,cafe_encounter_29
AA68 CP $02 PRNG2 == 2 → boi at 300$00 (cafe_encounter_30)
AA6A JP Z,cafe_encounter_30
cafe_encounter_26 AA6D PUSH BC PUSH BC
AA6E CALL purchase_handler Check money vs price (purchase_handler)
AA71 LD A,($C33B) If cannot afford drugs → hero says "Não tenho dinheiro" (cafe_hero_arrested_0)
AA74 CP $00
AA76 JP Z,cafe_hero_arrested_0
AA79 LD A,($C33B) If confirmed cannot pay → cancel deal (cafe_encounter_8)
AA7C CP $00
AA7E JP Z,cafe_encounter_8 Jump to cancel (cafe_encounter_8)
AA81 LD A,$00 Clear LAST K
AA83 LD ($C34C),A
cafe_encounter_27 AA86 CALL wait_keypress Wait for keypress (wait_keypress)
AA89 LD A,($C34C) Load key (var_last_key)
AA8C CP $73 If 's' (accept) → buy boi (cafe_encounter_28)
AA8E JP Z,cafe_encounter_28
AA91 CP $6E If 'n' (refuse) → decline deal (cafe_encounter_9)
AA93 JP Z,cafe_encounter_9
AA96 JP cafe_encounter_27 Loop back (cafe_encounter_27)
Hero buys drugs from mobster
cafe_encounter_28 AA99 LD DE,$E659 Set CHARS=$E659, draw "Aceito" (frame_bubble_hero_r5c0)
AA9C CALL set_chars
AA9F LD HL,$ABCE
AAA2 CALL draw_frame
AAA5 POP BC POP BC
AAA6 CALL deduct_money Deduct money (deduct_money)
AAA9 LD A,$01 A = 1
AAAB LD ($C337),A Set drugs flag (var_inv_drugs)
AAAE JP cafe_encounter_8 Jump to post-deal (cafe_encounter_8)
Boi bid price variant 1 — 800$00 (B=8)
cafe_encounter_29 AAB1 LD A,$16 Print AT(7,23) — overlay digit (bid price variant 1)
AAB3 RST $10
AAB4 LD A,$07
AAB6 RST $10
AAB7 LD A,$17
AAB9 RST $10
AABA LD A,$2C
AABC RST $10
AABD LD B,$08 B = 8
AABF LD DE,$3038 DE = "08"
AAC2 JP cafe_encounter_26 Jump to player input (cafe_encounter_26)
Boi bid price variant 2 — 300$00 (B=3)
cafe_encounter_30 AAC5 LD A,$16 Print AT(7,23) — overlay digit (bid price variant 2)
AAC7 RST $10
AAC8 LD A,$07
AACA RST $10
AACB LD A,$17
AACD RST $10
AACE LD A,$2D
AAD0 RST $10
AAD1 LD B,$03 B = 3
AAD3 LD DE,$3033 DE = "03"
AAD6 JP cafe_encounter_26 Jump to player input (cafe_encounter_26)
Drug offer variant 1 — overlay "LSD" in bubble
cafe_encounter_31 AAD9 LD A,$16 Print chars $2C-$2D at (6,26) — replaces "Boi" with "LSD"
AADB RST $10
AADC LD A,$06
AADE RST $10
AADF LD A,$1A
AAE1 RST $10
AAE2 LD A,$2C
AAE4 RST $10
AAE5 LD A,$2D
AAE7 RST $10
AAE8 JP cafe_encounter_25 Jump to bid loop (cafe_encounter_25)
Drug offer variant 2 — overlay "Axe" in bubble
cafe_encounter_32 AAEB LD A,$16 Print chars $2E-$2F at (6,26) — replaces "Boi" with "Axe" (hashish)
AAED RST $10
AAEE LD A,$06
AAF0 RST $10
AAF1 LD A,$1A
AAF3 RST $10
AAF4 LD A,$2E
AAF6 RST $10
AAF7 LD A,$2F
AAF9 RST $10
AAFA JP cafe_encounter_25 Jump to bid loop (cafe_encounter_25)
No mobster — waiter comes to serve a drink
cafe_encounter_33 AAFD CALL cafe_drink_anim Advance café scene state (cafe_drink_anim)
AB00 LD A,$16 Erase previous waiter sprite at (9,9)
AB02 RST $10
AB03 LD A,$09
AB05 RST $10
AB06 LD A,$09
AB08 RST $10
AB09 LD A,$11
AB0B RST $10
AB0C LD A,$00
AB0E RST $10
AB0F LD A,$80
AB11 RST $10
AB12 LD A,$16
AB14 RST $10
AB15 LD A,$0A
AB17 RST $10
AB18 LD A,$09
AB1A RST $10
AB1B LD A,$80
AB1D RST $10
AB1E LD A,$08 Delay 8
AB20 CALL delay_a
AB23 CALL cafe_waiter_approach Waiter approaches hero (cafe_waiter_approach)
AB26 LD A,$02 Delay 2
AB28 CALL delay_a
AB2B CALL cafe_waiter_serve Waiter serves drink (cafe_waiter_serve)
AB2E CALL cafe_scene_step Redraw café logo (cafe_scene_step)
AB31 LD A,$03 Delay 3
AB33 CALL delay_a
AB36 CALL increment_cafe_tab Increment café tab (increment_cafe_tab) — drink added to bill
AB39 LD A,($AB87) Increment café visit counter (var_cafe_visits)
AB3C INC A
AB3D LD ($AB87),A
AB40 CALL cafe_waiter_clear Advance scene state (cafe_waiter_clear)
AB43 CALL draw_expense Draw expense display (draw_expense)
AB46 JP cafe_encounter_0 Restart poll (cafe_encounter_0)
Hero presses 's' — waiter brings bill
cafe_encounter_34 AB49 CALL cafe_waiter_approach Waiter walks to hero (cafe_waiter_approach)
AB4C LD DE,$E779 Set CHARS=$E779, draw "A sua conta" (frame_bubble_waiter_r1c19)
AB4F CALL set_chars
AB52 LD HL,$AC26
AB55 CALL draw_frame
AB58 LD A,$05 Delay 5
AB5A CALL delay_a
AB5D CALL cafe_scene_step Redraw café logo (cafe_scene_step)
AB60 LD DE,($C338) DE = café tab (var_cafe_tab)
AB64 CALL purchase_handler Check if hero can pay tab (purchase_handler)
AB67 LD A,($C33B) If cannot pay → arrested (game over) (cafe_hero_arrested)
AB6A CP $00
AB6C JP Z,cafe_hero_arrested
AB6F LD A,($AB87) Load café visit count (var_cafe_visits) into B
AB72 LD B,A Deduct B from money (deduct_money)
AB73 CALL deduct_money
AB76 LD HL,$AC3D Clear waiter bubble (frame_clear_waiter_r1c19)
AB79 CALL draw_frame
AB7C CALL cafe_waiter_clear Advance scene state (cafe_waiter_clear)
AB7F LD A,$04 Delay 4
AB81 CALL delay_a
AB84 JP main Return to main loop (main)
Prev: A799 Up: Map Next: AB87