1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
/* ScummVM - Scumm Interpreter
* Copyright (C) 2003-2006 The ScummVM project
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $URL$
* $Id$
*
*/
#ifndef BSOBJECT_H
#define BSOBJECT_H
#include "common/scummsys.h"
namespace Sword1 {
#define O_TOTAL_EVENTS 5
#define O_WALKANIM_SIZE 600 //max number of nodes in router output
#define O_GRID_SIZE 200
#define EXTRA_GRID_SIZE 20
#if !defined(__GNUC__)
#pragma START_PACK_STRUCTS
#endif
struct OEventSlot { //receiving event list in the compact -
int32 o_event; //array of these with O_TOTAL_EVENTS elements
int32 o_event_script;
} GCC_PACK; // size = 2*int32 = 8 bytes
#define TOTAL_script_levels 5
struct ScriptTree { //this is a logic tree, used by OBJECTs
int32 o_script_level; //logic level
int32 o_script_id[TOTAL_script_levels]; //script id's (are unique to each level)
int32 o_script_pc[TOTAL_script_levels]; //pc of script for each (if script_manager)
} GCC_PACK; // size = 11*int32 = 44 bytes
struct TalkOffset {
int32 x;
int32 y;
} GCC_PACK; // size = 2*int32 = 8 bytes
struct WalkData {
int32 frame;
int32 x;
int32 y;
int32 step;
int32 dir;
} GCC_PACK; // size = 5*int32 = 20 bytes
struct Object {
int32 o_type; // 0 broad description of type - object, floor, etc.
int32 o_status; // 4 bit flags for logic, graphics, mouse, etc.
int32 o_logic; // 8 logic type
int32 o_place; // 12 where is the mega character
int32 o_down_flag; // 16 pass back down with this - with C possibly both are unnecessary?
int32 o_target; // 20 target object for the GTM *these are linked to script
int32 o_screen; // 24 physical screen/section
int32 o_frame; // 28 frame number &
int32 o_resource; // 32 id of spr file it comes from
int32 o_sync; // 36 receive sync here
int32 o_pause; // 40 logic_engine() pauses these cycles
int32 o_xcoord; // 44
int32 o_ycoord; // 48
int32 o_mouse_x1; // 52 top-left of mouse area is (x1,y1)
int32 o_mouse_y1; // 56
int32 o_mouse_x2; // 60 bottom-right of area is (x2,y2) (these coords are inclusive)
int32 o_mouse_y2; // 64
int32 o_priority; // 68
int32 o_mouse_on; // 72
int32 o_mouse_off; // 76
int32 o_mouse_click; // 80
int32 o_interact; // 84
int32 o_get_to_script; // 88
int32 o_scale_a; // 92 used by floors
int32 o_scale_b; // 96
int32 o_anim_x; // 100
int32 o_anim_y; // 104
ScriptTree o_tree; // 108 size = 44 bytes
ScriptTree o_bookmark; // 152 size = 44 bytes
int32 o_dir; // 196
int32 o_speech_pen; // 200
int32 o_speech_width; // 204
int32 o_speech_time; // 208
int32 o_text_id; // 212 working back from o_ins1
int32 o_tag; // 216
int32 o_anim_pc; // 220 position within an animation structure
int32 o_anim_resource; // 224 cdt or anim table
int32 o_walk_pc; // 228
TalkOffset talk_table[6]; // 232 size = 6*8 bytes = 48
OEventSlot o_event_list[O_TOTAL_EVENTS]; // 280 size = 5*8 bytes = 40
int32 o_ins1; // 320
int32 o_ins2; // 324
int32 o_ins3; // 328
int32 o_mega_resource; // 332
int32 o_walk_resource; // 336
WalkData o_route[O_WALKANIM_SIZE]; // 340 size = 600*20 bytes = 12000
// mega size = 12340 bytes (+ 8 byte offset table + 20 byte header = 12368)
} GCC_PACK;
#if !defined(__GNUC__)
#pragma END_PACK_STRUCTS
#endif
} // End of namespace Sword1
#endif //BSOBJECT_H
|