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
131
132
133
134
|
/* Copyright (C) 1994-2004 Revolution Software Ltd
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Header$
*/
#ifndef _SCRIPT_STRUCTURES
#define _SCRIPT_STRUCTURES
namespace Sword2 {
#if !defined(__GNUC__)
#pragma START_PACK_STRUCTS
#endif
// these structures represent the broken up compact components
// these here declared to the system must be the same as those declared to
// LINC (or it wont work)
// mouse structure - defines mouse detection area, detection priority &
// 'type' flag
struct ObjectMouse {
int32 x1; // Top-left and bottom-right of mouse
int32 y1; // area. (These coords are inclusive.)
int32 x2;
int32 y2;
int32 priority;
int32 pointer; // type (or resource id?) of pointer used over this area
} GCC_PACK;
// logic structure - contains fields used in logic script processing
struct ObjectLogic {
int32 looping; // 0 when first calling fn<function>;
// 1 when calling subsequent times in same loop
int32 pause; // pause count, used by fnPause()
} GCC_PACK;
// status bits for 'type' field of ObjectGraphic)
// in low word:
#define NO_SPRITE 0x00000000 // don't print
#define BGP0_SPRITE 0x00000001 // fixed to background parallax[0]
#define BGP1_SPRITE 0x00000002 // fixed to background parallax[1]
#define BACK_SPRITE 0x00000004 // 'background' sprite, fixed to main background
#define SORT_SPRITE 0x00000008 // 'sorted' sprite, fixed to main background
#define FORE_SPRITE 0x00000010 // 'foreground' sprite, fixed to main background
#define FGP0_SPRITE 0x00000020 // fixed to foreground parallax[0]
#define FGP1_SPRITE 0x00000040 // fixed to foreground parallax[0]
// in high word:
#define UNSHADED_SPRITE 0x00000000 // not to be shaded
#define SHADED_SPRITE 0x00010000 // to be shaded, based on shading mask
// graphic structure - contains fields appropriate to sprite output
struct ObjectGraphic {
int32 type; // see above
int32 anim_resource; // resource id of animation file
int32 anim_pc; // current frame number of animation
} GCC_PACK;
// speech structure - contains fields used by speech scripts & text output
struct ObjectSpeech {
int32 pen; // colour to use for body of characters
int32 width; // max width of text sprite
int32 command; // speech script command id
int32 ins1; // speech script instruction parameters (may need more now?)
int32 ins2;
int32 ins3;
int32 ins4;
int32 ins5;
int32 wait_state; // 0 not waiting, 1 waiting for next speech command
} GCC_PACK;
// mega structure - contains fields used for mega-character & mega-set
// processing
struct ObjectMega {
int32 NOT_USED_1; // only free roaming megas need to check this before registering their graphics for drawing
int32 NOT_USED_2; // id of floor on which we are standing
int32 NOT_USED_3; // id of object which we are getting to
int32 NOT_USED_4; // pixel distance to stand from player character when in conversation
int32 currently_walking; // number given us by the auto router
int32 walk_pc; // current frame number of walk-anim
int32 scale_a; // current scale factors, taken from floor data
int32 scale_b;
int32 feet_x; // mega feet coords - frame-offsets are added to these position mega frames
int32 feet_y;
int32 current_dir; // current dirction faced by mega; used by autorouter to determine turns required
int32 NOT_USED_5; // means were currently avoiding a collision (see fnWalk)
int32 megaset_res; // resource id of mega-set file
int32 NOT_USED_6; // NOT USED
} GCC_PACK;
// walk-data structure - contains details of layout of frames in the
// mega-set, and how they are to be used
struct ObjectWalkdata {
int32 nWalkFrames; // no. of frames per walk-cycle
int32 usingStandingTurnFrames; // 0 = no 1 = yes
int32 usingWalkingTurnFrames; // 0 = no 1 = yes
int32 usingSlowInFrames; // 0 = no 1 = yes
int32 usingSlowOutFrames; // 0 = no !0 = number of slow-out frames in each direction
int32 nSlowInFrames[8]; // no. of slow-in frames in each direction
int32 leadingLeg[8]; // leading leg for walk in each direction (0 = left 1 = right)
int32 dx[8 * (12 + 1)]; // walk step distances in x direction
int32 dy[8 * (12 + 1)]; // walk step distances in y direction
} GCC_PACK;
#if !defined(__GNUC__)
#pragma END_PACK_STRUCTS
#endif
} // End of namespace Sword2
#endif
|