We just released a Feb. 5 '89 prototype of DuckTales for the NES!
If you'd like to support our preservation efforts (and this wasn't cheap), please consider donating or supporting us on Patreon. Thank you!

Notes:Shadowrun (SNES)

From The Cutting Room Floor
Revision as of 22:53, 27 September 2013 by JLukas (talk | contribs) (Script commands, Matchbox, Location list started)
Jump to navigation Jump to search

This page contains notes for the game Shadowrun (SNES).


Location list

Hmmm...
To do:
are there unused rooms lurking?

Pro Action Replay code 9CFC6Cxx can be used to change the destination when using the open Matchbox cheat.

00
01 outside morgue
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F morgue lobby
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
50
51
52
53
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
70
71
72
73
74
75
76
77
78
79
7A
7B
7C
7D
7E
7F
80
81
82
83
84
85
86
87
88
89
8A
8B
8C
8D
8E
8F
90
91
92
93
94
95
96
97
98
99
9A
9B
9C
9D
9E
9F
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
AA
AB
AC
AD
AE
AF
B0
B1
B2
B3
B4
B5
B6
B7
B8
B9
BA
BB
BC
BD
BE
BF
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
D0
D1
D2 debug room
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF
E0
E1
E2
E3
E4
E5
E6
E7
E8
E9
EA
EB
EC
ED "You have reached the end. Thank you for playing Shadowrun. (C) 1993 DATAEAST. Developed by BEAM Software."
EE
EF
F0
F1
F2
F3
F4
F5
F6
F7
F8
F9
FA
FB
FC
FD
FE
FF

Script commands

command, format, description

00     00 xx            push xx

0A     0A xx            push xx + #$FF00

14     14 xxxx          push xxxx

16     16 ??

2C     2C ??

34     34 ??

44     44 jjjj          branch. jjjj = number of bytes to branch from beginning of script

48     48 jjjj          jump. jjjj = number of bytes to jump from beginning of script

56     56               end script

58     58 ii            multi-purpose, see below section. ii is an index for an unknown table starting at 82D895, and it's also * 2 for a jump table starting at 82D604

5E     5E               subtraction

7E     7E

80     80

86     86               increment last item placed on stack

8C     8C               comparison

9C     9C               comparison

AA     AA               check if equal

BA     BA

BC     BC (unk)         display text, may be a variable length command

BE     BE

C0     C0               push #$0000

C2     C2

Script command 58

58     58 4F            used to get x coord in Matchbox script
58     58 50            used to get y coord in Matchbox script

Breakpoints

80F353, execute - breaks on each script command

Debug room

Shadowrun SNES research sidewalk Matchbox beep 1 enable.png

You must be standing inside the red box to enable the first Matchbox beep.

Matchbox script

The Matchbox script is located at offset 0E7C49-0E7D7F (SNES address 9CFC49-9CFD7F)

0E7C40 |                       2C 0000 1858 570A
0E7C50 | FFAA 442F 0014 0002 5813 1400 027E BE44
0E7C60 | 2C00 18E2 2D00 1A58 1258 7F00 D258 5600
0E7C70 | 01BA 589E BC48 3301 0080 5813 0080 AA44
0E7C80 | 3301 00F0 0081 1400 0800 0400 1900 1400
0E7C90 | 0258 C758 7E00 0158 17AA 587E 001F 5817
0E7CA0 | AA80 4433 0158 2858 4F14 6602 5E34 0358
0E7CB0 | 2858 5014 D501 5E34 0500 1858 5700 01AA
0E7CC0 | 1603 C09C 7E16 05C0 9C7E 587E 0001 5817
0E7CD0 | AA7E 0018 5857 0002 AA16 03C0 8C7E 1605
0E7CE0 | C09C 7E58 7E00 0158 17AA 7E80 0018 5857
0E7CF0 | 0003 AA16 03C0 9C7E 1605 C08C 7E58 7E00
0E7D00 | 0158 17AA 7E80 0018 5857 0004 AA16 03C0
0E7D10 | 8C7E 1605 C08C 7E58 7E00 0158 17AA 7E80
0E7D20 | 0018 5857 0005 AA58 7E00 1F58 17AA 7E80
0E7D30 | 442E 0100 1858 5700 03AA 44FE 0000 0100
0E7D40 | FF00 500A FF58 4C00 1858 5700 05AA 4418
0E7D50 | 010A FE00 1858 1200 0100 FF00 660A FF58
0E7D60 | 4C00 0300 FF00 4E0A FF58 4C00 1858 5786
0E7D70 | 0018 5812 4833 01C0 0018 5812 C258 B856

