From 6730e58bcf95bead2bc107453653251ba821518a Mon Sep 17 00:00:00 2001 From: expwnent Date: Tue, 15 Sep 2015 02:19:09 -0400 Subject: [PATCH] scripts/modtools/create-unit.lua: fix indentation and add todo list. --- scripts/modtools/create-unit.lua | 305 ++++++++++++++++--------------- 1 file changed, 158 insertions(+), 147 deletions(-) diff --git a/scripts/modtools/create-unit.lua b/scripts/modtools/create-unit.lua index 73bb4acd6..e753ac416 100644 --- a/scripts/modtools/create-unit.lua +++ b/scripts/modtools/create-unit.lua @@ -3,6 +3,16 @@ -- version 0.4 -- This is a beta version. Use at your own risk. +--[[ + TODO + children and babies: set child/baby job + confirm body size is computed appropriately for different ages / life stages + incarnate pre-existing historical figures + some sort of invasion helper script + set invasion_id, etc + announcement for fake natural birth if appropriate +]] + --[[ if dfhack.gui.getCurViewscreen()._type ~= df.viewscreen_dwarfmodest or df.global.ui.main.mode ~= df.ui_sidebar_mode.LookAround then print 'activate loo[k] mode' @@ -35,7 +45,7 @@ function createUnit(race_id, caste_id) --df.global.world.arena_spawn.equipment.skill_levels:insert(0,0) df.global.gametype = 4 - + gui.simulateInput(dfhack.gui.getCurViewscreen(), 'D_LOOK_ARENA_CREATURE') gui.simulateInput(dfhack.gui.getCurViewscreen(), 'SELECT') @@ -56,141 +66,142 @@ end -- Picking a caste or gender at random function getRandomCasteId(race_id) - local cr = df.creature_raw.find(race_id) - local caste_id, casteMax + local cr = df.creature_raw.find(race_id) + local caste_id, casteMax - casteMax = #cr.caste - 1 + casteMax = #cr.caste - 1 - if casteMax > 0 then - return math.random(0, casteMax) - end + if casteMax > 0 then + return math.random(0, casteMax) + end - return 0 + return 0 end local function allocateNewChunk(hist_entity) - hist_entity.save_file_id=df.global.unit_chunk_next_id - df.global.unit_chunk_next_id=df.global.unit_chunk_next_id+1 - hist_entity.next_member_idx=0 - print("allocating chunk:",hist_entity.save_file_id) + hist_entity.save_file_id=df.global.unit_chunk_next_id + df.global.unit_chunk_next_id=df.global.unit_chunk_next_id+1 + hist_entity.next_member_idx=0 + print("allocating chunk:",hist_entity.save_file_id) end local function allocateIds(nemesis_record,hist_entity) - if hist_entity.next_member_idx==100 then - allocateNewChunk(hist_entity) - end - nemesis_record.save_file_id=hist_entity.save_file_id - nemesis_record.member_idx=hist_entity.next_member_idx - hist_entity.next_member_idx=hist_entity.next_member_idx+1 + if hist_entity.next_member_idx==100 then + allocateNewChunk(hist_entity) + end + nemesis_record.save_file_id=hist_entity.save_file_id + nemesis_record.member_idx=hist_entity.next_member_idx + hist_entity.next_member_idx=hist_entity.next_member_idx+1 end function createFigure(trgunit,he,he_group) - local hf=df.historical_figure:new() - hf.id=df.global.hist_figure_next_id - hf.race=trgunit.race - hf.caste=trgunit.caste - hf.profession = trgunit.profession - hf.sex = trgunit.sex - df.global.hist_figure_next_id=df.global.hist_figure_next_id+1 - hf.appeared_year = df.global.cur_year - - hf.born_year = trgunit.relations.birth_year - hf.born_seconds = trgunit.relations.birth_time - hf.curse_year = trgunit.relations.curse_year - hf.curse_seconds = trgunit.relations.curse_time - hf.birth_year_bias = trgunit.relations.birth_year_bias - hf.birth_time_bias = trgunit.relations.birth_time_bias - hf.old_year = trgunit.relations.old_year - hf.old_seconds = trgunit.relations.old_time - hf.died_year = -1 - hf.died_seconds = -1 - hf.name:assign(trgunit.name) - hf.civ_id = trgunit.civ_id - hf.population_id = trgunit.population_id - hf.breed_id = -1 - hf.unit_id = trgunit.id - - df.global.world.history.figures:insert("#",hf) - - hf.info = df.historical_figure_info:new() - hf.info.unk_14 = df.historical_figure_info.T_unk_14:new() -- hf state? - --unk_14.region_id = -1; unk_14.beast_id = -1; unk_14.unk_14 = 0 - hf.info.unk_14.unk_18 = -1; hf.info.unk_14.unk_1c = -1 - -- set values that seem related to state and do event - --change_state(hf, dfg.ui.site_id, region_pos) - - - --lets skip skills for now - --local skills = df.historical_figure_info.T_skills:new() -- skills snap shot - -- ... - hf.info.skills = {new=true} - - - he.histfig_ids:insert('#', hf.id) - he.hist_figures:insert('#', hf) - if he_group then - he_group.histfig_ids:insert('#', hf.id) - he_group.hist_figures:insert('#', hf) - hf.entity_links:insert("#",{new=df.histfig_entity_link_memberst,entity_id=he_group.id,link_strength=100}) - end - trgunit.flags1.important_historical_figure = true - trgunit.flags2.important_historical_figure = true - trgunit.hist_figure_id = hf.id - trgunit.hist_figure_id2 = hf.id - - hf.entity_links:insert("#",{new=df.histfig_entity_link_memberst,entity_id=trgunit.civ_id,link_strength=100}) - - --add entity event - local hf_event_id=df.global.hist_event_next_id - df.global.hist_event_next_id=df.global.hist_event_next_id+1 - df.global.world.history.events:insert("#",{new=df.history_event_add_hf_entity_linkst,year=trgunit.relations.birth_year, - seconds=trgunit.relations.birth_time,id=hf_event_id,civ=hf.civ_id,histfig=hf.id,link_type=0}) - return hf + local hf=df.historical_figure:new() + hf.id=df.global.hist_figure_next_id + hf.race=trgunit.race + hf.caste=trgunit.caste + hf.profession = trgunit.profession + hf.sex = trgunit.sex + df.global.hist_figure_next_id=df.global.hist_figure_next_id+1 + hf.appeared_year = df.global.cur_year + + hf.born_year = trgunit.relations.birth_year + hf.born_seconds = trgunit.relations.birth_time + hf.curse_year = trgunit.relations.curse_year + hf.curse_seconds = trgunit.relations.curse_time + hf.birth_year_bias = trgunit.relations.birth_year_bias + hf.birth_time_bias = trgunit.relations.birth_time_bias + hf.old_year = trgunit.relations.old_year + hf.old_seconds = trgunit.relations.old_time + hf.died_year = -1 + hf.died_seconds = -1 + hf.name:assign(trgunit.name) + hf.civ_id = trgunit.civ_id + hf.population_id = trgunit.population_id + hf.breed_id = -1 + hf.unit_id = trgunit.id + + df.global.world.history.figures:insert("#",hf) + + hf.info = df.historical_figure_info:new() + hf.info.unk_14 = df.historical_figure_info.T_unk_14:new() -- hf state? + --unk_14.region_id = -1; unk_14.beast_id = -1; unk_14.unk_14 = 0 + hf.info.unk_14.unk_18 = -1; hf.info.unk_14.unk_1c = -1 + -- set values that seem related to state and do event + --change_state(hf, dfg.ui.site_id, region_pos) + + + --lets skip skills for now + --local skills = df.historical_figure_info.T_skills:new() -- skills snap shot + -- ... + -- note that innate skills are automaticaly set by DF + hf.info.skills = {new=true} + + + he.histfig_ids:insert('#', hf.id) + he.hist_figures:insert('#', hf) + if he_group then + he_group.histfig_ids:insert('#', hf.id) + he_group.hist_figures:insert('#', hf) + hf.entity_links:insert("#",{new=df.histfig_entity_link_memberst,entity_id=he_group.id,link_strength=100}) + end + trgunit.flags1.important_historical_figure = true + trgunit.flags2.important_historical_figure = true + trgunit.hist_figure_id = hf.id + trgunit.hist_figure_id2 = hf.id + + hf.entity_links:insert("#",{new=df.histfig_entity_link_memberst,entity_id=trgunit.civ_id,link_strength=100}) + + --add entity event + local hf_event_id=df.global.hist_event_next_id + df.global.hist_event_next_id=df.global.hist_event_next_id+1 + df.global.world.history.events:insert("#",{new=df.history_event_add_hf_entity_linkst,year=trgunit.relations.birth_year, + seconds=trgunit.relations.birth_time,id=hf_event_id,civ=hf.civ_id,histfig=hf.id,link_type=0}) + return hf end - + function createNemesis(trgunit,civ_id,group_id) - local id=df.global.nemesis_next_id - local nem=df.nemesis_record:new() - - nem.id=id - nem.unit_id=trgunit.id - nem.unit=trgunit - nem.flags:resize(4) - --not sure about these flags... - -- [[ - nem.flags[4]=true - nem.flags[5]=true - nem.flags[6]=true - nem.flags[7]=true - nem.flags[8]=true - nem.flags[9]=true - --]] - --[[for k=4,8 do - nem.flags[k]=true - end]] - nem.unk10=-1 - nem.unk11=-1 - nem.unk12=-1 - df.global.world.nemesis.all:insert("#",nem) - df.global.nemesis_next_id=id+1 - trgunit.general_refs:insert("#",{new=df.general_ref_is_nemesisst,nemesis_id=id}) - trgunit.flags1.important_historical_figure=true - - nem.save_file_id=-1 - - local he=df.historical_entity.find(civ_id) - he.nemesis_ids:insert("#",id) - he.nemesis:insert("#",nem) - local he_group - if group_id and group_id~=-1 then - he_group=df.historical_entity.find(group_id) - end - if he_group then - he_group.nemesis_ids:insert("#",id) - he_group.nemesis:insert("#",nem) - end - allocateIds(nem,he) - nem.figure=createFigure(trgunit,he,he_group) + local id=df.global.nemesis_next_id + local nem=df.nemesis_record:new() + + nem.id=id + nem.unit_id=trgunit.id + nem.unit=trgunit + nem.flags:resize(4) + --not sure about these flags... + -- [[ + nem.flags[4]=true + nem.flags[5]=true + nem.flags[6]=true + nem.flags[7]=true + nem.flags[8]=true + nem.flags[9]=true + --]] + --[[for k=4,8 do + nem.flags[k]=true + end]] + nem.unk10=-1 + nem.unk11=-1 + nem.unk12=-1 + df.global.world.nemesis.all:insert("#",nem) + df.global.nemesis_next_id=id+1 + trgunit.general_refs:insert("#",{new=df.general_ref_is_nemesisst,nemesis_id=id}) + trgunit.flags1.important_historical_figure=true + + nem.save_file_id=-1 + + local he=df.historical_entity.find(civ_id) + he.nemesis_ids:insert("#",id) + he.nemesis:insert("#",nem) + local he_group + if group_id and group_id~=-1 then + he_group=df.historical_entity.find(group_id) + end + if he_group then + he_group.nemesis_ids:insert("#",id) + he_group.nemesis:insert("#",nem) + end + allocateIds(nem,he) + nem.figure=createFigure(trgunit,he,he_group) end --createNemesis(u, u.civ_id,group) @@ -258,11 +269,11 @@ function nameUnit(id, entityRawName, civ_id) local entity = df.historical_entity.find(civ_id) entity_raw = entity.entity_raw end - + if not entity_raw then error('entity raw = nil: ', id, entityRawName, civ_id) end - + local translation = entity_raw.translation local translationIndex for k,v in ipairs(df.global.world.raws.language.translations) do @@ -329,7 +340,7 @@ end local args = utils.processArgs({...}, validArgs) if args.help then - print( + print( [[scripts/modtools/create-unit.lua arguments: -help @@ -344,32 +355,32 @@ arguments: examples: MALE FEMALE - -domesticate - if the unit can't learn or can't speak, then make it a friendly animal + -domesticate + if the unit can't learn or can't speak, then make it a friendly animal -civId id - make the created unit a member of the specified civ (or none if id = -1) - if id is \\LOCAL, then make it a member of the civ associated with the current fort - otherwise id must be an integer - -groupId id - make the created unit a member of the specified group (or none if id = -1) - if id is \\LOCAL, then make it a member of the group associated with the current fort - otherwise id must be an integer - -name entityRawName - set the unit's name to be a random name appropriate for the given entity - examples: - MOUNTAIN + make the created unit a member of the specified civ (or none if id = -1) + if id is \\LOCAL, then make it a member of the civ associated with the current fort + otherwise id must be an integer + -groupId id + make the created unit a member of the specified group (or none if id = -1) + if id is \\LOCAL, then make it a member of the group associated with the current fort + otherwise id must be an integer + -name entityRawName + set the unit's name to be a random name appropriate for the given entity + examples: + MOUNTAIN -location [ x y z ] - create the unit at the specified coordinates - -age howOld - set the birth date of the unit to the specified number of years ago + create the unit at the specified coordinates + -age howOld + set the birth date of the unit to the specified number of years ago -flagSet [ flag1 flag2 ... ] - set the specified unit flags in the new unit to true - flags may be selected from df.unit_flags1, df.unit_flags2, or df.unit_flags3 - -flagClear [ flag1 flag2 ... ] - set the specified unit flags in the new unit to false - flags may be selected from df.unit_flags1, df.unit_flags2, or df.unit_flags3 + set the specified unit flags in the new unit to true + flags may be selected from df.unit_flags1, df.unit_flags2, or df.unit_flags3 + -flagClear [ flag1 flag2 ... ] + set the specified unit flags in the new unit to false + flags may be selected from df.unit_flags1, df.unit_flags2, or df.unit_flags3 ]]) - return + return end local race