Bay 12 Games Forum

Please login or register.

Login with username, password and session length
Advanced search  
Pages: 1 ... 907 908 [909] 910 911 ... 1104

Author Topic: What's going on in your adventure?  (Read 2028686 times)

Max™

  • Bay Watcher
  • [CULL:SQUARE]
    • View Profile
Re: What's going on in your adventure?
« Reply #13620 on: January 21, 2017, 05:57:03 pm »

Oh yeah, I changed gm-editor a lot

This seems really helpful. Would you be willing to share? (Sorry to be that guy.)
Code: [Select]
-- Interface powered item editor.

--[====[

gui/gm-editor
=============
This editor allows to change and modify almost anything in df. Press :kbd:`?` for
in-game help. There are three ways to open this editor:

* Callling ``gui/gm-editor``  from a command or keybinding opens the editor
  on whatever is selected or viewed (e.g. unit/item description screen)

* using gui/gm-editor <lua command> - executes lua command and opens editor on
  its results (e.g. ``gui/gm-editor "df.global.world.items.all"`` shows all items)

* using gui/gm-editor dialog - shows an in game dialog to input lua command. Works
  the same as version above.

* using ``gui/gm-editor toggle`` - will hide (if shown) and show (if hidden) editor at
  the same position you left it

.. image:: /docs/images/gm-editor.png

]====]
--a variable the stores persistant screen
persist_screen=persist_screen or nil --does nothing, here just to remind everyone

local gui = require 'gui'
local dialog = require 'gui.dialogs'
local widgets = require 'gui.widgets'
local guiScript = require 'gui.script'
local utils = require 'utils'
local args = {...}

find_funcs = find_funcs or (function()
    local t = {}
    for k in pairs(df) do
        pcall(function()
            t[k] = df[k].find
        end)
    end
    return t
end)()

local keybindings={
    offset={key="CUSTOM_ALT_O",desc="Show current items offset"},
    find={key="CUSTOM_F",desc="Find a value by entering a predicate"},
    find_id={key="CUSTOM_I",desc="Find object with this ID"},
    lua_set={key="CUSTOM_ALT_S",desc="Set by using a lua function"},
    insert={key="CUSTOM_ALT_I",desc="Insert a new value to the vector"},
    delete={key="CUSTOM_ALT_D",desc="Delete selected entry"},
    reinterpret={key="CUSTOM_ALT_R",desc="Open selected entry as something else"},
    start_filter={key="CUSTOM_S",desc="Start typing filter, Enter to finish"},
    help={key="HELP",desc="Show this help"},
    displace={key="STRING_A093",desc="Open reference offseted by index"},
    NOT_USED={key="SEC_SELECT",desc="Edit selected entry as a number (for enums)"}, --not a binding...
}
function getTargetFromScreens()
    local my_trg
    if dfhack.gui.getCurFocus() == 'item' then
        my_trg=dfhack.gui.getCurViewscreen().item
    elseif dfhack.gui.getCurFocus() == 'joblist' then
        local t_screen=dfhack.gui.getCurViewscreen()
        my_trg=t_screen.jobs[t_screen.cursor_pos]
    elseif dfhack.gui.getCurFocus() == 'createquota' then
        local t_screen=dfhack.gui.getCurViewscreen()
        my_trg=t_screen.orders[t_screen.sel_idx]
    elseif dfhack.gui.getSelectedUnit(true) then
local g_ref=dfhack.gui.getSelectedUnit(true).general_refs
for _,k in ipairs(g_ref) do
if g_ref[0].nemesis_id then
my_trg=df.global.world.nemesis.all[g_ref[0].nemesis_id]
else
my_trg=dfhack.gui.getSelectedUnit(true)
end
end
    elseif df.global.ui_advmode.menu==1 then
        local t_look=df.global.ui_look_list.items[df.global.ui_look_cursor]
        my_trg=t_look.unit
    elseif dfhack.gui.getSelectedItem(true) then
        my_trg=dfhack.gui.getSelectedItem(true)
    elseif dfhack.gui.getSelectedJob(true) then
        my_trg=dfhack.gui.getSelectedJob(true)
    elseif df.global.ui_advmode.menu==26 then
        local armies=df.global.world.armies.all
for k,v in ipairs(armies) do
if v.flags[0] then
my_trg=df.global.world.armies.all[k].pos
end
end
else
        my_trg=df.global
    end
    return my_trg
