Merge branch 'master' into autolabor
After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 6.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;
|
||||
}
|
@ -1 +1 @@
|
||||
Subproject commit 22b01b80ad1f0e82c609dec56f09be1a46788921
|
||||
Subproject commit 506ab1e68d1522e2f282f134176b7da774f6a73c
|
@ -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
|