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
34 // Values added to script number to indicate flags (requires new-style .o)
\r
37 NET_SCRIPT_FLAG = 0x00010000
\r
40 // Or'ed with variable index when passing variables of type "out"
\r
41 // An idea that was never realized.
\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
50 // TYPES -------------------------------------------------------------------
\r
52 struct symbolNode_s; // Defined in symbol.h
\r
81 PCD_ASSIGNSCRIPTVAR,
\r
116 PCD_THINGCOUNTDIRECT,
\r
120 PCD_POLYWAITDIRECT,
\r
122 PCD_CHANGEFLOORDIRECT,
\r
124 PCD_CHANGECEILINGDIRECT,
\r
138 PCD_SCRIPTWAITDIRECT,
\r
139 PCD_CLEARLINESPECIAL,
\r
145 PCD_PRINTCHARACTER,
\r
153 PCD_SETLINETEXTURE,
\r
154 PCD_SETLINEBLOCKING,
\r
155 PCD_SETLINESPECIAL,
\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
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
179 PCD_PLAYERARMORPOINTS,
\r
187 PCD_LSPEC6, // [RH] LSPEC6 is never actually used.
\r
188 PCD_LSPEC6DIRECT, // Should these be removed?
\r
191 PCD_CONSOLECOMMANDDIRECT,
\r
192 PCD_CONSOLECOMMAND,
\r
194 // [RH] End of Skull Tag p-codes
\r
198 PCD_SETGRAVITYDIRECT,
\r
200 PCD_SETAIRCONTROLDIRECT,
\r
201 PCD_CLEARINVENTORY,
\r
203 PCD_GIVEINVENTORYDIRECT,
\r
205 PCD_TAKEINVENTORYDIRECT,
\r
206 PCD_CHECKINVENTORY,
\r
207 PCD_CHECKINVENTORYDIRECT,
\r
211 PCD_SPAWNSPOTDIRECT,
\r
213 PCD_SETMUSICDIRECT,
\r
215 PCD_LOCALSETMUSICDIRECT,
\r
217 PCD_PRINTLOCALIZED,
\r
218 PCD_MOREHUDMESSAGE,
\r
221 PCD_ENDHUDMESSAGEBOLD,
\r
223 PCD_SETSTYLEDIRECT,
\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
253 PCD_SETFLOORTRIGGER,
\r
254 PCD_SETCEILINGTRIGGER,
\r
258 PCD_STARTTRANSLATION,
\r
259 PCD_TRANSLATIONRANGE1,
\r
260 PCD_TRANSLATIONRANGE2,
\r
261 PCD_ENDTRANSLATION,
\r
267 PCD_ASSIGNMAPARRAY,
\r
285 PCD_PUSHWORLDARRAY,
\r
286 PCD_ASSIGNWORLDARRAY,
\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
308 PCD_SETMARINESPRITE,
\r
309 PCD_GETSCREENWIDTH,
\r
310 PCD_GETSCREENHEIGHT,
\r
311 PCD_THING_PROJECTILE2,
\r
315 PCD_CASEGOTOSORTED,
\r
316 PCD_SETRESULTVALUE,
\r
317 PCD_GETLINEROWOFFSET,
\r
318 PCD_GETACTORFLOORZ,
\r
320 PCD_GETSECTORFLOORZ,
\r
321 PCD_GETSECTORCEILINGZ,
\r
323 PCD_GETSIGILPIECES,
\r
328 PCD_SETCAMERATOTEXTURE,
\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
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
352 //[MW] start my p-codes
\r
358 PCD_ANDWORLDARRAY,
\r
359 PCD_ANDGLOBALARRAY,
\r
365 PCD_EORWORLDARRAY,
\r
366 PCD_EORGLOBALARRAY,
\r
387 PCD_RSGLOBALARRAY,
\r
388 //[MW] end my p-codes
\r
392 PCD_REPLACETEXTURES,
\r
400 PCODE_COMMAND_COUNT
\r
403 // PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
\r
405 void PC_OpenObject(char *name, size_t size, int flags);
\r
406 void PC_CloseObject(void);
\r
407 void PC_Append(void *buffer, size_t size);
\r
408 void PC_AppendByte(U_BYTE val);
\r
409 void PC_AppendWord(U_WORD val);
\r
410 void PC_AppendLong(U_LONG val);
\r
411 void PC_AppendString(char *string);
\r
412 void PC_AppendCmd(pcd_t command);
\r
413 void PC_AppendPushVal(U_LONG val);
\r
414 void PC_AppendShrink(U_BYTE val);
\r
415 void PC_Write(void *buffer, size_t size, int address);
\r
416 void PC_WriteByte(U_BYTE val, int address);
\r
417 //void PC_WriteWord(U_WORD val, int address);
\r
418 void PC_WriteLong(U_LONG val, int address);
\r
419 void PC_WriteString(char *string, int address);
\r
420 void PC_WriteCmd(pcd_t command, int address);
\r
421 void PC_Skip(size_t size);
\r
422 //void PC_SkipByte(void);
\r
423 //void PC_SkipWord(void);
\r
424 void PC_SkipLong(void);
\r
425 void PC_AddScript(int number, int argCount);
\r
426 void PC_SetScriptVarCount(int number, int varCount);
\r
427 void PC_AddFunction(struct symbolNode_s *sym);
\r
428 void PC_PutMapVariable(int index, int value);
\r
429 void PC_NameMapVariable(int index, struct symbolNode_s *sym);
\r
430 void PC_AddArray(int index, int size);
\r
431 void PC_InitArray(int index, int *entries, boolean hasStrings);
\r
432 int PC_AddImport(char *name);
\r
434 // PUBLIC DATA DECLARATIONS ------------------------------------------------
\r
436 extern int pc_Address;
\r
437 extern byte *pc_Buffer;
\r
438 extern byte *pc_BufferPtr;
\r
439 extern int pc_ScriptCount;
\r
440 extern int pc_FunctionCount;
\r
441 extern boolean pc_NoShrink;
\r
442 extern boolean pc_HexenCase;
\r
443 extern boolean pc_WadAuthor;
\r
444 extern boolean pc_EncryptStrings;
\r
445 extern int pc_LastAppendedCommand;
\r