cave-story-solaris/src/NpChar.h
2019-02-18 14:36:58 +00:00

104 lines
2.6 KiB
C

#pragma once
#include <stdint.h>
#include "WindowsWrapper.h"
#include "Draw.h"
#define NPC_MAX 0x200
enum NPC_flags
{
npc_solidSoft = 0x1, //Pushes quote out
npc_ignore44 = 0x2, //Ignores tile 44 (No NPC)
npc_invulnerable = 0x4, //Can't get hit
npc_ignoreSolid = 0x8, //Doesn't collide with anything
npc_bouncy = 0x10, //Quote bounces on the top
npc_shootable = 0x20, //Can be shot
npc_solidHard = 0x40, //Essentially acts as level tiles
npc_rearTop = 0x80, //Rear and top don't hurt
npc_eventTouch = 0x100, //Run event when touched
npc_eventDie = 0x200, //Run event when killed
npc_appearSet = 0x800, //Only appear when flag is set
npc_altDir = 0x1000, //Spawn facing to the right (or however the npc interprets the direction as)
npc_interact = 0x2000, //Run event when interacted with
npc_hideSet = 0x4000, //Hide when flag is set
npc_showDamage = 0x8000, //Show #Damage taken
};
struct NPCHAR
{
uint8_t cond;
int flag;
int x;
int y;
int xm;
int ym;
int xm2;
int ym2;
int tgt_x;
int tgt_y;
int code_char;
int code_flag;
int code_event;
Surface_Ids surf;
int hit_voice;
int destroy_voice;
int life;
int exp;
int size;
int direct;
uint16_t bits;
RECT rect;
int ani_wait;
int ani_no;
int count1;
int count2;
int act_no;
int act_wait;
RECT hit;
RECT view;
uint8_t shock;
int damage_view;
int damage;
NPCHAR *pNpc;
};
struct EVENT
{
int16_t x;
int16_t y;
int16_t code_flag;
int16_t code_event;
int16_t code_char;
uint16_t bits;
};
extern NPCHAR gNPC[NPC_MAX];
extern int gCurlyShoot_wait;
extern int gCurlyShoot_x;
extern int gCurlyShoot_y;
extern int gSuperXpos;
extern int gSuperYpos;
void InitNpChar();
bool LoadEvent(char *path_event);
void SetNpChar(int code_char, int x, int y, int xm, int ym, int dir, NPCHAR *npc, int start_index);
void SetDestroyNpChar(int x, int y, int w, int num);
void SetDestroyNpCharUp(int x, int y, int w, int num);
void SetExpObjects(int x, int y, int exp);
bool SetBulletObject(int x, int y, int val);
bool SetLifeObject(int x, int y, int val);
void VanishNpChar(NPCHAR *npc);
void PutNpChar(int fx, int fy);
void ActNpChar();
void ChangeNpCharByEvent(int code_event, int code_char, int dir);
void ChangeCheckableNpCharByEvent(int code_event, int code_char, int dir);
void SetNpCharActionNo(int code_event, int act_no, int dir);
void MoveNpChar(int code_event, int x, int y, int dir);
void BackStepMyChar(int code_event);
void DeleteNpCharEvent(int code);
void DeleteNpCharCode(int code, bool bSmoke);
void GetNpCharPosition(int *x, int *y, int i);
bool IsNpCharCode(int code);
bool GetNpCharAlive(int code_event);
int CountAliveNpChar();