OSDN Git Service

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