OSDN Git Service

Fixed comparison between pointer and integer in ACC's token.c.
[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         RETURN_SCRIPTS_BASE                     = 15000,\r
33 };\r
34 \r
35 // Values added to script number to indicate flags (requires new-style .o)\r
36 enum\r
37 {\r
38         NET_SCRIPT_FLAG                 = 0x00010000\r
39 };\r
40 \r
41 // Or'ed with variable index when passing variables of type "out"\r
42 // An idea that was never realized.\r
43 enum\r
44 {\r
45         OUTVAR_SCRIPT_SPEC              = 0x40000000,\r
46         OUTVAR_MAP_SPEC                 = 0x80000000,\r
47         OUTVAR_WORLD_SPEC               = 0xc0000000,\r
48         OUTVAR_GLOBAL_SPEC              = 0x00000000\r
49 };\r
50 \r
51 // TYPES -------------------------------------------------------------------\r
52 \r
53 struct symbolNode_s;    // Defined in symbol.h\r
54         \r
55 typedef enum\r
56 {\r
57         PCD_NOP,\r
58         PCD_TERMINATE,\r
59         PCD_SUSPEND,\r
60         PCD_PUSHNUMBER,\r
61         PCD_LSPEC1,\r
62         PCD_LSPEC2,\r
63         PCD_LSPEC3,\r
64         PCD_LSPEC4,\r
65         PCD_LSPEC5,\r
66         PCD_LSPEC1DIRECT,\r
67         PCD_LSPEC2DIRECT,\r
68         PCD_LSPEC3DIRECT,\r
69         PCD_LSPEC4DIRECT,\r
70         PCD_LSPEC5DIRECT,\r
71         PCD_ADD,\r
72         PCD_SUBTRACT,\r
73         PCD_MULTIPLY,\r
74         PCD_DIVIDE,\r
75         PCD_MODULUS,\r
76         PCD_EQ,\r
77         PCD_NE,\r
78         PCD_LT,\r
79         PCD_GT,\r
80         PCD_LE,\r
81         PCD_GE,\r
82         PCD_ASSIGNSCRIPTVAR,\r
83         PCD_ASSIGNMAPVAR,\r
84         PCD_ASSIGNWORLDVAR,\r
85         PCD_PUSHSCRIPTVAR,\r
86         PCD_PUSHMAPVAR,\r
87         PCD_PUSHWORLDVAR,\r
88         PCD_ADDSCRIPTVAR,\r
89         PCD_ADDMAPVAR,\r
90         PCD_ADDWORLDVAR,\r
91         PCD_SUBSCRIPTVAR,\r
92         PCD_SUBMAPVAR,\r
93         PCD_SUBWORLDVAR,\r
94         PCD_MULSCRIPTVAR,\r
95         PCD_MULMAPVAR,\r
96         PCD_MULWORLDVAR,\r
97         PCD_DIVSCRIPTVAR,\r
98         PCD_DIVMAPVAR,\r
99         PCD_DIVWORLDVAR,\r
100         PCD_MODSCRIPTVAR,\r
101         PCD_MODMAPVAR,\r
102         PCD_MODWORLDVAR,\r
103         PCD_INCSCRIPTVAR,\r
104         PCD_INCMAPVAR,\r
105         PCD_INCWORLDVAR,\r
106         PCD_DECSCRIPTVAR,\r
107         PCD_DECMAPVAR,\r
108         PCD_DECWORLDVAR,\r
109         PCD_GOTO,\r
110         PCD_IFGOTO,\r
111         PCD_DROP,\r
112         PCD_DELAY,\r
113         PCD_DELAYDIRECT,\r
114         PCD_RANDOM,\r
115         PCD_RANDOMDIRECT,\r
116         PCD_THINGCOUNT,\r
117         PCD_THINGCOUNTDIRECT,\r
118         PCD_TAGWAIT,\r
119         PCD_TAGWAITDIRECT,\r
120         PCD_POLYWAIT,\r
121         PCD_POLYWAITDIRECT,\r
122         PCD_CHANGEFLOOR,\r
123         PCD_CHANGEFLOORDIRECT,\r
124         PCD_CHANGECEILING,\r
125         PCD_CHANGECEILINGDIRECT,\r
126         PCD_RESTART,\r
127         PCD_ANDLOGICAL,\r
128         PCD_ORLOGICAL,\r
129         PCD_ANDBITWISE,\r
130         PCD_ORBITWISE,\r
131         PCD_EORBITWISE,\r
132         PCD_NEGATELOGICAL,\r
133         PCD_LSHIFT,\r
134         PCD_RSHIFT,\r
135         PCD_UNARYMINUS,\r
136         PCD_IFNOTGOTO,\r
137         PCD_LINESIDE,\r
138         PCD_SCRIPTWAIT,\r
139         PCD_SCRIPTWAITDIRECT,\r
140         PCD_CLEARLINESPECIAL,\r
141         PCD_CASEGOTO,\r
142         PCD_BEGINPRINT,\r
143         PCD_ENDPRINT,\r
144         PCD_PRINTSTRING,\r
145         PCD_PRINTNUMBER,\r
146         PCD_PRINTCHARACTER,\r
147         PCD_PLAYERCOUNT,\r
148         PCD_GAMETYPE,\r
149         PCD_GAMESKILL,\r
150         PCD_TIMER,\r
151         PCD_SECTORSOUND,\r
152         PCD_AMBIENTSOUND,\r
153         PCD_SOUNDSEQUENCE,\r
154         PCD_SETLINETEXTURE,\r
155         PCD_SETLINEBLOCKING,\r
156         PCD_SETLINESPECIAL,\r
157         PCD_THINGSOUND,\r
158         PCD_ENDPRINTBOLD,\r
159 // [RH] End of Hexen p-codes\r
160         PCD_ACTIVATORSOUND,\r
161         PCD_LOCALAMBIENTSOUND,\r
162         PCD_SETLINEMONSTERBLOCKING,\r
163 // [BC] Start of new pcodes\r
164         PCD_PLAYERBLUESKULL,\r
165         PCD_PLAYERREDSKULL,\r
166         PCD_PLAYERYELLOWSKULL,\r
167         PCD_PLAYERMASTERSKULL,\r
168         PCD_PLAYERBLUECARD,\r
169         PCD_PLAYERREDCARD,\r
170         PCD_PLAYERYELLOWCARD,\r
171         PCD_PLAYERMASTERCARD,\r
172         PCD_PLAYERBLACKSKULL,\r
173         PCD_PLAYERSILVERSKULL,\r
174         PCD_PLAYERGOLDSKULL,\r
175         PCD_PLAYERBLACKCARD,\r
176         PCD_PLAYERSILVERCARD,\r
177         PCD_PLAYERONTEAM,\r
178         PCD_PLAYERTEAM,\r
179         PCD_PLAYERHEALTH,\r
180         PCD_PLAYERARMORPOINTS,\r
181         PCD_PLAYERFRAGS,\r
182         PCD_PLAYEREXPERT,\r
183         PCD_BLUETEAMCOUNT,\r
184         PCD_REDTEAMCOUNT,\r
185         PCD_BLUETEAMSCORE,\r
186         PCD_REDTEAMSCORE,\r
187         PCD_ISONEFLAGCTF,\r
188         PCD_LSPEC6,                             // [RH] LSPEC6 is never actually used.\r
189         PCD_LSPEC6DIRECT,               // Should these be removed?\r
190         PCD_PRINTNAME,\r
191         PCD_MUSICCHANGE,\r
192         PCD_CONSOLECOMMANDDIRECT,\r
193         PCD_CONSOLECOMMAND,\r
194         PCD_SINGLEPLAYER,\r
195 // [RH] End of Skull Tag p-codes\r
196         PCD_FIXEDMUL,\r
197         PCD_FIXEDDIV,\r
198         PCD_SETGRAVITY,\r
199         PCD_SETGRAVITYDIRECT,\r
200         PCD_SETAIRCONTROL,\r
201         PCD_SETAIRCONTROLDIRECT,\r
202         PCD_CLEARINVENTORY,\r
203         PCD_GIVEINVENTORY,\r
204         PCD_GIVEINVENTORYDIRECT,\r
205         PCD_TAKEINVENTORY,\r
206         PCD_TAKEINVENTORYDIRECT,\r
207         PCD_CHECKINVENTORY,\r
208         PCD_CHECKINVENTORYDIRECT,\r
209         PCD_SPAWN,\r
210         PCD_SPAWNDIRECT,\r
211         PCD_SPAWNSPOT,\r
212         PCD_SPAWNSPOTDIRECT,\r
213         PCD_SETMUSIC,\r
214         PCD_SETMUSICDIRECT,\r
215         PCD_LOCALSETMUSIC,\r
216         PCD_LOCALSETMUSICDIRECT,\r
217         PCD_PRINTFIXED,\r
218         PCD_PRINTLOCALIZED,\r
219         PCD_MOREHUDMESSAGE,\r
220         PCD_OPTHUDMESSAGE,\r
221         PCD_ENDHUDMESSAGE,\r
222         PCD_ENDHUDMESSAGEBOLD,\r
223         PCD_SETSTYLE,\r
224         PCD_SETSTYLEDIRECT,\r
225         PCD_SETFONT,\r
226         PCD_SETFONTDIRECT,\r
227         PCD_PUSHBYTE,           // Valid in compact-script mode only\r
228         PCD_LSPEC1DIRECTB,      // "\r
229         PCD_LSPEC2DIRECTB,      // "\r
230         PCD_LSPEC3DIRECTB,      // "\r
231         PCD_LSPEC4DIRECTB,      // "\r
232         PCD_LSPEC5DIRECTB,      // "\r
233         PCD_DELAYDIRECTB,       // "\r
234         PCD_RANDOMDIRECTB,      // "\r
235         PCD_PUSHBYTES,          // "\r
236         PCD_PUSH2BYTES,         // "\r
237         PCD_PUSH3BYTES,         // "\r
238         PCD_PUSH4BYTES,         // "\r
239         PCD_PUSH5BYTES,         // "\r
240         PCD_SETTHINGSPECIAL,\r
241         PCD_ASSIGNGLOBALVAR,\r
242         PCD_PUSHGLOBALVAR,\r
243         PCD_ADDGLOBALVAR,\r
244         PCD_SUBGLOBALVAR,\r
245         PCD_MULGLOBALVAR,\r
246         PCD_DIVGLOBALVAR,\r
247         PCD_MODGLOBALVAR,\r
248         PCD_INCGLOBALVAR,\r
249         PCD_DECGLOBALVAR,\r
250         PCD_FADETO,\r
251         PCD_FADERANGE,\r
252         PCD_CANCELFADE,\r
253         PCD_PLAYMOVIE,\r
254         PCD_SETFLOORTRIGGER,\r
255         PCD_SETCEILINGTRIGGER,\r
256         PCD_GETACTORX,\r
257         PCD_GETACTORY,\r
258         PCD_GETACTORZ,\r
259         PCD_STARTTRANSLATION,\r
260         PCD_TRANSLATIONRANGE1,\r
261         PCD_TRANSLATIONRANGE2,\r
262         PCD_ENDTRANSLATION,\r
263         PCD_CALL,\r
264         PCD_CALLDISCARD,\r
265         PCD_RETURNVOID,\r
266         PCD_RETURNVAL,\r
267         PCD_PUSHMAPARRAY,\r
268         PCD_ASSIGNMAPARRAY,\r
269         PCD_ADDMAPARRAY,\r
270         PCD_SUBMAPARRAY,\r
271         PCD_MULMAPARRAY,\r
272         PCD_DIVMAPARRAY,\r
273         PCD_MODMAPARRAY,\r
274         PCD_INCMAPARRAY,\r
275         PCD_DECMAPARRAY,\r
276         PCD_DUP,\r
277         PCD_SWAP,\r
278         PCD_WRITETOINI,\r
279         PCD_GETFROMINI,\r
280         PCD_SIN,\r
281         PCD_COS,\r
282         PCD_VECTORANGLE,\r
283         PCD_CHECKWEAPON,\r
284         PCD_SETWEAPON,\r
285         PCD_TAGSTRING,\r
286         PCD_PUSHWORLDARRAY,\r
287         PCD_ASSIGNWORLDARRAY,\r
288         PCD_ADDWORLDARRAY,\r
289         PCD_SUBWORLDARRAY,\r
290         PCD_MULWORLDARRAY,\r
291         PCD_DIVWORLDARRAY,\r
292         PCD_MODWORLDARRAY,\r
293         PCD_INCWORLDARRAY,\r
294         PCD_DECWORLDARRAY,\r
295         PCD_PUSHGLOBALARRAY,\r
296         PCD_ASSIGNGLOBALARRAY,\r
297         PCD_ADDGLOBALARRAY,\r
298         PCD_SUBGLOBALARRAY,\r
299         PCD_MULGLOBALARRAY,\r
300         PCD_DIVGLOBALARRAY,\r
301         PCD_MODGLOBALARRAY,\r
302         PCD_INCGLOBALARRAY,\r
303         PCD_DECGLOBALARRAY,\r
304         PCD_SETMARINEWEAPON,\r
305         PCD_SETACTORPROPERTY,\r
306         PCD_GETACTORPROPERTY,\r
307         PCD_PLAYERNUMBER,\r
308         PCD_ACTIVATORTID,\r
309         PCD_SETMARINESPRITE,\r
310         PCD_GETSCREENWIDTH,\r
311         PCD_GETSCREENHEIGHT,\r
312         PCD_THING_PROJECTILE2,\r
313         PCD_STRLEN,\r
314         PCD_SETHUDSIZE,\r
315         PCD_GETCVAR,\r
316         PCD_CASEGOTOSORTED,\r
317         PCD_SETRESULTVALUE,\r
318         PCD_GETLINEROWOFFSET,\r
319         PCD_GETACTORFLOORZ,\r
320         PCD_GETACTORANGLE,\r
321         PCD_GETSECTORFLOORZ,\r
322         PCD_GETSECTORCEILINGZ,\r
323         PCD_LSPEC5RESULT,\r
324         PCD_GETSIGILPIECES,\r
325         PCD_GETLEVELINFO,\r
326         PCD_CHANGESKY,\r
327         PCD_PLAYERINGAME,\r
328         PCD_PLAYERISBOT,\r
329         PCD_SETCAMERATOTEXTURE,\r
330         PCD_ENDLOG,\r
331         PCD_GETAMMOCAPACITY,\r
332         PCD_SETAMMOCAPACITY,\r
333 // [JB] start of new pcodes\r
334         PCD_PRINTMAPCHARARRAY,\r
335         PCD_PRINTWORLDCHARARRAY,\r
336         PCD_PRINTGLOBALCHARARRAY,\r
337 // [JB] end of new pcodes\r
338         PCD_SETACTORANGLE,\r
339         PCD_GRABINPUT,\r
340         PCD_SETMOUSEPOINTER,\r
341         PCD_MOVEMOUSEPOINTER,\r
342         PCD_SPAWNPROJECTILE,\r
343         PCD_GETSECTORLIGHTLEVEL,\r
344         PCD_GETACTORCEILINGZ,\r
345         PCD_SETACTORPOSITION,\r
346         PCD_CLEARACTORINVENTORY,\r
347         PCD_GIVEACTORINVENTORY,\r
348         PCD_TAKEACTORINVENTORY,\r
349         PCD_CHECKACTORINVENTORY,\r
350         PCD_THINGCOUNTNAME,\r
351         PCD_SPAWNSPOTFACING,\r
352         PCD_PLAYERCLASS,\r
353         //[MW] start my p-codes\r
354         PCD_ANDSCRIPTVAR,\r
355         PCD_ANDMAPVAR, \r
356         PCD_ANDWORLDVAR, \r
357         PCD_ANDGLOBALVAR, \r
358         PCD_ANDMAPARRAY, \r
359         PCD_ANDWORLDARRAY, \r
360         PCD_ANDGLOBALARRAY,\r
361         PCD_EORSCRIPTVAR, \r
362         PCD_EORMAPVAR, \r
363         PCD_EORWORLDVAR, \r
364         PCD_EORGLOBALVAR, \r
365         PCD_EORMAPARRAY, \r
366         PCD_EORWORLDARRAY, \r
367         PCD_EORGLOBALARRAY,\r
368         PCD_ORSCRIPTVAR, \r
369         PCD_ORMAPVAR, \r
370         PCD_ORWORLDVAR, \r
371         PCD_ORGLOBALVAR, \r
372         PCD_ORMAPARRAY, \r
373         PCD_ORWORLDARRAY, \r
374         PCD_ORGLOBALARRAY,\r
375         PCD_LSSCRIPTVAR, \r
376         PCD_LSMAPVAR, \r
377         PCD_LSWORLDVAR, \r
378         PCD_LSGLOBALVAR, \r
379         PCD_LSMAPARRAY, \r
380         PCD_LSWORLDARRAY, \r
381         PCD_LSGLOBALARRAY,\r
382         PCD_RSSCRIPTVAR, \r
383         PCD_RSMAPVAR, \r
384         PCD_RSWORLDVAR, \r
385         PCD_RSGLOBALVAR, \r
386         PCD_RSMAPARRAY, \r
387         PCD_RSWORLDARRAY, \r
388         PCD_RSGLOBALARRAY, \r
389         //[MW] end my p-codes\r
390         PCD_GETPLAYERINFO,\r
391         PCD_CHANGELEVEL,\r
392         PCD_SECTORDAMAGE,\r
393         PCD_REPLACETEXTURES,\r
394         PCD_NEGATEBINARY,\r
395         PCD_GETACTORPITCH,\r
396         PCD_SETACTORPITCH,\r
397         PCD_PRINTBIND,\r
398         PCD_SETACTORSTATE,\r
399         PCD_THINGDAMAGE2,\r
400         PCD_USEINVENTORY,\r
401         PCD_USEACTORINVENTORY,\r
402         PCD_CHECKACTORCEILINGTEXTURE,\r
403         PCD_CHECKACTORFLOORTEXTURE,\r
404         PCD_GETACTORLIGHTLEVEL,\r
405         PCD_SETMUGSHOTSTATE,\r
406         PCD_THINGCOUNTSECTOR,\r
407         PCD_THINGCOUNTNAMESECTOR,\r
408         PCD_CHECKPLAYERCAMERA,\r
409         PCD_MORPHACTOR,\r
410         PCD_UNMORPHACTOR,\r
411         PCD_GETPLAYERINPUT,\r
412 \r
413         PCODE_COMMAND_COUNT\r
414 } pcd_t;\r
415 \r
416 // PUBLIC FUNCTION PROTOTYPES ----------------------------------------------\r
417 \r
418 void PC_OpenObject(char *name, size_t size, int flags);\r
419 void PC_CloseObject(void);\r
420 void PC_Append(void *buffer, size_t size);\r
421 void PC_AppendByte(U_BYTE val);\r
422 void PC_AppendWord(U_WORD val);\r
423 void PC_AppendInt(U_INT val);\r
424 void PC_AppendString(char *string);\r
425 void PC_AppendCmd(pcd_t command);\r
426 void PC_AppendPushVal(U_INT val);\r
427 void PC_AppendShrink(U_BYTE val);\r
428 void PC_Write(void *buffer, size_t size, int address);\r
429 void PC_WriteByte(U_BYTE val, int address);\r
430 //void PC_WriteWord(U_WORD val, int address);\r
431 void PC_WriteInt(U_INT val, int address);\r
432 void PC_WriteString(char *string, int address);\r
433 void PC_WriteCmd(pcd_t command, int address);\r
434 void PC_Skip(size_t size);\r
435 //void PC_SkipByte(void);\r
436 //void PC_SkipWord(void);\r
437 void PC_SkipInt(void);\r
438 void PC_AddScript(int number, int argCount);\r
439 void PC_SetScriptVarCount(int number, int varCount);\r
440 void PC_AddFunction(struct symbolNode_s *sym);\r
441 void PC_PutMapVariable(int index, int value);\r
442 void PC_NameMapVariable(int index, struct symbolNode_s *sym);\r
443 void PC_AddArray(int index, int size);\r
444 void PC_InitArray(int index, int *entries, boolean hasStrings);\r
445 int PC_AddImport(char *name);\r
446 \r
447 // PUBLIC DATA DECLARATIONS ------------------------------------------------\r
448 \r
449 extern int pc_Address;\r
450 extern byte *pc_Buffer;\r
451 extern byte *pc_BufferPtr;\r
452 extern int pc_ScriptCount;\r
453 extern int pc_FunctionCount;\r
454 extern boolean pc_NoShrink;\r
455 extern boolean pc_HexenCase;\r
456 extern boolean pc_WadAuthor;\r
457 extern boolean pc_EncryptStrings;\r
458 extern int pc_LastAppendedCommand;\r
459 \r
460 #endif\r