2 //**************************************************************************
\r
6 //**************************************************************************
\r
11 // HEADER FILES ------------------------------------------------------------
\r
16 // MACROS ------------------------------------------------------------------
\r
18 // Values added to script number to indicate its type
\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
35 // Values added to script number to indicate flags (requires new-style .o)
\r
38 NET_SCRIPT_FLAG = 0x00010000
\r
41 // Or'ed with variable index when passing variables of type "out"
\r
42 // An idea that was never realized.
\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
51 // TYPES -------------------------------------------------------------------
\r
53 struct symbolNode_s; // Defined in symbol.h
\r
82 PCD_ASSIGNSCRIPTVAR,
\r
117 PCD_THINGCOUNTDIRECT,
\r
121 PCD_POLYWAITDIRECT,
\r
123 PCD_CHANGEFLOORDIRECT,
\r
125 PCD_CHANGECEILINGDIRECT,
\r
139 PCD_SCRIPTWAITDIRECT,
\r
140 PCD_CLEARLINESPECIAL,
\r
146 PCD_PRINTCHARACTER,
\r
154 PCD_SETLINETEXTURE,
\r
155 PCD_SETLINEBLOCKING,
\r
156 PCD_SETLINESPECIAL,
\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
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
180 PCD_PLAYERARMORPOINTS,
\r
188 PCD_LSPEC6, // [RH] LSPEC6 is never actually used.
\r
189 PCD_LSPEC6DIRECT, // Should these be removed?
\r
192 PCD_CONSOLECOMMANDDIRECT,
\r
193 PCD_CONSOLECOMMAND,
\r
195 // [RH] End of Skull Tag p-codes
\r
199 PCD_SETGRAVITYDIRECT,
\r
201 PCD_SETAIRCONTROLDIRECT,
\r
202 PCD_CLEARINVENTORY,
\r
204 PCD_GIVEINVENTORYDIRECT,
\r
206 PCD_TAKEINVENTORYDIRECT,
\r
207 PCD_CHECKINVENTORY,
\r
208 PCD_CHECKINVENTORYDIRECT,
\r
212 PCD_SPAWNSPOTDIRECT,
\r
214 PCD_SETMUSICDIRECT,
\r
216 PCD_LOCALSETMUSICDIRECT,
\r
218 PCD_PRINTLOCALIZED,
\r
219 PCD_MOREHUDMESSAGE,
\r
222 PCD_ENDHUDMESSAGEBOLD,
\r
224 PCD_SETSTYLEDIRECT,
\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
254 PCD_SETFLOORTRIGGER,
\r
255 PCD_SETCEILINGTRIGGER,
\r
259 PCD_STARTTRANSLATION,
\r
260 PCD_TRANSLATIONRANGE1,
\r
261 PCD_TRANSLATIONRANGE2,
\r
262 PCD_ENDTRANSLATION,
\r
268 PCD_ASSIGNMAPARRAY,
\r
286 PCD_PUSHWORLDARRAY,
\r
287 PCD_ASSIGNWORLDARRAY,
\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
309 PCD_SETMARINESPRITE,
\r
310 PCD_GETSCREENWIDTH,
\r
311 PCD_GETSCREENHEIGHT,
\r
312 PCD_THING_PROJECTILE2,
\r
316 PCD_CASEGOTOSORTED,
\r
317 PCD_SETRESULTVALUE,
\r
318 PCD_GETLINEROWOFFSET,
\r
319 PCD_GETACTORFLOORZ,
\r
321 PCD_GETSECTORFLOORZ,
\r
322 PCD_GETSECTORCEILINGZ,
\r
324 PCD_GETSIGILPIECES,
\r
329 PCD_SETCAMERATOTEXTURE,
\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
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
353 //[MW] start my p-codes
\r
359 PCD_ANDWORLDARRAY,
\r
360 PCD_ANDGLOBALARRAY,
\r
366 PCD_EORWORLDARRAY,
\r
367 PCD_EORGLOBALARRAY,
\r
388 PCD_RSGLOBALARRAY,
\r
389 //[MW] end my p-codes
\r
393 PCD_REPLACETEXTURES,
\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
411 PCD_GETPLAYERINPUT,
\r
413 PCODE_COMMAND_COUNT
\r
416 // PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
\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
447 // PUBLIC DATA DECLARATIONS ------------------------------------------------
\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