diff options
Diffstat (limited to 'engines/griffon/griffon.h')
-rw-r--r-- | engines/griffon/griffon.h | 250 |
1 files changed, 250 insertions, 0 deletions
diff --git a/engines/griffon/griffon.h b/engines/griffon/griffon.h index dc250fdffb..3704d321bb 100644 --- a/engines/griffon/griffon.h +++ b/engines/griffon/griffon.h @@ -18,6 +18,19 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + * Originally written by Syn9 in FreeBASIC with SDL + * http://syn9.thehideoutgames.com/index_backup.php + * + * Ported to plain C for GCW-Zero handheld by Dmitry Smagin + * http://github.com/dmitrysmagin/griffon_legend + * + * + * Programming/Graphics: Daniel "Syn9" Kennedy + * Music/Sound effects: David Turner + * + * Beta testing and gameplay design help: + * Deleter, Cha0s, Aether Fox, and Kiz + * */ #ifndef GRIFFON_H @@ -29,6 +42,192 @@ namespace Griffon { +#define kMaxNPC 32 +#define kMaxFloat 32 +#define kMaxSpell 32 + +// spells +#define ice 0 +#define steel 1 +#define wood 2 +#define rock 3 +#define fire 4 + +// inventory items +#define INV_FLASK 0 +#define INV_DOUBLEFLASK 1 +#define INV_SHOCK 2 +#define INV_NORMALKEY 3 +#define INV_MASTERKEY 4 + +#define sndbite 0 +#define sndcrystal 1 +#define snddoor 2 +#define sndenemyhit 3 +#define sndice 4 +#define sndlever 5 +#define sndlightning 6 +#define sndmetalhit 7 +#define sndpowerup 8 +#define sndrocks 9 +#define sndswordhit 10 +#define sndthrow 11 +#define sndchest 12 +#define sndfire 13 +#define sndbeep 14 + +struct PLAYERTYPE { + float px; + float py; + float opx; + float opy; + int walkdir; + float walkframe; + float walkspd; + float attackframe; + float attackspd; + + int hp; + int maxhp; + float hpflash; + int hpflashb; + int level; + int maxlevel; + int sword; + int shield; + int armour; + int foundspell[5]; + float spellcharge[5]; + int inventory[5]; + float attackstrength; + float spellstrength; + int spelldamage; + int sworddamage; + + int exp; + int nextlevel; + + int pause; + + float itemselshade; + int ysort; +}; + +struct BODYSECTIONTYPE { + float x; + float y; + int parentID; + int isbase; + int sprite; + int bonelength; // the 'bone' that connects the body sections +}; + +struct NPCTYPE { + float x; + float y; + int spriteset; + int x1; // patrol area + int y1; + int x2; + int y2; + int attitude; + int hp; + + int maxhp; + int item1; + int item2; + int item3; + int script; + float frame; + float frame2; // end boss specific + int cframe; + int onmap; // is this npc set to be genned in the mapfile + + int ticks; + int pause; + int shake; + + int movementmode; + int walkdir; + float walkspd; + int movingdir; + int moving; + + int attacking; + float attackframe; + int cattackframe; + float attackspd; + int attackdelay; + int attacknext; + int attackattempt; + + int spelldamage; + int attackdamage; + + + // one wing and firehydra specific + BODYSECTIONTYPE bodysection[31]; + float swayangle; + float swayspd; + float headtargetx[4]; + float headtargety[4]; + int castpause; + + // firehydra specific + int attacknext2[4]; + int attacking2[4]; + int attackframe2[4]; + + // dragon2 specific + float floating; +}; + +struct SPELLTYPE { + int spellnum; + float homex; + float homey; + float enemyx; + float enemyy; + + float frame; + + int damagewho; // 0 = npc, 1 = player + + // for earthslide + float rocky[9]; + int rockimg[9]; + int rockdeflect[9]; + + float strength; + + // fire + int legalive[5]; + + // spell 6 specific + float fireballs[7][4]; // x,y,targetx, targety + int nfballs; + int ballon[7]; + + int npc; +}; + +struct ANIMSET2TYPE { + int x; // xyloc on spriteimageset + int y; + int xofs; // the actual place to paste the sprite in reference to the bodypart loc on screen + int yofs; + int w; // w/h of the sprite in the imageset + int h; +}; + +extern PLAYERTYPE player; +extern int curmap; +extern int scriptflag[100][10]; +extern int objmapf[1000][21][15]; +extern int roomlocks[201]; +extern int secsingame, secstart; + + class GriffonEngine : public Engine { public: GriffonEngine(OSystem *syst); @@ -38,6 +237,57 @@ public: private: Common::RandomSource *_rnd; + +private: + void griffon_main(); + + void game_addFloatIcon(int ico, float xloc, float yloc); + void game_addFloatText(char *stri, float xloc, float yloc, int col); + void game_attack(); + void game_castspell(int spellnum, float homex, float homey, float enemyx, float enemyy, int damagewho); + void game_checkhit(); + void game_checkinputs(); + void game_configmenu(); + void game_damagenpc(int npcnum, int damage, int spell); + void game_damageplayer(int damage); + void game_drawanims(int Layer); + void game_drawhud(); + void game_drawnpcs(int mode); + void game_drawover(int modx, int mody); + void game_drawplayer(); + void game_drawview(); + void game_endofgame(); + void game_eventtext(const char *stri); + void game_handlewalking(); + void game_loadmap(int mapnum); + void game_main(); + void game_newgame(); + void game_playgame(); + void game_processtrigger(int trignum); + void game_saveloadnew(); + void game_showlogos(); + void game_swash(); + void game_theend(); + void game_title(int mode); + void game_updanims(); + void game_updatey(); + void game_updmusic(); + void game_updnpcs(); + void game_updspells(); + void game_updspellsunder(); + + void sys_initialize(); + void sys_line(Graphics::TransparentSurface *buffer, int x1, int y1, int x2, int y2, int col); + void sys_LoadAnims(); + void sys_LoadFont(); + void sys_LoadItemImgs(); + void sys_LoadTiles(); + void sys_LoadTriggers(); + void sys_LoadObjectDB(); + void sys_print(Graphics::TransparentSurface *buffer, char *stri, int xloc, int yloc, int col); + void sys_progress(int w, int wm); + void sys_setupAudio(); + void sys_update(); }; } |