Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | pmbaty | 1 | ### What is the difference between autocontrol, control and anim? |
2 | |||
3 | Autocontrol: where keypresses are generated. (guards, demo) |
||
4 | Control: where sequences are activated based on keystrokes and other things. |
||
5 | Anim: where sequences are interpreted. |
||
6 | |||
7 | ### What is the difference between frame, image and resource? |
||
8 | |||
9 | frame: An index into the frame table. |
||
10 | Also an unit of time = 1/12 seconds. (1/10 s when fighting.) |
||
11 | image: 0-based index within a chtab |
||
12 | resource: ID in DAT file, image + palette_resource_id + 1 |
||
13 | |||
14 | ### What is a chtab? |
||
15 | |||
16 | It's a collection of images, with a common palette. |
||
17 | The game uses these chtabs: |
||
18 | 0: sword (in someone's hand) (PRINCE, 700) |
||
19 | 1: flame, sword (on floor), potion (PRINCE, 150) |
||
20 | 2: kid (KID, 400) |
||
21 | 3: princess in intro (PV, 800) |
||
22 | 4: Jaffar in intro (PV, 850), princess in cutscenes (PV, 900) |
||
23 | 5: guard (GUARD/SKEL/FAT/SHADOW/VIZIER, 750) |
||
24 | 6: environment (except wall) (VDUNGEON/VPALACE, 200) |
||
25 | 7: environment wall (VDUNGEON/VPALACE, 360) |
||
26 | 8: princess room (PV, 950) |
||
27 | 9: princess bed (PV, 980) |
||
28 | |||
29 | ### What tables are there? |
||
30 | |||
31 | seqtbl[]: contains the sequence codes |
||
32 | seqtbl_offsets[]: contains the offsets (addresses) of the various sequences |
||
33 | frame_table_kid[]: contains the data of the kid's frames |
||
34 | frame_tbl_guard[]: contains the data of the guards' frames |
||
35 | frame_tbl_cuts[]: contains the data of the cutscenes' frames (princess, Jaffar) |
||
36 | sword_tbl[]: contains the data of the sword's frames |
||
37 | |||
38 | ### What's in the frame tables? |
||
39 | |||
40 | (used in load_frame()) |
||
41 | For each frame: |
||
42 | image |
||
43 | 0-based index |
||
44 | sword |
||
45 | bits 0..5: sword frame (0-based index into the sword table) |
||
46 | bits 6..7: chtab (add 2: 00=2, 01=3, 10=4, 11=5) |
||
47 | dx |
||
48 | delta x from char's position to image's position (+ = forward) |
||
49 | dy |
||
50 | delta y from char's position to image's position (+ = down) |
||
51 | flags |
||
52 | bits 0..4: x-position of weight (backward, that is right on the image) |
||
53 | bit 5: "thin" this frame for collision detection (used in set_char_collision()) |
||
54 | bit 6: needs floor (used in check_on_floor() and check_press()) |
||
55 | bit 7: even/odd pixel (used in load_frame_to_obj()) |
||
56 | |||
57 | ### What's in the sequence table? |
||
58 | |||
59 | The sequence table is a list of frame indexes and commands. |
||
60 | |||
61 | sequence codes: (used in play_seq()) |
||
62 | 0x00..0xF0: show frame with this index |
||
63 | 0xF1: end level |
||
64 | 0xF2 n: play sound |
||
65 | 0xF3 n: get item if n=1 |
||
66 | 0xF4: knock down (loose floors will shake in char's row) |
||
67 | 0xF5: knock up (loose floors will shake in row above char's row) |
||
68 | 0xF6: nothing |
||
69 | 0xF7 l h: jump to hl if slow-fall is active |
||
70 | 0xF8 x y: set falling speed (x: + = forward, y: + = down) |
||
71 | 0xF9 n: set action |
||
72 | 0xFA y: move y pixels (+ = down) |
||
73 | 0xFB x: move x pixels (+ = forward) |
||
74 | 0xFC: go down one row (does not change y coordinate) |
||
75 | 0xFD: go up one row (does not change y coordinate) |
||
76 | 0xFE: flip |
||
77 | 0xFF l h: jump to hl |
||
78 | |||
79 | ### What's in the sequence offset table? |
||
80 | |||
81 | sequence indexes: |
||
82 | See internals_sequence-index.csv |
||
83 | |||
84 | ### How are images drawn at given coordinates? |
||
85 | |||
86 | Coordinates give the bottom left of the image. |
||
87 | For flipped images, it's the bottom right of the flipped image. |
||
88 | |||
89 | ### How are x coordinates counted? |
||
90 | |||
91 | Char: |
||
92 | 58=left |
||
93 | 198=right |
||
94 | one tile is 14 units wide |
||
95 | | |
||
96 | |load_frame_to_obj() |
||
97 | V |
||
98 | Object: |
||
99 | 0=left |
||
100 | 280=right |
||
101 | one tile is 28 units wide |
||
102 | | |
||
103 | |calc_screen_x_coord() |
||
104 | V |
||
105 | Screen: |
||
106 | 0=left |
||
107 | 320=right |
||
108 | one tile is 32 units wide |
||
109 | |||
110 | ### What is stored about characters? |
||
111 | |||
112 | (struct char_type) |
||
113 | frame |
||
114 | Index of current frame. |
||
115 | The used frame table depends on charid. |
||
116 | x |
||
117 | x-position in the Char coordinate system. |
||
118 | y |
||
119 | y-position |
||
120 | direction |
||
121 | 0x00 (>=0): right (image is flipped) |
||
122 | 0x56: none (for guards) |
||
123 | 0xFF (<0): left (image is not flipped) |
||
124 | curr_col |
||
125 | Current column, 0..9 is in the current room. |
||
126 | curr_row |
||
127 | Current row, 0..2 is in the current room. |
||
128 | action |
||
129 | 0: stand |
||
130 | 1: run, jump |
||
131 | 2: hang, climb |
||
132 | 3: in midair |
||
133 | 4: in freefall |
||
134 | 5: bumped |
||
135 | 6: hang straight |
||
136 | 7: turn |
||
137 | 99: char is hurt by sword |
||
138 | fall_x |
||
139 | x-speed of falling (+ = forward) |
||
140 | fall_y |
||
141 | y-speed of falling (+ = down) |
||
142 | room |
||
143 | Current room. |
||
144 | repeat |
||
145 | (used in safe_step()) |
||
146 | 0: may step off edge |
||
147 | 1: won't step off edge |
||
148 | charid |
||
149 | Who is this? |
||
150 | Its value decides which frame table to use (in load_frame()), and various things about char's behaviour. |
||
151 | 0: kid |
||
152 | 1: shadow |
||
153 | 2: guard |
||
154 | 4: skeleton |
||
155 | 5: princess |
||
156 | 6: vizier (in intro) |
||
157 | 0x18: mouse |
||
158 | sword |
||
159 | 0: not holding sword |
||
160 | 2: holding sword |
||
161 | alive |
||
162 | <0: is alive |
||
163 | >=0: is dead |
||
164 | curr_seq |
||
165 | Current position (address) in the sequence table. |