2 //**************************************************************************
\r
6 //**************************************************************************
\r
11 // HEADER FILES ------------------------------------------------------------
\r
16 // MACROS ------------------------------------------------------------------
\r
18 // Values to indicate a script's type
\r
21 OPEN_SCRIPTS_BASE = 1,
\r
22 RESPAWN_SCRIPTS_BASE = 2, // [BC]
\r
23 DEATH_SCRIPTS_BASE = 3, // [BC]
\r
24 ENTER_SCRIPTS_BASE = 4, // [BC]
\r
25 PICKUP_SCRIPTS_BASE = 5, // [BC]
\r
26 BLUE_RETURN_SCRIPTS_BASE = 6, // [BC]
\r
27 RED_RETURN_SCRIPTS_BASE = 7, // [BC]
\r
28 WHITE_RETURN_SCRIPTS_BASE = 8, // [BC]
\r
29 LIGHTNING_SCRIPTS_BASE = 12,
\r
30 UNLOADING_SCRIPTS_BASE = 13,
\r
31 DISCONNECT_SCRIPTS_BASE = 14,
\r
32 RETURN_SCRIPTS_BASE = 15,
\r
35 // Values to indicate script flags (requires new-style .o)
\r
38 NET_SCRIPT_FLAG = 0x0001,
\r
39 CLIENTSIDE_SCRIPT_FLAG = 0x0002, // [BB]
\r
42 // Or'ed with variable index when passing variables of type "out"
\r
43 // An idea that was never realized.
\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
52 // TYPES -------------------------------------------------------------------
\r
54 struct symbolNode_s; // Defined in symbol.h
\r
83 PCD_ASSIGNSCRIPTVAR,
\r
118 PCD_THINGCOUNTDIRECT,
\r
122 PCD_POLYWAITDIRECT,
\r
124 PCD_CHANGEFLOORDIRECT,
\r
126 PCD_CHANGECEILINGDIRECT,
\r
140 PCD_SCRIPTWAITDIRECT,
\r
141 PCD_CLEARLINESPECIAL,
\r
147 PCD_PRINTCHARACTER,
\r
155 PCD_SETLINETEXTURE,
\r
156 PCD_SETLINEBLOCKING,
\r
157 PCD_SETLINESPECIAL,
\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
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
181 PCD_PLAYERARMORPOINTS,
\r
189 PCD_GETINVASIONWAVE,
\r
190 PCD_GETINVASIONSTATE,
\r
193 PCD_CONSOLECOMMANDDIRECT,
\r
194 PCD_CONSOLECOMMAND,
\r
196 // [RH] End of Skull Tag p-codes
\r
200 PCD_SETGRAVITYDIRECT,
\r
202 PCD_SETAIRCONTROLDIRECT,
\r
203 PCD_CLEARINVENTORY,
\r
205 PCD_GIVEINVENTORYDIRECT,
\r
207 PCD_TAKEINVENTORYDIRECT,
\r
208 PCD_CHECKINVENTORY,
\r
209 PCD_CHECKINVENTORYDIRECT,
\r
213 PCD_SPAWNSPOTDIRECT,
\r
215 PCD_SETMUSICDIRECT,
\r
217 PCD_LOCALSETMUSICDIRECT,
\r
219 PCD_PRINTLOCALIZED,
\r
220 PCD_MOREHUDMESSAGE,
\r
223 PCD_ENDHUDMESSAGEBOLD,
\r
225 PCD_SETSTYLEDIRECT,
\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
255 PCD_SETFLOORTRIGGER,
\r
256 PCD_SETCEILINGTRIGGER,
\r
260 PCD_STARTTRANSLATION,
\r
261 PCD_TRANSLATIONRANGE1,
\r
262 PCD_TRANSLATIONRANGE2,
\r
263 PCD_ENDTRANSLATION,
\r
269 PCD_ASSIGNMAPARRAY,
\r
287 PCD_PUSHWORLDARRAY,
\r
288 PCD_ASSIGNWORLDARRAY,
\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
310 PCD_SETMARINESPRITE,
\r
311 PCD_GETSCREENWIDTH,
\r
312 PCD_GETSCREENHEIGHT,
\r
313 PCD_THING_PROJECTILE2,
\r
317 PCD_CASEGOTOSORTED,
\r
318 PCD_SETRESULTVALUE,
\r
319 PCD_GETLINEROWOFFSET,
\r
320 PCD_GETACTORFLOORZ,
\r
322 PCD_GETSECTORFLOORZ,
\r
323 PCD_GETSECTORCEILINGZ,
\r
325 PCD_GETSIGILPIECES,
\r
330 PCD_SETCAMERATOTEXTURE,
\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
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
354 //[MW] start my p-codes
\r
360 PCD_ANDWORLDARRAY,
\r
361 PCD_ANDGLOBALARRAY,
\r
367 PCD_EORWORLDARRAY,
\r
368 PCD_EORGLOBALARRAY,
\r
389 PCD_RSGLOBALARRAY,
\r
390 //[MW] end my p-codes
\r
394 PCD_REPLACETEXTURES,
\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
412 PCD_GETPLAYERINPUT,
\r
417 PCD_SAVESTRING, // [FDARI]
\r
418 PCD_PRINTMAPCHRANGE, // [FDARI] output range
\r
419 PCD_PRINTWORLDCHRANGE,
\r
420 PCD_PRINTGLOBALCHRANGE,
\r
421 PCD_STRCPYTOMAPCHRANGE, // [FDARI] input range
\r
422 PCD_STRCPYTOWORLDCHRANGE,
\r
423 PCD_STRCPYTOGLOBALCHRANGE,
\r
425 PCODE_COMMAND_COUNT
\r
428 // PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
\r
430 void PC_OpenObject(char *name, size_t size, int flags);
\r
431 void PC_CloseObject(void);
\r
432 void PC_Append(void *buffer, size_t size);
\r
433 void PC_AppendByte(U_BYTE val);
\r
434 void PC_AppendWord(U_WORD val);
\r
435 void PC_AppendInt(U_INT val);
\r
436 void PC_AppendString(char *string);
\r
437 void PC_AppendCmd(pcd_t command);
\r
438 void PC_AppendPushVal(U_INT val);
\r
439 void PC_AppendShrink(U_BYTE val);
\r
440 void PC_Write(void *buffer, size_t size, int address);
\r
441 void PC_WriteByte(U_BYTE val, int address);
\r
442 //void PC_WriteWord(U_WORD val, int address);
\r
443 void PC_WriteInt(U_INT val, int address);
\r
444 void PC_WriteString(char *string, int address);
\r
445 void PC_WriteCmd(pcd_t command, int address);
\r
446 void PC_Skip(size_t size);
\r
447 //void PC_SkipByte(void);
\r
448 //void PC_SkipWord(void);
\r
449 void PC_SkipInt(void);
\r
450 void PC_AddScript(int number, int type, int flags, int argCount);
\r
451 void PC_SetScriptVarCount(int number, int type, int varCount);
\r
452 void PC_AddFunction(struct symbolNode_s *sym);
\r
453 void PC_PutMapVariable(int index, int value);
\r
454 void PC_NameMapVariable(int index, struct symbolNode_s *sym);
\r
455 void PC_AddArray(int index, int size);
\r
456 void PC_InitArray(int index, int *entries, boolean hasStrings);
\r
457 int PC_AddImport(char *name);
\r
459 // PUBLIC DATA DECLARATIONS ------------------------------------------------
\r
461 extern int pc_Address;
\r
462 extern byte *pc_Buffer;
\r
463 extern byte *pc_BufferPtr;
\r
464 extern int pc_ScriptCount;
\r
465 extern int pc_FunctionCount;
\r
466 extern boolean pc_NoShrink;
\r
467 extern boolean pc_HexenCase;
\r
468 extern boolean pc_EnforceHexen;
\r
469 extern boolean pc_WarnNotHexen;
\r
470 extern boolean pc_WadAuthor;
\r
471 extern boolean pc_EncryptStrings;
\r
472 extern int pc_LastAppendedCommand;
\r