After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 5.6 KiB |
@ -1,70 +0,0 @@
|
|||||||
/*
|
|
||||||
https://github.com/peterix/dfhack
|
|
||||||
Copyright (c) 2009-2012 Petr Mrázek (peterix@gmail.com)
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
|
||||||
warranty. In no event will the authors be held liable for any
|
|
||||||
damages arising from the use of this software.
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any
|
|
||||||
purpose, including commercial applications, and to alter it and
|
|
||||||
redistribute it freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must
|
|
||||||
not claim that you wrote the original software. If you use this
|
|
||||||
software in a product, an acknowledgment in the product documentation
|
|
||||||
would be appreciated but is not required.
|
|
||||||
|
|
||||||
2. Altered source versions must be plainly marked as such, and
|
|
||||||
must not be misrepresented as being the original software.
|
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source
|
|
||||||
distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
#ifndef CL_MOD_VEGETATION
|
|
||||||
#define CL_MOD_VEGETATION
|
|
||||||
/**
|
|
||||||
* \defgroup grp_vegetation Vegetation : stuff that grows and gets cut down or trampled by dwarves
|
|
||||||
* @ingroup grp_modules
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "Export.h"
|
|
||||||
#include "DataDefs.h"
|
|
||||||
#include "df/plant.h"
|
|
||||||
|
|
||||||
namespace DFHack
|
|
||||||
{
|
|
||||||
namespace Vegetation
|
|
||||||
{
|
|
||||||
const uint32_t sapling_to_tree_threshold = 120 * 28 * 12 * 3; // 3 years
|
|
||||||
|
|
||||||
// "Simplified" copy of plant
|
|
||||||
struct t_plant {
|
|
||||||
df::language_name name;
|
|
||||||
df::plant_flags flags;
|
|
||||||
int16_t material;
|
|
||||||
df::coord pos;
|
|
||||||
int32_t grow_counter;
|
|
||||||
uint16_t temperature_1;
|
|
||||||
uint16_t temperature_2;
|
|
||||||
int32_t is_burning;
|
|
||||||
int32_t hitpoints;
|
|
||||||
int16_t update_order;
|
|
||||||
//std::vector<void *> unk1;
|
|
||||||
//int32_t unk2;
|
|
||||||
//uint16_t temperature_3;
|
|
||||||
//uint16_t temperature_4;
|
|
||||||
//uint16_t temperature_5;
|
|
||||||
// Pointer to original object, in case you want to modify it
|
|
||||||
df::plant *origin;
|
|
||||||
};
|
|
||||||
|
|
||||||
DFHACK_EXPORT bool isValid();
|
|
||||||
DFHACK_EXPORT uint32_t getCount();
|
|
||||||
DFHACK_EXPORT df::plant * getPlant(const int32_t index);
|
|
||||||
DFHACK_EXPORT bool copyPlant (const int32_t index, t_plant &out);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
@ -1,85 +0,0 @@
|
|||||||
/*
|
|
||||||
https://github.com/peterix/dfhack
|
|
||||||
Copyright (c) 2009-2012 Petr Mrázek (peterix@gmail.com)
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
|
||||||
warranty. In no event will the authors be held liable for any
|
|
||||||
damages arising from the use of this software.
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any
|
|
||||||
purpose, including commercial applications, and to alter it and
|
|
||||||
redistribute it freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must
|
|
||||||
not claim that you wrote the original software. If you use this
|
|
||||||
software in a product, an acknowledgment in the product documentation
|
|
||||||
would be appreciated but is not required.
|
|
||||||
|
|
||||||
2. Altered source versions must be plainly marked as such, and
|
|
||||||
must not be misrepresented as being the original software.
|
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source
|
|
||||||
distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "Internal.h"
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
#include <map>
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
#include "VersionInfo.h"
|
|
||||||
#include "MemAccess.h"
|
|
||||||
#include "Types.h"
|
|
||||||
#include "Core.h"
|
|
||||||
using namespace DFHack;
|
|
||||||
|
|
||||||
#include "modules/Vegetation.h"
|
|
||||||
#include "df/world.h"
|
|
||||||
|
|
||||||
using namespace DFHack;
|
|
||||||
using df::global::world;
|
|
||||||
|
|
||||||
bool Vegetation::isValid()
|
|
||||||
{
|
|
||||||
return (world != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t Vegetation::getCount()
|
|
||||||
{
|
|
||||||
return world->plants.all.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
df::plant * Vegetation::getPlant(const int32_t index)
|
|
||||||
{
|
|
||||||
if (uint32_t(index) >= getCount())
|
|
||||||
return NULL;
|
|
||||||
return world->plants.all[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Vegetation::copyPlant(const int32_t index, t_plant &out)
|
|
||||||
{
|
|
||||||
if (uint32_t(index) >= getCount())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
out.origin = world->plants.all[index];
|
|
||||||
|
|
||||||
out.name = out.origin->name;
|
|
||||||
out.flags = out.origin->flags;
|
|
||||||
out.material = out.origin->material;
|
|
||||||
out.pos = out.origin->pos;
|
|
||||||
out.grow_counter = out.origin->grow_counter;
|
|
||||||
out.temperature_1 = out.origin->temperature.whole;
|
|
||||||
out.temperature_2 = out.origin->temperature.fraction;
|
|
||||||
out.is_burning = out.origin->is_burning;
|
|
||||||
out.hitpoints = out.origin->hitpoints;
|
|
||||||
out.update_order = out.origin->update_order;
|
|
||||||
//out.unk1 = out.origin->anon_1;
|
|
||||||
//out.unk2 = out.origin->anon_2;
|
|
||||||
//out.temperature_3 = out.origin->temperature_unk;
|
|
||||||
//out.temperature_4 = out.origin->min_safe_temp;
|
|
||||||
//out.temperature_5 = out.origin->max_safe_temp;
|
|
||||||
return true;
|
|
||||||
}
|
|
@ -0,0 +1,103 @@
|
|||||||
|
-- Read the tiles from the screen and display info about them.
|
||||||
|
|
||||||
|
local utils = require 'utils'
|
||||||
|
local gui = require 'gui'
|
||||||
|
|
||||||
|
InspectScreen = defclass(InspectScreen, gui.Screen)
|
||||||
|
|
||||||
|
function InspectScreen:init(args)
|
||||||
|
local w,h = dfhack.screen.getWindowSize()
|
||||||
|
self.cursor_x = math.floor(w/2)
|
||||||
|
self.cursor_y = math.floor(h/2)
|
||||||
|
end
|
||||||
|
|
||||||
|
function InspectScreen:computeFrame(parent_rect)
|
||||||
|
local sw, sh = parent_rect.width, parent_rect.height
|
||||||
|
self.cursor_x = math.max(0, math.min(self.cursor_x, sw-1))
|
||||||
|
self.cursor_y = math.max(0, math.min(self.cursor_y, sh-1))
|
||||||
|
|
||||||
|
local frame = { w = 14, r = 1, h = 10, t = 1 }
|
||||||
|
if self.cursor_x > sw/2 then
|
||||||
|
frame = { w = 14, l = 1, h = 10, t = 1 }
|
||||||
|
end
|
||||||
|
|
||||||
|
return gui.compute_frame_body(sw, sh, frame, 1, 0, false)
|
||||||
|
end
|
||||||
|
|
||||||
|
function InspectScreen:onRenderFrame(dc, rect)
|
||||||
|
self:renderParent()
|
||||||
|
self.cursor_pen = dfhack.screen.readTile(self.cursor_x, self.cursor_y)
|
||||||
|
if gui.blink_visible(100) then
|
||||||
|
dfhack.screen.paintTile({ch='X',fg=COLOR_LIGHTGREEN}, self.cursor_x, self.cursor_y)
|
||||||
|
end
|
||||||
|
dc:fill(rect, {ch=' ',fg=COLOR_WHITE,bg=COLOR_CYAN})
|
||||||
|
end
|
||||||
|
|
||||||
|
local FG_PEN = {fg=COLOR_WHITE,bg=COLOR_BLACK,tile_color=true}
|
||||||
|
local BG_PEN = {fg=COLOR_BLACK,bg=COLOR_WHITE,tile_color=true}
|
||||||
|
local TXT_PEN = {fg=COLOR_WHITE}
|
||||||
|
|
||||||
|
function InspectScreen:onRenderBody(dc)
|
||||||
|
dc:pen(COLOR_WHITE, COLOR_CYAN)
|
||||||
|
if self.cursor_pen then
|
||||||
|
local info = self.cursor_pen
|
||||||
|
dc:string('CH: '):char(info.ch, FG_PEN):char(info.ch, BG_PEN):string(' '):string(''..info.ch,TXT_PEN):newline()
|
||||||
|
local fgcolor = info.fg
|
||||||
|
local fgstr = info.fg
|
||||||
|
if info.bold then
|
||||||
|
fgcolor = (fgcolor+8)%16
|
||||||
|
fgstr = fgstr..'+8'
|
||||||
|
end
|
||||||
|
dc:string('FG: '):string('NN',{fg=fgcolor}):string(' '):string(''..fgstr,TXT_PEN)
|
||||||
|
dc:seek(dc.width-1):char(info.ch,{fg=info.fg,bold=info.bold}):newline()
|
||||||
|
dc:string('BG: '):string('NN',{fg=info.bg}):string(' '):string(''..info.bg,TXT_PEN)
|
||||||
|
dc:seek(dc.width-1):char(info.ch,{fg=COLOR_BLACK,bg=info.bg}):newline()
|
||||||
|
local bstring = 'false'
|
||||||
|
if info.bold then bstring = 'true' end
|
||||||
|
dc:string('Bold: '..bstring):newline():newline()
|
||||||
|
|
||||||
|
if info.tile and gui.USE_GRAPHICS then
|
||||||
|
dc:string('TL: '):tile(' ', info.tile, FG_PEN):tile(' ', info.tile, BG_PEN):string(' '..info.tile):newline()
|
||||||
|
if info.tile_color then
|
||||||
|
dc:string('Color: true')
|
||||||
|
elseif info.tile_fg then
|
||||||
|
dc:string('FG: '):string('NN',{fg=info.tile_fg}):string(' '):string(''..info.tile_fg,TXT_PEN):newline()
|
||||||
|
dc:string('BG: '):string('NN',{fg=info.tile_bg}):string(' '):string(''..info.tile_bg,TXT_PEN):newline()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
dc:string('Invalid', COLOR_LIGHTRED)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local MOVEMENT_KEYS = {
|
||||||
|
CURSOR_UP = { 0, -1, 0 }, CURSOR_DOWN = { 0, 1, 0 },
|
||||||
|
CURSOR_LEFT = { -1, 0, 0 }, CURSOR_RIGHT = { 1, 0, 0 },
|
||||||
|
CURSOR_UPLEFT = { -1, -1, 0 }, CURSOR_UPRIGHT = { 1, -1, 0 },
|
||||||
|
CURSOR_DOWNLEFT = { -1, 1, 0 }, CURSOR_DOWNRIGHT = { 1, 1, 0 },
|
||||||
|
CURSOR_UP_FAST = { 0, -1, 0, true }, CURSOR_DOWN_FAST = { 0, 1, 0, true },
|
||||||
|
CURSOR_LEFT_FAST = { -1, 0, 0, true }, CURSOR_RIGHT_FAST = { 1, 0, 0, true },
|
||||||
|
CURSOR_UPLEFT_FAST = { -1, -1, 0, true }, CURSOR_UPRIGHT_FAST = { 1, -1, 0, true },
|
||||||
|
CURSOR_DOWNLEFT_FAST = { -1, 1, 0, true }, CURSOR_DOWNRIGHT_FAST = { 1, 1, 0, true },
|
||||||
|
}
|
||||||
|
|
||||||
|
function InspectScreen:onInput(keys)
|
||||||
|
if keys.LEAVESCREEN then
|
||||||
|
self:dismiss()
|
||||||
|
else
|
||||||
|
for k,v in pairs(MOVEMENT_KEYS) do
|
||||||
|
if keys[k] then
|
||||||
|
local delta = 1
|
||||||
|
if v[4] then
|
||||||
|
delta = 10
|
||||||
|
end
|
||||||
|
self.cursor_x = self.cursor_x + delta*v[1]
|
||||||
|
self.cursor_y = self.cursor_y + delta*v[2]
|
||||||
|
self:updateLayout()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
InspectScreen{}:show()
|
@ -0,0 +1,26 @@
|
|||||||
|
-- On map load writes the current season to gamelog.txt
|
||||||
|
|
||||||
|
local seasons = {
|
||||||
|
[0] = 'Spring',
|
||||||
|
[1] = 'Summer',
|
||||||
|
[2] = 'Autumn',
|
||||||
|
[3] = 'Winter',
|
||||||
|
}
|
||||||
|
|
||||||
|
local args = {...}
|
||||||
|
|
||||||
|
local function write_gamelog(msg)
|
||||||
|
local log = io.open('gamelog.txt', 'a')
|
||||||
|
log:write(msg.."\n")
|
||||||
|
log:close()
|
||||||
|
end
|
||||||
|
|
||||||
|
if args[1] == 'disable' then
|
||||||
|
dfhack.onStateChange[_ENV] = nil
|
||||||
|
else
|
||||||
|
dfhack.onStateChange[_ENV] = function(op)
|
||||||
|
if op == SC_WORLD_LOADED then
|
||||||
|
write_gamelog(seasons[df.global.cur_season]..' has arrived on the calendar.')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|