offset, SNES address, commands, description

startup
0E7C49 | 9CFC49 | 2C 00
0E7C4B | 9CFC4B | 00 18         push #$18
0E7C4D | 9CFC4D | 58 57         7E3BBB + 18 = 7E3BD3, copy cheat counter to 7E0000
0E7C4F | 9CFC4F | 0A FF         push #$FFFF
0E7C51 | 9CFC51 | AA            compare cheat counter to #$FFFF
0E7C52 | 9CFC52 | 42 2F 00      branch command 9CFC49 + 002F = 9CFC78 (goto 9CFC78 if cheat not already enabled)

opened Matchbox menu with cheat active
0E7C55 | 9CFC55 | 14 00 02
0E7C58 | 9CFC58 | 58 13

exit Matchbox menu or Examine Matchbox with cheat active
0E7C5A | 9CFC5A | 14 00 02
0E7C5D | 9CFC5D | 7E
0E7C5E | 9CFC5E | BE
0E7C5F | 9CFC5F | 44 2C 00      branch command 9CFC49 + 002C = 9CFC75

Examine Matchbox with cheat active
0E7C62 | 9CFC62 | 18 E2 4D
0E7C65 | 9CFC65 | 00 1A         push #$0A
0E7C67 | 9CFC67 | 58 12
0E7C69 | 9CFC69 | 58 7F
0E7C6B | 9CFC6B | 00 D2         push #$D2 (map D2 = debug room)
0E7C6D | 9CFC6D | 58 56
0E7C6F | 9CFC6F | 00 01         push #$01
0E7C71 | 9CFC71 | BA
0E7C72 | 9CFC72 | 58 9E
0E7C75 | 9CFC75 | 48 33 01      jump 9CFC49 + 0133 = 9CFD7C

opened Matchbox menu without cheat active
0EFC78 | 9CFC78 | 00 80         push #$80
0E7C7A | 9CFC7A | 58 13

exit Matchbox menu or Examine Matchbox without cheat active
0E7C7C | 9CFC7C | 00 80         push #$80
0E7C7E | 9CFC7E | AA            comparison
0E7C7F | 9CFC7F | 44 33 01      branch command 9CFC49 + 0133 = 9CFD7C

Examine Matchbox without cheat active
0E7C82 | 9CFC82 | 00 F0         push #$F0
0E7C84 | 9CFC84 | 00 81         push #$81
0E7C86 | 9CFC86 | 14 00 08
0E7C89 | 9CFC89 | 00 04         push #$04
0E7C8B | 9CFC8B | 00 19         push #$19
0E7C8D | 9CFC8D | 00 14         push #$14
0E7C8F | 9CFC8F | 00 02         push #$02
0E7C91 | 9CFC91 | 58 C7
0E7C93 | 9CFC93 | 58 7E
0E7C95 | 9CFC95 | 00 01         push #$01 (map 01 = outside morgue)
0E7C97 | 9CFC97 | 58 17
0E7C99 | 9CFC99 | AA            comparison
0E7C9A | 9CFC9A | 58 7E
0E7C9C | 9CFC9C | 00 1F         push #$1F (map 1F = morgue lobby)
0E7C9E | 9CFC9E | 58 17
0E7CA0 | 9CFCA0 | AA            comparison
0E7CA1 | 9CFCA1 | 80
0E7CA2 | 9CFCA2 | 44 33 01      branch command 9CFC49 + 0133 = 9CFD7C (goto 9CFD7C if on wrong map)

