DFHack 53.10-r2
[p]Please report any issues (or feature requests) on the DFHack GitHub issue tracker. When reporting issues, please upload a zip file of your savegame and a zip file of your [c]mods[/c] directory to the cloud and add links to the GitHub issue. Make sure your files are downloadable by "everyone with the link". We need your savegame to reproduce the problem and test the fix, and we need your active mods so we can load your savegame. Issues with savegames and mods attached get fixed first![/p][h2]Highlights[/h2][p]QoL features, Bug fixes, Technical updates[/p][h3]QoL features[/h3][p]This update features many QoL features:[/p]
- [p]For those of you with hundreds or even thousands of manager orders, we added a tool to make it a bit easier to find the one you're looking for[/p]
- [p]We added a filter to exclude (or, if you really want, include) dwarves with "uniformed" civilian roles in the squad selection menu filters[/p]
- [p]We added a utility to automatically clear certain categories of announcements (like sparring) from the announcement buffer so that the announcements you actually care about won't be crowded out[/p]
- [p]We added a button to show a unit's death cause to the dead/missing units tab[/p]
- [p]You can now assign names or labels to "quick commands"[/p]
- [p]You can now edit pressure plate settings[/p]
- [p]The prioritize overlay will no longer inappropriately appear when following a unit[/p]
- [p]The "missing nemesis record" notifier has been adjusted to be a bit more selective in how it reports issues[/p]
- [p]The rename tool is now slightly more conscientious in validating its inputs[/p]
- [p]For scripters/modders, we added a library function to place spatters[/p]
- [p]We added "original-name" attributes to virtually every DF structure whose name didn't match the Bay12 name, which facilitates reverse-engineering as well as communications with Bay12. This process also fixed a handful of typos or other errors, which may require some third-party scripts to be adjusted to reflect. A list of specific changes appears in the changelog, below[/p]
- [p]DFHack now validates vtable pointers before using them. This will prevent DFHack from crashing when some DF data structure contains bad data. Of course, when this happens DF will probably crash sooner or later, but at least it won't be DFHack's fault...[/p]
Changelog
[p]New tools, fixes, and improvements[/p][h2]New Tools[/h2]- [p][c]gui/logcleaner[/c]: graphical overlay for configuring the logcleaner plugin with enable and filter toggles.[/p]
- [p][c]logcleaner[/c]: New plugin for time-triggered clearing of combat, sparring, and hunting reports with configurable filtering and overlay UI.[/p]
- [p][c]orders[/c]: added search overlay to find and navigate to matching manager orders with arrow indicators[/p]
- [p][c]sort[/c]:[/p]
- [p]added [c]Uniformed[/c] filter to squad assignment screen to filter dwarves with mining, woodcutting, or hunting labors[/p]
- [p]Add death cause button to dead/missing tab in the creatures screen[/p]
- [p][c]trackstop[/c]: can now modify pressure plates; permits minecart and creature triggers to be set beyond normal sensitivity[/p]
- [p][c]gui/rename[/c]: added check for entity_id input in get_target function[/p]
- [p][c]prioritize[/c]: Fix the overlay appearing where it should not when following a unit[/p]
- [p]Core: DFHack now validates vtable pointers in objects read from memory and will throw an exception instead of crashing when an invalid vtable pointer is encountered. This makes it easier to identify which DF data structure contains corrupted data when this manifests in the form of a bad vtable pointer, and shifts blame for such crashes from DFHack to DF.[/p]
- [p][c]gui/notify[/c]: reduced severity of the missing nemesis records warning if no units on the map are affected. clarified wording.[/p]
- [p]Added [c]Items::pickGrowthPrint[/c]: given a plant material and a growth index, returns the print variant corresponding to the current in-game time.[/p]
- [p]Added [c]Items::useStandardMaterial[/c]: given an item type, returns true if the item is made of a specific material and false if it has a race and caste instead.[/p]
- [p]Added [c]Maps::addItemSpatter[/c]: add a spatter of the specified item + material + growth print to the indicated tile, returning whatever amount wouldn't fit in the tile.[/p]
- [p]Added [c]Maps::addMaterialSpatter[/c]: add a spatter of the specified material + state to the indicated tile, returning whatever amount wouldn't fit in the tile.[/p]
- [p]Added [c]Maps::addItemSpatter[/c] as [c]dfhack.maps.addItemSpatter[/c].[/p]
- [p]Added [c]Maps::addMaterialSpatter[/c] as [c]dfhack.maps.addMaterialSpatter[/c].[/p]
- [p]added [c]original-name[/c] attributes to all relevant objects[/p]
- [p]fixed numerous structure errors[/p]
- [p]specific changes:[/p]
- [p]added NONE entries to many enum types (may affect C++ code using switch() statements): abstract_building_reputation_type, adopt_region_stage_type, artifact_claim_type, block_square_event_type, building_profile_acquisition_method, civzone_type, dance_form_context, dance_form_group_size, dance_form_move_type, divination_outcome_type, dungeon_type, dungeon_wrestle_type, embark_finder_option, environment_type, era_type, flow_type, genetic_modifier_type, hf_artifact_action_type, history_event_collection_type, incident_artifact_location_type, incident_type, incident_written_content_location_type, insurrection_outcome, interaction_flags, interaction_source_type, intrigue_corruption_method_type, inventory_profile_skill_type, inv_item_role_type, journey_type, language_name_category, language_name_component, language_word_table_index, load_game_stage_type, main_choice_type, misc_trait_type, musical_form_melody_frequency, musical_form_melody_style, musical_form_purpose, occasion_schedule_feature, occasion_schedule_type, occupation_type, personality_preference_type, plant_material_def, poetic_form_persona_type, poetic_form_persona_type, prepare_rod_stage_type, projectile_type, region_weather_type, report_zoom_type, resource_allotment_specifier_type, save_substage, scale_construction_type, scale_naming_type, scale_type, secretion_condition, simple_action_type, site_dispute_type, squad_order_cannot_reason, squad_order_type, tactical_situation, talk_choice_type, theft_method_type, timbre_type, travel_log_itinerary_type, workquota_frequency_type, world_construction_type, wrestle_attack_type[/p]
- [p]assigned explicit "UNUSED" names to anonymous enum/bitfield members which are unused[/p]
- [p]expanded [c]builtin_mats[/c] to include 640 new elements for CREATURE_1-200, HIST_FIG_1-200, PLANT_1-200, and UNUSED01-40[/p]
- [p]assigned proper placeholder names to [c]interface_key[/c] section labels[/p]
- [p]promoted several inline-defined types to top-level (intrigue_corruption_flag, job_posting_flag, unitproperyplacementst)[/p]
- [p][c]plant_raw.stockpile_growth_flags[/c] now uses [c]ras_crop_flag[/c][/p]
- [p]added [c]entity_raw_flags[/c] element "SIEGE_SKILLED_MINERS"[/p]
- [p]added [c]stockpile_category[/c] element "ALL"[/p]
- [p]fixed structure layouts for [c]adventure_interface_companionsst[/c], [c]caste_raw[/c], [c]entity_position_assignment[/c], [c]message_order_to_perform_actionst[/c], and [c]workshop_graphics_infost[/c][/p]
- [p]renamed [c]army_controller_goal_infiltrate_societyst[/c] field "agoal_ab_id" to "goal_ab_id"[/p]
- [p]renamed [c]creature_graphics_layer[/c] field "dye_color_iuse_palette_rowndex" to "use_palette_row"[/p]
- [p]renamed [c]entity_raw_flags[/c] enum member "MISSING_UNDERWORLD_DISASTERS" to "MINING_UNDERWORLD_DISASTERS"[/p]
- [p]assigned proper names to [c]hf_religious_datast.anon_1[/c], [c]pet_profilest.anon_1[/c], and [c]unit_vision_arcst.anon_1[/c][/p]
- [p]renamed [c]historical_entity[/c] field "unkarmy_reeling_defense" to "army_reeling_defense"[/p]
- [p]renamed [c]history_event_hf_learns_secretst[/c] field "interaction_effect" to "interaction_source"[/p]
- [p]renamed [c]item_craft_graphics_flag[/c] field "size" to "material"[/p]
- [p]renamed [c]lookinfo_spatterst[/c] field "extend" to "extent"[/p]
- [p]renamed [c]personality_ethicst[/c] field "reponse" to "response"[/p]
- [p]renamed [c]personality_facet_type[/c] enum member "PERSEVERENCE" to "PERSEVERANCE"[/p]
- [p]renamed [c]value_type[/c] enum member "PERSEVERENCE" to "PERSEVERANCE"[/p]
- [p]renamed [c]poetic_form_action[/c] enum member "MakeConsession" to "MakeConcession"[/p]
- [p]renamed [c]simple_action_type[/c] enum member "performe_horrible_experiments" to "performed_horrible_experiments"[/p]
- [p]renamed [c]stair_graphics_flag_material[/c] enum member "FOZEN" to "FROZEN"[/p]
- [p]renamed [c]timbre_type[/c] enum member "PURE_" to "PURE"[/p]
- [p]renamed [c]tissue_style_type[/c] enum member "PONY_TAILS" to "PONY_TAIL"[/p]
- [p]renamed [c]unit[/c] field "job.siege_boulder" to "job.siege_builder"[/p]
- [p]renamed [c]unit[/c] field "pool_index" to "pool_id"[/p]
- [p]renamed [c]viewscreen_choose_start_sitest[/c] field "def_candidate_nearst" to "def_candidate_near_st"[/p]
- [p]changed [c]caste_raw.extracts.blood_state[/c] and [c]caste_raw.extracts.pus_state[/c] to use the [c]matter_state[/c] enum[/p]
- [p]changed [c]d_init.display.track_tile_invert[/c] and [c]d_init.display.track_ramp_invert[/c] to use a bitfield[/p]
- [p]changed [c]interrogation_resultst.relationship_factor[/c] to use a new enum type (which DF itself actually isn't using yet due to a bug)[/p]
- [p]changed [c]intrigue_perspectivest.potential_corrupt_circumstance_target\[][/c] to contain [c]circumstance_id[/c] unions instead of plain integers[/p]
- [p]changed [c]world.buildings.other.WINDOW_ANY[/c] to specify the correct element type[/p]
- [p]changed [c]world.items.other.BAG[/c], [c]world.items.other.BOLT_THROWER_PARTS[/c], [c]world.items.other.ANY_DRINK[/c], [c]world.items.other.ANY_CRITTER[/c], and [c]world.items.other.FOOD_STORAGE[/c] to specify the correct element types[/p]
- [p]changed [c]game.main_interface.last_displayed_hover_inst[/c] to use the [c]main_hover_instruction[/c] enum[/p]
- [p]changed [c]world.raws.music.all\[N].m_event\[][/c] and [c]world.raws.music.all\[N].context\[][/c] to hold enums[/p]
- [p]changed [c]widget_job_details_button.jb[/c] to correctly point at a [c]job[/c] instead of a generic pointer[/p]
- [p]changed [c]world.worldgen_status.rejection_reason[/c] to use the [c]map_reject_type[/c] enum[/p]
- [p]changed [c]world.history.first_\[research]_flag\[N][/c] to use the various [c]knowledge_scholar_flags_N[/c] bitfields[/p]
- [p]changed the [c]history_event[/c] vmethods [c]getSentence[/c] and [c]getPhrase[/c] to add 2 new boolean arguments (to which the game always passes "true, false")[/p]
- [p]changed the [c]interaction_target[/c] vmethod [c]affects_unit[/c] first parameter from an integer to a unit pointer[/p]
- [p]changed the [c]item[/c] vmethod [c]getGloveHandedness[/c] return type from int8_t to uint32_t[/p]
- [p]changed the [c]item[/c] vmethod [c]getAmmoType[/c] to take no parameters and to return an [c]std::string[/c] by value[/p]
- [p]changed the [c]item[/c] vmethod [c]getDyeAmount[/c] to take an integer parameter[/p]
- [p]changed the [c]unit[/c] vmethod [c]getCreatureTile[/c] to take a boolean parameter[/p]
- [p]add [c]ref-target[/c] attributes to various fields that were missing them, for use by [c]gui/gm-editor[/c] and similar tools[/p]
- [p]changed [c]caste_raw.extracts.vermin_bite_chance[/c] to [c]vermin_bite_state[/c] and changed its type to [c]matter_state[/c][/p]
- [p]changed [c]ci_personal_reputation_profilest[/c] field [c]entity_id[/c] to [c]cultural_identity[/c] (now referring to a [c]cultural_identity[/c])[/p]
- [p]changed [c]cultural_identity.events\[][/c] to [c]cultural_identity.rumor_info.events\[][/c][/p]
- [p]changed [c]dance_form[/c] field [c]entity[/c] to [c]event[/c] (now referring to at a [c]history_event[/c])[/p]
- [p]changed [c]dance_form_section[/c] field [c]acts_out_civ[/c] to [c]acts_out_event[/c] (now referring to a [c]history_event[/c])[/p]
- [p]changed [c]entity_burial_request[/c] field [c]civ[/c] to [c]hfid[/c] (now referring to a [c]historical_figure[/c])[/p]
- [p]changed [c]entity_pop_specifierst[/c] field [c]squad_id[/c] to [c]squad_enid[/c] (now referring to a [c]historical_entity[/c])[/p]
- [p]changed [c]gps.color\[x]\[y][/c] to [c]gps.default_palette.color\[x*16+y][/c][/p]
- [p]changed [c]history_event_modified_buildingst[/c] field [c]modification[/c] to use a different bitfield [c]abstract_building_tower_flag[/c][/p]
- [p]changed [c]itemdef_ammost[/c], [c]itemdef_siegeammost[/c], [c]itemdef_toolst[/c], [c]itemdef_trapcompst[/c], and [c]itemdef_weaponst[/c] fields "texpos" (and "texpos2") into longer lists of specific fields[/p]
- [p]changed [c]knowledge_profilest.known_events\[][/c] to [c]knowledge_profilest.rumor_info.events\[][/c][/p]
- [p]changed [c]relationship_event_supplement[/c] integer field [c]occasion_type[/c] to [c]circumstance[/c] of type [c]unit_thought_type[/c] (an enum)[/p]
- [p]changed [c]relationship_event_supplement[/c] integer field [c]site[/c] to [c]circumstance_id[/c] field of type [c]circumstance_id[/c] (a union)[/p]
- [p]changed [c]relationship_event_supplement[/c] field [c]profession[/c] to [c]reason_id[/c] field of type [c]history_event_reason_id[/c][/p]
- [p]changed [c]scholar_knowledge.knowledge_goal[/c] bitfield to a union of all [c]knowledge_scholar_flags_N[/c] bitfields (selected by the value of [c]scholar_knowledge.research_prject[/c])[/p]
- [p]changed [c]unit.enemy.rumor\[][/c] to [c]unit.enemy.rumor_info.events\[][/c][/p]