- Also fixed the file pick dialogs, which now return a path instead of a file:// URL
391 lines
10 KiB
C++
391 lines
10 KiB
C++
/*
|
|
* oldstructs.h
|
|
* BoE
|
|
*
|
|
* Created by Celtic Minstrel on 21/04/09.
|
|
*
|
|
*/
|
|
|
|
#ifndef OLDSTRUCTS_H
|
|
#define OLDSTRUCTS_H
|
|
#include <cstdint>
|
|
|
|
namespace legacy {
|
|
// These definitions are basically copied from MacTypes.h
|
|
extern "C" {
|
|
struct Rect {
|
|
int16_t top;
|
|
int16_t left;
|
|
int16_t bottom;
|
|
int16_t right;
|
|
};
|
|
typedef struct Rect Rect;
|
|
typedef uint8_t Boolean;
|
|
}
|
|
//#define NLS 25
|
|
// // number of left slots for buttons
|
|
//#define NRS 400
|
|
// // number of right slots for scrolling list
|
|
//#define NRSONPAGE 33
|
|
// // number of right slots for scrolling list on page at 1 time
|
|
|
|
struct location {
|
|
int8_t x,y;
|
|
} __attribute__((packed));
|
|
|
|
struct special_node_type {
|
|
int16_t type,sd1,sd2,pic,m1,m2,ex1a,ex1b,ex2a,ex2b,jumpto;
|
|
} __attribute__((packed));
|
|
|
|
struct talking_node_type {
|
|
int16_t personality,type;
|
|
int8_t link1[4],link2[4];
|
|
int16_t extras[4];
|
|
} __attribute__((packed));
|
|
|
|
struct talking_record_type {
|
|
uint8_t strlens[200];
|
|
talking_node_type talk_nodes[60];
|
|
} __attribute__((packed));
|
|
|
|
struct terrain_type_type {
|
|
int16_t picture;
|
|
uint8_t blockage,flag1,flag2,special,trans_to_what,fly_over,boat_over;
|
|
uint8_t block_horse,light_radius,step_sound,shortcut_key,res1,res2,res3;
|
|
} __attribute__((packed));
|
|
|
|
struct wandering_type {
|
|
uint8_t monst[4];
|
|
} __attribute__((packed));
|
|
|
|
struct out_wandering_type {
|
|
uint8_t monst[7];
|
|
uint8_t friendly[3];
|
|
int16_t spec_on_meet,spec_on_win,spec_on_flee,cant_flee;
|
|
int16_t end_spec1,end_spec2;
|
|
} __attribute__((packed));
|
|
|
|
struct outdoor_record_type {
|
|
uint8_t terrain[48][48];
|
|
location special_locs[18];
|
|
uint8_t special_id[18];
|
|
location exit_locs[8];
|
|
int8_t exit_dests[8];
|
|
location sign_locs[8];
|
|
out_wandering_type wandering[4],special_enc[4];
|
|
location wandering_locs[4];
|
|
Rect info_rect[8];
|
|
uint8_t strlens[180];
|
|
special_node_type specials[60];
|
|
} __attribute__((packed));
|
|
|
|
struct creature_start_type {
|
|
uint8_t number;
|
|
uint8_t start_attitude;
|
|
location start_loc;
|
|
uint8_t mobile;
|
|
uint8_t time_flag;
|
|
uint8_t extra1,extra2;
|
|
int16_t spec1, spec2;
|
|
int8_t spec_enc_code,time_code;
|
|
int16_t monster_time,personality;
|
|
int16_t special_on_kill,facial_pic;
|
|
} __attribute__((packed));
|
|
|
|
struct short_item_record_type {
|
|
int16_t variety, item_level;
|
|
int8_t awkward, bonus, protection, charges, type;
|
|
uint8_t graphic_num,ability, type_flag, is_special;
|
|
int16_t value;
|
|
Boolean identified, magic;
|
|
uint8_t weight, description_flag;
|
|
char full_name[25], name[15];
|
|
uint8_t reserved1,reserved2;
|
|
uint8_t magic_use_type, ability_strength, treas_class, real_abil;
|
|
} __attribute__((packed));
|
|
|
|
struct item_record_type {
|
|
int16_t variety, item_level;
|
|
int8_t awkward, bonus, protection, charges, type, magic_use_type;
|
|
uint8_t graphic_num,ability, ability_strength,type_flag, is_special;
|
|
int16_t value __attribute__((aligned(2)));
|
|
uint8_t weight, special_class;
|
|
location item_loc;
|
|
char full_name[25], name[15];
|
|
uint8_t treas_class,item_properties,reserved1,reserved2;
|
|
} __attribute__((packed));
|
|
|
|
struct preset_item_type {
|
|
location item_loc;
|
|
int16_t item_code,ability;
|
|
uint8_t charges,always_there,property,contained;
|
|
} __attribute__((packed));
|
|
|
|
struct preset_field_type {
|
|
location field_loc;
|
|
int16_t field_type;
|
|
} __attribute__((packed));
|
|
|
|
struct town_record_type {
|
|
int16_t town_chop_time,town_chop_key;
|
|
wandering_type wandering[4];
|
|
location wandering_locs[4];
|
|
location special_locs[50];
|
|
uint8_t spec_id[50];
|
|
location sign_locs[15];
|
|
int16_t lighting;
|
|
location start_locs[4];
|
|
location exit_locs[4];
|
|
int16_t exit_specs[4];
|
|
Rect in_town_rect;
|
|
preset_item_type preset_items[64];
|
|
int16_t max_num_monst;
|
|
preset_field_type preset_fields[50];
|
|
int16_t spec_on_entry,spec_on_entry_if_dead;
|
|
int16_t timer_spec_times[8];
|
|
int16_t timer_specs[8];
|
|
uint8_t strlens[180];
|
|
special_node_type specials[100];
|
|
uint8_t specials1,specials2,res1,res2;
|
|
int16_t difficulty;
|
|
} __attribute__((packed));
|
|
|
|
struct big_tr_type {
|
|
uint8_t terrain[64][64];
|
|
Rect room_rect[16];
|
|
creature_start_type creatures[60];
|
|
uint8_t lighting[8][64];
|
|
} __attribute__((packed));
|
|
|
|
struct ave_tr_type {
|
|
uint8_t terrain[48][48];
|
|
Rect room_rect[16];
|
|
creature_start_type creatures[40];
|
|
uint8_t lighting[6][48];
|
|
} __attribute__((packed));
|
|
|
|
struct tiny_tr_type {
|
|
uint8_t terrain[32][32];
|
|
Rect room_rect[16];
|
|
creature_start_type creatures[30];
|
|
uint8_t lighting[4][32];
|
|
} __attribute__((packed));
|
|
|
|
struct city_block_type {
|
|
int16_t block_type;
|
|
int16_t block_destroy_time;
|
|
int8_t block_alignment;
|
|
int8_t block_key_time;
|
|
location block_loc;
|
|
} __attribute__((packed));
|
|
|
|
struct city_ter_rect_type {
|
|
Rect what_rect;
|
|
uint8_t ter_type;
|
|
uint8_t hollow;
|
|
} __attribute__((packed));
|
|
|
|
struct template_town_type {
|
|
creature_start_type creatures[30];
|
|
city_block_type city_block[15];
|
|
city_ter_rect_type city_ter_rect[10];
|
|
} __attribute__((packed));
|
|
|
|
struct scen_item_data_type {
|
|
item_record_type scen_items[400];
|
|
char monst_names[256][20];
|
|
char ter_names[256][30];
|
|
} __attribute__((packed));
|
|
|
|
struct item_storage_shortcut_type {
|
|
int16_t ter_type,item_num[10],item_odds[10],property;
|
|
} __attribute__((packed));
|
|
|
|
struct monster_record_type {
|
|
uint8_t m_num,level,m_name[26];
|
|
int16_t health,m_health,mp,max_mp;
|
|
uint8_t armor,skill;
|
|
int16_t a[3];
|
|
uint8_t a1_type,a23_type,m_type,speed,ap,mu,cl,breath,breath_type,treasure,spec_skill,poison;
|
|
int16_t morale,m_morale;
|
|
int16_t corpse_item,corpse_item_chance;
|
|
int16_t status[15];
|
|
uint8_t direction,immunities,x_width,y_width,radiate_1,radiate_2;
|
|
uint8_t default_attitude,summon_type,default_facial_pic,res1,res2,res3;
|
|
int16_t picture_num;
|
|
|
|
} __attribute__((packed));
|
|
|
|
struct horse_record_type {
|
|
location horse_loc,horse_loc_in_sec,horse_sector;
|
|
int16_t which_town;
|
|
Boolean exists,property;
|
|
} __attribute__((packed));
|
|
|
|
struct boat_record_type {
|
|
location boat_loc,boat_loc_in_sec,boat_sector;
|
|
int16_t which_town;
|
|
Boolean exists,property;
|
|
} __attribute__((packed));
|
|
|
|
struct talk_save_type {
|
|
int16_t personality;
|
|
int16_t town_num;
|
|
int16_t str1,str2;
|
|
} __attribute__((packed));
|
|
|
|
struct creature_data_type {
|
|
int16_t active,attitude;
|
|
uint8_t number; // TODO: I think there should be a byte of padding near here, but where exactly??
|
|
location m_loc __attribute__((aligned(2)));
|
|
monster_record_type m_d;
|
|
int16_t mobile;
|
|
int16_t summoned;
|
|
creature_start_type monst_start;
|
|
} __attribute__((packed));
|
|
|
|
struct creature_list_type {
|
|
creature_data_type dudes[60];
|
|
int16_t which_town;
|
|
int16_t friendly;
|
|
} __attribute__((packed));
|
|
|
|
struct outdoor_creature_type {
|
|
Boolean exists; // TODO: I think there should be a byte of padding near here, but where exactly??
|
|
int16_t direction __attribute__((aligned(2)));
|
|
out_wandering_type what_monst;
|
|
location which_sector,m_loc;
|
|
} __attribute__((packed));
|
|
|
|
struct party_record_type {
|
|
int32_t age;
|
|
int16_t gold,food;
|
|
uint8_t stuff_done[310][10],item_taken[200][8];
|
|
int16_t light_level;
|
|
location outdoor_corner,i_w_c,p_loc,loc_in_sec;
|
|
boat_record_type boats[30];
|
|
horse_record_type horses[30];
|
|
//int8_t pad1[8];
|
|
creature_list_type creature_save[4];
|
|
int16_t in_boat,in_horse;
|
|
outdoor_creature_type out_c[10];
|
|
item_record_type magic_store_items[5][10];
|
|
int16_t imprisoned_monst[4];
|
|
int8_t m_seen[256];
|
|
int8_t journal_str[50];
|
|
int16_t journal_day[50];
|
|
int16_t special_notes_str[140][2];
|
|
talk_save_type talk_save[120];
|
|
int16_t direction,at_which_save_slot;
|
|
int8_t alchemy[20];
|
|
Boolean can_find_town[200];
|
|
int16_t key_times[100];
|
|
int16_t party_event_timers[30];
|
|
int16_t global_or_town[30];
|
|
int16_t node_to_call[30];
|
|
int8_t spec_items[50],help_received[120];
|
|
int16_t m_killed[200];
|
|
int32_t total_m_killed,total_dam_done,total_xp_gained,total_dam_taken;
|
|
char scen_name[256];
|
|
} __attribute__((packed));
|
|
|
|
struct scenario_data_type {
|
|
uint8_t out_width,out_height,difficulty,intro_pic,default_ground;
|
|
uint8_t town_size[200];
|
|
uint8_t town_hidden[200];
|
|
int16_t flag_a;
|
|
int16_t intro_mess_pic,intro_mess_len;
|
|
location where_start __attribute__((aligned(2)));
|
|
location out_sec_start,out_start;
|
|
int16_t which_town_start;
|
|
int16_t flag_b;
|
|
int16_t town_data_size[200][5];
|
|
int16_t town_to_add_to[10];
|
|
int16_t flag_to_add_to_town[10][2];
|
|
int16_t flag_c;
|
|
int16_t out_data_size[100][2];
|
|
Rect store_item_rects[3];
|
|
int16_t store_item_towns[3];
|
|
int16_t flag_e;
|
|
int16_t special_items[50];
|
|
int16_t special_item_special[50];
|
|
int16_t rating,uses_custom_graphics;
|
|
int16_t flag_f;
|
|
monster_record_type scen_monsters[256];
|
|
boat_record_type scen_boats[30];
|
|
horse_record_type scen_horses[30];
|
|
int16_t flag_g;
|
|
terrain_type_type ter_types[256];
|
|
int16_t scenario_timer_times[20];
|
|
int16_t scenario_timer_specs[20];
|
|
int16_t flag_h;
|
|
special_node_type scen_specials[256];
|
|
item_storage_shortcut_type storage_shortcuts[10];
|
|
int16_t flag_d;
|
|
uint8_t scen_str_len[300];
|
|
int16_t flag_i;
|
|
location last_out_edited;
|
|
int16_t last_town_edited;
|
|
} __attribute__((packed));
|
|
|
|
struct setup_save_type {
|
|
uint8_t setup[4][64][64];
|
|
} __attribute__((packed));
|
|
|
|
struct pc_record_type {
|
|
int16_t main_status;
|
|
char name[20];
|
|
int16_t skills[30];
|
|
int16_t max_health,cur_health,max_sp,cur_sp,experience,skill_pts,level;
|
|
int16_t status[15];
|
|
item_record_type items[24];
|
|
Boolean equip[24];
|
|
Boolean priest_spells[62],mage_spells[62];
|
|
int16_t which_graphic,weap_poisoned;
|
|
Boolean advan[15],traits[15];
|
|
int16_t race,exp_adj,direction;
|
|
} __attribute__((packed));
|
|
|
|
struct town_item_list {
|
|
item_record_type items[115];
|
|
} __attribute__((packed));
|
|
|
|
struct stored_town_maps_type {
|
|
int8_t town_maps[200][8][64];
|
|
} __attribute__((packed));
|
|
|
|
struct stored_outdoor_maps_type {
|
|
int8_t outdoor_maps[100][6][48];
|
|
} __attribute__((packed));
|
|
|
|
struct stored_items_list_type {
|
|
item_record_type items[115];
|
|
} __attribute__((packed));
|
|
|
|
struct current_town_type {
|
|
int16_t town_num, difficulty;
|
|
town_record_type town;
|
|
int8_t explored[64][64];
|
|
Boolean hostile;
|
|
creature_list_type monst;
|
|
Boolean in_boat;
|
|
location p_loc;
|
|
} __attribute__((packed));
|
|
|
|
struct out_info_type {
|
|
int8_t expl[96][96];
|
|
} __attribute__((packed));
|
|
|
|
// struct piles_of_stuff_dumping_type {
|
|
// int8_t strings_ls[NLS][40];
|
|
// int8_t strings_rs[NRS][40];
|
|
// int8_t town_strs[180][256];
|
|
// int8_t out_strs[120][256];
|
|
// int8_t scen_strs[270][256];
|
|
// int8_t talk_strs[170][256];
|
|
// scen_item_data_type scen_item_list;
|
|
// };
|
|
};
|
|
|
|
#endif
|