end
function search_relevance(search, candidate)
    local function clean(str)
        return ' ' .. str:lower():gsub('[^a-z0-9]','') .. ' '
    end
    search = clean(search)
    candidate = clean(candidate)
    local ret = 0
    while #search > 0 do
        local pos = candidate:find(search:sub(1, 1), 1, true)
        if pos then
            ret = ret + (#search - pos)
            candidate = candidate:sub(pos + 1)
        end
        search = search:sub(2)
    end
    return ret
end


GmEditorUi = defclass(GmEditorUi, gui.FramedScreen)
GmEditorUi.ATTRS={
    frame_style = gui.GREY_LINE_FRAME,
    frame_title = "GameMaster's editor",
    }
function GmEditorUi:onHelp()
    self.subviews.pages:setSelected(2)
end
function burning_red(input) -- todo does not work! bug angavrilov that so that he would add this, very important!!
    local col=COLOR_LIGHTRED
    return {text=input,pen=dfhack.pen.parse{fg=COLOR_LIGHTRED,bg=0}}
end
function Disclaimer(tlb)
    local dsc={"Association Of ",{text="Psychic ",pen=dfhack.pen.parse{fg=COLOR_YELLOW,bg=0}},
        "Dwarves (AOPD) is not responsible for all the damage",NEWLINE,"that this tool can (and will) cause to you and your loved dwarves",NEWLINE,"and/or saves.Please use with caution.",NEWLINE,{text="Magma not included.",pen=dfhack.pen.parse{fg=COLOR_LIGHTRED,bg=0}}}
    if tlb then
        for _,v in ipairs(dsc) do
            table.insert(tlb,v)
        end
    end
    return dsc
end

function GmEditorUi:init(args)
    self.stack={}
    self.item_count=0
    self.keys={}
    local helptext={{text="Help"},NEWLINE,NEWLINE}
    for k,v in pairs(keybindings) do
        table.insert(helptext,{text=v.desc,key=v.key,key_sep=': '})
        table.insert(helptext,NEWLINE)
    end
    table.insert(helptext,NEWLINE)
    Disclaimer(helptext)

    local helpPage=widgets.Panel{
        subviews={widgets.Label{text=helptext,frame = {l=1,t=1,yalign=0}}}}
    local mainList=widgets.List{view_id="list_main",choices={},frame = {l=1,t=3,yalign=0},on_submit=self:callback("editSelected"),
        on_submit2=self:callback("editSelectedRaw"),
        text_pen=dfhack.pen.parse{fg=COLOR_DARKGRAY,bg=0},cursor_pen=dfhack.pen.parse{fg=COLOR_YELLOW,bg=0}}
    local mainPage=widgets.Panel{
        subviews={
            mainList,
            widgets.Label{text={{text="<no item>",id="name"},{gap=1,text="Help",key=keybindings.help.key,key_sep = '()'}}, view_id = 'lbl_current_item',frame = {l=1,t=1,yalign=0}},
            widgets.Label{text={{text="Search",key=keybindings.start_filter.key,key_sep = '()'},{text=": "}},frame={l=1,t=2},
                on_click=function() self:enable_input(true) end},
            widgets.EditField{frame={l=12,t=2},active=false,on_change=self:callback('text_input'),on_submit=self:callback("enable_input",false),view_id="filter_input"},
            --widgets.Label{text="BLAH2"}
                }
        ,view_id='page_main'}

    local pages=widgets.Pages{subviews={mainPage,helpPage},view_id="pages"}
    self:addviews{
        pages
    }
    self:pushTarget(args.target)
end
function GmEditorUi:text_input(new_text)
    self:updateTarget(true,true)
end
function GmEditorUi:enable_input(enable)
    self.subviews.filter_input.active=enable
end
function GmEditorUi:find(test)
    local trg=self:currentTarget()

    if test== nil then
        dialog.showInputPrompt("Test function","Input function that tests(k,v as argument):",COLOR_WHITE,"",dfhack.curry(self.find,self))
        return
    end

    local e,what=load("return function(k,v) return "..test.." end")
    if e==nil then
        dialog.showMessage("Error!","function failed to compile\n"..what,COLOR_LIGHTRED)
    end

    if trg.target and trg.target._kind and trg.target._kind=="container" then

        for k,v in pairs(trg.target) do
            if e()(k,v)==true then
                self:pushTarget(v)
                return
            end
        end
    else
        local i=1
        for k,v in pairs(trg.target) do
            if e()(k,v)==true then
                self.subviews.list_main:setSelected(i)
                return
            end
            i=i+1
        end
    end
end
function GmEditorUi:find_id()
    local key = tostring(self:getSelectedKey())
    local id = tonumber(self:getSelectedValue())
    if not id then return end
    local opts = {}
    for name, func in pairs(find_funcs) do
        table.insert(opts, {text=name, callback=func, weight=search_relevance(key, name)})
    end
    table.sort(opts, function(a, b)
        return a.weight > b.weight
    end)
    guiScript.start(function()
        local ret,idx,choice=guiScript.showListPrompt("Choose type:",nil,3,opts,nil,true)
        if ret then
            local obj = choice.callback(id)
            if obj then
                self:pushTarget(obj)
            else
                dialog.showMessage("Error!", ('%s with ID %d not found'):format(choice.text, id), COLOR_LIGHTRED)
            end
        end
    end)
end
function GmEditorUi:insertNew(typename)
    local tp=typename
    if typename == nil then
        dialog.showInputPrompt("Class type","You can:\n * Enter type name (without 'df.')\n * Leave empty for default type and 'nil' value\n * Enter '*' for default type and 'new' constructed pointer value",COLOR_WHITE,"",self:callback("insertNew"))
        return
    end

    local trg=self:currentTarget()
    if trg.target and trg.target._kind and trg.target._kind=="container" then
        if tp == "" then
            trg.target:resize(#trg.target+1)
        elseif tp== "*" then
            trg.target:insert("#",{new=true})
        else
            local ntype=df[tp]
            if ntype== nil then
                dialog.showMessage("Error!","Type '"..tp.." not found",COLOR_RED)
                return
            end
            trg.target:insert("#",{new=ntype})
        end
        self:updateTarget(true,true)
    end
end
function GmEditorUi:deleteSelected(key)
    local trg=self:currentTarget()
    if trg.target and trg.target._kind and trg.target._kind=="container" then
        trg.target:erase(key)
        self:updateTarget(true,true)
    end
end
function GmEditorUi:getSelectedKey()
    return self:currentTarget().keys[self.subviews.list_main:getSelected()]
end
function GmEditorUi:getSelectedValue()
    return self:currentTarget().target[self:getSelectedKey()]
end
function GmEditorUi:currentTarget()
    return self.stack[#self.stack]
end
function GmEditorUi:getSelectedEnumType()
    local trg=self:currentTarget()
    local trg_key=trg.keys[self.subviews.list_main:getSelected()]

    local ok,ret=pcall(function () --super safe way to check if the field has enum
        return trg.target._field==nil or trg.target:_field(trg_key)==nil
    end)
    if not ok or ret==true then
        return nil
    end

    local enum=trg.target:_field(trg_key)._type
    if enum._kind=="enum-type" then
        return enum
    else
        return nil
    end
end
function GmEditorUi:editSelectedEnum(index,choice)
    local enum=self:getSelectedEnumType()
    if enum then
        local trg=self:currentTarget()
        local trg_key=self:getSelectedKey()
        local list={}
        for i=enum._first_item, enum._last_item do
            table.insert(list,{text=('%s (%i)'):format(tostring(enum[i]), i),value=i})
        end
        guiScript.start(function()
            local ret,idx,choice=guiScript.showListPrompt("Choose item:",nil,3,list,nil,true)
            if ret then
                trg.target[trg_key]=choice.value
                self:updateTarget(true)
            end
        end)

    else
        qerror("not an enum")
    end
end
function GmEditorUi:openReinterpret(key)
    local trg=self:currentTarget()
    dialog.showInputPrompt(tostring(trg_key),"Enter new type:",COLOR_WHITE,
                "",function(choice)
                    local ntype=df[tp]
                    self:pushTarget(df.reinterpret_cast(ntype,trg.target[key]))
                end)
end
function GmEditorUi:openOffseted(index,choice)
    local trg=self:currentTarget()
    local trg_key=trg.keys[index]

    dialog.showInputPrompt(tostring(trg_key),"Enter offset:",COLOR_WHITE,"",
        function(choice)
            self:pushTarget(trg.target[trg_key]:_displace(tonumber(choice)))
        end)
end
function GmEditorUi:editSelectedRaw(index,choice)
    self:editSelected(index, choice, {raw=true})
end
function GmEditorUi:editSelected(index,choice,opts)
    opts = opts or {}
    local trg=self:currentTarget()
    local trg_key=trg.keys[index]
    if trg.target and trg.target._kind and trg.target._kind=="bitfield" then
        trg.target[trg_key]= not trg.target[trg_key]
        self:updateTarget(true)
    else
        --print(type(trg.target[trg.keys[trg.selected]]),trg.target[trg.keys[trg.selected]]._kind or "")
        local trg_type=type(trg.target[trg_key])
        if self:getSelectedEnumType() and not opts.raw then
            self:editSelectedEnum()
        elseif trg_type=='number' or trg_type=='string' then --ugly TODO: add metatable get selected
            dialog.showInputPrompt(tostring(trg_key),"Enter new value:",COLOR_WHITE,
                tostring(trg.target[trg_key]),self:callback("commitEdit",trg_key))

        elseif trg_type == 'boolean' then
            trg.target[trg_key] = not trg.target[trg_key]
            self:updateTarget(true)
        elseif trg_type == 'userdata' or trg_type == 'table' then
            self:pushTarget(trg.target[trg_key])
        elseif trg_type == 'nil' or trg_type == 'function' then
            -- ignore
        else
            print("Unknown type:"..trg_type)
            pcall(function() print("Subtype:"..tostring(trg.target[trg_key]._kind)) end)
        end
    end
end

function GmEditorUi:commitEdit(key,value)
    local trg=self:currentTarget()
    if type(trg.target[key])=='number' then
        trg.target[key]=tonumber(value)
    elseif type(trg.target[key])=='string' then
        trg.target[key]=value
    end
    self:updateTarget(true)
end

function GmEditorUi:set(key,input)
    local trg=self:currentTarget()

    if input== nil then
        dialog.showInputPrompt("Set to what?","Lua code to set to (v cur target):",COLOR_WHITE,"",self:callback("set",key))
        return
    end
    local e,what=load("return function(v) return "..input.." end")
    if e==nil then
        dialog.showMessage("Error!","function failed to compile\n"..what,COLOR_LIGHTRED)
        return
    end
    trg.target[key]=e()(trg)
    self:updateTarget(true)
end
function GmEditorUi:onInput(keys)
    if keys.LEAVESCREEN_ALL  then
        self:dismiss()
    end
    if keys.LEAVESCREEN  then
        if self.subviews.filter_input.active then
            self:enable_input(false)
            return
        end
        if self.subviews.pages:getSelected()==2 then
            self.subviews.pages:setSelected(1)
        else
            self:popTarget()
        end
    end

    if self.subviews.filter_input.active then
        self.super.onInput(self,keys)
        return
    end

    if keys[keybindings.offset.key] then
        local trg=self:currentTarget()
        local _,stoff=df.sizeof(trg.target)
        local size,off=df.sizeof(trg.target:_field(self:getSelectedKey()))
        dialog.showMessage("Offset",string.format("Size hex=%x,%x dec=%d,%d\nRelative hex=%x dec=%d",size,off,size,off,off-stoff,off-stoff),COLOR_WHITE)
    elseif keys[keybindings.displace.key] then
        self:openOffseted(self.subviews.list_main:getSelected())
    elseif keys[keybindings.find.key] then
        self:find()
    elseif keys[keybindings.find_id.key] then
        self:find_id()
    elseif keys[keybindings.lua_set.key] then
        self:set(self:getSelectedKey())
    elseif keys[keybindings.insert.key] then --insert
        self:insertNew()
    elseif keys[keybindings.delete.key] then --delete
        self:deleteSelected(self:getSelectedKey())
    elseif keys[keybindings.reinterpret.key] then
        self:openReinterpret(self:getSelectedKey())
    elseif keys[keybindings.start_filter.key] then
        self:enable_input(true)
        return
    end

    self.super.onInput(self,keys)
end
function getStringValue(trg,field)
    local obj=trg.target

    local text=tostring(obj[field])
    pcall(function()
    if obj._field ~= nil then
        local enum=obj:_field(field)._type
        if enum._kind=="enum-type" then
            text=text.." ("..tostring(enum[obj[field]])..")"
        end
    end
    end)
    return text
end
function GmEditorUi:updateTarget(preserve_pos,reindex)
    local trg=self:currentTarget()
    local filter=self.subviews.filter_input.text

    if reindex then
        trg.keys={}
        for k,v in pairs(trg.target) do
            if filter~= "" then
                local ok,ret=dfhack.pcall(string.match,tostring(k),filter)
                if not ok then
                    table.insert(trg.keys,k)
                elseif ret then
                    table.insert(trg.keys,k)
                end
            else
                table.insert(trg.keys,k)
            end
        end
    end
    self.subviews.lbl_current_item:itemById('name').text=tostring(trg.target)
    local t={}
    for k,v in pairs(trg.keys) do
            table.insert(t,{text={{text=string.format("%-25s",tostring(v))},{gap=1,text=getStringValue(trg,v)}}})
    end
    local last_pos
    if preserve_pos then
        last_pos=self.subviews.list_main:getSelected()
    end
    self.subviews.list_main:setChoices(t)
    if last_pos then
        self.subviews.list_main:setSelected(last_pos)
    else
        self.subviews.list_main:setSelected(trg.selected)
    end
end
function GmEditorUi:pushTarget(target_to_push)
    local new_tbl={}
    new_tbl.target=target_to_push
    new_tbl.keys={}
    new_tbl.selected=1
    new_tbl.filter=""
    if self:currentTarget()~=nil then
        self:currentTarget().selected=self.subviews.list_main:getSelected()
        self.stack[#self.stack].filter=self.subviews.filter_input.text
    end
    for k,v in pairs(target_to_push) do
        table.insert(new_tbl.keys,k)
    end
    new_tbl.item_count=#new_tbl.keys
    table.insert(self.stack,new_tbl)
    self.subviews.filter_input.text=""
    self:updateTarget()
end
function GmEditorUi:popTarget()
    table.remove(self.stack) --removes last element
    if #self.stack==0 then
        self:dismiss()
        return
    end
    self.subviews.filter_input.text=self.stack[#self.stack].filter --restore filter
    self:updateTarget()
end
function show_editor(trg)
    if not trg then
        qerror('Target not found')
    end
    local screen = GmEditorUi{target=trg}
    persist_screen=screen
    screen:show()
end
eval_env = utils.df_shortcut_env()
function eval(s)
    local f, err = load("return " .. s, "expression", "t", eval_env)
    if err then qerror(err) end
    return f()
end
if #args~=0 then
    if args[1]=="dialog" then
        function thunk(entry)
            show_editor(eval(entry))
        end
        dialog.showInputPrompt("Gm Editor", "Object to edit:", COLOR_GRAY, "",thunk)
    elseif args[1]=="free" then
        show_editor(df.reinterpret_cast(df[args[2]],args[3]))
    elseif args[1]=="toggle" then
        if persist_screen then
            if persist_screen:isActive() then
                persist_screen:dismiss()
            else
                persist_screen:show()
            end
        end
    else
        show_editor(eval(args[1]))
    end
else
    show_editor(getTargetFromScreens())
end

There's also an updated symbols.xml for linux 64bit, hurray!
Logged

Eric Blank

  • Bay Watcher
  • *Remain calm*
    • View Profile
Re: What's going on in your adventure?
« Reply #13621 on: January 21, 2017, 08:37:08 pm »

Do giant animals attack settlements? I walked in to find a giant tiger with a name assaulting the meadhall, and for some reason got spit at when I cut it down. Oddly hard fight too, but I guess everything's harder when forgoing a shield and relying on dodging so you can use a hammer and axe in either hand =.

They will walk into settlements. The animal in question likely got its name by attacking someone in the past. Like wild animals that didn't kill someone in the past won't wander into settlements usually.
Logged
I make Spellcrafts!
I have no idea where anything is. I have no idea what anything does. This is not merely a madhouse designed by a madman, but a madhouse designed by many madmen, each with an intense hatred for the previous madman's unique flavour of madness.

TheFlame52

  • Bay Watcher
  • Master of the randomly generated
    • View Profile
Re: What's going on in your adventure?
« Reply #13622 on: January 21, 2017, 09:12:35 pm »

Rismal has discovered that he hates bandits almost as much as night creatures. Since my last post he's cleaned out several bandit camps and a few dungeons. He also killed 4 wereantelope, a forgotten beast (a winged ash blob, what a pushover), and a dragon. He's a legendary hero thanks to those last two.

Also he just killed a swamp titan. It was a giant peaceful anteater and also a pushover.

Rismal's trophy sack is a bit lacking. All it has in it is Rismal's pet beetle, a highwood flower, a crystal glass ibu with divine fabric strings (that he can play), and a steel flask full of mixed dragon and vampire blood.

oh

  • Bay Watcher
    • View Profile
Re: What's going on in your adventure?
« Reply #13623 on: January 21, 2017, 09:14:21 pm »

Oh yeah, I changed gm-editor a lot

This seems really helpful. Would you be willing to share? (Sorry to be that guy.)
Spoiler (click to show/hide)
There's also an updated symbols.xml for linux 64bit, hurray!

Oh, I see what you meant now. Thank you!

(btw, if there's not a nemesis entry for a particular unit, you can't use this, right?)

its all lua scripting so it's possible to load that up. which... kinda what killed dfusion.
it a separate script I think in dfhack called adv bodyswap. but I mostly have my own version of the script so I don't use it.
Y-yeah? It doesn't seem that adv-bodyswap is packaged with dfhack anymore. And it's not a lua script iirc; it was a cpp plugin, part of advtools maybe, I think, but I haven't seen it in a build of dfhack for a while now. Does your thing work with 0.43.05?
Logged

StagnantSoul

  • Bay Watcher
  • "Player has withdrawn from society!"
    • View Profile
Re: What's going on in your adventure?
« Reply #13624 on: January 21, 2017, 10:21:15 pm »

Been trying to find the best mixture of weapons for dual wielding. So far axe-hammer seems the best, though sword-spear was successful, as was whip-dagger. Mace-dagger was bad, couldn't kill anything really. Double shields was oddly deadly, the bashes killed quite a few dingoes and goblins before I succumbed to passing out from blood loss, with a pair of fishers crushing my head in with their fists.
Logged
Quote from: Cptn Kaladin Anrizlokum
I threw night creature blood into a night creature's heart and she pulled it out and bled to death.
Quote from: Eric Blank
Places to jibber madly at each other, got it
Quote from: NJW2000
If any of them are made of fire, throw stuff, run, and think non-flammable thoughts.

Rumrusher

  • Bay Watcher
  • current project : searching...
    • View Profile
Re: What's going on in your adventure?
« Reply #13625 on: January 22, 2017, 01:33:54 am »

oh I see max discovered how to mess with calendar.
I mostly use it to shrink the 2 week timer to "now" and get into adventure/fort mode faster, and spent 3 months trying to simulate a whole year. what i learn is... no don't do this unless your pc can go through a week in a second.
Logged
I thought I would I had never hear my daughter's escapades from some boy...
DAMN YOU RUMRUSHER!!!!!!!!
"body swapping and YOU!"
Adventure in baby making!Adv Homes

Max™

  • Bay Watcher
  • [CULL:SQUARE]
    • View Profile
Re: What's going on in your adventure?
« Reply #13626 on: January 22, 2017, 05:30:06 am »

On smaller worlds it isn't too bad, only takes about five or six minutes for a full year on a 65x65 with a couple hundred years of history.
Oh yeah, I changed gm-editor a lot

This seems really helpful. Would you be willing to share? (Sorry to be that guy.)
Spoiler (click to show/hide)
There's also an updated symbols.xml for linux 64bit, hurray!

Oh, I see what you meant now. Thank you!

(btw, if there's not a nemesis entry for a particular unit, you can't use this, right?)
Put the cursor over the unit and run gm-editor, I tried a few different ways to get it to fall back to the unit entry if no nemesis id but it kept going straight to the unit instead so I went ahead and added in the fallback for animals/dummy population buffer units.

Logged

Rumrusher

  • Bay Watcher
  • current project : searching...
    • View Profile
Re: What's going on in your adventure?
« Reply #13627 on: January 22, 2017, 10:28:55 am »

So there something fun and imaginative to see than a post apoc zombie setting having a town full of gasmask wearing army men and warlords in a bar drinking beer and telling tales out in the infected wasteland.
also fast traveling into the middle of a town expecting to be swarmed by infected only to notice their normal humans.
picked up a thief and a merc name lance, and got ambushed by dingos.
flanking in this game is great makes up for having no combat skill what so ever, like I'm sure my character couldn't even wrestle a dingo in a fair face off.
lance ran up lock a dingo around his arm and toss them behind him on steep hill.
kinda made me wish I set up my throw/jump script.
which reminds me looking after you set up the grab counts as an action. so anyone in combat here a heads up so you don't  end up dying while your looking at someone.
corrosion is a nice mod.
Logged
I thought I would I had never hear my daughter's escapades from some boy...
DAMN YOU RUMRUSHER!!!!!!!!
"body swapping and YOU!"
Adventure in baby making!Adv Homes

Max™

  • Bay Watcher
  • [CULL:SQUARE]
    • View Profile
Re: What's going on in your adventure?
« Reply #13628 on: January 22, 2017, 06:32:41 pm »

Launch is working fine on 64 bit now, I'm still coming to terms with that and my ability to make artifakes again.

Noticed I screwed up and originally the script looked for k.id==0, ending up with the first slab being turned into a dupe of itself and fucking shit up, when I just needed to look for k.item==nil instead.
Logged

TheFlame52

  • Bay Watcher
  • Master of the randomly generated
    • View Profile
Re: What's going on in your adventure?
« Reply #13629 on: January 22, 2017, 09:21:03 pm »

Rismal killed two rocs in one day. The next day he killed two hydras and an ettin. The day after that he killed 14 vile creatures. I think it's time to take on a vault.

mikekchar

  • Bay Watcher
    • View Profile
Re: What's going on in your adventure?
« Reply #13630 on: January 22, 2017, 11:05:35 pm »

Been trying to find the best mixture of weapons for dual wielding.

Hard to say whether you would consider this "dual weapon", but I've found that open hand and dagger is a surprising powerful option.  You can use the open hand to intercept attacks and also to grab shields and helmets.  The dagger is then quite useful for opening arteries and stabbing in the head/neck.  Probably not a fantastic combo for megabeasts, but works very well for wildlife and humanoids.  I'll often go completely empty handed and draw the dagger once my opponent is vulnerable, or sometimes start off with open hand and shield, swapping out the shield for the dagger at some point (useful tip: create space, throw shield, draw dagger).
Logged

Eric Blank

  • Bay Watcher
  • *Remain calm*
    • View Profile
Re: What's going on in your adventure?
« Reply #13631 on: January 23, 2017, 02:35:13 am »

Got eaten by a hydra, together with three friends
Logged
I make Spellcrafts!
I have no idea where anything is. I have no idea what anything does. This is not merely a madhouse designed by a madman, but a madhouse designed by many madmen, each with an intense hatred for the previous madman's unique flavour of madness.

Random_Dragon

  • Bay Watcher
  • Psycho Bored Dragon
    • View Profile
Re: What's going on in your adventure?
« Reply #13632 on: January 23, 2017, 03:15:13 am »

And I'm sure you were delicious. :V
Logged
On DF Wiki · On DFFD

"Hey idiots, someone hacked my account to call you all idiots! Wasn't me you idiots!" seems to stretch credulity a bit.

Shonai_Dweller

  • Bay Watcher
    • View Profile
Re: What's going on in your adventure?
« Reply #13633 on: January 23, 2017, 07:28:17 am »

Exciting start to a new adventure.

Figured I'd be an Elf from a camp next to a dark fortress ruled by an murderous elf lady. Might go assassinate her later.

Started my adventurer only to find the camp under attack by a brooding ogre wife. About 30 hunters are about to finish her off. Will see if I can get a shot in...

--edit a few short rounds later...
Camp of elves totally slaughtered. When there was no-one left it came for me, wooden arrows bouncing feebly off it's leathery wings...
« Last Edit: January 23, 2017, 08:08:45 am by Shonai_Dweller »
Logged

Rumrusher

  • Bay Watcher
  • current project : searching...
    • View Profile
Re: What's going on in your adventure?
« Reply #13634 on: January 23, 2017, 07:37:33 am »

found having a shield and a open hand works best for when you need to snap a neck and not worry about the repercussions of failing to attack
so in messing with arena news, I finally went and played around with the fact you can plant trees and use those trees to create floors in that weird void room if you dfhack cut them down. and the process seems to make a hole in the void area.

that all said saving these arenas are very very unstable some times you get it some times you don't others you just wont load if you select it.
but some day someone will figure out how to expand the world and or load up site worlds with dfhack.
Logged
I thought I would I had never hear my daughter's escapades from some boy...
DAMN YOU RUMRUSHER!!!!!!!!
"body swapping and YOU!"
Adventure in baby making!Adv Homes
Pages: 1 ... 907 908 [909] 910 911 ... 1104