mirror of
https://github.com/kevinbentley/Descent3.git
synced 2026-04-03 08:00:04 -04:00
Initial import
This commit is contained in:
278
scripts/scripttest1.cpp
Normal file
278
scripts/scripttest1.cpp
Normal file
@@ -0,0 +1,278 @@
|
||||
// scripttest1.cpp
|
||||
// 0.1
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "osiris_import.h"
|
||||
#include "osiris_common.h"
|
||||
|
||||
#ifdef _MSC_VER //Visual C++ Build
|
||||
#define STDCALL __stdcall
|
||||
#define STDCALLPTR *STDCALL
|
||||
#else //Non-Visual C++ Build
|
||||
#define STDCALL __attribute__((stdcall))
|
||||
#define STDCALLPTR STDCALL*
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"{
|
||||
#endif
|
||||
char STDCALL InitializeDLL(tOSIRISModuleInit *func_list);
|
||||
void STDCALL ShutdownDLL(void);
|
||||
int STDCALL GetGOScriptID(char *name,ubyte isdoor);
|
||||
void STDCALLPTR CreateInstance(int id);
|
||||
void STDCALL DestroyInstance(int id,void *ptr);
|
||||
short STDCALL CallInstanceEvent(int id,void *ptr,int event,tOSIRISEventInfo *data);
|
||||
int STDCALL GetTriggerScriptID(int trigger_room, int trigger_face );
|
||||
int STDCALL GetCOScriptList( int **list, int **id_list );
|
||||
int STDCALL SaveRestoreState( void *file_ptr, ubyte saving_state );
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
// ==========================
|
||||
// Script class definitions//
|
||||
// ==========================
|
||||
#define ID_SHIELD_ORB 0x00 //shield id
|
||||
#define MAX_IDS 0x01 //maximum number of GOS IDs
|
||||
|
||||
#define ID_CUST_SHIELD_ORB 0x01
|
||||
#define ID_MY_TRIGGER 0x02
|
||||
#define ID_MY_DOOR 0x03
|
||||
|
||||
typedef struct{
|
||||
int id;
|
||||
char *name;
|
||||
}tScriptInfo;
|
||||
|
||||
tScriptInfo ScriptInfo[MAX_IDS] = {
|
||||
{ID_SHIELD_ORB,"Shield"}
|
||||
};
|
||||
|
||||
class BaseObjScript
|
||||
{
|
||||
public:
|
||||
BaseObjScript();
|
||||
~BaseObjScript();
|
||||
virtual short CallEvent(int event,tOSIRISEventInfo *data);
|
||||
protected:
|
||||
bool called;
|
||||
};
|
||||
|
||||
class MyTrigger
|
||||
{
|
||||
public:
|
||||
short CallEvent(int event,tOSIRISEventInfo *data);
|
||||
};
|
||||
|
||||
class MyDoor
|
||||
{
|
||||
public:
|
||||
short CallEvent(int event,tOSIRISEventInfo *data);
|
||||
};
|
||||
|
||||
//------------------
|
||||
// Shield orb script
|
||||
//------------------
|
||||
class ShieldOrb : public BaseObjScript
|
||||
{
|
||||
public:
|
||||
short CallEvent(int event,tOSIRISEventInfo *data);
|
||||
};
|
||||
|
||||
class CustomShieldOrb : public BaseObjScript
|
||||
{
|
||||
public:
|
||||
short CallEvent(int event,tOSIRISEventInfo *data);
|
||||
};
|
||||
|
||||
|
||||
char STDCALL InitializeDLL(tOSIRISModuleInit *func_list)
|
||||
{
|
||||
osicommon_Initialize((tOSIRISModuleInit *)func_list);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void STDCALL ShutdownDLL(void)
|
||||
{
|
||||
}
|
||||
|
||||
int STDCALL GetGOScriptID(char *name,ubyte isdoor)
|
||||
{
|
||||
if(!isdoor){
|
||||
for( int i = 0; i < MAX_IDS ; i++ ){
|
||||
if(!stricmp(name,ScriptInfo[i].name)){
|
||||
return ScriptInfo[i].id;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if(!stricmp("MARK'S OLD DOOR",name))
|
||||
return ID_MY_DOOR;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void STDCALLPTR CreateInstance(int id)
|
||||
{
|
||||
switch(id){
|
||||
case ID_SHIELD_ORB:
|
||||
return new ShieldOrb;
|
||||
break;
|
||||
case ID_CUST_SHIELD_ORB:
|
||||
return new CustomShieldOrb;
|
||||
break;
|
||||
case ID_MY_TRIGGER:
|
||||
return new MyTrigger;
|
||||
break;
|
||||
case ID_MY_DOOR:
|
||||
return new MyDoor;
|
||||
break;
|
||||
default:
|
||||
mprintf(0,"SCRIPT: Illegal ID (%d)\n",id);
|
||||
break;
|
||||
};
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void STDCALL DestroyInstance(int id,void *ptr)
|
||||
{
|
||||
switch(id){
|
||||
case ID_SHIELD_ORB:
|
||||
delete ((ShieldOrb *)ptr);
|
||||
break;
|
||||
case ID_CUST_SHIELD_ORB:
|
||||
delete ((CustomShieldOrb *)ptr);
|
||||
break;
|
||||
case ID_MY_TRIGGER:
|
||||
delete ((MyTrigger *)ptr);
|
||||
break;
|
||||
case ID_MY_DOOR:
|
||||
delete ((MyDoor *)ptr);
|
||||
break;
|
||||
default:
|
||||
mprintf(0,"SCRIPT: Illegal ID (%d)\n",id);
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
||||
short STDCALL CallInstanceEvent(int id,void *ptr,int event,tOSIRISEventInfo *data)
|
||||
{
|
||||
switch(id){
|
||||
case ID_SHIELD_ORB:
|
||||
case ID_CUST_SHIELD_ORB:
|
||||
return ((BaseObjScript *)ptr)->CallEvent(event,data);
|
||||
break;
|
||||
case ID_MY_TRIGGER:
|
||||
return ((MyTrigger *)ptr)->CallEvent(event,data);
|
||||
case ID_MY_DOOR:
|
||||
return ((MyDoor *)ptr)->CallEvent(event,data);
|
||||
default:
|
||||
mprintf(0,"SCRIPT: Illegal ID (%d)\n",id);
|
||||
break;
|
||||
};
|
||||
|
||||
return CONTINUE_CHAIN|CONTINUE_DEFAULT;
|
||||
}
|
||||
|
||||
int STDCALL GetTriggerScriptID(int trigger_room,int trigger_face)
|
||||
{
|
||||
if(trigger_room==2 && trigger_face==1){
|
||||
return ID_MY_TRIGGER;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int STDCALL GetCOScriptList( int **list, int **id_list )
|
||||
{
|
||||
static int cust_handle_list[1] = {0x403};
|
||||
static int cust_id_list[1] = {ID_CUST_SHIELD_ORB};
|
||||
|
||||
*list = cust_handle_list;
|
||||
*id_list = cust_id_list;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// SaveRestoreState
|
||||
// Purpose:
|
||||
// This function is called when Descent 3 is saving or restoring the game state. In this function
|
||||
// you should save/restore any global data that you want preserved through load/save (which includes
|
||||
// demos). You must be very careful with this function, corrupting the file (reading or writing too
|
||||
// much or too little) may be hazardous to the game (possibly making it impossible to restore the
|
||||
// state). It would be best to use version information to keep older versions of saved states still
|
||||
// able to be used. IT IS VERY IMPORTANT WHEN SAVING THE STATE TO RETURN THE NUMBER OF _BYTES_ WROTE
|
||||
// TO THE FILE. When restoring the data, the return value is ignored. saving_state is 1 when you should
|
||||
// write data to the file_ptr, 0 when you should read in the data.
|
||||
int STDCALL SaveRestoreState( void *file_ptr, ubyte saving_state )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
//============================================
|
||||
// Script Implementation
|
||||
//============================================
|
||||
BaseObjScript::BaseObjScript()
|
||||
{
|
||||
called = false;
|
||||
}
|
||||
|
||||
BaseObjScript::~BaseObjScript()
|
||||
{
|
||||
}
|
||||
|
||||
short BaseObjScript::CallEvent(int event,tOSIRISEventInfo *data)
|
||||
{
|
||||
mprintf(0,"BaseObjScript::CallEvent()\n");
|
||||
return CONTINUE_CHAIN|CONTINUE_DEFAULT;
|
||||
}
|
||||
|
||||
// --------------
|
||||
// Shield orb
|
||||
// --------------
|
||||
short ShieldOrb::CallEvent(int event,tOSIRISEventInfo *data)
|
||||
{
|
||||
switch(event){
|
||||
case EVT_COLLIDE:
|
||||
if(!called){
|
||||
mprintf(0,"Collide with LEVEL shield\n");
|
||||
called = true;
|
||||
}break;
|
||||
}
|
||||
return CONTINUE_CHAIN|CONTINUE_DEFAULT;
|
||||
}
|
||||
|
||||
short CustomShieldOrb::CallEvent(int event,tOSIRISEventInfo *data)
|
||||
{
|
||||
switch(event){
|
||||
case EVT_COLLIDE:
|
||||
if(!called){
|
||||
mprintf(0,"Collide with CUSTOM shield\n");
|
||||
called = true;
|
||||
}break;
|
||||
}
|
||||
return CONTINUE_CHAIN|CONTINUE_DEFAULT;
|
||||
}
|
||||
|
||||
short MyTrigger::CallEvent(int event,tOSIRISEventInfo *data)
|
||||
{
|
||||
mprintf(0,"TRIGGER: %d\n",event);
|
||||
return CONTINUE_CHAIN|CONTINUE_DEFAULT;
|
||||
}
|
||||
|
||||
short MyDoor::CallEvent(int event,tOSIRISEventInfo *data)
|
||||
{
|
||||
switch(event){
|
||||
case EVT_COLLIDE:
|
||||
{
|
||||
msafe_struct mo;
|
||||
mo.objhandle = data->me_handle;
|
||||
MSafe_GetValue(MSAFE_OBJECT_ID,&mo);
|
||||
|
||||
mo.doorway_index = mo.id;
|
||||
mprintf(0,"Activating doorway %d\n",mo.id);
|
||||
MSafe_CallFunction(MSAFE_DOOR_ACTIVATE,&mo);
|
||||
|
||||
}break;
|
||||
};
|
||||
return CONTINUE_CHAIN|CONTINUE_DEFAULT;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user