ok so screwing around with DF 50 and decided to poke around with jumping into viewscreens again.
this here is the game mode view screen script which lets you force DF to bring up the game mode menu screen.
which has some interesting interactions mid fort mode session as if you embark again near your current fort the game will load in the next land mass chunk
local old_screen=dfhack.gui.getCurViewscreen()
local new_screen=df.viewscreen_choose_game_typest:new()
old_screen.child=new_screen
new_screen.parent=old_screen
new_screen.gametypes:insert("#",0)
new_screen.gametypes:insert("#",2)
which leads to the next port of an old script. the mobile campboats got remade into a nanofort shuttle script which lets one take a nano fort and move it around the embark screen when combined with the game menu script to jump back into the embark menu again you can unretire your nano fort and connect said fort to the previous fort.
another thing of note for doing this I been calling the process of unloaded map chunks digging and exploring the void and kinda been seeing this set up as Void forts where your main void fort is latching on to these other forts as a source for supplies and equipment and when you have your fill with the place you just move everyone back to the main void fort location and retire.
edit 4/21/2023: I went back and edited the name of the old station name script to reflect that these forts don't need to be nano to move around.
--nano-boat-station-for-void-forts
local dlg=require("gui.dialogs")
function teleportboatnames2()
local Ark={}
for k,v in pairs(df.global.world.world_data.sites) do
if v.name.first_name=="STATION" then
BoaName=dfhack.TranslateName(v.name)
table.insert (Ark,{dfhack.TranslateName(v.name).." "..v.name.nickname,nil,v})
end
end
local f=function(Name,C)
MobileFortNano(C[3])
--teleportboatlista(C[3])
end
dlg.showListPrompt("list of stations","Select Station(s) to settle here",COLOR_WHITE,Ark,f)
end
function MobileFortNano(siteID)
local MapCure=df.global.gview.view.child.location
local MapCurx=MapCure.region_pos.x
local MapCury=MapCure.region_pos.y
local MapCurEmbark=MapCure.embark_pos_min
local Fortsite=siteID.index
df.global.world.world_data.sites[Fortsite].pos.x=MapCurx
df.global.world.world_data.sites[Fortsite].pos.y=MapCury
df.global.world.world_data.sites[Fortsite].rgn_min_x=MapCurEmbark.x
df.global.world.world_data.sites[Fortsite].rgn_max_x=MapCurEmbark.x
df.global.world.world_data.sites[Fortsite].rgn_min_y=MapCurEmbark.y
df.global.world.world_data.sites[Fortsite].rgn_max_y=MapCurEmbark.y
df.global.world.world_data.sites[Fortsite].global_min_x=MapCurEmbark.x
df.global.world.world_data.sites[Fortsite].global_max_x=MapCurEmbark.x
df.global.world.world_data.sites[Fortsite].global_min_y=MapCurEmbark.y
df.global.world.world_data.sites[Fortsite].global_max_y=MapCurEmbark.y
end
if df.global.gview.view.child==nil then
print("this script requires you to be in the raid menu to work")
else
teleportboatnames2()
end
and
local dlg=require("gui.dialogs")
function nameStation()
df.global.world.world_data.sites[df.global.plotinfo.site_id-1].name.first_name="STATION"
df.global.world.world_data.sites[df.global.plotinfo.site_id-1].name.nickname="VoidShuttle"
dlg.showMessage("Travel-Hack","Converting fort into VoidStation")
end
nameStation()
so Station move script functions in embark menu as you set up your embark size and select the destination while not confirming the warning prompt that shows up as you use that to lock the coord in place so the script can function.
the script will then pull a list of 'Stations' to put into that spot, you probably want to then back to selecting a spot to embark to actually embark.
the second script is for setting up the nano fort to be a 'Nano Fort Station' so you can select said site from the pool of other Stations.
the process works as running the script while playing the nano fort then I guess save and or retire the nano fort.
should be warned void fort playstyle is a bit open to either being a novelty gimmick or potentially run ending levels of dangerous if you don't keep tabs on your important citizens while preparing to break off from the site you latch on too.
oh and you can totally dig into the void/un-allocated space doing this.
the script works on nano forts so making it take any size of your fort to move would take a bit more work and probably more ram space to load up two larger forts next to each other.
that said you could make a large first fort then move and second embark a nano void fort next to that site to tap into the resources.
oh and be careful on z level stuff moving around the world map and connecting to other forts might lead to having one fort higher or lower than the other and might require digging into the other site to connect to it.
oh and if you want to preserve the stuff you made and the units you gotten, you may want to move into the second/last/latest fort in the chain of game mode caused fort re-embarkings.
anything built in the void is temporary on retire and back in 47 visiting the place in adv mode led to the locations being filled back in to the normal terrain. so you might end up with dwarves trapped in soil and rock.
so have fun exploring the world through void traveling into other forts(or just connecting the fort directly to the other fort side by side)
oh yeah I should dump the script that hides other sites and unhides them so you can embark on pre-gen sites and loot them as well
for k,v in pairs(df.global.world.world_data.sites) do
if v.type~=0 then
v.flags[0]=true
end
end
for k,v in pairs(df.global.world.world_data.sites) do
if v.type~=0 then
v.flags[0]=false
end
end
these scripts will hide and reveal sites that are not player sites.
should also note if you hide the sites at the start of the game and play fort mode for a bit longer and retire and unretire the game will spawn in more sites, so you could end up with means to raid and attack folks and also accidentally embark over a tomb or dark pit's burial grounds.
edit : ok here's a short script that converts explore ruin missions to be one that let's you conquer them,
local si2=df.global.gview.view.child.child.army_controller
local si=df.global.gview.view.child.child.army_controller[0].site_id
for fo,rm in pairs (si2) do
if rm.type==2 then
if rm.data.InvasionOrder.unk_1==5 then
rm.data.InvasionOrder.unk_1=2
end
end
end
just run this while in the world map screen in DF 50. for the folks who overkilled a location and didn't get the chance to conquer it and or not feeling like reclaiming and retiring a ruin site.
edit: ok so here's an update to station move that lets you move any size void fort
local dlg=require("gui.dialogs")
function teleportboatnames3()
local Ark={}
for k,v in pairs(df.global.world.world_data.sites) do
if v.name.first_name=="STATION" then
BoaName=dfhack.TranslateName(v.name)
table.insert (Ark,{dfhack.TranslateName(v.name).." "..v.name.nickname,nil,v})
end
end
local f=function(Name,C)
MobileFortNano(C[3])
end
dlg.showListPrompt("list of stations","Select Station(s) to settle here",COLOR_WHITE,Ark,f)
end
function stationmove()
if df.global.gview.view.child==nil then
print("this script requires you to be in the raid menu to work")
else
teleportboatnames3()
end
end
function MobileFortNano(siteID)
--local MapCurx=df.global.gview.view.child.location._x
local MapCure=df.global.gview.view.child.location
--local MapCure=df.global.gview.view.child.child.location
local MapCurx=MapCure.region_pos.x
local MapCury=MapCure.region_pos.y
local MapCurEmbark=MapCure.embark_pos_min
local MapCurEmbark2=MapCure.embark_pos_max
local Fortsite=siteID.index
local FortSize=df.global.world.world_data.sites[Fortsite]
local math1=FortSize.rgn_min_x-FortSize.rgn_max_x
local math1a=FortSize.rgn_min_y-FortSize.rgn_max_y
local math2=MapCurEmbark.x-MapCurEmbark2.x
local math2a=MapCurEmbark.y-MapCurEmbark2.y
if math1==math2 and math1a==math2a then
--print("works")
df.global.world.world_data.sites[Fortsite].pos.x=MapCurx
df.global.world.world_data.sites[Fortsite].pos.y=MapCury
df.global.world.world_data.sites[Fortsite].rgn_min_x=MapCurEmbark.x
df.global.world.world_data.sites[Fortsite].rgn_max_x=MapCurEmbark2.x
df.global.world.world_data.sites[Fortsite].rgn_min_y=MapCurEmbark.y
df.global.world.world_data.sites[Fortsite].rgn_max_y=MapCurEmbark2.y
df.global.world.world_data.sites[Fortsite].global_min_x=MapCurEmbark.x
df.global.world.world_data.sites[Fortsite].global_max_x=MapCurEmbark2.x
df.global.world.world_data.sites[Fortsite].global_min_y=MapCurEmbark.y
df.global.world.world_data.sites[Fortsite].global_max_y=MapCurEmbark2.y
else
dlg.showMessage("Travel-Hack-Error","incorrect fort size change to correct size")
print('incorrect fort size change to correct size')
end
end
stationmove()