0E7CA5 | 9CFCA5 | 58 28
0E7CA7 | 9CFCA7 | 58 4F         get x coord
0E7CA9 | 9CFCA9 | 14 66 02      push #$0266 minimum x coord (see screenshot above)
0E7CAC | 9CFCAC | 5E            subtract minimum x coord from player x coord
0E7CAD | 9CFCAD | 34 03
0E7CAF | 9CFCAF | 58 28
0E7CB1 | 9CFCB1 | 58 50         get y coord
0E7CB3 | 9CFCB3 | 14 D5 01      push #$01D5 minimum y coord (see screenshot above)
0E7CB6 | 9CFCB6 | 5E            subtract minimum y coord from player y coord
0E7CB7 | 9CFCB7 | 34 05
0E7CB9 | 9CFCB9 | 00 18         push #$18
0E7CBB | 9CFCBB | 58 57         7E3BBB + 18 = 7E3BD3, copy cheat counter to 7E0000
0E7CBD | 9CFCBD | 00 01         push #01
0E7CBF | 9CFCBF | AA            compare cheat counter to #$01
0E7CC0 | 9CFCC0 | 16 03
0E7CC2 | 9CFCC2 | C0            push #$0000
0E7CC3 | 9CFCC3 | 9C            comparison
0E7CC4 | 9CFCC4 | 7E
0E7CC5 | 9CFCC5 | 16 05
0E7CC7 | 9CFCC7 | C0            push #$0000
0E7CC8 | 9CFCC8 | 9C            comparison
0E7CC9 | 9CFCC9 | 7E
0E7CCA | 9CFCCA | 58 7E
0E7CCC | 9CFCCC | 00 01         push #$01
0E7CCE | 9CFCCE | 58 17
0E7CD0 | 9CFCD0 | AA            comparison
0E7CD1 | 9CFCD1 | 7E
0E7CD2 | 9CFCD2 | 00 18         push #$18
0E7CD4 | 9CFCD4 | 58 57         7E3BBB + 18 = 7E3BD3, copy cheat counter to 7E0000
0E7CD6 | 9CFCD6 | 00 02         push #$02
0E7CD8 | 9CFCD8 | AA            compare cheat counter to #$02
0E7CD9 | 9CFCD9 | 16 03
0E7CDB | 9CFCDB | C0            push #$0000
0E7CDC | 9CFCDC | 8C            comparison
0E7CDD | 9CFCDD | 7E
0E7CDE | 9CFCDE | 16 05
0E7CE0 | 9CFCE0 | C0            push #$0000
0E7CE1 | 9CFCE1 | 9C            comparison
0E7CE2 | 9CFCE2 | 7E
0E7CE3 | 9CFCE2 | 58 7E
0E7CE5 | 9CFCE5 | 00 01         push #$01
0E7CE7 | 9CFCE7 | 58 17
0E7CE9 | 9CFCE9 | AA            comparison
0E7CEA | 9CFCEA | 7E
0E7CEB | 9CFCEB | 80
0E7CEC | 9CFCEC | 00 18         push #$18
0E7CEE | 9CFCEE | 58 57         7E3BBB + 18 = 7E3BD3, copy cheat counter to 7E0000
0E7CF0 | 9CFCF0 | 00 03         push #$03
0E7CF2 | 9CFCF2 | AA            compare cheat counter to #$03
0E7CF3 | 9CFCF3 | 16 03
0E7CF5 | 9CFCF5 | C0            push #$0000
0E7CF6 | 9CFCF6 | 9C            comparison
0E7CF7 | 9CFCF7 | 7E
0E7CF8 | 9CFCF8 | 16 05
0E7CFA | 9CFCFA | C0            push #$0000
0E7CFB | 9CFCFB | 8C            comparison
0E7CFC | 9CFCFC | 7E
0E7CFD | 9CFCFD | 58 7E
0E7CFF | 9CFCFF | 00 01         push #$01
0E7D01 | 9CFD01 | 58 17
0E7D03 | 9CFD03 | AA            comparison
0E7D04 | 9CFD04 | 7E
0E7D05 | 9CFD05 | 80
0E7D06 | 9CFD06 | 00 18         push #$18
0E7D08 | 9CFD08 | 58 57         7E3BBB + 18 = 7E3BD3, copy cheat counter to 7E0000
0E7D0A | 9CFD0A | 00 04         push #$04
0E7D0C | 9CFD0C | AA            compare cheat counter to #$04
0E7D0D | 9CFD0D | 16 03
0E7D0F | 9CFD0F | C0            push #$0000
0E7D10 | 9CFD10 | 8C            comparison
0E7D11 | 9CFD11 | 7E
0E7D12 | 9CFD12 | 16 05
0E7D14 | 9CFD14 | C0            push #$0000
0E7D15 | 9CFD15 | 8C            comparison
0E7D16 | 9CFD16 | 7E
0E7D17 | 9CFD17 | 58 7E
0E7D19 | 9CFD19 | 00 01         push #$01
0E7D1B | 9CFD1B | 58 17
0E7D1D | 9CFD1D | AA            comparison
0E7D1E | 9CFD1E | 7E
0E7D1F | 9CFD1F | 80
0E7D20 | 9CFD20 | 00 18         push #$18
0E7D22 | 9CFD22 | 58 57         7E3BBB + 18 = 7E3BD3, copy cheat counter to 7E0000
0E7D24 | 9CFD24 | 00 05         push #$05
0E7D26 | 9CFD26 | AA            compare cheat counter to #$05
0E7D27 | 9CFD27 | 58 7E
0E7D29 | 9CFD29 | 00 1F         push #$1F (map 1F = morgue lobby)
0E7D2B | 9CFD2B | 58 17
0E7D2D | 9CFD2D | AA            comparison
0E7D2E | 9CFD2E | 7E
0E7D2F | 9CFD2F | 80
0E7D30 | 9CFD30 | 44 2E 01      branch command 9CFC49 + 012E = 9CFD77 (goto 9CFD77 if one of the cheat steps failed)

