diff --git a/osx/boe.consts.h b/osx/boe.consts.h index 9d4838c0..6ab4c6cf 100644 --- a/osx/boe.consts.h +++ b/osx/boe.consts.h @@ -46,6 +46,7 @@ #define SDF_SKIP_STARTUP 305][4 // preferably deprecated #define SDF_LESS_SOUND 305][5 #define SDF_NO_TARGET_LINE 305][6 +#define SDF_NO_BOAT_SPECIALS 305][7 #define SDF_RESURRECT_NO_BALM 305][8 #define SDF_HOSTILES_PRESENT 305][9 #define SDF_NO_MAPS 306][0 diff --git a/osx/boe.party.cpp b/osx/boe.party.cpp index d6d6ee98..7df942c9 100644 --- a/osx/boe.party.cpp +++ b/osx/boe.party.cpp @@ -527,8 +527,10 @@ void put_party_in_scen(std::string scen_name) // Compatibility flags if(scenario.format.prog_make_ver[0] < 2){ PSD[SDF_RESURRECT_NO_BALM] = 1; + PSD[SDF_NO_BOAT_SPECIALS] = 1; } else { PSD[SDF_RESURRECT_NO_BALM] = 0; + PSD[SDF_NO_BOAT_SPECIALS] = 0; } } diff --git a/osx/boe.specials.cpp b/osx/boe.specials.cpp index b5417979..8999d3bd 100644 --- a/osx/boe.specials.cpp +++ b/osx/boe.specials.cpp @@ -238,8 +238,13 @@ bool check_special_terrain(location where_check,eSpecCtx mode,short which_pc,sho *forced = true; } *spec_num = univ.town->spec_id[i]; - if(!is_blocked(where_check) || ter_special == eTerSpec::CHANGE_WHEN_STEP_ON - || ter_special == eTerSpec::CALL_SPECIAL) { + bool runSpecial = false; + if(!is_blocked(where_check)) runSpecial = true; + if(ter_special == eTerSpec::CHANGE_WHEN_STEP_ON) runSpecial = true; + if(ter_special == eTerSpec::CALL_SPECIAL) runSpecial = true; + if(!PSD[SDF_NO_BOAT_SPECIALS] && univ.party.in_boat >= 0 && scenario.ter_types[ter].boat_over) + runSpecial = true; + if(runSpecial) { give_help(54,0); run_special(mode,2,univ.town->spec_id[i],where_check,&s1,&s2,&s3); if (s1 > 0)