diff --git a/scripts/devel/cmptiles.lua b/scripts/devel/cmptiles.lua new file mode 100644 index 000000000..8421038eb --- /dev/null +++ b/scripts/devel/cmptiles.lua @@ -0,0 +1,42 @@ +-- Lists and/or compares two tiletype material groups. +-- Usage: devel/cmptiles material1 [material2] + +local nmat1,nmat2=... +local mat1 = df.tiletype_material[nmat1] +local mat2 = df.tiletype_material[nmat2] + +local tmat1 = {} +local tmat2 = {} + +local attrs = df.tiletype.attrs + +for i=df.tiletype._first_item,df.tiletype._last_item do + local shape = df.tiletype_shape[attrs[i].shape] or '' + local variant = df.tiletype_variant[attrs[i].variant] or '' + local special = df.tiletype_special[attrs[i].special] or '' + local direction = attrs[i].direction or '' + local code = shape..':'..variant..':'..special..':'..direction + + if attrs[i].material == mat1 then + tmat1[code] = true + end + if attrs[i].material == mat2 then + tmat2[code] = true + end +end + +local function list_diff(n, t1, t2) + local lst = {} + for k,v in pairs(t1) do + if not t2[k] then + lst[#lst+1] = k + end + end + table.sort(lst) + for k,v in ipairs(lst) do + print(n, v) + end +end + +list_diff(nmat1,tmat1,tmat2) +list_diff(nmat2,tmat2,tmat1) diff --git a/scripts/devel/watch-minecarts.lua b/scripts/devel/watch-minecarts.lua new file mode 100644 index 000000000..166004d85 --- /dev/null +++ b/scripts/devel/watch-minecarts.lua @@ -0,0 +1,74 @@ +-- Logs minecart coordinates and speeds to console. + +last_stats = last_stats or {} + +function compare_one(vehicle) + local last = last_stats[vehicle.id] + local item = df.item.find(vehicle.item_id) + local ipos = item.pos + local new = { + ipos.x*100000 + vehicle.offset_x, vehicle.speed_x, + ipos.y*100000 + vehicle.offset_y, vehicle.speed_y, + ipos.z*100000 + vehicle.offset_z, vehicle.speed_z + } + + if (last == nil) or item.flags.on_ground then + local delta = { vehicle.id } + local show = (last == nil) + + for i=1,6 do + local rv = 0 + if last then + rv = last[i] + end + delta[i*2] = new[i]/100000 + local dv = new[i] - rv + delta[i*2+1] = dv/100000 + if dv ~= 0 then + show = true + end + end + + if show then + print(table.unpack(delta)) + end + end + + last_stats[vehicle.id] = new +end + +function compare_all() + local seen = {} + for _,v in ipairs(df.global.world.vehicles.all) do + seen[v.id] = true + compare_one(v) + end + for k,v in pairs(last_stats) do + if not seen[k] then + print(k,'DEAD') + end + end +end + +function start_timer() + if not dfhack.timeout_active(timeout_id) then + timeout_id = dfhack.timeout(1, 'ticks', function() + compare_all() + start_timer() + end); + if not timeout_id then + dfhack.printerr('Could not start timer in watch-minecarts') + end + end +end + +compare_all() + +local cmd = ... + +if cmd == 'start' then + start_timer() +elseif cmd == 'stop' then + dfhack.timeout_active(timeout_id, nil) +end +