⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 entity.h

📁 一个RPG术语查询器
💻 H
字号:
#define MSG_TOUCH 1
#define MSG_TALK 2

#define FACE_DOWN 0
#define FACE_UP 1
#define FACE_RIGHT 2
#define FACE_LEFT 3



#define OPERATE 1
#define WAIT 2

#define VMRAM 65536
#define STACKSIZE 4096

//32BIT PROCESSING DEFINES
//Stack
#define PUSH 0
#define POP 1
#define CLONE 2
#define CONVERT 3

//Base Math
#define ADD 4
#define SUB 5
#define MUL 6
#define DIV 7

//Bitwise Logic
#define AND 8
#define OR 9
#define XOR 10
#define NOT 11

//Extended Math and Bitshift
#define EXP 16
#define MOD 17
#define SHR 18
#define SHL 19

//Conditional Processing
//and branching
#define CMP 32
#define JMP 33
#define JME 34
#define JML 35
#define JMG 36
#define JLE 37
#define JGE 38
#define JNE 39
#define FUNCTION 42
#define FRETURN 43

#define DPUSH 44

//Memory routines

#define PRESERVE 46
#define RESTORE 47
#define LOAD 48
#define STORE 49
#define LOADB 50
#define STOREB 51

//Goodies
#define INCL 52
#define DECL 53
#define RSTORE 54


//API, SYS, and EXIT

#define API 61
#define SYS 62
#define EXIT 63


#define ENDPARAMS 0
#define DWORD 1
#define FLOATER 2
#define BYTE 3
#define RETURNADDRESS 4

//FLOATING POINT PROCESSING DEFINES

//Stack
#define PUSHF 64
#define POPF 65
#define CLONEF 66
#define CONVERTF 67

//Base Math
#define ADDF 68
#define SUBF 69
#define DIVF 70
#define MULF 71

//Extended Math
#define EXPF 72
#define MODF 73
#define SQRTF 74
#define COSF 75
#define SINF 76
#define TANF 77

//CMP
#define CMPF 96

//Memory Routines
#define LOADF 97
#define STOREF 98



//Stack swappers

//SYS defines

#define sys_write 1
#define sys_read 2
#define sys_putchar 3
#define sys_endl 4

#define sys_atoi 16
#define sys_itoa 17
#define sys_atof 18
#define sys_ftoa 19


#define sys_strlen 32
#define sys_sort 33


#define sys_szdouble 64
#define sys_szint 65

#define sys_thread 1337
#define sys_yield 1338



class THREAD
{

	public:
	
	union CONVERTDOUBLE
	{
		char bytes[sizeof(double)];
		double data;
	};
	
	struct ALLDATA
	{
		char type;
		int address;
		char byte;
		int dword;
		double floater;
		
	};

	void *owner;
	THREAD *next;
	THREAD *parent;
	CONVERTDOUBLE writedouble;
	int writeiterate;
	
	//Preserve,Restore
	int writes;
	int address;
	int functioniterate;
	int swapper;
	int preserve;

	char *ram;
	int *base; //Used for addressing in 32bit
	int sizeram;
	int operational;
	int yield;
		
	int stack[STACKSIZE];
	int stackpointer;
	double fstack[STACKSIZE];
	int fstackpointer;
	ALLDATA pstack[STACKSIZE];
	int pstackpointer;
	int newadd;
	int codepointer;
	int workingloc;
	int done;
	
	

	union evaluation
	{
		
		struct BITEVAL
		{
		
			char equal : 1;
			char notequal : 1;
			char lessthan : 1;
			char greaterthan : 1;
			char greaterthanequal : 1;
			char lessthanequal : 1;
		} cmpbit;
		int cmpint;
	};

	evaluation bitflags;

	int GetThreads();
	THREAD(char *ram, int sizeram, int startaddress, void *mymaster);
	int ExecObj(int cycles);
	THREAD *AddThread(int startpoint);
	~THREAD();
		
};

class VMOBJ
{
	public:

	struct BINHEADER
	{
		char endian;
		char version[8];
		char szint;
		char szdouble;
		int numops;
		int	startaddress;
	};

	
	
	void *owner;
	int sizeram;
	char *ram;
	int operational;
	THREAD *processes;
	
	VMOBJ();
	~VMOBJ();
	void setram(void *mymaster);
	void loadbinary(char *file);
	void RemoveProcess(THREAD *pskill);
	void KillEntries(THREAD *root);
	int Execute(int cycles);
	
};





typedef void (*APIFUNCTION)(void *);

class APIBLOCK
{
	public:
	APIBLOCK *next;
	char name[128];
	APIFUNCTION entrypoint;

	APIBLOCK()
	{
		entrypoint=NULL;
		strcpy(name,"THIS IS NOT A FUNCTION AND SHOULD NOT BE USED AS SUCH ABALBALBLAHBLAHBA");
		next = NULL;

	}
	void AddSon(char *functionname, APIFUNCTION function)
	{
		next = new APIBLOCK(functionname,function);

	}
	
	APIBLOCK(char *functionname, APIFUNCTION function)
	{
		entrypoint = function;
		strcpy(name,functionname);
		next = NULL;
	}
	~APIBLOCK()
	{
		if(next!=NULL) delete next;
		next = NULL;

	}
};

class APIHANDLER
{

	public:

	

	APIBLOCK root;
	APIHANDLER();
	void exec(char *functionname, void *owner);
	void install(char *functionname,APIFUNCTION function);
	
};


class ENTITY
{

	//Don't mess with unions, for they are teh powerful.
	public:

#ifdef _MSC_VER
	#pragma pack(1)
#endif

	
	ENTITY *next;
    ENTITY *baseobject;
    int objectmax;
	ENVIRONMENT *map;


    AUDIOHANDLER audio;
	int x;
	int y;
	int enginehandle;
	int spr;
    int face;
	int sizex;
	int sizey;
	int steps;
    


	VMOBJ vm;
	APIHANDLER api;
	char name[1337];
	
	int messageproc;
	int seconds;
	int execrate;
	int lastmessage[1337];
	int operational;
	char *mutter;
	int mutterdelay;


	void Execute();
	void SetExecutionRate(int cyclespersecond, int tickrate);
	ENTITY(char *myname, char *binary);
	ENTITY();
	
	
    void GetFace(int mx, int my);
    void MoveTo(int px, int py);
	void SetVM(char *myname, char *binary, ENTITY *pbase, int omax);
	void Remove(int ux,int uy);
	void Update(int ux,int uy);
	void SetEnvironment(ENVIRONMENT *env);
	void SetData(int dx,int dy,int ospr,int ehandle, int szx, int szy);
	void Move(int mx,int my);

	


};


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -