OSDN Git Service

- Generalized Hexen's class-based spawning to be a property of the player class
[zandronum/zandronum-acc.git] / pcode.h
1 \r
2 //**************************************************************************\r
3 //**\r
4 //** pcode.h\r
5 //**\r
6 //**************************************************************************\r
7 \r
8 #ifndef __PCODE_H__\r
9 #define __PCODE_H__\r
10 \r
11 // HEADER FILES ------------------------------------------------------------\r
12 \r
13 #include <stddef.h>\r
14 #include "common.h"\r
15 \r
16 // MACROS ------------------------------------------------------------------\r
17 \r
18 // Values added to script number to indicate its type\r
19 enum\r
20 {\r
21         OPEN_SCRIPTS_BASE                       = 1000,\r
22         RESPAWN_SCRIPTS_BASE            = 2000, // [BC]\r
23         DEATH_SCRIPTS_BASE                      = 3000, // [BC]\r
24         ENTER_SCRIPTS_BASE                      = 4000, // [BC]\r
25         PICKUP_SCRIPTS_BASE                     = 5000, // [BC]\r
26         BLUE_RETURN_SCRIPTS_BASE        = 6000, // [BC]\r
27         RED_RETURN_SCRIPTS_BASE         = 7000, // [BC]\r
28         WHITE_RETURN_SCRIPTS_BASE       = 8000, // [BC]\r
29         LIGHTNING_SCRIPTS_BASE          = 12000,\r
30         UNLOADING_SCRIPTS_BASE          = 13000,\r
31         DISCONNECT_SCRIPTS_BASE         = 14000\r
32 };\r
33 \r
34 // Values added to script number to indicate flags (requires new-style .o)\r
35 enum\r
36 {\r
37         NET_SCRIPT_FLAG                 = 0x00010000\r
38 };\r
39 \r
40 // Or'ed with variable index when passing variables of type "out"\r
41 // An idea that was never realized.\r
42 enum\r
43 {\r
44         OUTVAR_SCRIPT_SPEC              = 0x40000000,\r
45         OUTVAR_MAP_SPEC                 = 0x80000000,\r
46         OUTVAR_WORLD_SPEC               = 0xc0000000,\r
47         OUTVAR_GLOBAL_SPEC              = 0x00000000\r
48 };\r
49 \r
50 // TYPES -------------------------------------------------------------------\r
51 \r
52 struct symbolNode_s;    // Defined in symbol.h\r
53         \r
54 typedef enum\r
55 {\r
56         PCD_NOP,\r
57         PCD_TERMINATE,\r
58         PCD_SUSPEND,\r
59         PCD_PUSHNUMBER,\r
60         PCD_LSPEC1,\r
61         PCD_LSPEC2,\r
62         PCD_LSPEC3,\r
63         PCD_LSPEC4,\r
64         PCD_LSPEC5,\r
65         PCD_LSPEC1DIRECT,\r
66         PCD_LSPEC2DIRECT,\r
67         PCD_LSPEC3DIRECT,\r
68         PCD_LSPEC4DIRECT,\r
69         PCD_LSPEC5DIRECT,\r
70         PCD_ADD,\r
71         PCD_SUBTRACT,\r
72         PCD_MULTIPLY,\r
73         PCD_DIVIDE,\r
74         PCD_MODULUS,\r
75         PCD_EQ,\r
76         PCD_NE,\r
77         PCD_LT,\r
78         PCD_GT,\r
79         PCD_LE,\r
80         PCD_GE,\r
81         PCD_ASSIGNSCRIPTVAR,\r
82         PCD_ASSIGNMAPVAR,\r
83         PCD_ASSIGNWORLDVAR,\r
84         PCD_PUSHSCRIPTVAR,\r
85         PCD_PUSHMAPVAR,\r
86         PCD_PUSHWORLDVAR,\r
87         PCD_ADDSCRIPTVAR,\r
88         PCD_ADDMAPVAR,\r
89         PCD_ADDWORLDVAR,\r
90         PCD_SUBSCRIPTVAR,\r
91         PCD_SUBMAPVAR,\r
92         PCD_SUBWORLDVAR,\r
93         PCD_MULSCRIPTVAR,\r
94         PCD_MULMAPVAR,\r
95         PCD_MULWORLDVAR,\r
96         PCD_DIVSCRIPTVAR,\r
97         PCD_DIVMAPVAR,\r
98         PCD_DIVWORLDVAR,\r
99         PCD_MODSCRIPTVAR,\r
100         PCD_MODMAPVAR,\r
101         PCD_MODWORLDVAR,\r
102         PCD_INCSCRIPTVAR,\r
103         PCD_INCMAPVAR,\r
104         PCD_INCWORLDVAR,\r
105         PCD_DECSCRIPTVAR,\r
106         PCD_DECMAPVAR,\r
107         PCD_DECWORLDVAR,\r
108         PCD_GOTO,\r
109         PCD_IFGOTO,\r
110         PCD_DROP,\r
111         PCD_DELAY,\r
112         PCD_DELAYDIRECT,\r
113         PCD_RANDOM,\r
114         PCD_RANDOMDIRECT,\r
115         PCD_THINGCOUNT,\r
116         PCD_THINGCOUNTDIRECT,\r
117         PCD_TAGWAIT,\r
118         PCD_TAGWAITDIRECT,\r
119         PCD_POLYWAIT,\r
120         PCD_POLYWAITDIRECT,\r
121         PCD_CHANGEFLOOR,\r
122         PCD_CHANGEFLOORDIRECT,\r
123         PCD_CHANGECEILING,\r
124         PCD_CHANGECEILINGDIRECT,\r
125         PCD_RESTART,\r
126         PCD_ANDLOGICAL,\r
127         PCD_ORLOGICAL,\r
128         PCD_ANDBITWISE,\r
129         PCD_ORBITWISE,\r
130         PCD_EORBITWISE,\r
131         PCD_NEGATELOGICAL,\r
132         PCD_LSHIFT,\r
133         PCD_RSHIFT,\r
134         PCD_UNARYMINUS,\r
135         PCD_IFNOTGOTO,\r
136         PCD_LINESIDE,\r
137         PCD_SCRIPTWAIT,\r
138         PCD_SCRIPTWAITDIRECT,\r
139         PCD_CLEARLINESPECIAL,\r
140         PCD_CASEGOTO,\r
141         PCD_BEGINPRINT,\r
142         PCD_ENDPRINT,\r
143         PCD_PRINTSTRING,\r
144         PCD_PRINTNUMBER,\r
145         PCD_PRINTCHARACTER,\r
146         PCD_PLAYERCOUNT,\r
147         PCD_GAMETYPE,\r
148         PCD_GAMESKILL,\r
149         PCD_TIMER,\r
150         PCD_SECTORSOUND,\r
151         PCD_AMBIENTSOUND,\r
152         PCD_SOUNDSEQUENCE,\r
153         PCD_SETLINETEXTURE,\r
154         PCD_SETLINEBLOCKING,\r
155         PCD_SETLINESPECIAL,\r
156         PCD_THINGSOUND,\r
157         PCD_ENDPRINTBOLD,\r
158 // [RH] End of Hexen p-codes\r
159         PCD_ACTIVATORSOUND,\r
160         PCD_LOCALAMBIENTSOUND,\r
161         PCD_SETLINEMONSTERBLOCKING,\r
162 // [BC] Start of new pcodes\r
163         PCD_PLAYERBLUESKULL,\r
164         PCD_PLAYERREDSKULL,\r
165         PCD_PLAYERYELLOWSKULL,\r
166         PCD_PLAYERMASTERSKULL,\r
167         PCD_PLAYERBLUECARD,\r
168         PCD_PLAYERREDCARD,\r
169         PCD_PLAYERYELLOWCARD,\r
170         PCD_PLAYERMASTERCARD,\r
171         PCD_PLAYERBLACKSKULL,\r
172         PCD_PLAYERSILVERSKULL,\r
173         PCD_PLAYERGOLDSKULL,\r
174         PCD_PLAYERBLACKCARD,\r
175         PCD_PLAYERSILVERCARD,\r
176         PCD_PLAYERONTEAM,\r
177         PCD_PLAYERTEAM,\r
178         PCD_PLAYERHEALTH,\r
179         PCD_PLAYERARMORPOINTS,\r
180         PCD_PLAYERFRAGS,\r
181         PCD_PLAYEREXPERT,\r
182         PCD_BLUETEAMCOUNT,\r
183         PCD_REDTEAMCOUNT,\r
184         PCD_BLUETEAMSCORE,\r
185         PCD_REDTEAMSCORE,\r
186         PCD_ISONEFLAGCTF,\r
187         PCD_LSPEC6,                             // [RH] LSPEC6 is never actually used.\r
188         PCD_LSPEC6DIRECT,               // Should these be removed?\r
189         PCD_PRINTNAME,\r
190         PCD_MUSICCHANGE,\r
191         PCD_CONSOLECOMMANDDIRECT,\r
192         PCD_CONSOLECOMMAND,\r
193         PCD_SINGLEPLAYER,\r
194 // [RH] End of Skull Tag p-codes\r
195         PCD_FIXEDMUL,\r
196         PCD_FIXEDDIV,\r
197         PCD_SETGRAVITY,\r
198         PCD_SETGRAVITYDIRECT,\r
199         PCD_SETAIRCONTROL,\r
200         PCD_SETAIRCONTROLDIRECT,\r
201         PCD_CLEARINVENTORY,\r
202         PCD_GIVEINVENTORY,\r
203         PCD_GIVEINVENTORYDIRECT,\r
204         PCD_TAKEINVENTORY,\r
205         PCD_TAKEINVENTORYDIRECT,\r
206         PCD_CHECKINVENTORY,\r
207         PCD_CHECKINVENTORYDIRECT,\r
208         PCD_SPAWN,\r
209         PCD_SPAWNDIRECT,\r
210         PCD_SPAWNSPOT,\r
211         PCD_SPAWNSPOTDIRECT,\r
212         PCD_SETMUSIC,\r
213         PCD_SETMUSICDIRECT,\r
214         PCD_LOCALSETMUSIC,\r
215         PCD_LOCALSETMUSICDIRECT,\r
216         PCD_PRINTFIXED,\r
217         PCD_PRINTLOCALIZED,\r
218         PCD_MOREHUDMESSAGE,\r
219         PCD_OPTHUDMESSAGE,\r
220         PCD_ENDHUDMESSAGE,\r
221         PCD_ENDHUDMESSAGEBOLD,\r
222         PCD_SETSTYLE,\r
223         PCD_SETSTYLEDIRECT,\r
224         PCD_SETFONT,\r
225         PCD_SETFONTDIRECT,\r
226         PCD_PUSHBYTE,           // Valid in compact-script mode only\r
227         PCD_LSPEC1DIRECTB,      // "\r
228         PCD_LSPEC2DIRECTB,      // "\r
229         PCD_LSPEC3DIRECTB,      // "\r
230         PCD_LSPEC4DIRECTB,      // "\r
231         PCD_LSPEC5DIRECTB,      // "\r
232         PCD_DELAYDIRECTB,       // "\r
233         PCD_RANDOMDIRECTB,      // "\r
234         PCD_PUSHBYTES,          // "\r
235         PCD_PUSH2BYTES,         // "\r
236         PCD_PUSH3BYTES,         // "\r
237         PCD_PUSH4BYTES,         // "\r
238         PCD_PUSH5BYTES,         // "\r
239         PCD_SETTHINGSPECIAL,\r
240         PCD_ASSIGNGLOBALVAR,\r
241         PCD_PUSHGLOBALVAR,\r
242         PCD_ADDGLOBALVAR,\r
243         PCD_SUBGLOBALVAR,\r
244         PCD_MULGLOBALVAR,\r
245         PCD_DIVGLOBALVAR,\r
246         PCD_MODGLOBALVAR,\r
247         PCD_INCGLOBALVAR,\r
248         PCD_DECGLOBALVAR,\r
249         PCD_FADETO,\r
250         PCD_FADERANGE,\r
251         PCD_CANCELFADE,\r
252         PCD_PLAYMOVIE,\r
253         PCD_SETFLOORTRIGGER,\r
254         PCD_SETCEILINGTRIGGER,\r
255         PCD_GETACTORX,\r
256         PCD_GETACTORY,\r
257         PCD_GETACTORZ,\r
258         PCD_STARTTRANSLATION,\r
259         PCD_TRANSLATIONRANGE1,\r
260         PCD_TRANSLATIONRANGE2,\r
261         PCD_ENDTRANSLATION,\r
262         PCD_CALL,\r
263         PCD_CALLDISCARD,\r
264         PCD_RETURNVOID,\r
265         PCD_RETURNVAL,\r
266         PCD_PUSHMAPARRAY,\r
267         PCD_ASSIGNMAPARRAY,\r
268         PCD_ADDMAPARRAY,\r
269         PCD_SUBMAPARRAY,\r
270         PCD_MULMAPARRAY,\r
271         PCD_DIVMAPARRAY,\r
272         PCD_MODMAPARRAY,\r
273         PCD_INCMAPARRAY,\r
274         PCD_DECMAPARRAY,\r
275         PCD_DUP,\r
276         PCD_SWAP,\r
277         PCD_WRITETOINI,\r
278         PCD_GETFROMINI,\r
279         PCD_SIN,\r
280         PCD_COS,\r
281         PCD_VECTORANGLE,\r
282         PCD_CHECKWEAPON,\r
283         PCD_SETWEAPON,\r
284         PCD_TAGSTRING,\r
285         PCD_PUSHWORLDARRAY,\r
286         PCD_ASSIGNWORLDARRAY,\r
287         PCD_ADDWORLDARRAY,\r
288         PCD_SUBWORLDARRAY,\r
289         PCD_MULWORLDARRAY,\r
290         PCD_DIVWORLDARRAY,\r
291         PCD_MODWORLDARRAY,\r
292         PCD_INCWORLDARRAY,\r
293         PCD_DECWORLDARRAY,\r
294         PCD_PUSHGLOBALARRAY,\r
295         PCD_ASSIGNGLOBALARRAY,\r
296         PCD_ADDGLOBALARRAY,\r
297         PCD_SUBGLOBALARRAY,\r
298         PCD_MULGLOBALARRAY,\r
299         PCD_DIVGLOBALARRAY,\r
300         PCD_MODGLOBALARRAY,\r
301         PCD_INCGLOBALARRAY,\r
302         PCD_DECGLOBALARRAY,\r
303         PCD_SETMARINEWEAPON,\r
304         PCD_SETACTORPROPERTY,\r
305         PCD_GETACTORPROPERTY,\r
306         PCD_PLAYERNUMBER,\r
307         PCD_ACTIVATORTID,\r
308         PCD_SETMARINESPRITE,\r
309         PCD_GETSCREENWIDTH,\r
310         PCD_GETSCREENHEIGHT,\r
311         PCD_THING_PROJECTILE2,\r
312         PCD_STRLEN,\r
313         PCD_SETHUDSIZE,\r
314         PCD_GETCVAR,\r
315         PCD_CASEGOTOSORTED,\r
316         PCD_SETRESULTVALUE,\r
317         PCD_GETLINEROWOFFSET,\r
318         PCD_GETACTORFLOORZ,\r
319         PCD_GETACTORANGLE,\r
320         PCD_GETSECTORFLOORZ,\r
321         PCD_GETSECTORCEILINGZ,\r
322         PCD_LSPEC5RESULT,\r
323         PCD_GETSIGILPIECES,\r
324         PCD_GETLEVELINFO,\r
325         PCD_CHANGESKY,\r
326         PCD_PLAYERINGAME,\r
327         PCD_PLAYERISBOT,\r
328         PCD_SETCAMERATOTEXTURE,\r
329         PCD_ENDLOG,\r
330         PCD_GETAMMOCAPACITY,\r
331         PCD_SETAMMOCAPACITY,\r
332 // [JB] start of new pcodes\r
333         PCD_PRINTMAPCHARARRAY,\r
334         PCD_PRINTWORLDCHARARRAY,\r
335         PCD_PRINTGLOBALCHARARRAY,\r
336 // [JB] end of new pcodes\r
337         PCD_SETACTORANGLE,\r
338         PCD_GRABINPUT,\r
339         PCD_SETMOUSEPOINTER,\r
340         PCD_MOVEMOUSEPOINTER,\r
341         PCD_SPAWNPROJECTILE,\r
342         PCD_GETSECTORLIGHTLEVEL,\r
343         PCD_GETACTORCEILINGZ,\r
344         PCD_SETACTORPOSITION,\r
345         PCD_CLEARACTORINVENTORY,\r
346         PCD_GIVEACTORINVENTORY,\r
347         PCD_TAKEACTORINVENTORY,\r
348         PCD_CHECKACTORINVENTORY,\r
349         PCD_THINGCOUNTNAME,\r
350         PCD_SPAWNSPOTFACING,\r
351         PCD_PLAYERCLASS,\r
352 \r
353         PCODE_COMMAND_COUNT\r
354 } pcd_t;\r
355 \r
356 // PUBLIC FUNCTION PROTOTYPES ----------------------------------------------\r
357 \r
358 void PC_OpenObject(char *name, size_t size, int flags);\r
359 void PC_CloseObject(void);\r
360 void PC_Append(void *buffer, size_t size);\r
361 void PC_AppendByte(U_BYTE val);\r
362 void PC_AppendWord(U_WORD val);\r
363 void PC_AppendLong(U_LONG val);\r
364 void PC_AppendString(char *string);\r
365 void PC_AppendCmd(pcd_t command);\r
366 void PC_AppendPushVal(U_LONG val);\r
367 void PC_AppendShrink(U_BYTE val);\r
368 void PC_Write(void *buffer, size_t size, int address);\r
369 void PC_WriteByte(U_BYTE val, int address);\r
370 //void PC_WriteWord(U_WORD val, int address);\r
371 void PC_WriteLong(U_LONG val, int address);\r
372 void PC_WriteString(char *string, int address);\r
373 void PC_WriteCmd(pcd_t command, int address);\r
374 void PC_Skip(size_t size);\r
375 //void PC_SkipByte(void);\r
376 //void PC_SkipWord(void);\r
377 void PC_SkipLong(void);\r
378 void PC_AddScript(int number, int argCount);\r
379 void PC_SetScriptVarCount(int number, int varCount);\r
380 void PC_AddFunction(struct symbolNode_s *sym);\r
381 void PC_PutMapVariable(int index, int value);\r
382 void PC_NameMapVariable(int index, struct symbolNode_s *sym);\r
383 void PC_AddArray(int index, int size);\r
384 void PC_InitArray(int index, int *entries, boolean hasStrings);\r
385 int PC_AddImport(char *name);\r
386 \r
387 // PUBLIC DATA DECLARATIONS ------------------------------------------------\r
388 \r
389 extern int pc_Address;\r
390 extern byte *pc_Buffer;\r
391 extern byte *pc_BufferPtr;\r
392 extern int pc_ScriptCount;\r
393 extern int pc_FunctionCount;\r
394 extern boolean pc_NoShrink;\r
395 extern boolean pc_HexenCase;\r
396 extern boolean pc_WadAuthor;\r
397 extern boolean pc_EncryptStrings;\r
398 extern int pc_LastAppendedCommand;\r
399 \r
400 #endif\r