diff --git a/src/ariadne.h b/src/ariadne.h index b3da8de5dc..72f4ee20ff 100644 --- a/src/ariadne.h +++ b/src/ariadne.h @@ -171,7 +171,7 @@ struct Ariadne { // sizeof = 102 struct Coord3d manoeuvre_requested_position; unsigned char manoeuvre_state; short wallhug_angle; - long straight_dist_to_next_waypoint; + int32_t straight_dist_to_next_waypoint; }; struct PathWayPoint { // sizeof = 8 @@ -219,8 +219,8 @@ struct Navigation { unsigned char wallhug_retry_counter; unsigned char wallhug_state; unsigned char push_counter; - long dist_to_final_pos; - long distance_to_next_pos; + int32_t dist_to_final_pos; + int32_t distance_to_next_pos; int32_t angle; SubtlCodedCoords first_colliding_block; SubtlCodedCoords second_colliding_block; diff --git a/src/bflib_datetm.cpp b/src/bflib_datetm.cpp index 32d0b32bfc..6cc5afabc5 100644 --- a/src/bflib_datetm.cpp +++ b/src/bflib_datetm.cpp @@ -55,7 +55,7 @@ int debug_display_frametime = 0; void initial_time_point() { initialized_time_point = TimeNow; - game.process_turn_time = 1.0; // Begin initial turn as soon as possible (like original game) + process_turn_time = 1.0; // Begin initial turn as soon as possible (like original game) } long double get_time_tick_ns() diff --git a/src/config_compp.h b/src/config_compp.h index ac2fef9c8b..0c02010e86 100644 --- a/src/config_compp.h +++ b/src/config_compp.h @@ -45,12 +45,12 @@ extern "C" { struct ComputerProcess { char name[COMMAND_WORD_LEN]; char mnemonic[COMMAND_WORD_LEN]; - long priority; + int32_t priority; // Signed process config values - long process_configuration_value_2; - long process_configuration_value_3; - long process_configuration_value_4; /**< room kind or amount of creatures or gameturn or count of slabs */ - long process_configuration_value_5; + int32_t process_configuration_value_2; + int32_t process_configuration_value_3; + int32_t process_configuration_value_4; /**< room kind or amount of creatures or gameturn or count of slabs */ + int32_t process_configuration_value_5; FuncIdx func_check; FuncIdx func_setup; FuncIdx func_task; @@ -58,25 +58,25 @@ struct ComputerProcess { FuncIdx func_pause; unsigned char parent; // Unsigned process parameters storage (stores gameturns) - unsigned long process_parameter_1; - unsigned long process_parameter_2; - unsigned long process_parameter_3; - unsigned long last_run_turn; + uint32_t process_parameter_1; + uint32_t process_parameter_2; + uint32_t process_parameter_3; + uint32_t last_run_turn; // Signed process parameters storage - long process_parameter_5; - unsigned long flags; /**< Values from ComProc_* enumeration. */ + int32_t process_parameter_5; + uint32_t flags; /**< Values from ComProc_* enumeration. */ }; struct ComputerCheck { char name[COMMAND_WORD_LEN]; char mnemonic[COMMAND_WORD_LEN]; - unsigned long flags; /**< Values from ComChk_* enumeration. */ - long turns_interval; + uint32_t flags; /**< Values from ComChk_* enumeration. */ + int32_t turns_interval; FuncIdx func; - long primary_parameter; - long secondary_parameter; - long tertiary_parameter; - long last_run_turn; + int32_t primary_parameter; + int32_t secondary_parameter; + int32_t tertiary_parameter; + int32_t last_run_turn; }; struct ComputerEvent { @@ -98,12 +98,12 @@ struct ComputerType { char name[COMMAND_WORD_LEN]; short tooltip_stridx; short sprite_idx; - long dig_stack_size; - long processes_time; - long click_rate; - long max_room_build_tasks; - long turn_begin; - long sim_before_dig; + int32_t dig_stack_size; + int32_t processes_time; + int32_t click_rate; + int32_t max_room_build_tasks; + int32_t turn_begin; + int32_t sim_before_dig; GameTurnDelta drop_delay; unsigned char processes[COMPUTER_PROCESSES_COUNT]; unsigned char checks[COMPUTER_CHECKS_COUNT]; @@ -119,9 +119,9 @@ struct ComputerPlayerConfig { struct ComputerEvent event_types[COMPUTER_EVENTS_TYPES_COUNT]; int32_t computers_count; struct ComputerType computer_types[COMPUTER_MODELS_COUNT]; - long skirmish_first; - long skirmish_last; - long player_assist_default; + int32_t skirmish_first; + int32_t skirmish_last; + int32_t player_assist_default; unsigned char computer_assist_types[COMPUTER_ASSIST_TYPES_COUNT]; }; diff --git a/src/config_creature.h b/src/config_creature.h index 994e674254..9aaf4714fe 100644 --- a/src/config_creature.h +++ b/src/config_creature.h @@ -242,7 +242,7 @@ struct CreatureJobConfig { CrtrStateId initial_crstate; /** The state creature should back to after job is interrupted. */ CrtrStateId continue_crstate; - unsigned long job_flags; + uint32_t job_flags; }; struct CreatureAngerJobConfig { @@ -251,8 +251,8 @@ struct CreatureAngerJobConfig { struct CreatureModelConfig { char name[COMMAND_WORD_LEN]; - long namestr_idx; - unsigned long model_flags; + int32_t namestr_idx; + uint32_t model_flags; unsigned short job_primary; unsigned short job_secondary; unsigned short jobs_not_do; @@ -280,7 +280,7 @@ struct CreatureModelConfig { short scavenger_cost; short scavenge_require; unsigned char scavenge_value; - unsigned long to_level[CREATURE_MAX_LEVEL]; + uint32_t to_level[CREATURE_MAX_LEVEL]; unsigned char base_speed; ThingModel grow_up; CrtrExpLevel grow_up_level; diff --git a/src/config_magic.h b/src/config_magic.h index cd599c149d..ed9ad2bbea 100644 --- a/src/config_magic.h +++ b/src/config_magic.h @@ -319,10 +319,11 @@ typedef unsigned char (*Expand_Check_Func)(void); /** * Configuration parameters for powers. */ +#pragma pack(1) struct PowerConfigStats { char code_name[COMMAND_WORD_LEN]; - ThingModel artifact_model; uint64_t can_cast_flags; + ThingModel artifact_model; uint32_t config_flags; unsigned char overcharge_check_idx; uint32_t work_state; @@ -347,6 +348,7 @@ struct PowerConfigStats { GameTurnDelta duration; int32_t strength[MAGIC_OVERCHARGE_LEVELS+1]; }; +#pragma pack() /** * Configuration parameters for specials. diff --git a/src/config_slabsets.h b/src/config_slabsets.h index 698dd4f292..81f144118c 100644 --- a/src/config_slabsets.h +++ b/src/config_slabsets.h @@ -33,7 +33,7 @@ extern const struct ConfigFileData keeper_slabset_file_data; extern const struct ConfigFileData keeper_columns_file_data; struct ColumnConfig { - long columns_count; + int32_t columns_count; struct Column cols[COLUMNS_COUNT]; }; diff --git a/src/config_trapdoor.h b/src/config_trapdoor.h index 6dff8c7709..15a1b93d7e 100644 --- a/src/config_trapdoor.h +++ b/src/config_trapdoor.h @@ -37,12 +37,12 @@ struct DoorConfigStats { char code_name[COMMAND_WORD_LEN]; TextStringId name_stridx; TextStringId tooltip_stridx; - long bigsym_sprite_idx; - long medsym_sprite_idx; - long pointer_sprite_idx; - long panel_tab_idx; + int32_t bigsym_sprite_idx; + int32_t medsym_sprite_idx; + int32_t pointer_sprite_idx; + int32_t panel_tab_idx; unsigned char manufct_level; - unsigned long manufct_required; + uint32_t manufct_required; HitPoints health; unsigned short slbkind[2]; unsigned short open_speed; @@ -65,12 +65,12 @@ struct TrapConfigStats { char code_name[COMMAND_WORD_LEN]; TextStringId name_stridx; TextStringId tooltip_stridx; - long bigsym_sprite_idx; - long medsym_sprite_idx; - long pointer_sprite_idx; - long panel_tab_idx; + int32_t bigsym_sprite_idx; + int32_t medsym_sprite_idx; + int32_t pointer_sprite_idx; + int32_t panel_tab_idx; unsigned char manufct_level; - unsigned long manufct_required; + uint32_t manufct_required; int shots; GameTurnDelta shots_delay; unsigned short initial_delay; // Trap is placed on reload phase, value in game turns. @@ -94,13 +94,13 @@ struct TrapConfigStats { EffectOrEffElModel destroyed_effect; short size_xy; short size_z; - unsigned long sprite_anim_idx; - unsigned long attack_sprite_anim_idx; - unsigned long recharge_sprite_anim_idx; - unsigned long sprite_size_max; - unsigned long anim_speed; - unsigned long attack_anim_speed; - unsigned long recharge_anim_speed; + uint32_t sprite_anim_idx; + uint32_t attack_sprite_anim_idx; + uint32_t recharge_sprite_anim_idx; + uint32_t sprite_size_max; + uint32_t anim_speed; + uint32_t attack_anim_speed; + uint32_t recharge_anim_speed; unsigned char unanimated; unsigned char unshaded; unsigned char random_start_frame; diff --git a/src/console_cmd.c b/src/console_cmd.c index bfd1541d24..0022d2a625 100644 --- a/src/console_cmd.c +++ b/src/console_cmd.c @@ -142,7 +142,7 @@ static long cmd_comp_procs_update(struct GuiBox *gbox, struct GuiBoxOption *gopt if (cproc != NULL) { char *label = (char*)goptn[i].label; - sprintf(label, "%02lx", cproc->flags); + sprintf(label, "%02" PRIx32, cproc->flags); label[2] = ' '; } } diff --git a/src/creature_battle.h b/src/creature_battle.h index 3717350748..9de56e841e 100644 --- a/src/creature_battle.h +++ b/src/creature_battle.h @@ -36,7 +36,7 @@ struct Thing; struct PlayerInfo; struct CreatureBattle { - unsigned long fighters_num; + uint32_t fighters_num; unsigned short first_creatr; unsigned short last_creatr; }; diff --git a/src/creature_control.h b/src/creature_control.h index 3b0c18dcaa..6b043e9101 100644 --- a/src/creature_control.h +++ b/src/creature_control.h @@ -416,11 +416,6 @@ struct CreatureControl { GameTurnDelta hand_blocked_turns; }; -struct Persons { - struct CreatureControl *cctrl_lookup[CREATURES_COUNT]; - struct CreatureControl *cctrl_end; -}; - struct CreatureSound { int32_t index; int16_t count; diff --git a/src/creature_groups.h b/src/creature_groups.h index 7d57b98a2d..78d3183bd7 100644 --- a/src/creature_groups.h +++ b/src/creature_groups.h @@ -71,7 +71,7 @@ struct PartyMember { unsigned char flags; ThingModel crtr_kind; unsigned char objectv; - long countdown; + int32_t countdown; CrtrExpLevel exp_level; unsigned short carried_gold; unsigned short is_active; @@ -81,7 +81,7 @@ struct PartyMember { struct Party { char prtname[100]; struct PartyMember members[GROUP_MEMBERS_COUNT]; - unsigned long members_num; + uint32_t members_num; }; #pragma pack() diff --git a/src/creature_instances.h b/src/creature_instances.h index 02673fb1af..111f7e96ec 100644 --- a/src/creature_instances.h +++ b/src/creature_instances.h @@ -98,12 +98,12 @@ typedef TbBool (*Creature_Target_Search_Func)(struct Thing *, CrInstance, ThingI struct InstanceInfo { TbBool instant; - long time; - long fp_time; - long action_time; - long fp_action_time; - long reset_time; - long fp_reset_time; + int32_t time; + int32_t fp_time; + int32_t action_time; + int32_t fp_action_time; + int32_t reset_time; + int32_t fp_reset_time; unsigned char graphics_idx; char postal_priority; short instance_property_flags; @@ -111,9 +111,9 @@ struct InstanceInfo { unsigned char primary_target; unsigned char func_idx; int32_t func_params[2]; - long range_min; - long range_max; - long symbol_spridx; + int32_t range_min; + int32_t range_max; + int32_t symbol_spridx; short tooltip_stridx; TbBool no_animation_loop; // Refer to creature_instances_validate_func_list diff --git a/src/dungeon_stats.h b/src/dungeon_stats.h index c3f0ebdd15..ce14c7810e 100644 --- a/src/dungeon_stats.h +++ b/src/dungeon_stats.h @@ -30,71 +30,71 @@ extern "C" { #pragma pack(1) struct LevelStats { - unsigned long things_researched; - unsigned long creatures_attracted; - unsigned long gold_mined; - unsigned long manufactured_doors; - unsigned long manufactured_traps; - unsigned long manufactured_items; - unsigned long start_time; - unsigned long end_time; - unsigned long creatures_trained; - unsigned long creatures_tortured; - unsigned long creatures_sacrificed; - unsigned long creatures_converted; - unsigned long creatures_summoned; - unsigned long num_slaps; - unsigned long num_caveins; - unsigned long bridges_built; - unsigned long rock_dug_out; - unsigned long salary_cost; - unsigned long flies_killed_by_spiders; - unsigned long territory_destroyed; - unsigned long territory_lost; - unsigned long rooms_constructed; - unsigned long traps_used; - unsigned long traps_armed; - unsigned long doors_used; - unsigned long keepers_destroyed; - unsigned long area_claimed; - unsigned long backs_stabbed; - unsigned long chickens_hatched; - unsigned long chickens_eaten; - unsigned long chickens_wasted; - unsigned long promises_broken; - unsigned long ghosts_raised; - unsigned long skeletons_raised; - unsigned long friendly_kills; - unsigned long lies_told; - unsigned long creatures_annoyed; - unsigned long graveyard_bodys; - unsigned long vamps_created; - unsigned long num_creatures; - unsigned long imps_deployed; - unsigned long battles_won; - unsigned long battles_lost; - unsigned long money; - unsigned long dngn_breached_count; - unsigned long doors_destroyed; - unsigned long rooms_destroyed; - unsigned long dungeon_area; - unsigned long ideas_researched; - unsigned long creatures_scavenged; - unsigned long creatures_from_sacrifice; - unsigned long spells_stolen; - unsigned long gold_pots_stolen; - unsigned long average_room_efficiency; - unsigned long player_rating; - unsigned long player_style; - unsigned long doors_unused; - unsigned long traps_unused; - unsigned long num_rooms; - unsigned long gameplay_time; - unsigned long num_entrances; - unsigned long hopes_dashed; - unsigned long allow_save_score; - unsigned long player_score; - unsigned long keeper_destroyed[PLAYERS_COUNT]; + uint32_t things_researched; + uint32_t creatures_attracted; + uint32_t gold_mined; + uint32_t manufactured_doors; + uint32_t manufactured_traps; + uint32_t manufactured_items; + uint32_t start_time; + uint32_t end_time; + uint32_t creatures_trained; + uint32_t creatures_tortured; + uint32_t creatures_sacrificed; + uint32_t creatures_converted; + uint32_t creatures_summoned; + uint32_t num_slaps; + uint32_t num_caveins; + uint32_t bridges_built; + uint32_t rock_dug_out; + uint32_t salary_cost; + uint32_t flies_killed_by_spiders; + uint32_t territory_destroyed; + uint32_t territory_lost; + uint32_t rooms_constructed; + uint32_t traps_used; + uint32_t traps_armed; + uint32_t doors_used; + uint32_t keepers_destroyed; + uint32_t area_claimed; + uint32_t backs_stabbed; + uint32_t chickens_hatched; + uint32_t chickens_eaten; + uint32_t chickens_wasted; + uint32_t promises_broken; + uint32_t ghosts_raised; + uint32_t skeletons_raised; + uint32_t friendly_kills; + uint32_t lies_told; + uint32_t creatures_annoyed; + uint32_t graveyard_bodys; + uint32_t vamps_created; + uint32_t num_creatures; + uint32_t imps_deployed; + uint32_t battles_won; + uint32_t battles_lost; + uint32_t money; + uint32_t dngn_breached_count; + uint32_t doors_destroyed; + uint32_t rooms_destroyed; + uint32_t dungeon_area; + uint32_t ideas_researched; + uint32_t creatures_scavenged; + uint32_t creatures_from_sacrifice; + uint32_t spells_stolen; + uint32_t gold_pots_stolen; + uint32_t average_room_efficiency; + uint32_t player_rating; + uint32_t player_style; + uint32_t doors_unused; + uint32_t traps_unused; + uint32_t num_rooms; + uint32_t gameplay_time; + uint32_t num_entrances; + uint32_t hopes_dashed; + uint32_t allow_save_score; + uint32_t player_score; + uint32_t keeper_destroyed[PLAYERS_COUNT]; }; #pragma pack() diff --git a/src/engine_camera.h b/src/engine_camera.h index 360359da74..a8b62ee2ca 100644 --- a/src/engine_camera.h +++ b/src/engine_camera.h @@ -59,8 +59,8 @@ enum CameraIndexValues { }; struct MinMax { // sizeof = 8 - long min; - long max; + int32_t min; + int32_t max; }; struct ComponentVector { @@ -79,9 +79,9 @@ struct Camera { int zoom; int inertia_rotation; TbBool in_active_movement_rotation; - long inertia_x; + int32_t inertia_x; TbBool in_active_movement_x; - long inertia_y; + int32_t inertia_y; TbBool in_active_movement_y; }; diff --git a/src/frontmenu_ingame_map.c b/src/frontmenu_ingame_map.c index cf519c996b..5667a05b56 100644 --- a/src/frontmenu_ingame_map.c +++ b/src/frontmenu_ingame_map.c @@ -160,7 +160,7 @@ void draw_call_to_arms_circle(unsigned char owner, long x1, long y1, long x2, lo long long cscale; float circle_time; if ((game.operation_flags & GOF_Paused) == 0) { - circle_time = ((game.play_gameturn + owner) & 7) + game.process_turn_time; + circle_time = ((game.play_gameturn + owner) & 7) + process_turn_time; } else { circle_time = ((game.play_gameturn + owner) & 7); } diff --git a/src/game_legacy.h b/src/game_legacy.h index edcd8ba73f..16c053e95c 100644 --- a/src/game_legacy.h +++ b/src/game_legacy.h @@ -252,7 +252,6 @@ struct Game { unsigned char packet_load_enable; char packet_fname[150]; char packet_fopened; - TbFileHandle packet_save_fp; unsigned int packet_file_pos; struct PacketSaveHead packet_save_head; uint32_t turns_stored; @@ -384,7 +383,6 @@ struct Game { unsigned char slab_ext_data[MAX_TILES_X*MAX_TILES_Y]; unsigned char slab_ext_data_initial[MAX_TILES_X*MAX_TILES_Y]; float delta_time; - long double process_turn_time; float flash_button_time; MapSubtlCoord map_subtiles_x; MapSubtlCoord map_subtiles_y; @@ -412,6 +410,8 @@ extern int32_t game_num_fps_draw_current; extern int32_t game_num_fps_draw_main; extern int32_t game_num_fps_draw_secondary; +extern long double process_turn_time; + /******************************************************************************/ #ifdef __cplusplus } diff --git a/src/game_merge.h b/src/game_merge.h index 63c39a031a..45da85c60e 100644 --- a/src/game_merge.h +++ b/src/game_merge.h @@ -118,10 +118,10 @@ enum GameFlags2 { */ struct TextScrollWindow { char text[MESSAGE_TEXT_LEN]; - long start_y; + int32_t start_y; char action; - long text_height; - long window_height; + int32_t text_height; + int32_t window_height; }; /** @@ -131,7 +131,7 @@ struct TextScrollWindow { struct IntralevelData { unsigned char bonuses_found[BONUS_LEVEL_STORAGE_COUNT]; struct CreatureStorage transferred_creatures[PLAYERS_COUNT][TRANSFER_CREATURE_STORAGE_COUNT]; - long campaign_flags[PLAYERS_FOR_CAMPAIGN_FLAGS][CAMPAIGN_FLAGS_PER_PLAYER]; + int32_t campaign_flags[PLAYERS_FOR_CAMPAIGN_FLAGS][CAMPAIGN_FLAGS_PER_PLAYER]; char next_level; }; diff --git a/src/game_saves.c b/src/game_saves.c index 8da8e600d4..5f271ae82f 100644 --- a/src/game_saves.c +++ b/src/game_saves.c @@ -416,11 +416,14 @@ TbBool load_game(long slot_num) clear_flag(player->additional_flags, PlaAF_FreezePaletteIsActive); player->palette_fade_step_pain = 0; player->palette_fade_step_possession = 0; - player->lens_palette = 0; + set_player_lens_palette(player, NULL); // Reinitialize lens first (restores lens_palette pointer from config) reinitialise_eye_lens(game.applied_lens_type); // Apply the appropriate palette (lens palette if active, otherwise engine default) - PaletteSetPlayerPalette(player, player->lens_palette ? player->lens_palette : engine_palette); + { + unsigned char* lens_palette = get_player_lens_palette(player); + PaletteSetPlayerPalette(player, lens_palette ? lens_palette : engine_palette); + } init_local_cameras(player); // Update the lights system state light_import_system_state(&game.lightst); diff --git a/src/gui_msgs.h b/src/gui_msgs.h index df58fef97b..3e84289977 100644 --- a/src/gui_msgs.h +++ b/src/gui_msgs.h @@ -43,16 +43,10 @@ enum MessageTypes { /******************************************************************************/ #pragma pack(1) -struct GuiMessage_OLD { // sizeof = 0x45 (69) - char text[64]; -PlayerNumber plyr_idx; -unsigned long expiration_turn; -}; - struct GuiMessage { char text[64]; PlayerNumber plyr_idx; -unsigned long expiration_turn; +GameTurn expiration_turn; PlayerNumber target_idx; char type; }; diff --git a/src/kfx/lense/PaletteEffect.cpp b/src/kfx/lense/PaletteEffect.cpp index 14db50e5e0..7dbbafc616 100644 --- a/src/kfx/lense/PaletteEffect.cpp +++ b/src/kfx/lense/PaletteEffect.cpp @@ -47,7 +47,7 @@ TbBool PaletteEffect::Setup(long lens_idx) struct PlayerInfo* player = get_my_player(); // Set lens_palette first, then call PaletteSetPlayerPalette to apply it - player->lens_palette = cfg->palette; + set_player_lens_palette(player, cfg->palette); PaletteSetPlayerPalette(player, cfg->palette); m_current_lens = lens_idx; @@ -59,7 +59,7 @@ void PaletteEffect::Cleanup() { if (m_current_lens >= 0) { struct PlayerInfo* player = get_my_player(); - player->lens_palette = NULL; + set_player_lens_palette(player, NULL); PaletteSetPlayerPalette(player, engine_palette); m_current_lens = -1; SYNCDBG(9, "Palette effect cleaned up"); diff --git a/src/light_data.c b/src/light_data.c index 81ed18825b..598201227b 100644 --- a/src/light_data.c +++ b/src/light_data.c @@ -443,7 +443,7 @@ void light_remove_light_from_list(struct Light *lgt, struct StructureList *list) { if ( list->count == 0 ) { - ERRORLOG("List %lu has no structures", list->index); + ERRORLOG("List %u has no structures", list->index); return; } TbBool Removed = false; diff --git a/src/lvl_script.c b/src/lvl_script.c index 47d4e3149b..0ed6bac70e 100644 --- a/src/lvl_script.c +++ b/src/lvl_script.c @@ -601,9 +601,9 @@ static TbBool process_subfunc(char **line, struct ScriptLine *scline, const stru strcpy(scline->tp[dst], "0"); break; } - SCRPTLOG("Function \"%s\" returned value \"%ld\"", funcmd_desc->textptr, + SCRPTLOG("Function \"%s\" returned value \"%d\"", funcmd_desc->textptr, intralvl.campaign_flags[player_id][flag_id]); - snprintf(scline->tp[dst], MAX_TEXT_LENGTH, "%ld", intralvl.campaign_flags[player_id][flag_id]); + snprintf(scline->tp[dst], MAX_TEXT_LENGTH, "%d", intralvl.campaign_flags[player_id][flag_id]); break; } default: @@ -1069,7 +1069,7 @@ void process_check_new_tunneller_parties(void) } else { - SCRIPTDBG(6, "Adding tunneler, heading %lu", tn_trig->heading); + SCRIPTDBG(6, "Adding tunneler, heading %u", tn_trig->heading); script_process_new_tunneler(tn_trig->plyr_idx, tn_trig->location, tn_trig->heading, tn_trig->exp_level, tn_trig->carried_gold); } diff --git a/src/lvl_script.h b/src/lvl_script.h index e44aca2e71..285d7129c1 100644 --- a/src/lvl_script.h +++ b/src/lvl_script.h @@ -74,10 +74,10 @@ struct ScriptContext struct TunnellerTrigger { unsigned char flags; unsigned short condit_idx; - unsigned char plyr_idx; - unsigned long location; - unsigned long heading; // originally was 'target' - long carried_gold; + PlayerNumber plyr_idx; + TbMapLocation location; + TbMapLocation heading; // originally was 'target' + GoldAmount carried_gold; CrtrExpLevel exp_level; char party_id; }; @@ -88,17 +88,17 @@ struct PartyTrigger { char creatr_id; union { - unsigned char plyr_idx; + PlayerNumber plyr_idx; char party_id; // for add_to_party }; union { TbMapLocation location; - unsigned long countdown; + uint32_t countdown; }; char spawn_type; CrtrExpLevel exp_level; - unsigned short carried_gold; + GoldAmount carried_gold; union { unsigned short ncopies; @@ -124,9 +124,9 @@ struct ScriptValue { char chars[32]; short shorts[16]; unsigned short ushorts[16]; - long longs[8]; + int32_t longs[8]; long long longlongs[4]; - unsigned long ulongs[8]; + uint32_t ulongs[8]; unsigned long long ulonglongs[4]; }; }; @@ -138,7 +138,7 @@ struct Condition { unsigned char variabl_type; unsigned short variabl_idx; unsigned char operation; - unsigned long rvalue; + uint32_t rvalue; unsigned char plyr_range_right; unsigned char variabl_type_right; unsigned short variabl_idx_right; @@ -167,23 +167,23 @@ struct ScriptFxLine struct LevelScript { struct TunnellerTrigger tunneller_triggers[TUNNELLER_TRIGGERS_COUNT]; - unsigned long tunneller_triggers_num; + uint32_t tunneller_triggers_num; struct PartyTrigger party_triggers[PARTY_TRIGGERS_COUNT]; - unsigned long party_triggers_num; + uint32_t party_triggers_num; struct ScriptValue values[SCRIPT_VALUES_COUNT]; - unsigned long values_num; + uint32_t values_num; struct Condition conditions[CONDITIONS_COUNT]; - unsigned long conditions_num; + uint32_t conditions_num; struct Party creature_partys[CREATURE_PARTYS_COUNT]; - unsigned long creature_partys_num; + uint32_t creature_partys_num; unsigned short win_conditions[WIN_CONDITIONS_COUNT]; - unsigned long win_conditions_num; + uint32_t win_conditions_num; unsigned short lose_conditions[WIN_CONDITIONS_COUNT]; - unsigned long lose_conditions_num; + uint32_t lose_conditions_num; // Store strings used at level here char strings[8192]; - long next_string_offset; + int32_t next_string_offset; }; /******************************************************************************/ diff --git a/src/lvl_script_commands.c b/src/lvl_script_commands.c index 9e55d76658..bd8bc5e136 100644 --- a/src/lvl_script_commands.c +++ b/src/lvl_script_commands.c @@ -1564,7 +1564,7 @@ static void create_effect_process(struct ScriptContext *context) struct Coord3d pos; if (!get_coords_at_location(&pos, context->value->ulongs[1],true)) { - SCRPTWRNLOG("Could not find location %lu to create effect", context->value->ulongs[1]); + SCRPTWRNLOG("Could not find location %u to create effect", context->value->ulongs[1]); return; } script_create_effect(&pos,context->value->shorts[0],context->value->longs[2]); diff --git a/src/main.cpp b/src/main.cpp index bf0d01eb0f..e08c11c7f8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -200,7 +200,7 @@ unsigned char zoom_to_heart_palette[768]; unsigned char EngineSpriteDrawUsingAlpha; unsigned char temp_pal[768]; unsigned char *lightning_palette; - +long double process_turn_time; #ifdef __cplusplus extern "C" { @@ -1549,8 +1549,8 @@ void reinit_level_after_load(void) SYNCDBG(6,"Starting"); // Reinit structures from within the game player = get_my_player(); - player->lens_palette = 0; - player->main_palette = engine_palette; + set_player_lens_palette(player, NULL); + set_player_main_palette(player, engine_palette); init_navigation(); reinit_packets_after_load(); game.easter_eggs_enabled = start_params.easter_egg; @@ -1818,9 +1818,10 @@ void PaletteSetPlayerPalette(struct PlayerInfo *player, unsigned char *pal) { player->additional_flags &= ~PlaAF_FreezePaletteIsActive; // flag Freeze palette is not active } - if ( (player->lens_palette == 0) || ((pal != player->main_palette) && (pal == player->lens_palette)) ) + unsigned char *lens_palette = get_player_lens_palette(player); + if ( (lens_palette == 0) || ((pal != get_player_main_palette(player)) && (pal == lens_palette)) ) { - player->main_palette = pal; + set_player_main_palette(player, pal); player->palette_fade_step_pain = 0; player->palette_fade_step_possession = 0; if (is_my_player(player)) @@ -3392,10 +3393,10 @@ void gameplay_loop_logic() } if (is_feature_on(Ft_DeltaTime) == true) { - if (game.process_turn_time < 1.0) { + if (process_turn_time < 1.0) { return; } - game.process_turn_time -= 1.0; + process_turn_time -= 1.0; } frametime_start_measurement(Frametime_Logic); @@ -3466,7 +3467,7 @@ void gameplay_loop_draw() extern "C" void network_yield_draw_gameplay() { game.delta_time = get_delta_time(); - game.process_turn_time += game.delta_time; + process_turn_time += game.delta_time; gameplay_loop_draw(); } @@ -3497,11 +3498,11 @@ void gameplay_loop_timestep() frametime_start_measurement(Frametime_Sleep); if (is_feature_on(Ft_DeltaTime) == true) { game.delta_time = get_delta_time(); - game.process_turn_time += game.delta_time; + process_turn_time += game.delta_time; } else { // Set to 1 so that these variables don't affect anything. (if something is multiplied by 1 it doesn't change) game.delta_time = 1; - game.process_turn_time = 1; + process_turn_time = 1; // Make delay if the machine is too fast if ( (!game.packet_load_enable) || (game.turns_fastforward == 0) ) { keeper_wait_for_next_turn(); diff --git a/src/map_columns.h b/src/map_columns.h index d833de01e5..5a29dfd393 100644 --- a/src/map_columns.h +++ b/src/map_columns.h @@ -43,11 +43,6 @@ struct Column { // sizeof=0x18 unsigned short cubes[COLUMN_STACK_HEIGHT]; }; -struct Columns { - struct Column *lookup[COLUMNS_COUNT]; - struct Column *end; -}; - enum ColumnFlags { CLF_ACTIVE = 0x01, CLF_CEILING_MASK = 0x0E, // Height of ceiling cube layer. diff --git a/src/map_events.h b/src/map_events.h index dfa2f6bf87..d141a8766d 100644 --- a/src/map_events.h +++ b/src/map_events.h @@ -91,7 +91,7 @@ struct Event { unsigned char kind; int32_t target; /** Button lifespan, decreased over time. When reaches 0, the button disappears. */ - unsigned long lifespan_turns; + uint32_t lifespan_turns; }; struct Bookmark { diff --git a/src/packets_misc.c b/src/packets_misc.c index 6a085e6d24..ce0d453484 100644 --- a/src/packets_misc.c +++ b/src/packets_misc.c @@ -40,6 +40,7 @@ extern "C" { struct Packet bad_packet; unsigned long initial_replay_seed; unsigned long last_pause_toggle_time = 0; +static TbFileHandle packet_save_fp = NULL; extern TbBool IMPRISON_BUTTON_DEFAULT; extern TbBool FLEE_BUTTON_DEFAULT; extern TbBool get_skip_heart_zoom_feature(void); @@ -138,24 +139,24 @@ TbBool open_packet_file_for_load(char *fname, struct CatalogueEntry *centry) { memset(centry, 0, sizeof(struct CatalogueEntry)); strcpy(game.packet_fname, fname); - game.packet_save_fp = LbFileOpen(game.packet_fname, Lb_FILE_MODE_READ_ONLY); - if (!game.packet_save_fp) + packet_save_fp = LbFileOpen(game.packet_fname, Lb_FILE_MODE_READ_ONLY); + if (!packet_save_fp) { ERRORLOG("Cannot open keeper packet file for load"); game.packet_fopened = 0; return false; } - int i = load_game_chunks(game.packet_save_fp, centry); + int i = load_game_chunks(packet_save_fp, centry); if ((i != GLoad_PacketStart) && (i != GLoad_PacketContinue)) { - LbFileClose(game.packet_save_fp); - game.packet_save_fp = NULL; + LbFileClose(packet_save_fp); + packet_save_fp = NULL; game.packet_fopened = 0; WARNMSG("Couldn't correctly read packet file \"%s\" header.",fname); return false; } - game.packet_file_pos = LbFilePosition(game.packet_save_fp); - game.turns_stored = (LbFileLengthHandle(game.packet_save_fp) - game.packet_file_pos) / PACKET_TURN_SIZE; + game.packet_file_pos = LbFilePosition(packet_save_fp); + game.turns_stored = (LbFileLengthHandle(packet_save_fp) - game.packet_file_pos) / PACKET_TURN_SIZE; if ((game.packet_checksum_verify) && (!game.packet_save_head.chksum_available)) { WARNMSG("PacketSave checksum not available, checking disabled."); @@ -221,24 +222,24 @@ short save_packets(void) chksum = compute_replay_integrity(); else chksum = 0; - LbFileSeek(game.packet_save_fp, 0, Lb_FILE_SEEK_END); + LbFileSeek(packet_save_fp, 0, Lb_FILE_SEEK_END); // Prepare data in the buffer for (int i = 0; i < NET_PLAYERS_COUNT; i++) memcpy(&pckt_buf[i*sizeof(struct Packet)], &game.packets[i], sizeof(struct Packet)); memcpy(&pckt_buf[NET_PLAYERS_COUNT*sizeof(struct Packet)], &chksum, sizeof(TbBigChecksum)); // Write buffer into file - if (LbFileWrite(game.packet_save_fp, &pckt_buf, turn_data_size) != turn_data_size) + if (LbFileWrite(packet_save_fp, &pckt_buf, turn_data_size) != turn_data_size) { ERRORLOG("Packet file write error"); } for (int i = 0; i < NET_PLAYERS_COUNT; i++) { if (game.packets[i].action == PckA_PlyrMsgEnd) { - if (LbFileWrite(game.packet_save_fp, get_player(i)->mp_pending_message, PLAYER_MP_MESSAGE_LEN) != PLAYER_MP_MESSAGE_LEN) { + if (LbFileWrite(packet_save_fp, get_player(i)->mp_pending_message, PLAYER_MP_MESSAGE_LEN) != PLAYER_MP_MESSAGE_LEN) { ERRORLOG("Chat message file write error"); } } } - if ( !LbFileFlush(game.packet_save_fp) ) + if ( !LbFileFlush(packet_save_fp) ) { ERRORLOG("Unable to flush PacketSave File"); return false; @@ -250,9 +251,9 @@ void close_packet_file(void) { if ( game.packet_fopened ) { - LbFileClose(game.packet_save_fp); + LbFileClose(packet_save_fp); game.packet_fopened = 0; - game.packet_save_fp = NULL; + packet_save_fp = NULL; } } @@ -284,7 +285,7 @@ TbBool reinit_packets_after_load(void) { game.packet_save_enable = false; game.packet_load_enable = false; - game.packet_save_fp = NULL; + packet_save_fp = NULL; game.packet_fopened = 0; return true; } @@ -321,8 +322,8 @@ TbBool open_new_packet_file_for_save(void) } } LbFileDelete(game.packet_fname); - game.packet_save_fp = LbFileOpen(game.packet_fname, Lb_FILE_MODE_NEW); - if (!game.packet_save_fp) + packet_save_fp = LbFileOpen(game.packet_fname, Lb_FILE_MODE_NEW); + if (!packet_save_fp) { ERRORLOG("Cannot open keeper packet file for save, \"%s\".",game.packet_fname); game.packet_fopened = 0; @@ -330,12 +331,12 @@ TbBool open_new_packet_file_for_save(void) } struct CatalogueEntry centry; fill_game_catalogue_entry(¢ry, "Packet file"); - if (!save_packet_chunks(game.packet_save_fp,¢ry)) + if (!save_packet_chunks(packet_save_fp,¢ry)) { WARNMSG("Cannot write to packet file, \"%s\".",game.packet_fname); - LbFileClose(game.packet_save_fp); + LbFileClose(packet_save_fp); game.packet_fopened = 0; - game.packet_save_fp = NULL; + packet_save_fp = NULL; return false; } game.packet_fopened = 1; @@ -354,7 +355,7 @@ void load_packets_for_turn(GameTurn nturn) return; } - if (LbFileRead(game.packet_save_fp, &pckt_buf, turn_data_size) == -1) + if (LbFileRead(packet_save_fp, &pckt_buf, turn_data_size) == -1) { ERRORDBG(18,"Cannot read turn data from Packet File"); erstat_inc(ESE_CantReadPackets); @@ -365,7 +366,7 @@ void load_packets_for_turn(GameTurn nturn) memcpy(&game.packets[i], &pckt_buf[i * sizeof(struct Packet)], sizeof(struct Packet)); for (long i = 0; i < NET_PLAYERS_COUNT; i++) { if (game.packets[i].action == PckA_PlyrMsgEnd) { - if (LbFileRead(game.packet_save_fp, get_player(i)->mp_pending_message, PLAYER_MP_MESSAGE_LEN) == PLAYER_MP_MESSAGE_LEN) { + if (LbFileRead(packet_save_fp, get_player(i)->mp_pending_message, PLAYER_MP_MESSAGE_LEN) == PLAYER_MP_MESSAGE_LEN) { game.packet_file_pos += PLAYER_MP_MESSAGE_LEN; } else { ERRORDBG(18,"Cannot read chat message from Packet File"); diff --git a/src/player_compchecks.c b/src/player_compchecks.c index 6243e1d9df..9f8194fcd4 100644 --- a/src/player_compchecks.c +++ b/src/player_compchecks.c @@ -140,7 +140,7 @@ struct ExpandRooms expand_rooms[] = { long computer_checks_hates(struct Computer2 *comp, struct ComputerCheck * check) { SYNCDBG(8,"Starting"); - struct Dungeon* compdngn = comp->dungeon; + struct Dungeon* compdngn = computer_dungeon(comp); // Reference values for checking hate int cdngn_creatrs = count_creatures_in_dungeon(compdngn); int cdngn_spdiggrs = count_diggers_in_dungeon(compdngn); @@ -249,7 +249,7 @@ int calculate_number_of_creatures_to_move(struct Dungeon *dungeon, int percent_t long computer_check_move_creatures_to_best_room(struct Computer2 *comp, struct ComputerCheck * check) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); SYNCDBG(8,"Starting for player %d",(int)dungeon->owner); int num_to_move = calculate_number_of_creatures_to_move(dungeon, check->primary_parameter); @@ -277,7 +277,7 @@ long computer_check_move_creatures_to_best_room(struct Computer2 *comp, struct C long computer_check_move_creatures_to_room(struct Computer2 *comp, struct ComputerCheck * check) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); SYNCDBG(8,"Checking player %d for move to %s", (int)dungeon->owner, room_code_name(check->secondary_parameter)); int num_to_move = calculate_number_of_creatures_to_move(dungeon, check->primary_parameter); if (num_to_move <= 0) { @@ -445,7 +445,7 @@ long player_list_creature_filter_best_for_sacrifice(const struct Thing *thing, M static struct Thing *find_creature_for_sacrifice(struct Computer2 *comp, ThingModel crmodel) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); struct CompoundTngFilterParam param; param.plyr_idx = dungeon->owner; @@ -475,7 +475,7 @@ static struct Thing *find_creature_for_sacrifice(struct Computer2 *comp, ThingMo long computer_check_sacrifice_for_cheap_diggers(struct Computer2 *comp, struct ComputerCheck * check) { SYNCDBG(8,"Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (dungeon_invalid(dungeon) || !player_has_heart(dungeon->owner)) { SYNCDBG(7,"Computer players %d dungeon in invalid or has no heart",(int)dungeon->owner); return CTaskRet_Unk4; @@ -524,7 +524,7 @@ long computer_check_no_imps(struct Computer2 *comp, struct ComputerCheck * check if (computer_check_sacrifice_for_cheap_diggers(comp, check) == CTaskRet_Unk1) { return CTaskRet_Unk1; } - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (dungeon_invalid(dungeon) || !player_has_heart(dungeon->owner)) { SYNCDBG(7,"Computer players %d dungeon in invalid or has no heart",(int)dungeon->owner); return CTaskRet_Unk4; @@ -573,7 +573,7 @@ long computer_check_no_imps(struct Computer2 *comp, struct ComputerCheck * check if ((game.computer_chat_flags & CChat_TasksScarce) != 0) { struct PowerConfigStats* powerst = get_power_model_stats(PwrK_MKDIGGER); struct CreatureModelConfig* crconf = &game.conf.crtr_conf.model[get_players_special_digger_model(dungeon->owner)]; - message_add_fmt(MsgType_Player, comp->dungeon->owner, "My %s count is only %d, casting %s!",get_string(crconf->namestr_idx),(int)controlled_diggers,get_string(powerst->name_stridx)); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "My %s count is only %d, casting %s!",get_string(crconf->namestr_idx),(int)controlled_diggers,get_string(powerst->name_stridx)); } if (try_game_action(comp, dungeon->owner, GA_UseMkDigger, 0, stl_x, stl_y, 1, 1) > Lb_OK) { return CTaskRet_Unk1; @@ -586,7 +586,7 @@ long computer_check_no_imps(struct Computer2 *comp, struct ComputerCheck * check struct Thing * find_imp_for_pickup(struct Computer2 *comp, MapSubtlCoord stl_x, MapSubtlCoord stl_y) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); int pick1_dist = INT_MAX; int pick2_dist = INT_MAX; struct Thing* pick2_tng = INVALID_THING; @@ -649,7 +649,7 @@ struct Thing * find_imp_for_pickup(struct Computer2 *comp, MapSubtlCoord stl_x, long computer_check_for_pretty(struct Computer2 *comp, struct ComputerCheck * check) { SYNCDBG(8,"Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); MapSubtlCoord stl_x; MapSubtlCoord stl_y; if (!computer_able_to_use_power(comp, PwrK_HAND, 1, 1)) { @@ -688,7 +688,7 @@ struct Room *get_opponent_room(struct Computer2 *comp, PlayerNumber plyr_idx) if (dungeon_invalid(dungeon) || (game.conf.slab_conf.room_types_count < 1)) { return INVALID_ROOM; } - int n = opponent_room_kinds[PLAYER_RANDOM(comp->dungeon->owner, sizeof(opponent_room_kinds) / sizeof(opponent_room_kinds[0]))]; + int n = opponent_room_kinds[PLAYER_RANDOM(comp->dungeon_plyr_idx, sizeof(opponent_room_kinds) / sizeof(opponent_room_kinds[0]))]; for (int i = 0; i < game.conf.slab_conf.room_types_count; i++) { struct Room* room = room_get(dungeon->room_list_start[n]); @@ -702,14 +702,14 @@ struct Room *get_opponent_room(struct Computer2 *comp, PlayerNumber plyr_idx) struct Room *get_hated_room_for_quick_attack(struct Computer2 *comp) { - SYNCDBG(8,"Starting for player %d",(int)comp->dungeon->owner); + SYNCDBG(8,"Starting for player %d",(int)comp->dungeon_plyr_idx); struct THate hates[PLAYERS_COUNT]; get_opponent(comp, hates); // note that 'i' is not player index, player index is inside THate struct for (long i = 0; i < PLAYERS_COUNT; i++) { struct THate* hate = &hates[i]; - if (players_are_enemies(comp->dungeon->owner, hate->plyr_idx)) + if (players_are_enemies(comp->dungeon_plyr_idx, hate->plyr_idx)) { if (hate->pos_near != NULL) { @@ -732,7 +732,7 @@ struct Room *get_hated_room_for_quick_attack(struct Computer2 *comp) long computer_check_for_quick_attack(struct Computer2 *comp, struct ComputerCheck * check) { SYNCDBG(8,"Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); long attack_percentage = check->primary_parameter; long cta_duration = check->secondary_parameter; long min_creatures_to_attack = check->tertiary_parameter; @@ -773,7 +773,7 @@ long computer_check_for_quick_attack(struct Computer2 *comp, struct ComputerChec struct Thing *computer_check_creatures_in_room_for_accelerate(struct Computer2 *comp, struct Room *room) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); long i = room->creatures_list; unsigned long k = 0; while (i != 0) @@ -813,7 +813,7 @@ struct Thing *computer_check_creatures_in_room_for_accelerate(struct Computer2 * struct Thing *computer_check_creatures_in_room_for_flight(struct Computer2 *comp, struct Room *room) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); long i = room->creatures_list; unsigned long k = 0; while (i != 0) @@ -853,7 +853,7 @@ struct Thing *computer_check_creatures_in_room_for_flight(struct Computer2 *comp struct Thing *computer_check_creatures_in_room_for_vision(struct Computer2 *comp, struct Room *room) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); long i = room->creatures_list; unsigned long k = 0; while (i != 0) @@ -898,7 +898,7 @@ struct Thing *computer_check_creatures_in_dungeon_rooms_of_kind_for_accelerate(s ERRORLOG("Invalid room kind %d",(int)rkind); return INVALID_THING; } - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (dungeon_invalid(dungeon)) { ERRORLOG("Invalid computer players dungeon"); @@ -937,7 +937,7 @@ struct Thing *computer_check_creatures_in_dungeon_rooms_of_kind_for_flight(struc ERRORLOG("Invalid room kind %d",(int)rkind); return INVALID_THING; } - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (dungeon_invalid(dungeon)) { ERRORLOG("Invalid computer players dungeon"); @@ -976,7 +976,7 @@ struct Thing *computer_check_creatures_in_dungeon_rooms_of_kind_for_vision(struc ERRORLOG("Invalid room kind %d",(int)rkind); return INVALID_THING; } - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (dungeon_invalid(dungeon)) { ERRORLOG("Invalid computer players dungeon"); @@ -1020,7 +1020,7 @@ long computer_check_for_accelerate(struct Computer2 *comp, struct ComputerCheck } long n = check->primary_parameter % (sizeof(workers_in_rooms) / sizeof(workers_in_rooms[0])); if (n <= 0) - n = PLAYER_RANDOM(comp->dungeon->owner, sizeof(workers_in_rooms)/sizeof(workers_in_rooms[0])); + n = PLAYER_RANDOM(comp->dungeon_plyr_idx, sizeof(workers_in_rooms)/sizeof(workers_in_rooms[0])); for (long i = 0; i < sizeof(workers_in_rooms) / sizeof(workers_in_rooms[0]); i++) { struct Thing* thing = computer_check_creatures_in_dungeon_rooms_of_kind_for_accelerate(comp, workers_in_rooms[n]); @@ -1046,7 +1046,7 @@ long computer_check_for_flight(struct Computer2 *comp, struct ComputerCheck * ch } long n = check->primary_parameter % (sizeof(workers_in_rooms) / sizeof(workers_in_rooms[0])); if (n <= 0) - n = PLAYER_RANDOM(comp->dungeon->owner, sizeof(workers_in_rooms)/sizeof(workers_in_rooms[0])); + n = PLAYER_RANDOM(comp->dungeon_plyr_idx, sizeof(workers_in_rooms)/sizeof(workers_in_rooms[0])); for (long i = 0; i < sizeof(workers_in_rooms) / sizeof(workers_in_rooms[0]); i++) { struct Thing* thing = computer_check_creatures_in_dungeon_rooms_of_kind_for_flight(comp, workers_in_rooms[n]); @@ -1072,7 +1072,7 @@ long computer_check_for_vision(struct Computer2 *comp, struct ComputerCheck * ch } long n = check->primary_parameter % (sizeof(workers_in_rooms) / sizeof(workers_in_rooms[0])); if (n <= 0) - n = PLAYER_RANDOM(comp->dungeon->owner, sizeof(workers_in_rooms)/sizeof(workers_in_rooms[0])); + n = PLAYER_RANDOM(comp->dungeon_plyr_idx, sizeof(workers_in_rooms)/sizeof(workers_in_rooms[0])); for (long i = 0; i < sizeof(workers_in_rooms) / sizeof(workers_in_rooms[0]); i++) { struct Thing* thing = computer_check_creatures_in_dungeon_rooms_of_kind_for_vision(comp, workers_in_rooms[n]); @@ -1091,7 +1091,7 @@ long computer_check_slap_imps(struct Computer2 *comp, struct ComputerCheck * che SYNCDBG(8,"Starting"); long slap_percentage = check->primary_parameter; TbBool skip_imps_with_speed = check->secondary_parameter; - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (!is_power_available(dungeon->owner, PwrK_SLAP)) { return CTaskRet_Unk4; } @@ -1111,10 +1111,10 @@ long computer_check_enemy_entrances(struct Computer2 *comp, struct ComputerCheck long result = CTaskRet_Unk4; for (PlayerNumber plyr_idx = 0; plyr_idx < PLAYERS_COUNT; plyr_idx++) { - if (comp->dungeon->owner == plyr_idx) { + if (comp->dungeon_plyr_idx == plyr_idx) { continue; } - if (players_are_mutual_allies(comp->dungeon->owner, plyr_idx)) { + if (players_are_mutual_allies(comp->dungeon_plyr_idx, plyr_idx)) { continue; } struct Dungeon* dungeon = get_dungeon(plyr_idx); @@ -1223,7 +1223,7 @@ static TbBool find_place_to_put_door_around_room(const struct Room *room, struct long computer_check_for_place_door(struct Computer2 *comp, struct ComputerCheck * check) { SYNCDBG(8,"Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); for (ThingModel doorkind = game.conf.trapdoor_conf.door_types_count; doorkind > 1; doorkind--) { if (dungeon->mnfct_info.door_amount_stored[doorkind] <= 0) { @@ -1272,7 +1272,7 @@ long computer_check_for_place_door(struct Computer2 *comp, struct ComputerCheck long computer_check_neutral_places(struct Computer2 *comp, struct ComputerCheck * check) { SYNCDBG(8,"Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (dungeon_invalid(dungeon) || !player_has_heart(dungeon->owner)) { SYNCDBG(7,"Computer players %d dungeon in invalid or has no heart",(int)dungeon->owner); return CTaskRet_Unk4; @@ -1356,7 +1356,7 @@ int count_slabs_around_of_kind(MapSlabCoord slb_x, MapSlabCoord slb_y, SlabKind */ TbBool computer_check_for_expand_specific_room(struct Computer2 *comp, struct ComputerCheck * check, struct Room *room, MapSubtlCoord max_radius, long around_start) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (!is_room_available(dungeon->owner, room->kind)) { return false; } @@ -1411,7 +1411,7 @@ TbBool computer_check_for_expand_specific_room(struct Computer2 *comp, struct Co TbBool computer_check_for_expand_room_kind(struct Computer2 *comp, struct ComputerCheck * check, RoomKind rkind, long max_slabs, long around_start) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); { struct RoomConfigStats* roomst = get_room_kind_stats(rkind); // If we don't have money for the room - don't even try @@ -1454,7 +1454,7 @@ TbBool computer_check_for_expand_room_kind(struct Computer2 *comp, struct Comput long computer_check_for_expand_room(struct Computer2 *comp, struct ComputerCheck * check) { SYNCDBG(8,"Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (dungeon_invalid(dungeon) || !player_has_heart(dungeon->owner)) { SYNCDBG(7,"Computer players %d dungeon in invalid or has no heart",(int)dungeon->owner); return CTaskRet_Unk4; @@ -1486,8 +1486,8 @@ long computer_check_for_expand_room(struct Computer2 *comp, struct ComputerCheck long computer_check_prison_tendency(struct Computer2* comp, struct ComputerCheck* check) { SYNCDBG(8, "Starting"); - struct Dungeon* dungeon = comp->dungeon; - struct PlayerInfo* player = get_player(comp->dungeon->owner); + struct Dungeon* dungeon = computer_dungeon(comp); + struct PlayerInfo* player = get_player(comp->dungeon_plyr_idx); RoomRole rrole = get_room_role_for_job(Job_CAPTIVITY); int status = check->primary_parameter; diff --git a/src/player_compevents.c b/src/player_compevents.c index 2ab0c5cc24..862197d09f 100644 --- a/src/player_compevents.c +++ b/src/player_compevents.c @@ -167,12 +167,12 @@ long computer_event_battle(struct Computer2 *comp, struct ComputerEvent *cevent, { SYNCDBG(18,"Starting for %s",cevent->name); struct Coord3d pos; - if (!get_computer_drop_position_near_subtile(&pos, comp->dungeon, coord_subtile(event->mappos_x), coord_subtile(event->mappos_y))) { + if (!get_computer_drop_position_near_subtile(&pos, computer_dungeon(comp), coord_subtile(event->mappos_x), coord_subtile(event->mappos_y))) { SYNCDBG(8,"No drop position near (%d,%d) for %s",(int)coord_subtile(event->mappos_x),(int)coord_subtile(event->mappos_y),cevent->name); return CTaskRet_Unk0; } // Check if there are any enemies in the vicinity - no enemies, don't drop creatures - struct Thing* enmtng = get_creature_in_range_who_is_enemy_of_able_to_attack_and_not_specdigger(pos.x.val, pos.y.val, 21, comp->dungeon->owner); + struct Thing* enmtng = get_creature_in_range_who_is_enemy_of_able_to_attack_and_not_specdigger(pos.x.val, pos.y.val, 21, comp->dungeon_plyr_idx); if (thing_is_invalid(enmtng)) { SYNCDBG(8,"No enemies near %s",cevent->name); @@ -248,7 +248,7 @@ struct Thing *find_creature_in_fight_with_enemy(struct Computer2 *comp) { struct CreatureControl *cctrl; struct Thing *creatng; - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); // Search through special diggers unsigned long k = 0; int i = dungeon->digger_list_start; @@ -309,7 +309,7 @@ struct Thing *find_creature_in_fight_with_enemy(struct Computer2 *comp) long computer_event_battle_test(struct Computer2 *comp, struct ComputerEvent *cevent) { - if (comp->dungeon->fights_num <= 0) { + if (computer_dungeon(comp)->fights_num <= 0) { return CTaskRet_Unk4; } struct Thing* creatng = find_creature_in_fight_with_enemy(comp); @@ -365,12 +365,12 @@ long computer_event_battle_test(struct Computer2 *comp, struct ComputerEvent *ce struct Thing *computer_get_creature_in_fight(struct Computer2 *comp, PowerKind pwkind) { struct PowerConfigStats *powerst = get_power_model_stats(pwkind); - return find_players_highest_score_creature_in_fight_not_affected_by_spell(comp->dungeon->owner, powerst->spell_idx); + return find_players_highest_score_creature_in_fight_not_affected_by_spell(comp->dungeon_plyr_idx, powerst->spell_idx); } long computer_event_check_fighters(struct Computer2 *comp, struct ComputerEvent *cevent) { - if (comp->dungeon->fights_num <= 0) + if (computer_dungeon(comp)->fights_num <= 0) { return CTaskRet_Unk4; } @@ -413,7 +413,7 @@ long computer_event_check_fighters(struct Computer2 *comp, struct ComputerEvent PowerKind computer_choose_attack_spell(struct Computer2 *comp, struct ComputerEvent *cevent, struct Thing *creatng) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); struct PowerConfigStats *powerst; struct SpellConfig *spconf; int i = (cevent->tertiary_parameter + 1) % (sizeof(computer_attack_spells) / sizeof(computer_attack_spells[0])); @@ -454,7 +454,7 @@ PowerKind computer_choose_attack_spell(struct Computer2 *comp, struct ComputerEv long computer_event_attack_magic_foe(struct Computer2 *comp, struct ComputerEvent *cevent) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (dungeon->fights_num <= 0) { return CTaskRet_Unk4; } @@ -506,13 +506,13 @@ long computer_event_check_rooms_full(struct Computer2 *comp, struct ComputerEven continue; } struct RoomConfigStats* roomst = &game.conf.slab_conf.room_cfgstats[bldroom->rkind]; - int tiles = get_room_slabs_count(comp->dungeon->owner,bldroom->rkind); + int tiles = get_room_slabs_count(comp->dungeon_plyr_idx,bldroom->rkind); if ((tiles >= cevent->tertiary_parameter) && !(cevent->tertiary_parameter == 0)) // Room has reached the preconfigured maximum size { - SYNCDBG(8,"Player %d reached maximum size %d for %s",(int)comp->dungeon->owner,tiles,room_code_name(bldroom->rkind)); + SYNCDBG(8,"Player %d reached maximum size %d for %s",(int)comp->dungeon_plyr_idx,tiles,room_code_name(bldroom->rkind)); if (room_role_matches(bldroom->rkind, RoRoF_CratesManufctr)) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); int32_t used_capacity; int32_t total_capacity; int32_t storaged_capacity; @@ -522,7 +522,7 @@ long computer_event_check_rooms_full(struct Computer2 *comp, struct ComputerEven if (!is_task_in_progress(comp, CTT_SellTrapsAndDoors)) { create_task_sell_traps_and_doors(comp, storaged_capacity/3*2 ,100000,false); - SYNCDBG(8,"Player %d to sell crates to free up space in %s",(int)comp->dungeon->owner,room_code_name(bldroom->rkind)); + SYNCDBG(8,"Player %d to sell crates to free up space in %s",(int)comp->dungeon_plyr_idx,room_code_name(bldroom->rkind)); } } } @@ -532,7 +532,7 @@ long computer_event_check_rooms_full(struct Computer2 *comp, struct ComputerEven if (emergency_state && ((roomst->flags & RoCFlg_BuildTillBroke) == 0)) { continue; } - SYNCDBG(8,"Player %d needs %s",(int)comp->dungeon->owner,room_code_name(bldroom->rkind)); + SYNCDBG(8,"Player %d needs %s",(int)comp->dungeon_plyr_idx,room_code_name(bldroom->rkind)); // Find the corresponding build process and mark it as needed for (long i = 0; i <= COMPUTER_PROCESSES_COUNT; i++) { @@ -541,7 +541,7 @@ long computer_event_check_rooms_full(struct Computer2 *comp, struct ComputerEven break; if (cproc->parent == bldroom->process_idx) { - SYNCDBG(8,"Player %d will allow process \"%s\"",(int)comp->dungeon->owner,cproc->name); + SYNCDBG(8,"Player %d will allow process \"%s\"",(int)comp->dungeon_plyr_idx,cproc->name); ret = CTaskRet_Unk1; reactivate_build_process(comp, bldroom->rkind); } @@ -560,14 +560,14 @@ long computer_event_attack_door(struct Computer2* comp, struct ComputerEvent* ce SYNCDBG(8, "Target %s is not a door", thing_model_name(thing)); return CTaskRet_Unk0; } - if (!players_are_enemies(comp->dungeon->owner, thing->owner)) + if (!players_are_enemies(comp->dungeon_plyr_idx, thing->owner)) { SYNCDBG(8, "Door owner is no longer an enemy"); return CTaskRet_Unk0; } struct Coord3d freepos; - if (!get_computer_drop_position_next_to_subtile(&freepos, comp->dungeon, coord_subtile(event->mappos_x), coord_subtile(event->mappos_y))) { + if (!get_computer_drop_position_next_to_subtile(&freepos, computer_dungeon(comp), coord_subtile(event->mappos_x), coord_subtile(event->mappos_y))) { SYNCDBG(18, "No drop position near (%d,%d) for %s", (int)coord_subtile(event->mappos_x), (int)coord_subtile(event->mappos_y), cevent->name); return CTaskRet_Unk0; } @@ -633,7 +633,7 @@ long computer_event_attack_door(struct Computer2* comp, struct ComputerEvent* ce long computer_event_handle_prisoner(struct Computer2* comp, struct ComputerEvent* cevent, struct Event* event) { SYNCDBG(18, "Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); struct Thing* creatng = thing_get(event->target); struct CreatureControl* cctrl = creature_control_get_from_thing(creatng); struct CreatureModelConfig* crconf = creature_stats_get_from_thing(creatng); @@ -678,7 +678,7 @@ long computer_event_handle_prisoner(struct Computer2* comp, struct ComputerEvent { if (computer_able_to_use_power(comp, PwrK_HEALCRTR, power_level, amount)) { - magic_use_available_power_on_thing(comp->dungeon->owner, PwrK_HEALCRTR, power_level, 0, 0, creatng, PwMod_Default); + magic_use_available_power_on_thing(comp->dungeon_plyr_idx, PwrK_HEALCRTR, power_level, 0, 0, creatng, PwMod_Default); return CTaskRet_Unk1; } return CTaskRet_Unk4; @@ -691,7 +691,7 @@ long computer_event_handle_prisoner(struct Computer2* comp, struct ComputerEvent long computer_event_rebuild_room(struct Computer2* comp, struct ComputerEvent* cevent, struct Event* event) { SYNCDBG(18, "Starting"); - if (count_slabs_of_room_type(comp->dungeon->owner, event->target) == 0) + if (count_slabs_of_room_type(comp->dungeon_plyr_idx, event->target) == 0) { for (int i = 0; i < COMPUTER_PROCESSES_COUNT + 1; i++) { @@ -700,7 +700,7 @@ long computer_event_rebuild_room(struct Computer2* comp, struct ComputerEvent* c break; if ((cproc->func_check == cpfl_computer_check_any_room) && (cproc->process_configuration_value_4 == event->target)) { - SYNCDBG(8,"Resetting process for player %d to build room %s", (int)comp->dungeon->owner, room_code_name(event->target)); + SYNCDBG(8,"Resetting process for player %d to build room %s", (int)comp->dungeon_plyr_idx, room_code_name(event->target)); clear_flag(cproc->flags, (ComProc_Unkn0008|ComProc_Unkn0001)); cproc->last_run_turn = 0; } @@ -711,7 +711,7 @@ long computer_event_rebuild_room(struct Computer2* comp, struct ComputerEvent* c long computer_event_save_tortured(struct Computer2* comp, struct ComputerEvent* cevent) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); int health_permil = (cevent->primary_parameter * 10); // Do not check for PwrK_HAND here; this would prevent the computer from taking other actions without it! // Do we have a prison to put the unit back into? @@ -731,7 +731,7 @@ long computer_event_save_tortured(struct Computer2* comp, struct ComputerEvent* struct Dungeon* victdungeon; for (int j = 0; j < DUNGEONS_COUNT; j++) { - if (j == comp->dungeon->owner) + if (j == comp->dungeon_plyr_idx) { continue; } @@ -803,7 +803,7 @@ long computer_event_save_tortured(struct Computer2* comp, struct ComputerEvent* long computer_event_check_imps_in_danger(struct Computer2 *comp, struct ComputerEvent *cevent) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (dungeon->fights_num <= 0) { return CTaskRet_Unk4; } @@ -878,7 +878,7 @@ long computer_event_check_imps_in_danger(struct Computer2 *comp, struct Computer long computer_event_check_payday(struct Computer2 *comp, struct ComputerEvent *cevent,struct Event *event) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (dungeon->total_money_owned >= dungeon->creatures_total_pay) { return CTaskRet_Unk4; } diff --git a/src/player_complookup.h b/src/player_complookup.h index 153e03ed08..96d7723c47 100644 --- a/src/player_complookup.h +++ b/src/player_complookup.h @@ -40,7 +40,7 @@ struct GoldLookup { // sizeof = 28 MapSubtlCoord stl_x; MapSubtlCoord stl_y; unsigned short num_gold_slabs; -unsigned long num_gem_slabs; +uint32_t num_gem_slabs; }; #pragma pack() diff --git a/src/player_compprocs.c b/src/player_compprocs.c index 421ed1b07e..bc21b54a85 100644 --- a/src/player_compprocs.c +++ b/src/player_compprocs.c @@ -124,7 +124,7 @@ long computer_setup_any_room(struct Computer2 *comp, struct ComputerProcess *cpr struct ComputerTask* ctask = computer_setup_build_room(comp, cproc->process_configuration_value_4, cproc->process_configuration_value_2, cproc->process_configuration_value_3, cproc->process_configuration_value_5); if (!computer_task_invalid(ctask)) { - SYNCDBG(8,"Computer %d created task for \"%s\"",(int)comp->dungeon->owner,cproc->name); + SYNCDBG(8,"Computer %d created task for \"%s\"",(int)comp->dungeon_plyr_idx,cproc->name); set_flag(cproc->flags, ComProc_Unkn0020); long i = (long)((char*)cproc - (char*)&comp->processes[0]) / sizeof(struct ComputerProcess); if ((i < 0) || (i > COMPUTER_PROCESSES_COUNT)) @@ -158,7 +158,7 @@ long computer_setup_any_room_continue(struct Computer2 *comp, struct ComputerPro struct ComputerTask* ctask = computer_setup_build_room(comp, cproc->process_configuration_value_4, cproc->process_configuration_value_2, cproc->process_configuration_value_3, cproc->process_configuration_value_5); if (!computer_task_invalid(ctask)) { - SYNCDBG(8,"Computer %d created task for \"%s\"",(int)comp->dungeon->owner,cproc->name); + SYNCDBG(8,"Computer %d created task for \"%s\"",(int)comp->dungeon_plyr_idx,cproc->name); set_flag(cproc->flags, ComProc_Unkn0020); long i = (long)((char*)cproc - (char*)&comp->processes[0]) / sizeof(struct ComputerProcess); if ((i < 0) || (i > COMPUTER_PROCESSES_COUNT)) @@ -285,7 +285,7 @@ struct ComputerTask *get_room_build_task_nearest_to(const struct Computer2 *comp */ long computer_check_build_all_rooms(struct Computer2 *comp, struct ComputerProcess *cproc) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (count_no_room_build_tasks(comp) >= comp->max_room_build_tasks) { return CProcRet_Wait; } @@ -305,7 +305,7 @@ long computer_check_build_all_rooms(struct Computer2 *comp, struct ComputerProce long computer_get_room_role_total_capacity(struct Computer2 *comp, RoomRole rrole) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); int32_t used_capacity_kind; int32_t total_capacity_kind; long total_capacity = 0; @@ -326,7 +326,7 @@ long computer_get_room_role_total_capacity(struct Computer2 *comp, RoomRole rrol long computer_get_room_kind_free_capacity(struct Computer2 *comp, RoomKind room_kind) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (room_role_matches(room_kind, RoRoF_FoodStorage)) { return 9999; @@ -336,7 +336,7 @@ long computer_get_room_kind_free_capacity(struct Computer2 *comp, RoomKind room_ if (!dungeon_has_room(dungeon, room_kind)) { return 9999; } - return calculate_free_lair_space(comp->dungeon); + return calculate_free_lair_space(computer_dungeon(comp)); } int32_t used_capacity; int32_t total_capacity; @@ -349,7 +349,7 @@ long computer_get_room_kind_free_capacity(struct Computer2 *comp, RoomKind room_ long computer_check_any_room(struct Computer2 *comp, struct ComputerProcess *cproc) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); ItemAvailability is_avail = computer_check_room_available(comp, cproc->process_configuration_value_4); if (is_avail != IAvail_Now) { @@ -394,7 +394,7 @@ long computer_check_any_room(struct Computer2 *comp, struct ComputerProcess *cpr static PlayerNumber get_player_with_more_entrances_than_computer(const struct Computer2 *comp, int *max_entr_count) { - const struct Dungeon* dungeon = comp->dungeon; + const struct Dungeon* dungeon = computer_dungeon(comp); PlayerNumber max_plyr_idx = -1; *max_entr_count = dungeon->room_discrete_count[RoK_ENTRANCE]; for (PlayerNumber plyr_idx = 0; plyr_idx < PLAYERS_COUNT; plyr_idx++) @@ -418,7 +418,7 @@ static PlayerNumber get_player_with_more_entrances_than_computer(const struct Co */ TbBool there_is_virgin_entrance_for_computer(const struct Computer2 *comp) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); long i = game.entrance_room_id; unsigned long k = 0; while (i != 0) @@ -450,7 +450,7 @@ TbBool there_is_virgin_entrance_for_computer(const struct Computer2 *comp) long computer_check_dig_to_entrance(struct Computer2 *comp, struct ComputerProcess *cproc) { SYNCDBG(18,"Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); int neutral_entrances = count_entrances(comp, game.neutral_player_num); if (is_task_in_progress(comp, CTT_DigToEntrance)) { return CProcRet_Wait; @@ -483,7 +483,7 @@ long computer_check_dig_to_entrance(struct Computer2 *comp, struct ComputerProce long computer_finds_nearest_entrance2(struct Computer2 *comp, struct Coord3d *startpos, struct Room **retroom, short from_plyr_idx) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (from_plyr_idx < 0) from_plyr_idx = game.neutral_player_num; struct Room* near_entroom = NULL; @@ -619,7 +619,7 @@ long move_imp_to_dig_here(struct Computer2 *comp, struct Coord3d *pos, long max_ long amount_did = 0; if (!is_task_in_progress_using_hand(comp)) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); unsigned long k = 0; int i = dungeon->digger_list_start; while (i != 0) @@ -660,7 +660,7 @@ long move_imp_to_mine_here(struct Computer2 *comp, struct Coord3d *pos, long max long amount_did = 0; if (!is_task_in_progress_using_hand(comp)) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); unsigned long k = 0; int i = dungeon->digger_list_start; while (i != 0) @@ -718,7 +718,7 @@ TbBool right_time_to_choose_target_entrance(struct ComputerProcess *cproc, long */ TbBool simulate_dig_to(struct Computer2 *comp, struct Coord3d *startpos, const struct Coord3d *endpos, uint32_t *dig_distance, DigFlags digflags) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); struct ComputerDig cdig; ToolDigResult dig_result; // Setup the digging on dummy ComputerDig, to compute distance and move start position near to wall @@ -751,7 +751,7 @@ TbBool simulate_dig_to(struct Computer2 *comp, struct Coord3d *startpos, const s long computer_setup_dig_to_entrance(struct Computer2 *comp, struct ComputerProcess *cproc) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); // Let's find a player with highest number of entrance rooms PlayerNumber targplyr_idx = -1; long targplyr_entrances = 0; @@ -842,7 +842,7 @@ long computer_setup_dig_to_entrance(struct Computer2 *comp, struct ComputerProce long computer_setup_dig_to_gold(struct Computer2 *comp, struct ComputerProcess *cproc) { SYNCDBG(18,"Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); struct GoldLookup* gldlook = NULL; struct Coord3d startpos; long digres = computer_finds_nearest_room_to_gold(comp, &startpos, &gldlook); @@ -912,7 +912,7 @@ long computer_setup_dig_to_gold(struct Computer2 *comp, struct ComputerProcess * long computer_check_dig_to_gold(struct Computer2 *comp, struct ComputerProcess *cproc) { // If we have treasure room - if (!dungeon_has_room_of_role(comp->dungeon, RoRoF_GoldStorage)) + if (!dungeon_has_room_of_role(computer_dungeon(comp), RoRoF_GoldStorage)) { SYNCDBG(8,"Computer player model %d won't dig for gold - no treasure room.",(int)comp->model); return CProcRet_Wait; @@ -935,7 +935,7 @@ long computer_check_dig_to_gold(struct Computer2 *comp, struct ComputerProcess * long computer_check_sight_of_evil(struct Computer2 *comp, struct ComputerProcess *cproc) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (cproc->process_configuration_value_4 >= game.play_gameturn) { return CProcRet_Wait; } @@ -955,14 +955,14 @@ long computer_check_sight_of_evil(struct Computer2 *comp, struct ComputerProcess TbBool hate_filter_any_enemy_no_matter_how_strong(const struct Computer2 *comp, const struct ComputerProcess *cproc, const struct THate *hate) { - if (!players_are_enemies(comp->dungeon->owner, hate->plyr_idx)) + if (!players_are_enemies(comp->dungeon_plyr_idx, hate->plyr_idx)) return false; return true; } TbBool hate_filter_enemy_with_not_many_creatures(const struct Computer2 *comp, const struct ComputerProcess *cproc, const struct THate *hate) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (!players_are_enemies(dungeon->owner, hate->plyr_idx)) return false; struct Dungeon* enmdngn = get_players_num_dungeon(hate->plyr_idx); @@ -971,7 +971,7 @@ TbBool hate_filter_enemy_with_not_many_creatures(const struct Computer2 *comp, c long computer_check_attack_with_filter(struct Computer2 *comp, struct ComputerProcess *cproc, Comp_HateTest_Func hate_filter) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); SYNCDBG(8,"Starting for player %d",(int)dungeon->owner); int max_crtrs = dungeon->max_creatures_attracted; if (max_crtrs <= 0) { @@ -1031,7 +1031,7 @@ static long computer_look_for_opponent(struct Computer2 *comp, MapSubtlCoord stl int current_idx; struct Coord3d *pos; - struct Dungeon *dungeon = comp->dungeon; + struct Dungeon *dungeon = computer_dungeon(comp); PlayerBitFlags potential_opponents = to_flag(dungeon->owner); MapSubtlDelta radius = range / 2; @@ -1102,7 +1102,7 @@ static long computer_look_for_opponent(struct Computer2 *comp, MapSubtlCoord stl long computer_process_sight_of_evil(struct Computer2 *comp, struct ComputerProcess *cproc) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (comp->tasks_did <= 0) { return CProcRet_Wait; } @@ -1171,7 +1171,7 @@ long computer_completed_task(struct Computer2 *comp, struct ComputerProcess *cpr long computer_completed_attack1(struct Computer2 *comp, struct ComputerProcess *cproc) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); int creatrs_num = cproc->process_configuration_value_2 * dungeon->num_active_creatrs / 100; comp->task_state = CTaskSt_Select; struct ComputerTask* ctask = get_computer_task(cproc->process_parameter_5); @@ -1283,8 +1283,8 @@ struct ComputerProcess * find_best_process(struct Computer2 *comp) struct ComputerProcess* best_cproc = INVALID_COMPUTER_PROCESS; long best_prior = INT32_MIN; // Computer players without heart can't start any process - if (dungeon_invalid(comp->dungeon) || !player_has_heart(comp->dungeon->owner)) { - SYNCDBG(7,"Computer players %d dungeon in invalid or has no heart",(int)comp->dungeon->owner); + if (dungeon_invalid(computer_dungeon(comp)) || !player_has_heart(comp->dungeon_plyr_idx)) { + SYNCDBG(7,"Computer players %d dungeon in invalid or has no heart",(int)comp->dungeon_plyr_idx); return best_cproc; } @@ -1355,7 +1355,7 @@ long set_next_process(struct Computer2 *comp) struct ComputerProcess* cproc = find_best_process(comp); if (cproc != INVALID_COMPUTER_PROCESS) { - SYNCDBG(8,"Checking \"%s\" for player %d",cproc->name,(int)comp->dungeon->owner); + SYNCDBG(8,"Checking \"%s\" for player %d",cproc->name,(int)comp->dungeon_plyr_idx); chkres = computer_process_func_list[cproc->func_check](comp, cproc); if (chkres == CProcRet_Continue) { diff --git a/src/player_comptask.c b/src/player_comptask.c index cfb78a2a53..2ded0c6fdf 100644 --- a/src/player_comptask.c +++ b/src/player_comptask.c @@ -609,7 +609,7 @@ void computer_pick_thing_by_hand(struct Computer2 *comp, struct Thing *thing) external_set_thing_state(thing, CrSt_InPowerHand); remove_all_traces_of_combat(thing); } - thing->holding_player = comp->dungeon->owner; + thing->holding_player = comp->dungeon_plyr_idx; place_thing_in_limbo(thing); } @@ -652,7 +652,7 @@ short computer_dump_held_things_on_map(struct Computer2 *comp, struct Thing *dro return 0; } } - if (!can_place_thing_here(droptng, pos->x.stl.num, pos->y.stl.num, comp->dungeon->owner)) { + if (!can_place_thing_here(droptng, pos->x.stl.num, pos->y.stl.num, comp->dungeon_plyr_idx)) { return 0; } struct Coord3d locpos; @@ -679,14 +679,14 @@ short computer_dump_held_things_on_map(struct Computer2 *comp, struct Thing *dro locpos.z.val += i; if (object_is_gold_pile(droptng)) { - drop_gold_coins(pos, droptng->valuable.gold_stored, comp->dungeon->owner); - if (is_my_player_number(comp->dungeon->owner)) { + drop_gold_coins(pos, droptng->valuable.gold_stored, comp->dungeon_plyr_idx); + if (is_my_player_number(comp->dungeon_plyr_idx)) { play_non_3d_sample(88); } destroy_object(droptng); } else { - drop_held_thing_on_ground(comp->dungeon, droptng, &locpos); + drop_held_thing_on_ground(computer_dungeon(comp), droptng, &locpos); } comp->held_thing_idx = 0; comp->tasks_did--; @@ -695,8 +695,8 @@ short computer_dump_held_things_on_map(struct Computer2 *comp, struct Thing *dro long computer_place_thing_in_power_hand(struct Computer2 *comp, struct Thing *thing, struct Coord3d *pos) { - SYNCDBG(9,"Player %d picks %s index %d",(int)comp->dungeon->owner,thing_model_name(thing),(int)thing->index); - if (!can_thing_be_picked_up_by_player(thing, comp->dungeon->owner)) { + SYNCDBG(9,"Player %d picks %s index %d",(int)comp->dungeon_plyr_idx,thing_model_name(thing),(int)thing->index); + if (!can_thing_be_picked_up_by_player(thing, comp->dungeon_plyr_idx)) { ERRORLOG("Computer tries to pick up %s index %d which is not pickable", thing_model_name(thing),(int)thing->index); return 0; } @@ -708,7 +708,7 @@ long computer_place_thing_in_power_hand(struct Computer2 *comp, struct Thing *th SYNCDBG(7,"Computer tries to pick up %s index %d which is to be dropped on solid block", thing_model_name(thing),(int)thing->index); return 0; } - if (!can_place_thing_here(thing, pos->x.stl.num, pos->y.stl.num, comp->dungeon->owner)) { + if (!can_place_thing_here(thing, pos->x.stl.num, pos->y.stl.num, comp->dungeon_plyr_idx)) { SYNCDBG(7,"Computer tries to pick up %s index %d which cannot be dropped at given place", thing_model_name(thing),(int)thing->index); return 0; } @@ -739,7 +739,7 @@ TbBool computer_force_dump_held_things_on_map(struct Computer2 *comp, const stru locpos.x.val = subtile_coord_center(pos->x.stl.num); locpos.y.val = subtile_coord_center(pos->y.stl.num); locpos.z.val = get_thing_height_at(thing, &locpos); - drop_held_thing_on_ground(comp->dungeon, thing, &locpos); + drop_held_thing_on_ground(computer_dungeon(comp), thing, &locpos); comp->held_thing_idx = 0; return true; } @@ -754,7 +754,7 @@ TbBool computer_force_dump_specific_held_thing(struct Computer2 *comp, struct Th locpos.x.val = subtile_coord_center(pos->x.stl.num); locpos.y.val = subtile_coord_center(pos->y.stl.num); locpos.z.val = get_thing_height_at(thing, &locpos); - drop_held_thing_on_ground(comp->dungeon, thing, &locpos); + drop_held_thing_on_ground(computer_dungeon(comp), thing, &locpos); comp->held_thing_idx = 0; return true; } @@ -766,7 +766,7 @@ TbBool creature_could_be_placed_in_better_room(const struct Computer2 *comp, con long k; TbBool better_job_allowed; SYNCDBG(19,"Starting for %s index %d owner %d",thing_model_name(thing),(int)thing->index,(int)thing->owner); - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); if (thing_is_creature(thing) && creature_is_leaving_and_cannot_be_stopped(thing)) { return false; @@ -812,7 +812,7 @@ CreatureJob get_job_to_place_creature_in_room(const struct Computer2 *comp, cons int32_t total_spare_cap; long k; - const struct Dungeon *dungeon = comp->dungeon; + const struct Dungeon *dungeon = computer_dungeon(comp); chosen_job = Job_NULL; chosen_priority = INT32_MIN; @@ -867,7 +867,7 @@ CreatureJob find_creature_to_be_placed_in_room_for_job(struct Computer2 *comp, s struct Dungeon *dungeon; struct Thing *thing; struct Room *room; - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); if (dungeon_invalid(dungeon)) { ERRORLOG("Invalid dungeon in computer player"); return Job_NULL; @@ -931,7 +931,7 @@ long task_dig_room_passage(struct Computer2 *comp, struct ComputerTask *ctask) { SmallAroundIndex round_directn = small_around_index_towards_destination(ctask->starting_position.x.stl.num,ctask->starting_position.y.stl.num, ctask->new_room_pos.x.stl.num,ctask->new_room_pos.y.stl.num); - pos_move_in_direction_to_last_allowing_drop(&pos, round_directn, comp->dungeon->owner, ctask->create_room.width+ctask->create_room.height); + pos_move_in_direction_to_last_allowing_drop(&pos, round_directn, comp->dungeon_plyr_idx, ctask->create_room.width+ctask->create_room.height); } move_imp_to_dig_here(comp, &pos, 1); pos.x.val = ctask->new_room_pos.x.val; @@ -965,7 +965,7 @@ long task_dig_room_passage(struct Computer2 *comp, struct ComputerTask *ctask) long task_dig_room(struct Computer2 *comp, struct ComputerTask *ctask) { SYNCDBG(9,"Starting"); - struct Dungeon *dungeon = comp->dungeon; + struct Dungeon *dungeon = computer_dungeon(comp); { int digger_tasks = dungeon->digger_stack_length; if ((digger_tasks > 0) && (comp->dig_stack_size * dungeon->total_area / 100 <= digger_tasks)) { @@ -1097,7 +1097,7 @@ long task_check_room_dug(struct Computer2 *comp, struct ComputerTask *ctask) int32_t waiting_slabs; int32_t wrong_slabs; waiting_slabs = 0; wrong_slabs = 0; - count_slabs_where_room_cannot_be_built(comp->dungeon->owner, ctask->new_room_pos.x.stl.num, ctask->new_room_pos.y.stl.num, + count_slabs_where_room_cannot_be_built(comp->dungeon_plyr_idx, ctask->new_room_pos.x.stl.num, ctask->new_room_pos.y.stl.num, ctask->create_room.kind, ctask->create_room.area, &waiting_slabs, &wrong_slabs); if (wrong_slabs > 0) { WARNLOG("Task %s couldn't be completed as %d wrong slabs are in destination area, reset",computer_task_code_name(ctask->ttype),(int)wrong_slabs); @@ -1113,7 +1113,7 @@ long task_check_room_dug(struct Computer2 *comp, struct ComputerTask *ctask) if (flag_is_set(game.computer_chat_flags, CChat_TasksScarce)) { struct RoomConfigStats *roomst; roomst = &game.conf.slab_conf.room_cfgstats[ctask->rkind]; - message_add_fmt(MsgType_Player, comp->dungeon->owner, "Now I can place the %s.",get_string(roomst->name_stridx)); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "Now I can place the %s.",get_string(roomst->name_stridx)); } ctask->ttype = CTT_PlaceRoom; setup_computer_dig_room(&ctask->dig, &ctask->new_room_pos, ctask->create_room.area); @@ -1142,7 +1142,7 @@ void shut_down_task_process(struct Computer2 *comp, struct ComputerTask *ctask) long task_place_room(struct Computer2 *comp, struct ComputerTask *ctask) { SYNCDBG(9,"Starting"); - struct Dungeon *dungeon = comp->dungeon; + struct Dungeon *dungeon = computer_dungeon(comp); RoomKind rkind = ctask->create_room.kind; struct RoomConfigStats *roomst = &game.conf.slab_conf.room_cfgstats[rkind]; // If we don't have money for the room - don't even try @@ -1206,7 +1206,7 @@ long task_dig_to_entrance(struct Computer2 *comp, struct ComputerTask *ctask) { SYNCDBG(9,"Starting"); struct Dungeon *dungeon; - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); struct Room *room; // check the surrounding subtiles to see if they are the requested room @@ -1265,7 +1265,7 @@ long task_dig_to_entrance(struct Computer2 *comp, struct ComputerTask *ctask) ItemAvailability computer_check_room_available(const struct Computer2 * comp, RoomKind rkind) { struct Dungeon *dungeon; - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); if ((rkind < 1) || (rkind >= game.conf.slab_conf.room_types_count)) { return IAvail_Never; } @@ -1486,7 +1486,7 @@ struct ComputerTask * able_to_build_room(struct Computer2 *comp, struct Coord3d struct Coord3d corpos; struct Dungeon *dungeon; - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); long area_total; long area_buildable; int i; @@ -1516,14 +1516,14 @@ struct ComputerTask * able_to_build_room(struct Computer2 *comp, struct Coord3d dstpos.y.stl.num = stl_y; if ( perfect ) { - area_buildable = search_spiral(&dstpos, comp->dungeon->owner, area_total, check_for_perfect_buildable); + area_buildable = search_spiral(&dstpos, comp->dungeon_plyr_idx, area_total, check_for_perfect_buildable); if (area_buildable >= area_total) { area_buildable = width_slabs * height_slabs; break; } } else { - area_buildable = search_spiral(&dstpos, comp->dungeon->owner, area_total, check_for_buildable); + area_buildable = search_spiral(&dstpos, comp->dungeon_plyr_idx, area_total, check_for_buildable); if (area_buildable >= area_total - area_total / 4) { break; } @@ -1542,7 +1542,7 @@ struct ComputerTask * able_to_build_room(struct Computer2 *comp, struct Coord3d if (flag_is_set(game.computer_chat_flags, CChat_TasksScarce)) { struct RoomConfigStats *roomst; roomst = &game.conf.slab_conf.room_cfgstats[rkind]; - message_add_fmt(MsgType_Player, comp->dungeon->owner, "It is time to build %s.",get_string(roomst->name_stridx)); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "It is time to build %s.",get_string(roomst->name_stridx)); } ctask->ttype = CTT_DigRoomPassage; ctask->rkind = rkind; @@ -1597,7 +1597,7 @@ ToolDigResult tool_dig_to_pos2_skip_slabs_which_dont_need_digging_f(const struct MapSubtlCoord *nextstl_x, MapSubtlCoord *nextstl_y, const char *func_name) { struct Dungeon *dungeon; - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); MapSlabCoord nextslb_x; MapSlabCoord nextslb_y; SmallAroundIndex around_index; @@ -1671,7 +1671,7 @@ ToolDigResult tool_dig_to_pos2_do_action_on_slab_which_needs_it_f(struct Compute MapSubtlCoord *nextstl_x, MapSubtlCoord *nextstl_y, const char *func_name) { struct Dungeon *dungeon; - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); MapSlabCoord nextslb_x; MapSlabCoord nextslb_y; SmallAroundIndex around_index; @@ -1768,7 +1768,7 @@ ToolDigResult tool_dig_to_pos2_f(struct Computer2 * comp, struct ComputerDig * c ToolDigResult dig_result; SubtlCodedCoords stl_num; SYNCDBG(14,"%s: Starting",func_name); - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); // Limit amount of calls cdig->calls_count++; if (cdig->calls_count >= COMPUTER_TOOL_DIG_LIMIT) { @@ -2069,8 +2069,8 @@ TbBool find_next_gold(struct Computer2 *comp, struct ComputerTask *ctask) memcpy(&ctask->dig.pos_dest, &ctask->dig.pos_next, sizeof(struct Coord3d)); // Try to find gold tiles around current position - if (search_spiral(&ctask->dig.pos_dest, comp->dungeon->owner, 25, check_for_gold) == 25) { - SYNCDBG(5,"Player %d did not found next gold",(int)comp->dungeon->owner); + if (search_spiral(&ctask->dig.pos_dest, comp->dungeon_plyr_idx, 25, check_for_gold) == 25) { + SYNCDBG(5,"Player %d did not found next gold",(int)comp->dungeon_plyr_idx); return false; } @@ -2106,7 +2106,7 @@ long task_dig_to_gold(struct Computer2 *comp, struct ComputerTask *ctask) { long i; SYNCDBG(2,"Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); i = dungeon->total_area * comp->dig_stack_size / 100; if ((dungeon->digger_stack_length > 0) && (dungeon->digger_stack_length >= i)) @@ -2258,7 +2258,7 @@ long task_dig_to_attack(struct Computer2 *comp, struct ComputerTask *ctask) if (ctask->dig.pos_next.x.val > 0) { struct SlabMap *slb = get_slabmap_for_subtile(ctask->dig.pos_next.x.stl.num, ctask->dig.pos_next.y.stl.num); - if (slabmap_owner(slb) != comp->dungeon->owner) + if (slabmap_owner(slb) != comp->dungeon_plyr_idx) { return CTaskRet_Unk4; } @@ -2320,7 +2320,7 @@ long count_creatures_at_call_to_arms(struct Computer2 *comp) int num_creatures = 0; int k = 0; - for (i = thing_get(comp->dungeon->creatr_list_start); + for (i = thing_get(computer_dungeon(comp)->creatr_list_start); !thing_is_invalid(i); i = thing_get(creature_control_get_from_thing(i)->players_next_creature_idx)) { @@ -2344,7 +2344,7 @@ static struct Thing *find_creature_for_call_to_arms(struct Computer2 *comp, TbBo thing = INVALID_THING; highest_score = INT_MAX; - for (struct Thing *i = thing_get(comp->dungeon->creatr_list_start); + for (struct Thing *i = thing_get(computer_dungeon(comp)->creatr_list_start); !thing_is_invalid(i); i = thing_get(creature_control_get_from_thing(i)->players_next_creature_idx)) { @@ -2386,7 +2386,7 @@ static struct Thing *find_creature_for_call_to_arms(struct Computer2 *comp, TbBo long count_creatures_in_call_to_arms(struct Computer2 *comp) { struct Dungeon *dungeon; - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); return count_player_list_creatures_of_model_matching_bool_filter(dungeon->owner, CREATURE_ANY, creature_is_called_to_arms); } @@ -2394,7 +2394,7 @@ long task_magic_call_to_arms(struct Computer2 *comp, struct ComputerTask *ctask) { SYNCDBG(9,"Starting"); struct Dungeon *dungeon; - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); switch (ctask->task_state) { case 0: @@ -2484,7 +2484,7 @@ struct Thing *find_creature_for_pickup(struct Computer2 *comp, struct Coord3d *p //TODO CREATURE_JOBS This function needs major rework, to base conditions on job, not on room we're dropping into //TODO CREATURE_JOBS Rewrite all uses of this function before remaking it struct Dungeon *dungeon; - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); SYNCDBG(8,"Starting"); MapSubtlCoord stl_x; MapSubtlCoord stl_y; @@ -2605,7 +2605,7 @@ long count_creatures_for_pickup(struct Computer2 *comp, struct Coord3d *pos, str int count; count = 0; k = 0; - i = comp->dungeon->creatr_list_start; + i = computer_dungeon(comp)->creatr_list_start; while (i != 0) { thing = thing_get(i); @@ -2665,7 +2665,7 @@ long task_pickup_for_attack(struct Computer2 *comp, struct ComputerTask *ctask) remove_task(comp, ctask); return CTaskRet_Unk0; } - if (!xy_walkable(ctask->pickup_for_attack.target_pos.x.stl.num, ctask->pickup_for_attack.target_pos.y.stl.num, comp->dungeon->owner)) + if (!xy_walkable(ctask->pickup_for_attack.target_pos.x.stl.num, ctask->pickup_for_attack.target_pos.y.stl.num, comp->dungeon_plyr_idx)) { return CTaskRet_Unk4; } @@ -2676,7 +2676,7 @@ long task_pickup_for_attack(struct Computer2 *comp, struct ComputerTask *ctask) if (computer_dump_held_things_on_map(comp, thing, &ctask->pickup_for_attack.target_pos, ctask->pickup_for_attack.target_state)) { return CTaskRet_Unk2; } - computer_force_dump_held_things_on_map(comp, &comp->dungeon->essential_pos); + computer_force_dump_held_things_on_map(comp, &computer_dungeon(comp)->essential_pos); return CTaskRet_Unk4; } if (ctask->pickup_for_attack.repeat_num <= 0) @@ -2689,7 +2689,7 @@ long task_pickup_for_attack(struct Computer2 *comp, struct ComputerTask *ctask) if (!thing_is_invalid(thing)) { if (computer_place_thing_in_power_hand(comp, thing, &ctask->pickup_for_attack.target_pos)) { - SYNCDBG(9,"Player %d picked %s index %d to attack position (%d,%d)",(int)comp->dungeon->owner,thing_model_name(thing),(int)thing->index, + SYNCDBG(9,"Player %d picked %s index %d to attack position (%d,%d)",(int)comp->dungeon_plyr_idx,thing_model_name(thing),(int)thing->index, (int)ctask->pickup_for_attack.target_pos.x.stl.num, (int)ctask->pickup_for_attack.target_pos.y.stl.num); return CTaskRet_Unk2; } @@ -2705,7 +2705,7 @@ long task_move_creature_to_room(struct Computer2 *comp, struct ComputerTask *cta struct Coord3d pos; long i; struct Dungeon *dungeon; - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); room = room_get(ctask->move_to_room.room_idx1); thing = thing_get(comp->held_thing_idx); if (thing_exists(thing)) // We have no unit in hand @@ -2784,7 +2784,7 @@ long task_move_creature_to_pos(struct Computer2 *comp, struct ComputerTask *ctas { struct Dungeon *dungeon; SYNCDBG(19,"Starting"); - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); struct Thing *thing; thing = thing_get(comp->held_thing_idx); if (thing_exists(thing)) @@ -2803,7 +2803,7 @@ long task_move_creature_to_pos(struct Computer2 *comp, struct ComputerTask *ctas { WARNLOG("Player %d computer hand holds %s instead of creature",(int)dungeon->owner, thing_model_name(thing)); } - computer_force_dump_held_things_on_map(comp, &comp->dungeon->essential_pos); + computer_force_dump_held_things_on_map(comp, &computer_dungeon(comp)->essential_pos); remove_task(comp, ctask); return CTaskRet_Unk0; } @@ -2814,7 +2814,7 @@ long task_move_creature_to_pos(struct Computer2 *comp, struct ComputerTask *ctas if (can_thing_be_picked_up_by_player(thing, dungeon->owner)) { if (computer_place_thing_in_power_hand(comp, thing, &ctask->move_to_pos.target_pos)) { - SYNCDBG(9,"Player %d picked %s index %d to move to (%d,%d)",(int)comp->dungeon->owner,thing_model_name(thing),(int)thing->index, + SYNCDBG(9,"Player %d picked %s index %d to move to (%d,%d)",(int)comp->dungeon_plyr_idx,thing_model_name(thing),(int)thing->index, (int)ctask->move_to_pos.target_pos.x.stl.num, (int)ctask->move_to_pos.target_pos.y.stl.num); return CTaskRet_Unk2; } @@ -2828,7 +2828,7 @@ struct Thing *find_creature_for_defend_pickup(struct Computer2 *comp) struct Dungeon *dungeon; unsigned long k; long i; - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); long best_factor; struct Thing *best_creatng; best_creatng = INVALID_THING; @@ -2892,7 +2892,7 @@ long task_move_creatures_to_defend(struct Computer2 *comp, struct ComputerTask * { SYNCDBG(19,"Starting"); struct Dungeon *dungeon; - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); struct Thing *thing; thing = thing_get(comp->held_thing_idx); // If the heart is just being destroyed - dump held thing and finish task @@ -2955,7 +2955,7 @@ long task_move_creatures_to_defend(struct Computer2 *comp, struct ComputerTask * long task_move_gold_to_treasury(struct Computer2 *comp, struct ComputerTask *ctask) { struct Dungeon *dungeon; - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); if (dungeon_invalid(dungeon)) { ERRORLOG("Invalid dungeon in computer player."); return CTaskRet_Unk0; @@ -2986,15 +2986,15 @@ long task_move_gold_to_treasury(struct Computer2 *comp, struct ComputerTask *cta { WARNLOG("Could not move player %d gold by dropping %s into %s",(int)dungeon->owner,thing_model_name(thing),room_code_name(room->kind)); } - computer_force_dump_held_things_on_map(comp, &comp->dungeon->essential_pos); + computer_force_dump_held_things_on_map(comp, &computer_dungeon(comp)->essential_pos); remove_task(comp, ctask); return CTaskRet_Unk0; } - thing = find_gold_laying_in_dungeon(comp->dungeon); + thing = find_gold_laying_in_dungeon(computer_dungeon(comp)); if (!thing_is_invalid(thing)) { struct Room *room; - room = find_room_of_role_with_spare_capacity(comp->dungeon->owner, RoRoF_GoldStorage, 1); + room = find_room_of_role_with_spare_capacity(comp->dungeon_plyr_idx, RoRoF_GoldStorage, 1); if (!room_is_invalid(room)) { ctask->move_gold.room_idx = room->index; @@ -3004,21 +3004,21 @@ long task_move_gold_to_treasury(struct Computer2 *comp, struct ComputerTask *cta pos.z.val = subtile_coord(1,0); if (computer_place_thing_in_power_hand(comp, thing, &pos)) { ctask->move_gold.items_amount--; - SYNCDBG(9,"Player %d picked %s index %d to place in %s index %d",(int)comp->dungeon->owner, + SYNCDBG(9,"Player %d picked %s index %d to place in %s index %d",(int)comp->dungeon_plyr_idx, thing_model_name(thing),(int)thing->index,room_code_name(room->kind),(int)room->index); return CTaskRet_Unk2; } else { - SYNCDBG(9,"Player %d cannot place %s index %d into power hand",(int)comp->dungeon->owner, + SYNCDBG(9,"Player %d cannot place %s index %d into power hand",(int)comp->dungeon_plyr_idx, thing_model_name(thing),(int)thing->index); } } else { - SYNCDBG(9,"Player %d has no room to place the gold into",(int)comp->dungeon->owner); + SYNCDBG(9,"Player %d has no room to place the gold into",(int)comp->dungeon_plyr_idx); remove_task(comp, ctask); } } else { - SYNCDBG(9,"Player %d has no more gold laying around",(int)comp->dungeon->owner); + SYNCDBG(9,"Player %d has no more gold laying around",(int)comp->dungeon_plyr_idx); remove_task(comp, ctask); } return CTaskRet_Unk0; @@ -3028,7 +3028,7 @@ long task_slap_imps(struct Computer2 *comp, struct ComputerTask *ctask) { struct Dungeon *dungeon; SYNCDBG(9,"Starting"); - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); ctask->attack_magic.repeat_num--; if (ctask->attack_magic.repeat_num >= 0) { @@ -3121,7 +3121,7 @@ long task_magic_speed_up(struct Computer2 *comp, struct ComputerTask *ctask) struct Thing *creatng; int k = 0; SYNCDBG(9,"Starting"); - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); creatng = thing_get(ctask->attack_magic.target_thing_idx); if (!thing_exists(creatng)) { @@ -3193,7 +3193,7 @@ long task_wait_for_bridge(struct Computer2 *comp, struct ComputerTask *ctask) { SYNCDBG(9, "Starting"); PlayerNumber plyr_idx; - plyr_idx = comp->dungeon->owner; + plyr_idx = comp->dungeon_plyr_idx; if (game.play_gameturn - ctask->created_turn > COMPUTER_DIG_ROOM_TIMEOUT) { //If the task has been active too long, restart the process to try a different approach. @@ -3245,7 +3245,7 @@ long task_attack_magic(struct Computer2 *comp, struct ComputerTask *ctask) struct Thing *thing; long i; SYNCDBG(9,"Starting"); - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); thing = thing_get(ctask->attack_magic.target_thing_idx); if (!thing_exists(thing)) { return CTaskRet_Unk1; @@ -3273,7 +3273,7 @@ long task_attack_magic(struct Computer2 *comp, struct ComputerTask *ctask) long task_sell_traps_and_doors(struct Computer2 *comp, struct ComputerTask *ctask) { - struct Dungeon *dungeon = comp->dungeon; + struct Dungeon *dungeon = computer_dungeon(comp); const struct TrapDoorSelling *tdsell; struct DoorConfigStats *doorst; struct TrapConfigStats *trapst; @@ -3526,35 +3526,35 @@ TbBool create_task_move_creature_to_pos(struct Computer2 *comp, const struct Thi switch (dst_state) { case CrSt_ImpImprovesDungeon: - message_add_fmt(MsgType_Player, comp->dungeon->owner, "This %s should go claiming.",get_string(crconf->namestr_idx)); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "This %s should go claiming.",get_string(crconf->namestr_idx)); break; case CrSt_ImpDigsDirt: - message_add_fmt(MsgType_Player, comp->dungeon->owner, "This %s should go digging.",get_string(crconf->namestr_idx)); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "This %s should go digging.",get_string(crconf->namestr_idx)); break; case CrSt_ImpMinesGold: - message_add_fmt(MsgType_Player, comp->dungeon->owner, "This %s should go mining.",get_string(crconf->namestr_idx)); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "This %s should go mining.",get_string(crconf->namestr_idx)); break; case CrSt_CreatureDoingNothing: case CrSt_ImpDoingNothing: - message_add_fmt(MsgType_Player, comp->dungeon->owner, "This %s should stop doing that.",get_string(crconf->namestr_idx)); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "This %s should stop doing that.",get_string(crconf->namestr_idx)); break; case CrSt_CreatureSacrifice: - if (thing->model == game.conf.rules[comp->dungeon->owner].sacrifices.cheaper_diggers_sacrifice_model) { + if (thing->model == game.conf.rules[comp->dungeon_plyr_idx].sacrifices.cheaper_diggers_sacrifice_model) { struct PowerConfigStats *powerst; powerst = get_power_model_stats(PwrK_MKDIGGER); - message_add_fmt(MsgType_Player, comp->dungeon->owner, "Sacrificing %s to reduce %s price.",get_string(crconf->namestr_idx),get_string(powerst->name_stridx)); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "Sacrificing %s to reduce %s price.",get_string(crconf->namestr_idx),get_string(powerst->name_stridx)); break; } - message_add_fmt(MsgType_Player, comp->dungeon->owner, "This %s will be sacrificed.",get_string(crconf->namestr_idx)); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "This %s will be sacrificed.",get_string(crconf->namestr_idx)); break; case CrSt_Torturing: - message_add_fmt(MsgType_Player, comp->dungeon->owner, "This %s should be tortured.", get_string(crconf->namestr_idx)); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "This %s should be tortured.", get_string(crconf->namestr_idx)); break; case CrSt_CreatureDoorCombat: - message_add_fmt(MsgType_Player, comp->dungeon->owner, "This %s should attack a door.", get_string(crconf->namestr_idx)); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "This %s should attack a door.", get_string(crconf->namestr_idx)); break; default: - message_add_fmt(MsgType_Player, comp->dungeon->owner, "This %s should go there.",get_string(crconf->namestr_idx)); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "This %s should go there.",get_string(crconf->namestr_idx)); break; } } @@ -3577,7 +3577,7 @@ TbBool create_task_move_creatures_to_defend(struct Computer2 *comp, struct Coord return false; } if (flag_is_set(game.computer_chat_flags, CChat_TasksScarce)) { - message_add_fmt(MsgType_Player, comp->dungeon->owner, "Minions, defend this place!"); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "Minions, defend this place!"); } ctask->ttype = CTT_MoveCreaturesToDefend; ctask->move_to_defend.target_pos.x.val = pos->x.val; @@ -3605,10 +3605,10 @@ TbBool create_task_move_creatures_to_room(struct Computer2 *comp, int room_idx, if (room_exists(room)) { struct RoomConfigStats *roomst; roomst = &game.conf.slab_conf.room_cfgstats[room->kind]; - message_add_fmt(MsgType_Player, comp->dungeon->owner, "Time to put some creatures into %s.",get_string(roomst->name_stridx)); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "Time to put some creatures into %s.",get_string(roomst->name_stridx)); } else { if (flag_is_set(game.computer_chat_flags, CChat_TasksFrequent)) - message_add_fmt(MsgType_Player, comp->dungeon->owner, "Time to put some creatures into rooms."); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "Time to put some creatures into rooms."); } } ctask->ttype = CTT_MoveCreatureToRoom; @@ -3628,7 +3628,7 @@ TbBool create_task_pickup_for_attack(struct Computer2 *comp, struct Coord3d *pos return false; } if (flag_is_set(game.computer_chat_flags, CChat_TasksScarce)) { - message_add_fmt(MsgType_Player, comp->dungeon->owner, "Minions, attack now!"); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "Minions, attack now!"); } ctask->ttype = CTT_PickupForAttack; ctask->pickup_for_attack.target_pos.x.val = pos->x.val; @@ -3649,7 +3649,7 @@ TbBool create_task_magic_battle_call_to_arms(struct Computer2 *comp, struct Coor return false; } if (flag_is_set(game.computer_chat_flags, CChat_TasksScarce)) { - message_add_fmt(MsgType_Player, comp->dungeon->owner, "Minions, call to arms! Join the battle!"); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "Minions, call to arms! Join the battle!"); } ctask->ttype = CTT_MagicCallToArms; ctask->task_state = CTaskSt_None; @@ -3674,7 +3674,7 @@ TbBool create_task_magic_support_call_to_arms(struct Computer2 *comp, struct Coo return false; } if (flag_is_set(game.computer_chat_flags, CChat_TasksScarce)) { - message_add_fmt(MsgType_Player, comp->dungeon->owner, "Minions, call to arms! Attack!"); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "Minions, call to arms! Attack!"); } ctask->ttype = CTT_MagicCallToArms; ctask->task_state = CTaskSt_None; @@ -3700,7 +3700,7 @@ TbBool create_task_magic_support_call_to_arms(struct Computer2 *comp, struct Coo TbBool create_task_sell_traps_and_doors(struct Computer2 *comp, long num_to_sell, GoldAmount gold_up_to, TbBool allow_deployed) { struct Dungeon *dungeon; - dungeon = comp->dungeon; + dungeon = computer_dungeon(comp); struct ComputerTask *ctask; SYNCDBG(7,"Starting for player %d to sell %d traps up to %d gold",(int)dungeon->owner,(int)num_to_sell,(int)gold_up_to); ctask = get_free_task(comp, 1); @@ -3739,7 +3739,7 @@ TbBool create_task_move_gold_to_treasury(struct Computer2 *comp, long num_to_mov return false; } if (flag_is_set(game.computer_chat_flags, CChat_TasksFrequent)) { - message_add_fmt(MsgType_Player, comp->dungeon->owner, "Gold should not lay around outside treasury."); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "Gold should not lay around outside treasury."); } ctask->ttype = CTT_MoveGoldToTreasury; ctask->created_turn = game.play_gameturn; @@ -3761,7 +3761,7 @@ TbBool create_task_dig_to_attack(struct Computer2 *comp, const struct Coord3d st return false; } if (flag_is_set(game.computer_chat_flags, CChat_TasksScarce)) { - message_add_fmt(MsgType_Player, comp->dungeon->owner, "Player %d looks like he need a kick.",(int)victim_plyr_idx); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "Player %d looks like he need a kick.",(int)victim_plyr_idx); } ctask->ttype = CTT_DigToAttack; ctask->dig_somewhere.startpos.x.val = startpos.x.val; @@ -3788,7 +3788,7 @@ TbBool create_task_dig_to_neutral(struct Computer2 *comp, const struct Coord3d s return false; } if (flag_is_set(game.computer_chat_flags, CChat_TasksScarce)) { - message_add_fmt(MsgType_Player, comp->dungeon->owner, "Localized neutral place, hopefully with loot."); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "Localized neutral place, hopefully with loot."); } ctask->ttype = CTT_DigToNeutral; ctask->dig_somewhere.startpos.x.val = startpos.x.val; @@ -3812,7 +3812,7 @@ TbBool create_task_dig_to_gold(struct Computer2 *comp, const struct Coord3d star return false; } if (flag_is_set(game.computer_chat_flags, CChat_TasksScarce)) { - message_add_fmt(MsgType_Player, comp->dungeon->owner, "Time to dig more gold."); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "Time to dig more gold."); } ctask->ttype = CTT_DigToGold; set_flag(ctask->flags, ComTsk_AddTrapLocation); @@ -3841,7 +3841,7 @@ TbBool create_task_dig_to_entrance(struct Computer2 *comp, const struct Coord3d if (flag_is_set(game.computer_chat_flags, CChat_TasksScarce)) { struct RoomConfigStats *roomst; roomst = &game.conf.slab_conf.room_cfgstats[RoK_ENTRANCE]; - message_add_fmt(MsgType_Player, comp->dungeon->owner, "I will take that %s.",get_string(roomst->name_stridx)); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "I will take that %s.",get_string(roomst->name_stridx)); } ctask->ttype = CTT_DigToEntrance; set_flag(ctask->flags, (ComTsk_AddTrapLocation|ComTsk_Urgent)); @@ -3867,7 +3867,7 @@ TbBool create_task_slap_imps(struct Computer2 *comp, long creatrs_num, TbBool sk return false; } if (flag_is_set(game.computer_chat_flags, CChat_TasksFrequent)) { - message_add_fmt(MsgType_Player, comp->dungeon->owner, "Work harder, minions!"); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "Work harder, minions!"); } ctask->ttype = CTT_SlapDiggers; ctask->attack_magic.repeat_num = creatrs_num; @@ -3887,7 +3887,7 @@ TbBool create_task_magic_speed_up(struct Computer2 *comp, const struct Thing *cr return false; } if (flag_is_set(game.computer_chat_flags, CChat_TasksScarce)) { - message_add_fmt(MsgType_Player, comp->dungeon->owner, "I should speed up my fighters."); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "I should speed up my fighters."); } ctask->ttype = CTT_MagicSpeedUp; ctask->attack_magic.target_thing_idx = creatng->index; @@ -3908,7 +3908,7 @@ TbBool create_task_attack_magic(struct Computer2 *comp, const struct Thing *crea struct PowerConfigStats *powerst; powerst = get_power_model_stats(pwkind); struct CreatureModelConfig* crconf = &game.conf.crtr_conf.model[creatng->model]; - message_add_fmt(MsgType_Player, comp->dungeon->owner, "Casting %s on %s!",get_string(powerst->name_stridx),get_string(crconf->namestr_idx)); + message_add_fmt(MsgType_Player, comp->dungeon_plyr_idx, "Casting %s on %s!",get_string(powerst->name_stridx),get_string(crconf->namestr_idx)); } ctask->ttype = CTT_AttackMagic; ctask->attack_magic.target_thing_idx = creatng->index; diff --git a/src/player_computer.c b/src/player_computer.c index c0d1a5c913..5746ac381f 100644 --- a/src/player_computer.c +++ b/src/player_computer.c @@ -78,7 +78,7 @@ TbBool computer_player_invalid(const struct Computer2 *comp) TbBool computer_player_in_emergency_state(const struct Computer2 *comp) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (get_computer_money_less_cost(comp) < -1000) return true; if (dungeon->num_active_diggers < 3) @@ -99,7 +99,7 @@ GoldAmount get_dungeon_money_less_cost(const struct Dungeon *dungeon) GoldAmount get_computer_money_less_cost(const struct Computer2 *comp) { - return get_dungeon_money_less_cost(comp->dungeon); + return get_dungeon_money_less_cost(computer_dungeon(comp)); } long set_autopilot_type(PlayerNumber plyr_idx, long aptype) @@ -156,7 +156,7 @@ struct ComputerTask * able_to_build_room_at_task(struct Computer2 *comp, RoomKin */ struct ComputerTask * able_to_build_room_from_room(struct Computer2 *comp, RoomKind rkind, RoomKind look_kind, long width_slabs, long height_slabs, long max_slabs_dist, long perfect) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); long i = dungeon->room_list_start[look_kind]; unsigned long k = 0; while (i != 0) @@ -190,7 +190,7 @@ struct ComputerTask * able_to_build_room_from_room(struct Computer2 *comp, RoomK struct ComputerTask *computer_setup_build_room(struct Computer2 *comp, RoomKind rkind, long width_slabs, long height_slabs, long look_randstart) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); long i; if (room_role_matches(rkind,RoRoF_LairStorage)) { @@ -345,7 +345,7 @@ long computer_finds_nearest_task_to_gold(const struct Computer2 *comp, const str long computer_finds_nearest_room_to_gold(struct Computer2 *comp, struct Coord3d *pos, struct GoldLookup **gldlookref) { SYNCDBG(5,"Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); struct GoldLookup* gldlooksel = NULL; *gldlookref = gldlooksel; struct Coord3d locpos; @@ -413,7 +413,7 @@ long computer_finds_nearest_room_to_gold(struct Computer2 *comp, struct Coord3d unsigned long count_creatures_availiable_for_fight(struct Computer2 *comp, struct Coord3d *pos) { SYNCDBG(8,"Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); unsigned long count = 0; unsigned long k = 0; int i = dungeon->creatr_list_start; @@ -473,7 +473,7 @@ TbBool is_there_an_attack_task(const struct Computer2 *comp) void get_opponent(struct Computer2 *comp, struct THate hates[]) { SYNCDBG(7,"Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); long i; // Initialize hate struct for (i=0; i < PLAYERS_COUNT; i++) @@ -542,7 +542,7 @@ void get_opponent(struct Computer2 *comp, struct THate hates[]) TbBool computer_finds_nearest_room_to_pos(struct Computer2 *comp, struct Room **retroom, struct Coord3d *nearpos){ long nearest_distance = INT32_MAX; - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); *retroom = NULL; for (RoomKind i = 0; i < game.conf.slab_conf.room_types_count; i++) @@ -574,7 +574,7 @@ TbBool computer_finds_nearest_room_to_pos(struct Computer2 *comp, struct Room ** long setup_computer_attack(struct Computer2 *comp, struct ComputerProcess *cproc, struct Coord3d *pos, long victim_plyr_idx) { struct Room *room; - SYNCDBG(8,"Starting player %d attack on %d",(int)comp->dungeon->owner,(int)victim_plyr_idx); + SYNCDBG(8,"Starting player %d attack on %d",(int)comp->dungeon_plyr_idx,(int)victim_plyr_idx); if (!computer_finds_nearest_room_to_pos(comp, &room, pos)) { SYNCDBG(7,"Cannot find owned room near (%d,%d), giving up",(int)pos->x.stl.num,(int)pos->y.stl.num); return 0; @@ -598,7 +598,7 @@ long setup_computer_attack(struct Computer2 *comp, struct ComputerProcess *cproc long count_entrances(const struct Computer2 *comp, PlayerNumber plyr_idx) { - const struct Dungeon* dungeon = comp->dungeon; + const struct Dungeon* dungeon = computer_dungeon(comp); long count = 0; long i = game.entrance_room_id; unsigned long k = 0; @@ -732,7 +732,7 @@ int computer_find_more_trap_place_locations_around_room(struct Computer2 *comp, int computer_find_more_trap_place_locations(struct Computer2 *comp) { SYNCDBG(8,"Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); int num_added = 0; RoomKind rkind = AI_RANDOM(game.conf.slab_conf.room_types_count); for (int m = 0; m < game.conf.slab_conf.room_types_count; m++, rkind = (rkind + 1) % game.conf.slab_conf.room_types_count) @@ -767,7 +767,7 @@ int computer_find_more_trap_place_locations(struct Computer2 *comp) TbBool computer_get_trap_place_location_and_update_locations(struct Computer2 *comp, ThingModel trapmodel, struct Coord3d *retloc) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); for (long i = 0; i < COMPUTER_TRAP_LOC_COUNT; i++) { struct Coord3d* location = &comp->trap_locations[i]; @@ -809,7 +809,7 @@ TbBool computer_get_trap_place_location_and_update_locations(struct Computer2 *c long computer_check_for_place_trap(struct Computer2 *comp, struct ComputerCheck * check) { SYNCDBG(8,"Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (dungeon_invalid(dungeon) || !player_has_heart(dungeon->owner)) { SYNCDBG(7,"Computer players %d dungeon in invalid or has no heart",(int)dungeon->owner); return CTaskRet_Unk4; @@ -890,7 +890,7 @@ long computer_pick_training_or_scavenging_creatures_and_place_on_room(struct Com */ long computer_pick_expensive_job_creatures_and_place_on_lair(struct Computer2 *comp, long tasks_limit) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); struct Room* room = room_get(dungeon->room_list_start[RoK_LAIR]); long new_tasks = 0; // If we don't have lair, then don't even bother @@ -922,7 +922,7 @@ long computer_check_for_money(struct Computer2 *comp, struct ComputerCheck * che { SYNCDBG(18,"Starting"); long ret = CTaskRet_Unk4; - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (dungeon_invalid(dungeon) || !player_has_heart(dungeon->owner)) { SYNCDBG(7,"Computer players %d dungeon in invalid or has no heart",(int)dungeon->owner); return CTaskRet_Unk4; @@ -1041,7 +1041,7 @@ long computer_check_for_money(struct Computer2 *comp, struct ComputerCheck * che long count_creatures_for_defend_pickup(struct Computer2 *comp) { struct Thing *i; - struct Dungeon *dungeon = comp->dungeon; + struct Dungeon *dungeon = computer_dungeon(comp); int count = 0; int k = 0; @@ -1105,7 +1105,7 @@ TbBool computer_find_non_solid_block(const struct Computer2 *comp, struct Coord3 { MapSubtlCoord sstl_x = arstl_x + start_at_around[k].delta_x; MapSubtlCoord sstl_y = arstl_y + start_at_around[k].delta_y; - if (can_drop_thing_here(sstl_x, sstl_y, comp->dungeon->owner, 0)) + if (can_drop_thing_here(sstl_x, sstl_y, comp->dungeon_plyr_idx, 0)) { pos->x.val = subtile_coord_center(sstl_x); pos->y.val = subtile_coord_center(sstl_y); @@ -1132,7 +1132,7 @@ TbBool computer_find_safe_non_solid_block(const struct Computer2* comp, struct C { MapSubtlCoord sstl_x = arstl_x + start_at_around[k].delta_x; MapSubtlCoord sstl_y = arstl_y + start_at_around[k].delta_y; - if (can_drop_thing_here(sstl_x, sstl_y, comp->dungeon->owner, 0) && !is_dangerous_drop_subtile(sstl_x, sstl_y)) + if (can_drop_thing_here(sstl_x, sstl_y, comp->dungeon_plyr_idx, 0) && !is_dangerous_drop_subtile(sstl_x, sstl_y)) { pos->x.val = subtile_coord_center(sstl_x); pos->y.val = subtile_coord_center(sstl_y); @@ -1154,7 +1154,7 @@ TbBool computer_find_safe_non_solid_block(const struct Computer2* comp, struct C */ TbBool computer_able_to_use_power(struct Computer2 *comp, PowerKind pwkind, KeepPwrLevel power_level, long amount) { - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (!is_power_available(dungeon->owner, pwkind)) { return false; } @@ -1170,9 +1170,9 @@ TbBool computer_able_to_use_power(struct Computer2 *comp, PowerKind pwkind, Keep long check_call_to_arms(struct Computer2 *comp) { - SYNCDBG(8,"Starting for player %d",(int)comp->dungeon->owner); + SYNCDBG(8,"Starting for player %d",(int)comp->dungeon_plyr_idx); long ret = 1; - if (comp->dungeon->cta_start_turn != 0) + if (computer_dungeon(comp)->cta_start_turn != 0) { long i = comp->task_idx; unsigned long k = 0; @@ -1235,11 +1235,11 @@ TbBool setup_a_computer_player(PlayerNumber plyr_idx, long comp_model) memset(comp, 0, sizeof(struct Computer2)); struct ComputerType* cpt = get_computer_type_template(comp_model); - comp->dungeon = get_players_num_dungeon(plyr_idx); + comp->dungeon_plyr_idx = plyr_idx; comp->model = comp_model; - if (dungeon_invalid(comp->dungeon)) { + if (dungeon_invalid(computer_dungeon(comp))) { WARNLOG("Tried to setup player %d which has no dungeon",(int)plyr_idx); - comp->dungeon = INVALID_DUNGEON; + comp->dungeon_plyr_idx = PLAYERS_COUNT; comp->model = 0; return false; } @@ -1347,7 +1347,7 @@ TbBool script_support_setup_player_as_computer_keeper(PlayerNumber plyr_idx, lon void computer_check_events(struct Computer2 *comp) { SYNCDBG(17,"Starting"); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); for (long i = 0; i < COMPUTER_EVENTS_COUNT; i++) { struct ComputerEvent* cevent = &comp->events[i]; @@ -1483,7 +1483,7 @@ void process_computer_player2(PlayerNumber plyr_idx) ERRORLOG("Player %d has no computer capability",(int)plyr_idx); return; } - if (dungeon_invalid(comp->dungeon)) { + if (dungeon_invalid(computer_dungeon(comp))) { ERRORLOG("Computer player %d has invalid dungeon",(int)plyr_idx); return; } @@ -1634,16 +1634,16 @@ void restore_computer_player_after_load(void) } if (!player_exists(player)) { memset(comp, 0, sizeof(struct Computer2)); - comp->dungeon = INVALID_DUNGEON; + comp->dungeon_plyr_idx = PLAYERS_COUNT; continue; } if (player->is_active != 1) { memset(comp, 0, sizeof(struct Computer2)); - comp->dungeon = get_players_dungeon(player); + comp->dungeon_plyr_idx = PLAYERS_COUNT; continue; } - comp->dungeon = get_players_dungeon(player); + comp->dungeon_plyr_idx = player->id_number; } } diff --git a/src/player_computer.h b/src/player_computer.h index ad5d93eadd..34dfff1774 100644 --- a/src/player_computer.h +++ b/src/player_computer.h @@ -253,6 +253,7 @@ struct ComputerEvent; struct Event; struct Thing; struct Room; +struct Dungeon; struct ComputerTask; struct GoldLookup; struct THate; @@ -281,25 +282,25 @@ struct ComputerDig { struct Coord3d pos_dest; /**< used by dig to position - the destination */ struct Coord3d pos_begin; /**< used by dig to position (the start of the path) and for room dig/place (the centre of the room) */ struct Coord3d pos_next; /**< used by dig to position - the next position in the path to check */ - long distance; /**< used by dig to position - the distance between a given position and the destination */ + int32_t distance; /**< used by dig to position - the distance between a given position and the destination */ unsigned char hug_side; /**< used by dig to position - the rule to follow when hugging the wall (left-hand rule/side or right-hand rule/side) */ SmallAroundIndex direction_around; /**< used by dig to position - the forwards direction of the path */ - unsigned long action_success_flag; /**< this is always set to 1... but it's value is used to create a bool test: did action fail */ - long number_of_failed_actions; /**< used by dig to position (incremented when gold is found but digflags is 0, or a mark for digging action failed) */ + uint32_t action_success_flag; /**< this is always set to 1... but it's value is used to create a bool test: did action fail */ + int32_t number_of_failed_actions; /**< used by dig to position (incremented when gold is found but digflags is 0, or a mark for digging action failed) */ MapSubtlCoord last_backwards_step_stl_x; /**< used by dig to position - ?? when a dig action fails, we step backwards, this is this the X coordinate of the slab we stepped back in to */ MapSubtlCoord last_backwards_step_stl_y; /**< used by dig to position - ?? when a dig action fails, we step backwards, this is this the Y coordinate of the slab we stepped back in to */ - long calls_count; /**< used by dig to position */ - long valuable_slabs_tagged; /**< used by dig to position - Amount of valuable slabs tagged for digging during this dig process. */ + int32_t calls_count; /**< used by dig to position */ + int32_t valuable_slabs_tagged; /**< used by dig to position - Amount of valuable slabs tagged for digging during this dig process. */ /** Variables for digging (or placing) a room. */ struct { - long area; /**< The number of slabs in the room. */ - long slabs_processed; /**< The number of slabs marked for digging or converted in to a room. */ + int32_t area; /**< The number of slabs in the room. */ + int32_t slabs_processed; /**< The number of slabs marked for digging or converted in to a room. */ /** Variables for the spiral used to dig slabs/place rooms. */ struct { SmallAroundIndex forward_direction; /**< The current direction we are moving through the spiral. */ - long turns_made; /**< The number of turns made in the spiral. */ - long steps_to_take_before_turning; /**< The number of steps to take before the next turn in the spiral. */ - long steps_remaining_before_turn; /**< The number of steps we have left to take before we need to turn in the spiral. */ + int32_t turns_made; /**< The number of turns made in the spiral. */ + int32_t steps_to_take_before_turning; /**< The number of steps to take before the next turn in the spiral. */ + int32_t steps_remaining_before_turn; /**< The number of steps we have left to take before we need to turn in the spiral. */ } spiral; } room; }; @@ -341,7 +342,7 @@ struct ComputerTask { } move_gold; struct { struct Coord3d target_pos; - long repeat_num; + int32_t repeat_num; } magic_cta; struct { KeepPwrLevel power_level; @@ -397,7 +398,7 @@ struct ComputerTask { short width; short height; RoomKind kind; - long area; + int32_t area; } create_room; struct { TbBool skip_speed; @@ -425,7 +426,7 @@ struct Computer2 { // sizeof = 5322 uint32_t click_rate; int32_t dig_stack_size; // seems to be signed long uint32_t sim_before_dig; - struct Dungeon *dungeon; + PlayerNumber dungeon_plyr_idx; uint32_t model; uint32_t turn_begin; uint32_t max_room_build_tasks; @@ -437,7 +438,7 @@ struct Computer2 { // sizeof = 5322 // TODO we could use coord2d for trap locations struct Coord3d trap_locations[COMPUTER_TRAP_LOC_COUNT]; /** Stores Sight Of Evil target points data. */ - unsigned long soe_targets[COMPUTER_SOE_GRID_SIZE]; + uint32_t soe_targets[COMPUTER_SOE_GRID_SIZE]; short ongoing_process; short task_idx; short held_thing_idx; @@ -480,6 +481,7 @@ extern Comp_Check_Func computer_check_func_list[]; /******************************************************************************/ struct Computer2 *get_computer_player_f(long plyr_idx,const char *func_name); #define get_computer_player(plyr_idx) get_computer_player_f(plyr_idx,__func__) +#define computer_dungeon(comp) get_players_num_dungeon((comp)->dungeon_plyr_idx) TbBool computer_player_invalid(const struct Computer2 *comp); long set_autopilot_type(PlayerNumber plridx, long aptype); /******************************************************************************/ diff --git a/src/player_data.c b/src/player_data.c index 2a295d96f8..0666edda5a 100644 --- a/src/player_data.c +++ b/src/player_data.c @@ -26,6 +26,7 @@ #include "config_powerhands.h" #include "player_instances.h" #include "config_players.h" +#include "front_simple.h" #include "game_legacy.h" #include "engine_redraw.h" #include "frontend.h" @@ -44,10 +45,50 @@ TbPixel possession_hit_colours[] = {133, 89, 167, 141, 31, 31, 110, 54, 46 unsigned short const player_cubes[] = {0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C7, 0x00C6 }; struct PlayerInfo bad_player; +static unsigned char *local_player_main_palette; +static unsigned char *local_player_lens_palette; /** The current player's number. */ unsigned char my_player_number; /******************************************************************************/ +static TbBool is_local_player_ref(const struct PlayerInfo *player) +{ + if (player == NULL) + return false; + if ((player < &game.players[0]) || (player >= &game.players[PLAYERS_COUNT])) + return false; + return is_my_player(player); +} + +unsigned char *get_player_main_palette(const struct PlayerInfo *player) +{ + if (!is_local_player_ref(player)) + return engine_palette; + if (local_player_main_palette == NULL) + return engine_palette; + return local_player_main_palette; +} + +void set_player_main_palette(struct PlayerInfo *player, unsigned char *palette) +{ + if (!is_local_player_ref(player)) + return; + local_player_main_palette = palette; +} + +unsigned char *get_player_lens_palette(const struct PlayerInfo *player) +{ + if (!is_local_player_ref(player)) + return NULL; + return local_player_lens_palette; +} + +void set_player_lens_palette(struct PlayerInfo *player, unsigned char *palette) +{ + if (!is_local_player_ref(player)) + return; + local_player_lens_palette = palette; +} struct Camera *get_player_active_camera(const struct PlayerInfo *player) { @@ -245,6 +286,8 @@ TbBool player_is_friendly_or_defeated(PlayerNumber check_plyr_idx, PlayerNumber void clear_players(void) { + local_player_main_palette = NULL; + local_player_lens_palette = NULL; for (int i = 0; i < PLAYERS_COUNT; i++) { struct PlayerInfo* player = &game.players[i]; diff --git a/src/player_data.h b/src/player_data.h index c3ed6d0400..482f96d7ae 100644 --- a/src/player_data.h +++ b/src/player_data.h @@ -156,7 +156,6 @@ struct PlayerInfo { unsigned char input_crtr_control; unsigned char input_crtr_query; unsigned char display_flags; - unsigned char *lens_palette; /** Index of packet slot associated with this player. */ unsigned char packet_num; int32_t hand_animationId; @@ -208,14 +207,13 @@ struct PlayerInfo { unsigned char cursor_button_down; // left or right button down (whilst using the bounding box cursor) /** Player instance, from PlayerInstanceNum enum. */ unsigned char instance_num; - unsigned long instance_remain_turns; + GameTurnDelta instance_remain_turns; /** If view mode is temporarily covered by another, the original mode which is to be restored later will be saved here.*/ char view_mode_restore; int32_t dungeon_camera_zoom; int32_t palette_fade_step_map; int32_t palette_fade_step_pain; int32_t palette_fade_step_possession; - unsigned char *main_palette; /** Overcharge level while casting keeper powers. */ int32_t cast_expand_level; char video_cluedo_mode; @@ -305,8 +303,13 @@ void reset_player_mode(struct PlayerInfo *player, unsigned short nview); void clear_players(void); +unsigned char *get_player_main_palette(const struct PlayerInfo *player); +void set_player_main_palette(struct PlayerInfo *player, unsigned char *palette); +unsigned char *get_player_lens_palette(const struct PlayerInfo *player); +void set_player_lens_palette(struct PlayerInfo *player, unsigned char *palette); struct Camera *get_player_active_camera(const struct PlayerInfo *player); void set_player_active_camera(struct PlayerInfo *player, unsigned char cam_idx); + unsigned char rotate_mode_to_view_mode(unsigned char mode); unsigned char get_player_color_idx(PlayerNumber plyr_idx); diff --git a/src/player_utils.c b/src/player_utils.c index 1402fcfff5..2b0e30b1e6 100644 --- a/src/player_utils.c +++ b/src/player_utils.c @@ -19,6 +19,8 @@ #include "pre_inc.h" #include "player_utils.h" +#include + #include "globals.h" #include "bflib_basics.h" #include "bflib_math.h" @@ -114,7 +116,7 @@ void set_player_as_won_level(struct PlayerInfo *player) show_real_time_taken(); } struct GameTime GameT = get_game_time(dungeon->lvstats.hopes_dashed, game_num_fps); - SYNCMSG("Won level %u. Total turns taken: %lu (%02u:%02u:%02u at %d fps). Real time elapsed: %02u:%02u:%02u:%03u.", + SYNCMSG("Won level %u. Total turns taken: %" PRIu32 " (%02u:%02u:%02u at %d fps). Real time elapsed: %02u:%02u:%02u:%03u.", game.loaded_level_number, dungeon->lvstats.hopes_dashed, GameT.Hours, GameT.Minutes, GameT.Seconds, game_num_fps, Timer.Hours, Timer.Minutes, Timer.Seconds, Timer.MSeconds); @@ -781,7 +783,7 @@ void init_player(struct PlayerInfo *player, short no_explore) setup_engine_window(0, 0, MyScreenWidth, MyScreenHeight); player->continue_work_state = PSt_CtrlDungeon; player->work_state = PSt_CtrlDungeon; - player->main_palette = engine_palette; + set_player_main_palette(player, engine_palette); player->minimap_zoom = settings.minimap_zoom; player->isometric_view_zoom_level = settings.isometric_view_zoom_level; player->frontview_zoom_level = settings.frontview_zoom_level; diff --git a/src/power_hand.h b/src/power_hand.h index eccda2ca49..22e3b50d02 100644 --- a/src/power_hand.h +++ b/src/power_hand.h @@ -116,7 +116,7 @@ struct HandRule { char type; char enabled; char allow; // allow: 1, deny: 0 - long param; + int32_t param; }; TbBool eval_hand_rule_for_thing(struct HandRule *rule, const struct Thing *thing_to_pick); diff --git a/src/room_data.h b/src/room_data.h index 4fd9a90da5..b06cfad101 100644 --- a/src/room_data.h +++ b/src/room_data.h @@ -95,7 +95,7 @@ struct Room { /** For rooms which can store things, amount of storage space, or sum of gold, used by them. * Rooms which can store things are workshops, libraries, treasure rooms etc. */ struct { - unsigned long capacity_used_for_storage; + uint32_t capacity_used_for_storage; ThingIndex cached_nearby_creature_index; }; /** For rooms which are often browsed for various reasons, list of all rooms of given kind. diff --git a/src/sounds.c b/src/sounds.c index 0a7ac164e5..3be35f4edd 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -395,8 +395,6 @@ TbBool init_sound(void) struct SoundSettings* snd_settng = &game.sound_settings; snd_settng->flags = SndSetting_Sound; snd_settng->sound_type = 1622; - snd_settng->sound_data_path = sound_dir; - snd_settng->dir3 = sound_dir; snd_settng->sound_buffer_enable = 1; snd_settng->stereo = 1; snd_settng->max_number_of_samples = 100; diff --git a/src/sounds.h b/src/sounds.h index 5bf9e78819..4dd81abe18 100644 --- a/src/sounds.h +++ b/src/sounds.h @@ -39,9 +39,6 @@ extern "C" { struct Thing; struct SoundSettings { - char *sound_data_path; - char *music_data_path; - char *dir3; unsigned short sound_type; unsigned short flags; unsigned char max_number_of_samples; diff --git a/src/thing_creature.c b/src/thing_creature.c index 0a49015f4d..67777b2e19 100644 --- a/src/thing_creature.c +++ b/src/thing_creature.c @@ -5615,7 +5615,7 @@ long player_list_creature_filter_needs_to_be_placed_in_room_for_job(const struct { SYNCDBG(19,"Starting for %s index %d owner %d",thing_model_name(thing),(int)thing->index,(int)thing->owner); struct Computer2* comp = (struct Computer2*)(param->primary_pointer); - struct Dungeon* dungeon = comp->dungeon; + struct Dungeon* dungeon = computer_dungeon(comp); if (!can_thing_be_picked_up_by_player(thing, dungeon->owner)) { return -1; } diff --git a/src/thing_list.h b/src/thing_list.h index db2dc472df..9b32ee2d15 100644 --- a/src/thing_list.h +++ b/src/thing_list.h @@ -175,8 +175,8 @@ struct CompoundTngFilterParam { }; struct StructureList { - unsigned long count; - unsigned long index; + uint32_t count; + uint32_t index; }; #pragma pack() diff --git a/src/vidfade.c b/src/vidfade.c index fd134066b4..2d9b6d47e7 100644 --- a/src/vidfade.c +++ b/src/vidfade.c @@ -302,9 +302,10 @@ long PaletteFadePlayer(struct PlayerInfo *player) i = 120; long step = 120 - i; // Create the new palette + unsigned char* player_palette = get_player_main_palette(player); for (i=0; i < PALETTE_COLORS; i++) { - unsigned char* src = &player->main_palette[3 * i]; + unsigned char* src = &player_palette[3 * i]; unsigned char* dst = &palette[3 * i]; unsigned long pix = ((step * (((long)src[0]) - 63)) / 120) + 63; if (pix > 63)