| 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 | ||||