Files
commandergenius/project/jni/application/REminiscence/REminiscence-0.1.9/intern.h
2010-11-11 20:44:02 +02:00

194 lines
3.4 KiB
C++

/* REminiscence - Flashback interpreter
* Copyright (C) 2005-2007 Gregory Montoir
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef __INTERN_H__
#define __INTERN_H__
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cassert>
#include "sys.h"
#include "util.h"
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)<(y)?(x):(y))
#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
template<typename T>
inline void SWAP(T &a, T &b) {
T tmp = a;
a = b;
b = tmp;
}
enum Version {
VER_FR,
VER_EN,
VER_DE,
VER_SP
};
struct Color {
uint8 r;
uint8 g;
uint8 b;
};
struct Point {
int16 x;
int16 y;
};
struct Level {
const char *name;
const char *name2;
uint16 cutscene_id;
};
struct InitPGE {
uint16 type;
int16 pos_x;
int16 pos_y;
uint16 obj_node_number;
uint16 life;
int16 counter_values[4];
uint8 object_type;
uint8 init_room;
uint8 room_location;
uint8 init_flags;
uint8 colliding_icon_num;
uint8 icon_num;
uint8 object_id;
uint8 skill;
uint8 mirror_x;
uint8 flags;
uint8 unk1C; // collidable, collision_data_len
uint8 text_num;
};
struct LivePGE {
uint16 obj_type;
int16 pos_x;
int16 pos_y;
uint8 anim_seq;
uint8 room_location;
int16 life;
int16 counter_value;
uint8 collision_slot;
uint8 next_inventory_PGE;
uint8 current_inventory_PGE;
uint8 unkF; // unk_inventory_PGE
uint16 anim_number;
uint8 flags;
uint8 index;
uint16 first_obj_number;
LivePGE *next_PGE_in_room;
InitPGE *init_PGE;
};
struct GroupPGE {
GroupPGE *next_entry;
uint16 index;
uint16 group_id;
};
struct Object {
uint16 type;
int8 dx;
int8 dy;
uint16 init_obj_type;
uint8 opcode2;
uint8 opcode1;
uint8 flags;
uint8 opcode3;
uint16 init_obj_number;
int16 opcode_arg1;
int16 opcode_arg2;
int16 opcode_arg3;
};
struct ObjectNode {
uint16 last_obj_number;
Object *objects;
uint16 num_objects;
};
struct ObjectOpcodeArgs {
LivePGE *pge; // arg0
int16 a; // arg2
int16 b; // arg4
};
struct AnimBufferState {
int16 x;
int16 y;
const uint8 *dataPtr;
LivePGE *pge;
};
struct AnimBuffers {
AnimBufferState *_states[4];
uint8 _curPos[4];
void addState(uint8 stateNum, int16 x, int16 y, const uint8 *dataPtr, LivePGE *pge);
};
struct CollisionSlot {
int16 ct_pos;
CollisionSlot *prev_slot;
LivePGE *live_pge;
uint16 index;
};
struct MbkEntry {
uint16 offset;
uint16 len;
};
struct BankSlot {
uint16 entryNum;
uint8 *ptr;
};
struct CollisionSlot2 {
CollisionSlot2 *next_slot;
int8 *unk2;
uint8 data_size;
uint8 data_buf[0x10]; // XXX check size
};
struct InventoryItem {
uint8 icon_num;
InitPGE *init_pge;
LivePGE *live_pge;
};
struct SoundFx {
uint32 offset;
uint16 len;
uint8 *data;
};
#endif // __INTERN_H__