beeping Matchbox section
0E7D33 | 9CFD33 | 00 18         push #18
0E7D35 | 9CFD35 | 58 57         7E3BBB + 18 = 7E3BD3, copy cheat counter to 7E0000
0E7D37 | 9CFD37 | 00 03         push #$03 
0E7D39 | 9CFD39 | AA            compare cheat counter to #$03
0E7D3A | 9CFD3A | 44 FE 00      branch command 9CFC49 + 00FE = 9CFD47 (goto 9CFC47 if cheat counter != #$03)

Matchbox cheat counter == #$03 double beep section
0E7D3D | 9CFD3D | 00 01         push #$01
0E7D3F | 9CFD3F | 00 FF         push #$FF
0E7D41 | 9CFD41 | 00 50         push #$50 (sound index 50)
0E7D43 | 9CFD43 | 0A FF         push #$FFFF
0E7D45 | 9CFD45 | 58 4C

0E7D47 | 9CFD47 | 00 18         push #$18
0E7D49 | 9CFD49 | 58 57         7E3BBB + 18 = 7E3BD3, copy cheat counter to 7E0000
0E7D4B | 9CFD4B | 00 05         push #$05
0E7D4D | 9CFD4D | AA            compare cheat counter to #$05
0E7D4E | 9CFD4E | 44 18 01      branch command 9CFC49 + 0118 = 9CFD61 (goto 9CFD61 if cheat counter != #$05)

all cheat conditions met, enable cheat
0E7D51 | 9CFD51 | 0A FE         push #$FFFE
0E7D53 | 9CFD53 | 00 18         push #$18
0E7D55 | 9CFD55 | 58 12         store result to cheat counter, 7E3BBB + 18 = 7E3BD3
0E7D57 | 9CFD57 | 00 01         push #$01
0E7D59 | 9CFD59 | 00 FF         push #$FF
0E7F5B | 9CFD5B | 00 66         push #$66
0E7F5D | 9CFD5D | 0A FF         push #$FFFF

0E7F61 | 9CFD61 | 00 03         push #$03
0E7F63 | 9CFD63 | 00 FF         push #$FF
0E7F65 | 9CFD65 | 00 4E         push #$4E (sound index 4E)
0E7F67 | 9CFD67 | 0A FF         push #$FFFF
0E7F69 | 9CFD69 | 58 4C
0E7F6B | 9CFD6B | 00 18         push #$18
0E7F6D | 9CFD6D | 58 57         7E3BBB + 18 = 7E3BD3, copy cheat counter to 7E0000
0E7D6F | 9CFD6F | 86            cheat counter + 1
0E7D70 | 9CFD70 | 00 18         push #$18
0E7D72 | 9CFD72 | 58 12         store result to cheat counter, 7E3BBB + 18 = 7E3BD3
0E7D74 | 9CFD74 | 48 33 01      jump 9CFC49 + 0133 = 9CFD7C

failed cheat, reset cheat counter back to #$0000
0E7D77 | 9CFD77 | C0            push #$0000
0E7D78 | 9CFD78 | 00 18         push #$18
0E7D7A | 9CFD7A | 58 12         store result to cheat counter, 7E3BBB + 18 = 7E3BD3

exit
0E7D7C | 9CFD7C | C2
0E7D7D | 9CFD7D | 58 B8
0E7F7F | 9CFD7F | 56            end