495 lines
15 KiB
C++
495 lines
15 KiB
C++
/*
|
|
* porting.cpp
|
|
* BoE
|
|
*
|
|
* Created by Celtic Minstrel on 22/04/09.
|
|
*
|
|
*/
|
|
|
|
#include "porting.h"
|
|
|
|
extern bool cur_scen_is_mac, mac_is_intel;
|
|
|
|
void port_town(legacy::town_record_type* dummy_town_ptr){
|
|
short i;
|
|
|
|
if (cur_scen_is_mac != mac_is_intel)
|
|
return;
|
|
flip_short(&dummy_town_ptr->town_chop_time);
|
|
flip_short(&dummy_town_ptr->town_chop_key);
|
|
flip_short(&dummy_town_ptr->lighting);
|
|
for (i =0 ; i < 4; i++)
|
|
flip_short(&dummy_town_ptr->exit_specs[i]);
|
|
flip_rect(&dummy_town_ptr->in_town_rect);
|
|
for (i =0 ; i < 64; i++) {
|
|
flip_short(&dummy_town_ptr->preset_items[i].item_code);
|
|
flip_short(&dummy_town_ptr->preset_items[i].ability);
|
|
}
|
|
for (i =0 ; i < 50; i++) {
|
|
flip_short(&dummy_town_ptr->preset_fields[i].field_type);
|
|
}
|
|
flip_short(&dummy_town_ptr->max_num_monst);
|
|
flip_short(&dummy_town_ptr->spec_on_entry);
|
|
flip_short(&dummy_town_ptr->spec_on_entry_if_dead);
|
|
for (i =0 ; i < 8; i++)
|
|
flip_short(&dummy_town_ptr->timer_spec_times[i]);
|
|
for (i =0 ; i < 8; i++)
|
|
flip_short(&dummy_town_ptr->timer_specs[i]);
|
|
flip_short(&dummy_town_ptr->difficulty);
|
|
for (i =0 ; i < 100; i++)
|
|
flip_spec_node(&dummy_town_ptr->specials[i]);
|
|
|
|
}
|
|
|
|
static void port_dummy_t_d(short size,char *buffer)
|
|
{
|
|
short i;
|
|
legacy::big_tr_type *d1;
|
|
legacy::ave_tr_type *d2;
|
|
legacy::tiny_tr_type *d3;
|
|
|
|
if (cur_scen_is_mac != mac_is_intel)
|
|
return;
|
|
|
|
switch (size) {
|
|
case 0:
|
|
d1 = (legacy::big_tr_type *) buffer;
|
|
for (i =0 ; i < 16; i++)
|
|
flip_rect(&d1->room_rect[i]);
|
|
for (i =0 ; i < 60; i++) {
|
|
flip_short(&d1->creatures[i].spec1);
|
|
flip_short(&d1->creatures[i].spec2);
|
|
flip_short(&d1->creatures[i].monster_time);
|
|
flip_short(&d1->creatures[i].personality);
|
|
flip_short(&d1->creatures[i].special_on_kill);
|
|
flip_short(&d1->creatures[i].facial_pic);
|
|
}
|
|
break;
|
|
case 1:
|
|
d2 = (legacy::ave_tr_type *) buffer;
|
|
for (i =0 ; i < 16; i++)
|
|
flip_rect(&d2->room_rect[i]);
|
|
for (i =0 ; i < 40; i++) {
|
|
flip_short(&d2->creatures[i].spec1);
|
|
flip_short(&d2->creatures[i].spec2);
|
|
flip_short(&d2->creatures[i].monster_time);
|
|
flip_short(&d2->creatures[i].personality);
|
|
flip_short(&d2->creatures[i].special_on_kill);
|
|
flip_short(&d2->creatures[i].facial_pic);
|
|
}
|
|
break;
|
|
case 2:
|
|
d3 = (legacy::tiny_tr_type *) buffer;
|
|
for (i =0 ; i < 16; i++)
|
|
flip_rect(&d3->room_rect[i]);
|
|
for (i =0 ; i < 30; i++) {
|
|
flip_short(&d3->creatures[i].spec1);
|
|
flip_short(&d3->creatures[i].spec2);
|
|
flip_short(&d3->creatures[i].monster_time);
|
|
flip_short(&d3->creatures[i].personality);
|
|
flip_short(&d3->creatures[i].special_on_kill);
|
|
flip_short(&d3->creatures[i].facial_pic);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void port_talk_nodes(legacy::talking_record_type* dummy_talk_ptr)
|
|
{
|
|
short i;
|
|
|
|
if (cur_scen_is_mac != mac_is_intel)
|
|
return;
|
|
for (i = 0; i < 60; i++) {
|
|
flip_short(&dummy_talk_ptr->talk_nodes[i].personality);
|
|
flip_short(&dummy_talk_ptr->talk_nodes[i].type);
|
|
flip_short(&dummy_talk_ptr->talk_nodes[i].extras[0]);
|
|
flip_short(&dummy_talk_ptr->talk_nodes[i].extras[1]);
|
|
flip_short(&dummy_talk_ptr->talk_nodes[i].extras[2]);
|
|
flip_short(&dummy_talk_ptr->talk_nodes[i].extras[3]);
|
|
}
|
|
}
|
|
|
|
void port_t_d(legacy::big_tr_type* old)
|
|
{
|
|
short i;
|
|
if (cur_scen_is_mac != mac_is_intel)
|
|
return;
|
|
|
|
for (i =0 ; i < 16; i++)
|
|
flip_rect(&old->room_rect[i]);
|
|
for (i =0 ; i < 60; i++) {
|
|
flip_short(&old->creatures[i].spec1);
|
|
flip_short(&old->creatures[i].spec2);
|
|
flip_short(&old->creatures[i].monster_time);
|
|
flip_short(&old->creatures[i].personality);
|
|
flip_short(&old->creatures[i].special_on_kill);
|
|
flip_short(&old->creatures[i].facial_pic);
|
|
}
|
|
}
|
|
|
|
void port_ave_t(legacy::ave_tr_type* old)
|
|
{
|
|
short i;
|
|
if (cur_scen_is_mac != mac_is_intel)
|
|
return;
|
|
|
|
for (i =0 ; i < 16; i++)
|
|
flip_rect(&old->room_rect[i]);
|
|
for (i =0 ; i < 40; i++) {
|
|
flip_short(&old->creatures[i].spec1);
|
|
flip_short(&old->creatures[i].spec2);
|
|
flip_short(&old->creatures[i].monster_time);
|
|
flip_short(&old->creatures[i].personality);
|
|
flip_short(&old->creatures[i].special_on_kill);
|
|
flip_short(&old->creatures[i].facial_pic);
|
|
}
|
|
}
|
|
|
|
void port_tiny_t(legacy::tiny_tr_type* old)
|
|
{
|
|
short i;
|
|
if (cur_scen_is_mac != mac_is_intel)
|
|
return;
|
|
|
|
for (i =0 ; i < 16; i++)
|
|
flip_rect(&old->room_rect[i]);
|
|
for (i =0 ; i < 30; i++) {
|
|
flip_short(&old->creatures[i].spec1);
|
|
flip_short(&old->creatures[i].spec2);
|
|
flip_short(&old->creatures[i].monster_time);
|
|
flip_short(&old->creatures[i].personality);
|
|
flip_short(&old->creatures[i].special_on_kill);
|
|
flip_short(&old->creatures[i].facial_pic);
|
|
}
|
|
}
|
|
|
|
void port_scenario(legacy::scenario_data_type* temp_scenario)
|
|
{
|
|
short i,j;
|
|
|
|
if (cur_scen_is_mac != mac_is_intel)
|
|
return;
|
|
flip_short(&temp_scenario->flag_a);
|
|
flip_short(&temp_scenario->flag_b);
|
|
flip_short(&temp_scenario->flag_c);
|
|
flip_short(&temp_scenario->flag_d);
|
|
flip_short(&temp_scenario->flag_e);
|
|
flip_short(&temp_scenario->flag_f);
|
|
flip_short(&temp_scenario->flag_g);
|
|
flip_short(&temp_scenario->flag_h);
|
|
flip_short(&temp_scenario->flag_i);
|
|
flip_short(&temp_scenario->intro_mess_pic);
|
|
flip_short(&temp_scenario->intro_mess_len);
|
|
flip_short(&temp_scenario->which_town_start);
|
|
for (i = 0; i < 200; i++)
|
|
for (j = 0; j < 5; j++)
|
|
flip_short(&temp_scenario->town_data_size[i][j]);
|
|
for (i = 0; i < 10; i++)
|
|
flip_short(&temp_scenario->town_to_add_to[i]);
|
|
for (i = 0; i < 10; i++)
|
|
for (j = 0; j < 2; j++)
|
|
flip_short(&temp_scenario->flag_to_add_to_town[i][j]);
|
|
for (i = 0; i < 100; i++)
|
|
for (j = 0; j < 2; j++)
|
|
flip_short(&temp_scenario->out_data_size[i][j]);
|
|
for (i = 0; i < 3; i++)
|
|
flip_rect(&temp_scenario->store_item_rects[i]);
|
|
for (i = 0; i < 3; i++)
|
|
flip_short(&temp_scenario->store_item_towns[i]);
|
|
for (i = 0; i < 50; i++)
|
|
flip_short(&temp_scenario->special_items[i]);
|
|
for (i = 0; i < 50; i++)
|
|
flip_short(&temp_scenario->special_item_special[i]);
|
|
flip_short(&temp_scenario->rating);
|
|
flip_short(&temp_scenario->uses_custom_graphics);
|
|
for (i = 0; i < 256; i++) {
|
|
flip_short(&temp_scenario->scen_monsters[i].health);
|
|
flip_short(&temp_scenario->scen_monsters[i].m_health);
|
|
flip_short(&temp_scenario->scen_monsters[i].max_mp);
|
|
flip_short(&temp_scenario->scen_monsters[i].mp);
|
|
flip_short(&temp_scenario->scen_monsters[i].a[1]);
|
|
flip_short(&temp_scenario->scen_monsters[i].a[0]);
|
|
flip_short(&temp_scenario->scen_monsters[i].a[2]);
|
|
flip_short(&temp_scenario->scen_monsters[i].morale);
|
|
flip_short(&temp_scenario->scen_monsters[i].m_morale);
|
|
flip_short(&temp_scenario->scen_monsters[i].corpse_item);
|
|
flip_short(&temp_scenario->scen_monsters[i].corpse_item_chance);
|
|
flip_short(&temp_scenario->scen_monsters[i].picture_num);
|
|
}
|
|
|
|
for (i = 0; i < 256; i++) {
|
|
flip_short(&temp_scenario->ter_types[i].picture);
|
|
}
|
|
for (i = 0; i < 30; i++) {
|
|
flip_short(&temp_scenario->scen_boats[i].which_town);
|
|
}
|
|
for (i = 0; i < 30; i++) {
|
|
flip_short(&temp_scenario->scen_horses[i].which_town);
|
|
}
|
|
for (i = 0; i < 20; i++)
|
|
flip_short(&temp_scenario->scenario_timer_times[i]);
|
|
for (i = 0; i < 20; i++)
|
|
flip_short(&temp_scenario->scenario_timer_specs[i]);
|
|
for (i = 0; i < 256; i++) {
|
|
flip_spec_node(&temp_scenario->scen_specials[i]);
|
|
}
|
|
for (i = 0; i < 10; i++) {
|
|
flip_short(&temp_scenario->storage_shortcuts[i].ter_type);
|
|
flip_short(&temp_scenario->storage_shortcuts[i].property);
|
|
for (j = 0; j < 10; j++) {
|
|
flip_short(&temp_scenario->storage_shortcuts[i].item_num[j]);
|
|
flip_short(&temp_scenario->storage_shortcuts[i].item_odds[j]);
|
|
}
|
|
}
|
|
flip_short(&temp_scenario->last_town_edited);
|
|
}
|
|
|
|
|
|
void port_item_list(legacy::scen_item_data_type* old){
|
|
short i;
|
|
|
|
if (cur_scen_is_mac != mac_is_intel)
|
|
return;
|
|
|
|
for (i = 0; i < 400; i++) {
|
|
flip_short(&(old->scen_items[i].variety));
|
|
flip_short(&(old->scen_items[i].item_level));
|
|
flip_short(&(old->scen_items[i].value));
|
|
}
|
|
}
|
|
|
|
void port_out(legacy::outdoor_record_type *out)
|
|
{
|
|
short i;
|
|
|
|
if (cur_scen_is_mac != mac_is_intel)
|
|
return;
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
flip_short(&(out->wandering[i].spec_on_meet));
|
|
flip_short(&(out->wandering[i].spec_on_win));
|
|
flip_short(&(out->wandering[i].spec_on_flee));
|
|
flip_short(&(out->wandering[i].cant_flee));
|
|
flip_short(&(out->wandering[i].end_spec1));
|
|
flip_short(&(out->wandering[i].end_spec2));
|
|
flip_short(&(out->special_enc[i].spec_on_meet));
|
|
flip_short(&(out->special_enc[i].spec_on_win));
|
|
flip_short(&(out->special_enc[i].spec_on_flee));
|
|
flip_short(&(out->special_enc[i].cant_flee));
|
|
flip_short(&(out->special_enc[i].end_spec1));
|
|
flip_short(&(out->special_enc[i].end_spec2));
|
|
}
|
|
for (i = 0; i < 8; i++)
|
|
flip_rect(&(out->info_rect[i]));
|
|
for (i = 0; i < 60; i++)
|
|
flip_spec_node(&(out->specials[i]));
|
|
}
|
|
|
|
void port_party(legacy::party_record_type* old){
|
|
int i,j,k;
|
|
flip_long(&old->age);
|
|
flip_short(&old->gold);
|
|
flip_short(&old->food);
|
|
flip_short(&old->light_level);
|
|
for(i = 0; i < 30; i++){
|
|
flip_short(&old->boats[i].which_town);
|
|
flip_short(&old->horses[i].which_town);
|
|
flip_short(&old->party_event_timers[i]);
|
|
flip_short(&old->global_or_town[i]);
|
|
flip_short(&old->node_to_call[i]);
|
|
}
|
|
for(i = 0; i < 4; i++){
|
|
flip_short(&old->creature_save[i].which_town);
|
|
flip_short(&old->creature_save[i].friendly);
|
|
for(j = 0; j < 60; j++){
|
|
flip_short(&old->creature_save[i].dudes[j].active);
|
|
flip_short(&old->creature_save[i].dudes[j].attitude);
|
|
flip_short(&old->creature_save[i].dudes[j].m_d.health);
|
|
flip_short(&old->creature_save[i].dudes[j].m_d.m_health);
|
|
flip_short(&old->creature_save[i].dudes[j].m_d.mp);
|
|
flip_short(&old->creature_save[i].dudes[j].m_d.max_mp);
|
|
for(k = 0; k < 3; k++)
|
|
flip_short(&old->creature_save[i].dudes[j].m_d.a[k]);
|
|
flip_short(&old->creature_save[i].dudes[j].m_d.morale);
|
|
flip_short(&old->creature_save[i].dudes[j].m_d.m_morale);
|
|
flip_short(&old->creature_save[i].dudes[j].m_d.corpse_item);
|
|
flip_short(&old->creature_save[i].dudes[j].m_d.corpse_item_chance);
|
|
for(k = 0; k < 15; k++)
|
|
flip_short(&old->creature_save[i].dudes[j].m_d.status[k]);
|
|
flip_short(&old->creature_save[i].dudes[j].m_d.picture_num);
|
|
flip_short(&old->creature_save[i].dudes[j].summoned);
|
|
flip_short(&old->creature_save[i].dudes[j].monst_start.spec1);
|
|
flip_short(&old->creature_save[i].dudes[j].monst_start.spec2);
|
|
flip_short(&old->creature_save[i].dudes[j].monst_start.monster_time);
|
|
flip_short(&old->creature_save[i].dudes[j].monst_start.personality);
|
|
flip_short(&old->creature_save[i].dudes[j].monst_start.special_on_kill);
|
|
flip_short(&old->creature_save[i].dudes[j].monst_start.facial_pic);
|
|
}
|
|
flip_short(&old->imprisoned_monst[i]);
|
|
}
|
|
flip_short(&old->in_boat);
|
|
flip_short(&old->in_horse);
|
|
for(i = 0; i < 10; i++){
|
|
flip_short(&old->out_c[i].direction);
|
|
flip_short(&old->out_c[i].what_monst.spec_on_meet);
|
|
flip_short(&old->out_c[i].what_monst.spec_on_win);
|
|
flip_short(&old->out_c[i].what_monst.spec_on_flee);
|
|
flip_short(&old->out_c[i].what_monst.cant_flee);
|
|
flip_short(&old->out_c[i].what_monst.end_spec1);
|
|
flip_short(&old->out_c[i].what_monst.end_spec2);
|
|
}
|
|
for(i = 0; i < 5; i++)
|
|
for(j = 0; j < 10; j++){
|
|
flip_short(&old->magic_store_items[i][j].variety);
|
|
flip_short(&old->magic_store_items[i][j].item_level);
|
|
flip_short(&old->magic_store_items[i][j].value);
|
|
}
|
|
for(i = 0; i < 50; i++)
|
|
flip_short(&old->journal_day[i]);
|
|
for(i = 0; i < 140; i++){
|
|
flip_short(&old->special_notes_str[i][0]);
|
|
flip_short(&old->special_notes_str[i][1]);
|
|
}
|
|
for(i = 0; i < 120; i++){
|
|
flip_short(&old->talk_save[i].personality);
|
|
flip_short(&old->talk_save[i].town_num);
|
|
flip_short(&old->talk_save[i].str1);
|
|
flip_short(&old->talk_save[i].str2);
|
|
}
|
|
flip_short(&old->direction);
|
|
flip_short(&old->at_which_save_slot);
|
|
for(i = 0; i < 100; i++)
|
|
flip_short(&old->key_times[i]);
|
|
for(i = 0; i < 200; i++)
|
|
flip_short(&old->m_killed[i]);
|
|
flip_long(&old->total_m_killed);
|
|
flip_long(&old->total_dam_done);
|
|
flip_long(&old->total_xp_gained);
|
|
flip_long(&old->total_dam_taken);
|
|
}
|
|
|
|
void port_pc(legacy::pc_record_type* old){
|
|
int i;
|
|
flip_short(&old->main_status);
|
|
for(i = 0; i < 30; i++)
|
|
flip_short(&old->skills[i]);
|
|
flip_short(&old->max_health);
|
|
flip_short(&old->cur_health);
|
|
flip_short(&old->max_sp);
|
|
flip_short(&old->cur_sp);
|
|
flip_short(&old->experience);
|
|
flip_short(&old->skill_pts);
|
|
flip_short(&old->level);
|
|
for(i = 0; i < 15; i++)
|
|
flip_short(&old->status[i]);
|
|
for(i = 0; i < 10; i++){
|
|
flip_short(&old->items[i].variety);
|
|
flip_short(&old->items[i].item_level);
|
|
flip_short(&old->items[i].value);
|
|
}
|
|
flip_short(&old->which_graphic);
|
|
flip_short(&old->weap_poisoned);
|
|
flip_short(&old->race);
|
|
flip_short(&old->exp_adj);
|
|
flip_short(&old->direction);
|
|
}
|
|
|
|
void port_c_town(legacy::current_town_type* old){
|
|
int i,j;
|
|
flip_short(&old->town_num);
|
|
flip_short(&old->difficulty);
|
|
port_town(&old->town);
|
|
flip_short(&old->monst.which_town);
|
|
flip_short(&old->monst.friendly);
|
|
for(j = 0; j < 60; j++){
|
|
flip_short(&old->monst.dudes[j].active);
|
|
flip_short(&old->monst.dudes[j].attitude);
|
|
flip_short(&old->monst.dudes[j].m_d.health);
|
|
flip_short(&old->monst.dudes[j].m_d.m_health);
|
|
flip_short(&old->monst.dudes[j].m_d.mp);
|
|
flip_short(&old->monst.dudes[j].m_d.max_mp);
|
|
for(i = 0; i < 3; i++)
|
|
flip_short(&old->monst.dudes[j].m_d.a[i]);
|
|
flip_short(&old->monst.dudes[j].m_d.morale);
|
|
flip_short(&old->monst.dudes[j].m_d.m_morale);
|
|
flip_short(&old->monst.dudes[j].m_d.corpse_item);
|
|
flip_short(&old->monst.dudes[j].m_d.corpse_item_chance);
|
|
for(i = 0; i < 15; i++)
|
|
flip_short(&old->monst.dudes[j].m_d.status[i]);
|
|
flip_short(&old->monst.dudes[j].m_d.picture_num);
|
|
flip_short(&old->monst.dudes[j].summoned);
|
|
flip_short(&old->monst.dudes[j].monst_start.spec1);
|
|
flip_short(&old->monst.dudes[j].monst_start.spec2);
|
|
flip_short(&old->monst.dudes[j].monst_start.monster_time);
|
|
flip_short(&old->monst.dudes[j].monst_start.personality);
|
|
flip_short(&old->monst.dudes[j].monst_start.special_on_kill);
|
|
flip_short(&old->monst.dudes[j].monst_start.facial_pic);
|
|
}
|
|
}
|
|
|
|
void flip_spec_node(legacy::special_node_type *spec)
|
|
{
|
|
flip_short(&(spec->type));
|
|
flip_short(&(spec->sd1));
|
|
flip_short(&(spec->sd2));
|
|
flip_short(&(spec->pic));
|
|
flip_short(&(spec->m1));
|
|
flip_short(&(spec->m2));
|
|
flip_short(&(spec->ex1a));
|
|
flip_short(&(spec->ex1b));
|
|
flip_short(&(spec->ex2a));
|
|
flip_short(&(spec->ex2b));
|
|
flip_short(&(spec->jumpto));
|
|
}
|
|
|
|
void flip_short(int16_t *s)
|
|
{
|
|
char store,*s1, *s2;
|
|
|
|
s1 = (char *) s;
|
|
s2 = s1 + 1;
|
|
store = *s1;
|
|
*s1 = *s2;
|
|
*s2 = store;
|
|
|
|
}
|
|
|
|
void flip_long(int32_t *s)
|
|
{
|
|
char store,*s1, *s2, *s3, *s4;
|
|
|
|
s1 = (char *) s;
|
|
s2 = s1 + 1;
|
|
s3 = s1 + 2;
|
|
s4 = s1 + 3;
|
|
store = *s1;
|
|
*s1 = *s4;
|
|
*s4 = store;
|
|
store = *s2;
|
|
*s2 = *s3;
|
|
*s3 = store;
|
|
|
|
}
|
|
|
|
// TODO: This was because Windows stored its rect members in a different order, but since we now have our own rect class, it shouldn't be needed.
|
|
static void alter_rect(legacy::Rect *r)
|
|
{
|
|
short a;
|
|
|
|
a = r->top;
|
|
r->top = r->left;
|
|
r->left = a;
|
|
a = r->bottom;
|
|
r->bottom = r->right;
|
|
}
|
|
|
|
void flip_rect(legacy::Rect* s)
|
|
{
|
|
flip_short((int16_t *) &(s->top));
|
|
flip_short((int16_t *) &(s->bottom));
|
|
flip_short((int16_t *) &(s->left));
|
|
flip_short((int16_t *) &(s->right));
|
|
if(!cur_scen_is_mac) alter_rect(s);
|
|
}
|