From 6db04719c3ed98b32d14368beba465376edbe6dd Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Sun, 3 Jan 2010 23:41:57 +0000 Subject: [PATCH] graphics ! git-svn-id: http://svn.net-core.org/repos/t-engine4@189 51575b47-30f0-44d4-a5cc-537603b46e54 --- game/data/gfx/tactical_enemy.png | Bin 214 -> 360 bytes game/data/gfx/tactical_friend.png | Bin 231 -> 346 bytes game/data/gfx/tactical_neutral.png | Bin 213 -> 381 bytes game/data/gfx/target_cursor.png | Bin 221 -> 579 bytes game/engine/Map.lua | 11 +-- game/engine/Tiles.lua | 17 +++-- game/modules/tome/class/Game.lua | 4 +- .../modules/tome/data/general/grids/basic.lua | 28 ++++++-- .../tome/data/general/objects/potions.lua | 20 +++--- .../tome/data/gfx/object/potion-0x0.png | Bin 0 -> 450 bytes .../tome/data/gfx/object/potion-0x3.png | Bin 0 -> 502 bytes .../tome/data/gfx/object/potion-2x0.png | Bin 0 -> 471 bytes .../tome/data/gfx/object/potion-5x0.png | Bin 0 -> 473 bytes .../tome/data/gfx/terrain/granite_door1.png | Bin 0 -> 486 bytes .../data/gfx/terrain/granite_door1_open.png | Bin 0 -> 437 bytes .../tome/data/gfx/terrain/granite_wall1.png | Bin 0 -> 794 bytes game/modules/tome/data/gfx/terrain/grass.png | Bin 0 -> 684 bytes game/modules/tome/data/gfx/terrain/hills.png | Bin 0 -> 804 bytes .../tome/data/gfx/terrain/marble_floor.png | Bin 0 -> 99 bytes .../tome/data/gfx/terrain/mountain.png | Bin 0 -> 1348 bytes game/modules/tome/data/gfx/terrain/river.png | Bin 0 -> 339 bytes game/modules/tome/data/gfx/terrain/tree.png | Bin 0 -> 918 bytes .../tome/data/maps/wilderness/rhudaur.lua | 20 +++--- .../tome/data/zones/tower-amon-sul/npcs.lua | 2 +- .../tome/data/zones/trollshaws/npcs.lua | 2 +- .../tome/data/zones/trollshaws/zone.lua | 10 +-- game/modules/tome/resolvers.lua | 4 +- src/core_lua.c | 68 +++++++++++++++++- src/main.c | 4 +- src/map.c | 53 +++++++------- src/map.h | 1 + 31 files changed, 171 insertions(+), 73 deletions(-) create mode 100644 game/modules/tome/data/gfx/object/potion-0x0.png create mode 100644 game/modules/tome/data/gfx/object/potion-0x3.png create mode 100644 game/modules/tome/data/gfx/object/potion-2x0.png create mode 100644 game/modules/tome/data/gfx/object/potion-5x0.png create mode 100644 game/modules/tome/data/gfx/terrain/granite_door1.png create mode 100644 game/modules/tome/data/gfx/terrain/granite_door1_open.png create mode 100644 game/modules/tome/data/gfx/terrain/granite_wall1.png create mode 100644 game/modules/tome/data/gfx/terrain/grass.png create mode 100644 game/modules/tome/data/gfx/terrain/hills.png create mode 100644 game/modules/tome/data/gfx/terrain/marble_floor.png create mode 100644 game/modules/tome/data/gfx/terrain/mountain.png create mode 100644 game/modules/tome/data/gfx/terrain/river.png create mode 100644 game/modules/tome/data/gfx/terrain/tree.png diff --git a/game/data/gfx/tactical_enemy.png b/game/data/gfx/tactical_enemy.png index 6a89b8e720e6358785254a67217be21faf9b844b..8bf9d2184cbcc826863bfecfd2516ab209509ce4 100644 GIT binary patch delta 273 zcmV+s0q*|R0q6oDiBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^pPPw3fch! z7Zw(wfu_WfXefWfNkl<ZSi|j?(F(#a3`I{xSpRDKw7t#Gnt#>47+)4CQ(J4L49tPT z9+K>`B{Ua-n}B4_LIVOzuKo#dg&L7Iviaxac?GUO06Z{k$!ntk&DVNbe*`9y&oR>x zfmwfn5(){f@&%>%0FVmsxo8JcBjAI0zZWpjmtij;b{1I>bqX#&>h^D^<6zWw`_bwf zhG7_X7gXc6y*~o0>v%^COo!Ww|8plaUyypkacjgUZ`d*&k8XeM4WVGoo2Ns&{oT0( XcZPz^#2h_s00000NkvXXu0mjfk&AGa delta 126 zcmaFCbd6E5Gr-TCmrII^fq{Y7)59eQNDF{42OE%-|NK93qM|L=O>PMxMyAjDeW4RG zG~5h5T^vI!PAC64f8fJ>Mot4G0|TQ6j4xgpvU)K5mz4NtY#6|yVU{4$)08-AilpY* aa|}D|`Ttk#f4u}~B!j1`pUXO@geCx?|0l%& diff --git a/game/data/gfx/tactical_friend.png b/game/data/gfx/tactical_friend.png index cb823e23b85bc9f92941279f3502a725385ab4aa..b43126f01e7f813360414fd989caa6545494cd6a 100644 GIT binary patch delta 259 zcmV+e0sQ{w0ono~iBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^pPPw3fch! z7Zm{se{jH&XefWRNkl<ZSi|j?Jqp7x3`U=V&*7`Y$7-i!YmSv(#ka^(b#Wn8f6@?R zI_QDH7P2Ie27MBh8z8(gW#LREqH+OF*4}+c4zN&{xADU2J_A?tu8ED;1Bs|;IU@~; z$`}>xesGk7iN5~dEFcSdq=2pe0hr2w%(SI-zDhm&_xMYW<2a7v_&%^3DT-wQ<}B^@ zw5TK?1tXVQE{X{lTo<ghVQ=JF)tPwo+-Sq60<1&rnMlB3jdu$WIc0PkS+W2C002ov JPDHLkV1kIPY)k+E delta 143 zcmcb`^qf(#Gr-TCmrII^fq{Y7)59eQNDF{42OE%-|NK93qM|L=O>PMxcAd(_Dl!u@ zG{T)cT^vI!PQSgpP>?}^$NA!XzDs|fCrwlkXn4q%Rk`W<4wuX`OVs*`YN~B#xM#|U tur6?ltGR#a?em<R!#l$7H?1mu_fk!0>s5QdjX*mXJYD@<);T3K0RUX*Gsyq| diff --git a/game/data/gfx/tactical_neutral.png b/game/data/gfx/tactical_neutral.png index 72f99400ace9541b1dd3edb7a37fd5b829df8686..604bbbfe9298550a03fa4bdec1ae71ca8aeeecac 100644 GIT binary patch delta 294 zcmV+>0onf50sR6YiBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^pPPw3fch! z7Zfx`*M*{yXefW!Nkl<ZSi|j?K?;K~5Jg`^&|5W!@eu7wcl8iCjJ=g^I$bmYYtayu z;9?#KlFUp#GQs%<CvU*8PETVV?8V6wxUX#&k;4Hdj<K0v&fW*$1&lxqR6cn)C?MpA zdZGReu;4`e(~%P=9ZsZ}Esc=`lXyTZehfVjs5iqKBS~%o;_>xTKt*1vrGP23fGOO9 z{-kc-dpoX1YPVmlzM?3KqW^+ajGx=T^FU*Uj9=OUwp^HooI`>ITAc~i7tFok&D*no sZ+PT(_-<eEhCc#A;MpUz1=_XE4?ciTRS%PRM*si-07*qoM6N<$f;`H4d;kCd delta 125 zcmey%bd^!DGr-TCmrII^fq{Y7)59eQNDF{42OE%-|NK93qM|L=O>PMxM$v*l+><6| zXt)}9x;TbdoK8-e@%g_!vyn$)O3DHD3s;l5CNMnv^Z)!22gL<98UhWt+B}2OmY7&G ZGdvU)T|Srn<A0!u44$rjF6*2UngHQRDIWj; diff --git a/game/data/gfx/target_cursor.png b/game/data/gfx/target_cursor.png index 847c590fb3bb26165d36ec2424e937f80e97a1c6..a6ee60aa5aed3ae2c4f89d4041006e97e71ba810 100644 GIT binary patch delta 526 zcmV+p0`dLb0mB49iBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^Z)<=0drDE zLIAGL9O(c600v@9M??Vs0RI60puMM)kuDwz+5rO>6%7E%JnNBGCw~E+Nkl<ZSi{|y zv2MaZ42Hj}vhx-wQyE#a!cxT6x9HYx(5*~7Mz;u-vSwv0(}}lWV{?a^>bQ_5M=zAt z5;|S59ou*Qf5#9iVqbtq_X%K}^&m4$`c&uchH%+?d*iKDdM710BY>5zBcONU|94>F z=tT~|q-$V}SSkWoV1LqSQ+GE3XYZFd2cChg?zg(nYwRM6*g0YavGa4xlQUjuFsV3C zmcR}uYV`h!G(EE_y*m5W??h-*DYET>m9|(rXXyJA+Xn`T2ditR-{W4OvcCZ^al2ro z;F4p~O|(jsGrtAKilj$v*mIC=6Ri?u`!O(aalmJ>d&G8tC4VL@BHn=vxC4eh5czG< z)n6H0ekK|4a0&_i3T%P5$S+6zb+iKA?<(*b!e#+?p#TcR?)*F8^LQQ=)64ex@jUU# zWP;e~MIlh^6tR*3vo9oUlg-NhR$QmF%~sdOhVe7`KN&X7Tx_N-mHkd7E;bcc^ZJ3^ zh6=Mm^F;FiYBzXY31$*HPn`2z(ARNlRH1R0td3{Qh##i|FLPhq$*MMh4=k0saf_+* QhX4Qo07*qoM6N<$f-UUr(*OVf delta 165 zcmX@ia+guBGr-TCmrII^fq{Y7)59eQNDF{42OE%-|NK7@NHG=%xjQkeJ16sUqJtdQ zO>Rjsaf2CGm+qdJp`O6t<>}%WVsSb-<pAry`#<^>kF7Y^p?IW$UqQOb)wqyhwl|yP zf+L;(^Z%qP-4<9Or?x4kY00$CH5pEU-iZ<hJuD6f=8L4Oxp{3iW)RZW*nKCkjumJn NgQu&X%Q~loCICO0HpBn` diff --git a/game/engine/Map.lua b/game/engine/Map.lua index 82d18b1cd6..3cdcbbaa1d 100644 --- a/game/engine/Map.lua +++ b/game/engine/Map.lua @@ -29,7 +29,8 @@ rememberDisplayOrder = { TERRAIN } -- @param tile_h height of a single tile -- @param fontname font parameters, can be nil -- @param fontsize font parameters, can be nil -function _M:setViewPort(x, y, w, h, tile_w, tile_h, fontname, fontsize) +function _M:setViewPort(x, y, w, h, tile_w, tile_h, fontname, fontsize, multidisplay) + self.multidisplay = multidisplay self.display_x, self.display_y = x, y self.viewport = {width=w, height=h, mwidth=math.floor(w/tile_w), mheight=math.floor(h/tile_h)} self.tiles = Tiles.new(tile_w, tile_h, fontname, fontsize, true) @@ -79,7 +80,7 @@ function _M:save() }) end function _M:loaded() - self._map = core.map.newMap(self.w, self.h, self.mx, self.my, self.viewport.mwidth, self.viewport.mheight) + self._map = core.map.newMap(self.w, self.h, self.mx, self.my, self.viewport.mwidth, self.viewport.mheight, self.tile_w, self.tile_h, self.multidisplay) local mapseen = function(t, x, y, v) if x < 0 or y < 0 or x >= self.w or y >= self.h then return end @@ -241,11 +242,11 @@ function _M:display() if e.faction then friend = Faction:factionReaction(self.view_faction, e.faction) if friend > 0 then - self.tiles:get(nil, 0,0,0, 0,0,0, self.faction_friend):toScreen(self.display_x + (i - self.mx) * self.tile_w, (j - self.my) * self.tile_h) + self.tiles:get(nil, 0,0,0, 0,0,0, self.faction_friend):toScreen(self.display_x + (i - self.mx) * self.tile_w, (j - self.my) * self.tile_h, self.tile_w, self.tile_h) elseif friend < 0 then - self.tiles:get(nil, 0,0,0, 0,0,0, self.faction_enemy):toScreen(self.display_x + (i - self.mx) * self.tile_w, (j - self.my) * self.tile_h) + self.tiles:get(nil, 0,0,0, 0,0,0, self.faction_enemy):toScreen(self.display_x + (i - self.mx) * self.tile_w, (j - self.my) * self.tile_h, self.tile_w, self.tile_h) else - self.tiles:get(nil, 0,0,0, 0,0,0, self.faction_neutral):toScreen(self.display_x + (i - self.mx) * self.tile_w, (j - self.my) * self.tile_h) + self.tiles:get(nil, 0,0,0, 0,0,0, self.faction_neutral):toScreen(self.display_x + (i - self.mx) * self.tile_w, (j - self.my) * self.tile_h, self.tile_w, self.tile_h) end end end diff --git a/game/engine/Tiles.lua b/game/engine/Tiles.lua index 6ae0b953dd..92044fde9c 100644 --- a/game/engine/Tiles.lua +++ b/game/engine/Tiles.lua @@ -15,7 +15,8 @@ function _M:init(w, h, fontname, fontsize, texture) end function _M:get(char, fr, fg, fb, br, bg, bb, image, alpha) - alpha = alpha or 255 + alpha = alpha or 0 + local dochar = char local fgidx = 65536 * fr + 256 * fg + fb local bgidx if br >= 0 and bg >= 0 and bb >= 0 then @@ -31,18 +32,26 @@ function _M:get(char, fr, fg, fb, br, bg, bb, image, alpha) else local s if self.use_images and image then + print("Loading tile", image) s = core.display.loadImage(self.prefix..image) - else + end + if not s then + local w, h = self.font:size(dochar) +--[[ s = core.display.newSurface(self.w, self.h) - if br >= 0 then s:erase(br, bg, bb, alpha) else s:erase(0, 0, 0, alpha) end - local w, h = self.font:size(char) s:drawString(self.font, char, (self.w - w) / 2, (self.h - h) / 2, fr, fg, fb) +]] + if br < 0 then br = nil end + if bg < 0 then bg = nil end + if bb < 0 then bb = nil end + s = core.display.newTile(self.w, self.h, self.font, dochar, (self.w - w) / 2, (self.h - h) / 2, fr, fg, fb, br or 0, bg or 0, bb or 0, alpha) +-- s = core.display.drawStringNewSurface(self.font, char, fr, fg, fb) end if self.texture then s = s:glTexture() end diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index c77f1b062b..d2ca51c18b 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -44,7 +44,7 @@ end function _M:run() self.log = LogDisplay.new(0, self.h * 0.8, self.w * 0.5, self.h * 0.2, nil, nil, nil, {255,255,255}, {30,30,30}) - self.player_display = PlayerDisplay.new(0, 0, self.w * 0.2, self.h * 0.8, {30,30,0}) + self.player_display = PlayerDisplay.new(0, 0, 200, self.h * 0.8, {30,30,0}) self.talents_display = TalentsDisplay.new(self.w * 0.5, self.h * 0.8, self.w * 0.5, self.h * 0.2, {30,30,0}) self.calendar = Calendar.new("/data/calendar_rivendell.lua", "Today is the %s %s of the %s year of the Fourth Age of Middle-earth.\nThe time is %02d:%02d.", 122) self.tooltip = Tooltip.new(nil, nil, {255,255,255}, {30,30,30}) @@ -91,7 +91,7 @@ function _M:loaded() engine.GameTurnBased.loaded(self) Zone:setup{npc_class="mod.class.NPC", grid_class="mod.class.Grid", object_class="mod.class.Object"} Map:setViewerActor(self.player) - Map:setViewPort(self.w * 0.2, 0, self.w * 0.8, math.floor(self.h * 0.80), 16, 16) + Map:setViewPort(200, 0, self.w - 200, math.floor(self.h * 0.80), 32, 32, nil, 20, true) self.key = engine.KeyCommand.new() end diff --git a/game/modules/tome/data/general/grids/basic.lua b/game/modules/tome/data/general/grids/basic.lua index 66de5a3213..c4e09bca89 100644 --- a/game/modules/tome/data/general/grids/basic.lua +++ b/game/modules/tome/data/general/grids/basic.lua @@ -22,13 +22,13 @@ newEntity{ newEntity{ define_as = "FLOOR", - name = "floor", + name = "floor", image = "terrain/marble_floor.png", display = '.', color_r=255, color_g=255, color_b=255, } newEntity{ define_as = "WALL", - name = "wall", + name = "wall", image = "terrain/granite_wall1.png", display = '#', color_r=255, color_g=255, color_b=255, block_move = true, block_sight = true, @@ -36,7 +36,7 @@ newEntity{ newEntity{ define_as = "DOOR", - name = "door", + name = "door", image = "terrain/granite_door1.png", display = '+', color_r=238, color_g=154, color_b=77, block_sight = true, door_opened = "DOOR_OPEN", @@ -44,9 +44,29 @@ newEntity{ newEntity{ define_as = "DOOR_OPEN", - name = "open door", + name = "open door", image = "terrain/granite_door1_open.png", display = "'", color_r=238, color_g=154, color_b=77, block_move = false, block_sight = false, door_closed = "DOOR", } + +newEntity{ + define_as = "GRASS", + name = "grass", image = "terrain/grass.png", + display = '.', color=colors.LIGHT_GREEN, +} + +newEntity{ + define_as = "FLOWER", + name = "flower", + display = ';', color=colors.YELLOW, +} + +newEntity{ + define_as = "TREE", + name = "tree", image = "terrain/tree.png", + display = '#', color=colors.LIGHT_GREEN, + block_move = true, + block_sight = true, +} diff --git a/game/modules/tome/data/general/objects/potions.lua b/game/modules/tome/data/general/objects/potions.lua index c509812e3c..9824a4afdb 100644 --- a/game/modules/tome/data/general/objects/potions.lua +++ b/game/modules/tome/data/general/objects/potions.lua @@ -1,7 +1,7 @@ newEntity{ define_as = "BASE_POTION", type = "potion", subtype="potion", - display = "!", color=colors.WHITE, + display = "!", color=colors.WHITE, image="object/potion-0x0.png", encumber = 0.2, stacking = true, desc = [[Magical potions can have wildly different effects, from healing to killing you, beware! Most of them function better with a high Magic score]], @@ -12,7 +12,7 @@ newEntity{ ------------------------------------------------------- newEntity{ base = "BASE_POTION", name = "potion of lesser healing", - color = colors.LIGHT_RED, + color = colors.LIGHT_RED, image="object/potion-0x3.png", level_range = {1, 20}, rarity = 3, cost = 3, @@ -26,7 +26,7 @@ newEntity{ base = "BASE_POTION", newEntity{ base = "BASE_POTION", name = "potion of healing", - color = colors.LIGHT_RED, + color = colors.LIGHT_RED, image="object/potion-0x3.png", level_range = {15, 35}, rarity = 4, cost = 5, @@ -40,7 +40,7 @@ newEntity{ base = "BASE_POTION", newEntity{ base = "BASE_POTION", name = "potion of greater healing", - color = colors.LIGHT_RED, + color = colors.LIGHT_RED, image="object/potion-0x3.png", level_range = {30, 50}, rarity = 5, cost = 7, @@ -54,7 +54,7 @@ newEntity{ base = "BASE_POTION", newEntity{ base = "BASE_POTION", name = "potion of full healing", - color = colors.LIGHT_RED, + color = colors.LIGHT_RED, image="object/potion-0x3.png", level_range = {45, 50}, rarity = 14, cost = 50, @@ -71,7 +71,7 @@ newEntity{ base = "BASE_POTION", ------------------------------------------------------- newEntity{ base = "BASE_POTION", name = "potion of lesser mana", - color = colors.LIGHT_BLUE, + color = colors.LIGHT_BLUE, image="object/potion-5x0.png", level_range = {1, 20}, rarity = 3, cost = 3, @@ -85,7 +85,7 @@ newEntity{ base = "BASE_POTION", newEntity{ base = "BASE_POTION", name = "potion of mana", - color = colors.LIGHT_BLUE, + color = colors.LIGHT_BLUE, image="object/potion-5x0.png", level_range = {15, 35}, rarity = 4, cost = 5, @@ -99,7 +99,7 @@ newEntity{ base = "BASE_POTION", newEntity{ base = "BASE_POTION", name = "potion of greater mana", - color = colors.LIGHT_BLUE, + color = colors.LIGHT_BLUE, image="object/potion-5x0.png", level_range = {30, 50}, rarity = 5, cost = 7, @@ -112,7 +112,7 @@ newEntity{ base = "BASE_POTION", } newEntity{ base = "BASE_POTION", - name = "potion of full mana", + name = "potion of full mana", image="object/potion-5x0.png", color = colors.LIGHT_BLUE, level_range = {45, 50}, rarity = 14, @@ -150,7 +150,7 @@ newEntity{ base = "BASE_POTION", ------------------------------------------------------- newEntity{ base = "BASE_POTION", name = "potion of slime mold juice", - color = colors.GREEN, + color = colors.GREEN, image="object/potion-2x0.png", level_range = {1, 2}, rarity = 4, cost = 0.01, diff --git a/game/modules/tome/data/gfx/object/potion-0x0.png b/game/modules/tome/data/gfx/object/potion-0x0.png new file mode 100644 index 0000000000000000000000000000000000000000..1bcca0deb1d89075958c11801a6354f0cfc17faa GIT binary patch literal 450 zcmV;z0X_bSP)<h;3K|Lk000e1NJLTq001BW001Be0ssI2{21+{00006bW%=J0RI60 z0RJ~w8+`x(0e4A6K~zYIwN}Ax#UKpzuR4H7@WCT6LWW|5j1Z|Afe{#iN*RCyBV>d0 zU^PV~#ZH>OlRqE)>}Q+s+O`e;6Yut|%q&LE`FR3n&cXlKW)7V|0{7l8N$~0Yhb&rX z-Yik1l$>+o9RLu~dv7@i057%35^PGTl!Ayk=Tgczj$q3`mni4V%=0{pT}l~-!RQ@~ z5&-}a8F$_!002Z3W16Pt38WIvIU?Ez;u!*F4j~*DjWh}YGmqm)L_{Plgx_$^Svd4A ziZM2Z6ax`cN)HgM>)N;mfMr?KgM!|miO{>#bzPecL=<D}4}>X$({)7r?XMbo7ws9S zi`NL4**OPQ2B%KdUg~AgC}0uf8o>^`AXb8AQ0v%_WPOz`Ty{{6*#1*ZuGgk@BZ}RW z!P2QGgVwpont1C}LI|f5rw>}~^eD)EiR$P&?nI)FQ0I5irB6zYqe{xF;s#U0p+8%0 sFx4E^r{jL+YEIS+jyPqyT!X*k3)Bd^oHAH)V*mgE07*qoM6N<$f<uhK$N&HU literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/object/potion-0x3.png b/game/modules/tome/data/gfx/object/potion-0x3.png new file mode 100644 index 0000000000000000000000000000000000000000..dc10abf2efb2782d3fe8ca84246db869f3b39a74 GIT binary patch literal 502 zcmV<S0SW$zP)<h;3K|Lk000e1NJLTq001BW001Be0ssI2{21+{00006bW%=J0RI60 z0RJ~w8+`x(0jo(wK~zYIy;jL>!!QsW2PuFh5YQIjhe}`xDj|Sf0!vT{A>tC$fPj?1 z04iVwumC;Wf%8~M5o}pp3wGwUB*>Y)c<e5h3tox0m$Ltdz`K4a5sAUf&leyfZv3CE z*2oKp<KFu&3Vyu*l1Yt>ss=H}vMhxifHB5<uh|G-mu*vVHpZAzGR81-N~x}E=px9c zh?$A#bUKNhQgY5I*`aS!YprtSMgaiE7%_%nc%}dmHBBRxD9h4X+jU)4RnxIpN2Ufu z#7%P^^AlqPAR0uZIS^|R5E0MXaSwa|M}R_bZ7U11abzOsV%!5}^uLP{<FIO53ml7L zqW}@reGlhEL&N|KAy`=e066yjdZIEBa0qlb2sHo`g1FxR-TF?AKmshlAxy(7?3X4V z5HPd-W{En>j+HKA<~mnE0CiEUck0Vuw9IWvM85CO<M1j`S@)s2P0u&fHoIqrOp2KK zvnVEZH)B64+=uc_o=AmHb;*s;zG&ZlKc95723wCKFM!#HWd-+SRBfus^*txF=U}tO s0|$+nANtb?R5e({t-p)%+Xa;P1=`2Q3{n-}<NyEw07*qoM6N<$f@PG`fB*mh literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/object/potion-2x0.png b/game/modules/tome/data/gfx/object/potion-2x0.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe99b5f67aa2c96103b02beec08b02adc97afba GIT binary patch literal 471 zcmV;|0Vw{7P)<h;3K|Lk000e1NJLTq001BW001Be0ssI2{21+{00006bW%=J0RI60 z0RJ~w8+`x(0gOpRK~zYIwU*0~!ypWX|LmjyO5mUZa!?7Bu*Fb<OUTTo1WIrT+8GzX zfdX>a4zdRvhr}_+PNK1Aguwdr0NcCE<$_PjUcZ!xvJzu_KY)m0@Hbt}XajQK-upqa z{CfYBjT+3CCJGT@=IkASF~)nZc@V&^+2kCoh@_N^F)_xJQrC6RWza5BjFE^=r&HEb zO3pc@cPLBril|ByLI5BlxYp`$ID`=1&}1SC!B}gpwamwCwAK#8Kt$8Y*a#pZ?@iWI zasYrMSOBs1oEJ11jV8-@I{+e(X@X(-%s|&QGFa>Z5jkhT+1nLX$Y>Pw{a>XSt!*j* z-(2%#mPg)J0PZ4xOd_-U+SBTD!1p7*%j_Khsf;!Qc*D#pKp7`5&b$D4>QW#4I>4Ny z6U8>=#qjf}x=X8X)A2CRT$hxts~uysOT^b}9CGPhxZRM(_n>^C&i(e^V|gk`v;kRh z!Ik#Obtz9V+K;|c=8X0>jWMqJm0Jy%FrNirYbxy?EXlk#8=L&1`~%l4!HyJD_xu0= N002ovPDHLkV1mbc+A;tD literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/object/potion-5x0.png b/game/modules/tome/data/gfx/object/potion-5x0.png new file mode 100644 index 0000000000000000000000000000000000000000..41ec3b6fbef9cdcdf233955ddf9690b4974e094d GIT binary patch literal 473 zcmV;~0Ve*5P)<h;3K|Lk000e1NJLTq001BW001Be0ssI2{21+{00006bW%=J0RI60 z0RJ~w8+`x(0gg#TK~zYIwU*Is!Y~kqKdKJk5iD^7<iR6kgpAON6+A*lXjDeX0!WPD zN*UlPc>s2x4<@02ik$|2<>6#G|99u)Y_E>TBhS=p`BV`}fvP?pAR^lPb6m{G15)DN z`ynKKdH<OPOE51bS%eUrbIBbr#(3{bUIbRzkDQVXA;cJsF{&D4Y}=Ny3i3;&sv@%8 zZc`j%tn0eaox&wrqEdjh_PKz6YX-m=^IX8B!{P9FK>AsobJp5n7#;}_k-qP*2Aigt zwx&e@5vhB%)>><WdrO0<2oWh^+yjV6J?0*b0fKY5kFKky30X$2lS73Ye5?Q%2q}== zt_7f4uNMMF#wmdA9jE{{0PHhwX8>Jb;}{dC3!`t>(*dwv1~{2AnqI4c%)XrioK3IR zx`6@m4N-Dr3Ml9$CRtYx0bE%Z`A*7qvWyP^o9e=SlLurgxJ<Sy^__I@Oio?;{jGnQ zuJ`$yQs&Sv+|lk}^0$hGm?FSj%x}hw6HQfT-Aa>YRB)@?nr<^#1SruD$d0IU0R!_q P00000NkvXXu0mjfL@mrL literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/terrain/granite_door1.png b/game/modules/tome/data/gfx/terrain/granite_door1.png new file mode 100644 index 0000000000000000000000000000000000000000..0a18cb0a696a6bdde082740fd22ca818240b7e5b GIT binary patch literal 486 zcmV<C0U7>@P)<h;3K|Lk000e1NJLTq001BW001Be0ssI2{21+{00054Nkl<ZNQu3c zp_Rih42J*a1sDnh1Y8C%GbqUb9m25CBV>Y%QJ4`5GC)W{m@|NZL4l#+0kv+gch}zQ zbM8a366ud@DbE`s!kUx-x~_{c0uVxk5QxZoPegAog%B}D=iE4sC4d;C5W;(ZKA+iU z@wb<3uwC$npH3&|9M=(Jtg6a6S5?&;%anwT4H4~jyOj=L9LLQ+9WsF9@tC|^9n&<; z{TBhauXwxNK8anH<yJx0b>4db*4hxlL+alIlFUQwvMl_l0AP$U#`Jw(*R^v_O4&3G zzwz-Ej`{BV9;>y!2xzTYGcVR!)+l+4vTH~wt+n7S;t9+vV6Bx>UIeg01*`#}2qCbw z62&kKX}|I^&og+?hGAGKJNOK=*2b8;0!k@1%Iv8bZlQUei*V)1+jU(Z4u|KS-zfhw z0e#=U^gNKdrktkfWf$%D`<I>vZj;OwZ&^lelgv76%mH_QnHn}PU*-Tn`hDlZ7{fUW z07|Lsf75B2h)5|_;5rm}NjXd0op?r4*AxKSw$0u}ZQHW3?yW*8wIQPC_o8$G`H`2g ctKaNC0SyFQHT4HxtN;K207*qoM6N<$g6E3c{r~^~ literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/terrain/granite_door1_open.png b/game/modules/tome/data/gfx/terrain/granite_door1_open.png new file mode 100644 index 0000000000000000000000000000000000000000..4a86782bea33a5094252c9d5c9fba11bcdd9eaaa GIT binary patch literal 437 zcmV;m0ZRUfP)<h;3K|Lk000e1NJLTq001BW001Be0ssI2{21+{0004eNkl<ZNQu2x zv5~_d5L__?gcm4q;sVG>Re+121WHf^E=46cPyr+kl;Hvh2pkX+esCUa|IfdFJm8HM z&D^c-ZjWIgBJ_j=Fwb)-1%Og2=S)N?B_ewJsFW(D#2D9gl>ka9N~x66^?GH_;%^_B zFc<ve=kqzn$aR!b#&L`>j^p^ou_j?M5Ygdq=rn+JU55`18Nlgus$aP}#^rMPBmQOV zy@Gk3Q%V3r2s!7MslUnm7ApWa=bUrL<8im!#Td2L`~Cj^*#Z2FwbtGQthKD!79j-I zkldo?8d~cR0=PxIfo%ms2wLl#06J8_8URGjnOP@@Wm#&!+G5)_@S-it(kVN52G&~V zTw4KS3=`QrHG?g*ZJX@jpGU|}w`p~a@ZRT~z4vVexJ3X2d$gWg;l9aSOOHKZ_seS7 zws_hD0QLHA1?L>+6ab7d&AsHkCn95vz{A8FqUMx%n0Q0n_W-~&P0d|2O%s#8uL@(# fKtvyU7j?oHv6xCT5y9*x00000NkvXXu0mjf*U-ar literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/terrain/granite_wall1.png b/game/modules/tome/data/gfx/terrain/granite_wall1.png new file mode 100644 index 0000000000000000000000000000000000000000..0804fb1fac5d1c436a067e08660544be350bc8a7 GIT binary patch literal 794 zcmV+#1LgdQP)<h;3K|Lk000e1NJLTq001BW001Be0ssI2{21+{0008vNkl<ZNQu2x zA+qBz3{_KufZrLD%!Kp+W+4TEg*}3gkQ4O?y+nAR13Hrn1Q-Mu1{5rK?OT1PUA7hQ zB(f}7@_V*+)>;wix=wz}^?JnzriNi~&P~&Vv2ELw(lkxuIC2Rs+qR{LeOZ<wayp$v zB&8HWI3ABFC1XsC(R;tHYY3rj+jU*5szQtqLRD4Eveb1QW6Zn{!!XbD`Fu9U6r973 zFwIR_Ypu0Z>J0ELB2ClK-Z__2a?UZ`0<N(bsbNl+3-u8Z_(eP&<C9F&RL}*MAsE8w zDTKuCIKstSzl^;v%hDJlBJ(_B?<nrFEHTE%<AI8c2$VPmjPwZ0!{MMqF3Tb!JD^C{ zkphG?O{4Mi)&{b5GLGXj!2c5?iUcVo9S>E$-ER2x-eWe?XB>i)loAXI?>!c9gb<fV zyz4sDhamReLyv_32(XS31_h8#@K|eE=nRF<IgKcqS!>C2O%WIrOlq1Ym=f&T3u%~A z${3)R0P6(B^9)!Yq^~PRvDO0nIzMfU{B*|84D_1qv_86jn|)&S&RXle-@@EEN1Q-1 zn3Dm}Z&?C^ukZi>CvxRCv`LOn1~g-pkP0#=x~{`|A{Wdct^uvg03M;&H#vggx<=^= zGK)n-Jp2;lngQGp?`_6F0DTxwqJak)JTg#g6f&x)*MeNrF$$DIZ;+C`!%UIs>IaIm z3<f9r%jLpnR$ezdu5x+Z>C3WkeT>l<15F4a+X3DTF1g?D`=6g5I>Ncf80)%r&h>p? z*R?2&YXe5*EbSqE-^-VHAnLBqWcwuGWBY7aYuQR^Vih9NG!4Pd`woY%j~zD(@TN&X z4S)~t&^Jv}h&p!-YJII^<7|+!=0y~cMA7JPiS$A7!OA)<DoF@EW@b9|LR34YBl9Ek zzHRQ_dWSbbU&Q7|TLXn81feM}jI&wN-oX;iJ_Asj?S<q(dy5#l;*1A-vIL!+e5Wt^ Y0}yYFZ&L~<7XSbN07*qoM6N<$f@cV2-~a#s literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/terrain/grass.png b/game/modules/tome/data/gfx/terrain/grass.png new file mode 100644 index 0000000000000000000000000000000000000000..bf3598e27f7fcafb1f8b5c58eaed7e0db0195a13 GIT binary patch literal 684 zcmV;d0#p5oP)<h;3K|Lk000e1NJLTq001BW001Be0ssI2{21+{00006bW%=J0RI60 z0RJ~w8+`x(0%1u+K~zYIeO5Vc!!QsWF@#|RMqn5$Qs^6bVjkf#e^bfAaABx$kz(l4 zXvu_yz-zDB*`=m(1;?!dK$%e&oD1@CFnO-HRg@V(+mw`!>H;5GGZ&*$Aezw~PF$+Y zn{z&rX0j~p!QQ#-_H{G5d_+FB$<Bb}`8}8BowU2l0#i#`;$~eoFE;}&?_nwkUkVo4 z5JbQZt8B_6h!lRVTgbkYD*-oI<;^75JdIpZIHV*XCS!pDx|ulh19W-zfcRB<wW&~~ zq~$<v2JMc!^m>TlD1@TKOyxQ#F~aAi6h<)9<0FNQMGBC59U`eK^Tu7#|G5q@bf6}- z3J*fwJ=g7sq4>Ag6;jQeOhEd4y5llNplKse{#M7lcw4`4y5Ri-heMm__;JVM-gZux zwk$IahZu3n?MQcYGxzjz1pMnw@E_23Wqic+`4bg|A&9&Zxnzs}tJk(9=kI|!cM#T& zs1aRd1j_j`;l)3lc?VY1o<mPQI!0(oor6ktuVqr0x>DT<?LoHB1=(dnqKHWVjSlr` z9~J?C6q-zEzmg9fhC}TnNa?|-%c~dl&y%<QVLn|%9NUn2@hYqDJGdNbb2KJ!<Xv9` ztRas(1&=(*9+0OhG;I%sJ~@$+Yw@SJ@BSW;bH)MmzDu`~II0&WG=qQuIxc!|=<BZ4 zLES&LeKJWE?O;^ru3f$+f9gUIE)RPcgobQ*Ruu|;%8q8BTJMo(qUWpL70+d&9Y@f+ zLbZPgud*Ru!%t%~pqV<4tCq9Q9PbAnLEZl}a!mStXZXXn#d(4eUo~8ui2VW`2wnHT Syy9a30000<MNUMnLSTY>%{Z+9 literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/terrain/hills.png b/game/modules/tome/data/gfx/terrain/hills.png new file mode 100644 index 0000000000000000000000000000000000000000..c1ef071420fee0ea6646635cbdef756f24b18592 GIT binary patch literal 804 zcmV+<1Ka$GP)<h;3K|Lk000e1NJLTq001BW001Be0ssI2{21+{00006bW%=J0RI60 z0RJ~w8+`x(0@+DKK~zYIm6pG2-7pZxKY7t$!W$e=iwDy-;30)Thmx%wJN6Ik*uSG= z#;k?B;Xy+2;6Vfr;h{l1I-D%YvizFfWXX45olf8Tai)JDG8zEgVtQ&#^N~!<BhE4! zbPIU3U=@Cuer9zR4p0?<zRGczvb#gKGfmkEr>3I9*Am)1#+!AwasT>jt|{oLqt2o# zoMj`s#ef8KV1Ms-PRM9b6{ErQsLIF6A22+eLI-M{2RBt7jaPOSXCaAI4AJnw*aPS; zhj13t7b27TA-G<qZ&jfrQnH{zx0rpw&FgQkL$?u4qI7O=`S6+T8!j%<@A>nax?%g4 z!*c>w!I6v0938L+fa449g`?%@{QgF9H~^^Z;(-r!8y_mL+w}4Jsm$Utq8fDPX{ie8 z;dx(tDn)d;O~TaOFAplB8uS-TA4xwuK=_b4HQIQCEV=xRI{;Hfos14DK(o$=e^N+- zxkN|uV2uwU+^5k2H?I1z$@9~K#XZH7P7^es1G;5*muo7s#|=3IHL5B=!)n2ZOnaP> zP3ewd!MvOAWt9E>Y#Dv;{2RdR15l<%)zM}x+{{Z;hOVz>1WT)yB54;(^dK2}l&Zwt z7VwxGDU+%yqc1C^Jid2-#VR;dYt&jJJCPZFIY(dWk0ZL{+}^&r4qI@zfz1}(@$S<} zeG71SW>f0|d1qp$<QQ-RssUD;Pl_(=SE?eOVH1DHg>~&Anw#=$;JcokC6)@kO)^DQ z(*xGIy>ujTe{J}1Pm^*3P`8{lKRutsh0y&aAwzzq1J4?BB(`D|#v~={qRkS$IFPZZ zPU&=%cQh7tSRyM1Yv@@QVVaIizvyVoN@?sW`iWdId+HXJ9gSrjw*P}ZQAi#cP{nb` z%{i(nc6WumO<neeLxdLb!|%9~I3%UmkJFQ;v!z_Y_mX;=PU3Wp+&AkDQmNV*F??78 idXhJiE43!fbAJK7_R;aq9e5)E0000<MNUMnLSTZp<#~qy literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/terrain/marble_floor.png b/game/modules/tome/data/gfx/terrain/marble_floor.png new file mode 100644 index 0000000000000000000000000000000000000000..d71812adc05e7645228c940eb9abb1f5719cf4df GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={Wv^-rLLp(a)o;74-VBk1xaNyRT p>O(9wD;t(gzLNgAiXEr~0@`&&f*ColR4{gf_@1tQF6*2UngFEi8Y2Jz literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/terrain/mountain.png b/game/modules/tome/data/gfx/terrain/mountain.png new file mode 100644 index 0000000000000000000000000000000000000000..09c50b9ed9d6e7fa7d93870e26f80dca796e22ec GIT binary patch literal 1348 zcmV-K1-tr*P)<h;3K|Lk000e1NJLTq001BW001Be0ssI2{21+{00006bW%=J0RI60 z0RJ~w8+`x(1o=rsK~zYIeOAAV+e#3ga}?M@9Al6{g#tFY1BK*3h7@sm#RaZR;eWyH zks>d+IMM}-tB~p?%`1bha1~Tsap1;~dtenu5FucJL|CxEi!os_Dqb=6cu#kEgAprh z=bQPynf<Zn{0(HP003}2C~`mtEU_EtGo(4zK&b*84*)h_*{jq*pNbqztMSP3s^|b4 z^ub^dhG7r{<y$1^yIz*qxtqUT0Cr<^{<GC;J%9cj0D>T}hr1Xwvy!qUz!IAQ09gD1 zoy}BwvN+@M*z-I9Xfzu0`P|IC$ak91lV6$5jsd$7I-8V|$69OO_n8F8Ftsw#Z!xHR z004c4VHlD)0Dy>>mzQ@_(PwA_Xn@rlWil%@SORLK6bnjj08qZg@p$aIF1_aYEv1PB zP3!mjVHk#CSYbwhH5!>8xIO?t>fdWczG<*_yFHuDUjFsclmWI?sZnjY$pEUgtwaif zfJyZGeE=X0F-1hQhe(NXVJuF^)O0)^PbL$k)amKz|B%pHo3BdkYQTd{7jci0rlZlQ z)oKxXMg25QnS|@Q-ENnmH&M^f3{xX?TJiP}2ZI3s2qCDvA3uKN7=)sf;uuoOi;Ii9 z%uEuyE+UgsA|ee&qY;JiJkJDbHk(@OAPAx;qE%ASiubNv7dal-L;UpV6Ct+S?df#N z4y@A2$%$D2DWy{C;^IOG0RaA1sFRZudx(w)=xn=)8g4e59UUDhr6!X}tJM-hD5XAs z{=BIZZt{xbm=K%IW}fHWZkHG&+X-2g(ZCY$V808sbL{u~T5Cl7@#BZq`pJ_gi^YP8 zA08g&d0wm4zJC4MY&MIca9y`7%d#xj>-BQEEX$Gz(fptG&lk-X`9De>=^F2ah?pb^ zfi4z{BuU7j-EK!w#OfzWVv+!WD2lj?sQ8#7D_OIL`1<v008mOHqEbpJRj=1qtJUf0 zsn(i`QLonlAWc*DOw&{dk)~;*(LhAXERJK}_i51WcI_cP5JJ3q^-2hFb91x5zkhsu zyjrc2Bw4T5>-D-UOUtqlQA$}91yck7-}foruV23&K76=duZgked5BmP#rN;uf!2YP zQc6iHb~>F>)&~a%EFGm^S#d;~EX%Suj?ESz9>7QD&CLyLm(tbMRlD8RT5GKdbT*qI zVwPpBHFXrDP+{)18m0E^*)ss>bUIQ>!hJV-$5E*^TvblR%+$0vjvqaGv<tw_i^XC( zorYm}etzCm&FkxH60}~gYpolN#$7B1su&_tN7Z1v-*!5kBuU=Cf1l@huh(;3S1EOM zb)}S=&1R&PnJ-m)KA)S*yFzgjfaIP`CIH}ho^9JKYnrA}6ltwJ&ofVaxUKtLp)M~k z<2V){lm!5Jp4+yKh@DPHDb?%s%tW|7{$%s{oQhE?_3Dih#NgoIz;)eDr^CBVWojJ9 z6h;UU1ObWb`#z~ePc8<702l`j07Oybx^A!6`%}-waolJ$NKaoWA%qY@Yb}JJD^m~z zzVGi^*#UImL3ysf4gNhmJak?6%a<?9<+3P>jj~D=;?{BT`0?YXPoM7X?Jf8BX|tpD z`~CYjQ*j)pC<<$^31guHC4lR?QpzmL%=8n3EZOz-H2`E;M!S%CQko_{sB(J(?a}SJ ze2YO4{HdP4QXI^jR=H{2z1HmlP>g%g?==(JH1mE=B>n?p+AhUDD2&(u0000<MNUMn GLSTY1T!W1O literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/terrain/river.png b/game/modules/tome/data/gfx/terrain/river.png new file mode 100644 index 0000000000000000000000000000000000000000..5d08c93ed0cfe691fd497335615a966af230725c GIT binary patch literal 339 zcmV-Z0j&OsP)<h;3K|Lk000e1NJLTq001BW001Be0ssI2{21+{0003RNkl<ZNQv#1 zF>b>!3`M_C2k;e|D`@1Lsdw>#y4iDX(wR#DT_8iWbgN-#O9!#G96N{&%8OA=(lcoS zpQI=Qs`0mos<>fpV1rOsYPbQ_!}<0lk&Y+kCJQe{XMYC3Abzk@aMMdfU<P5blw1O& zsu5WBpec{eOYCDXL)9G<HTz#EIZ^fI-#`4%mHheGUVMA-=+J%x@aXj1qcfm-Mok;w z$}BudaxY)_l+UhIac*FP<X~35EWFsX2{4rDHcf!E(Zph0$a-$5x@S~;$|VQeWnv`J zqk=X_<t<cv&b}CX)DaK&d-O^9O8ftL@RF~d2g^D3JrD9_#XNl%rJf4D=RSCL5v}BN lGdbVGbpJEi269fxe*y9~tQcH%M-~78002ovPDHLkV1hh+mm&ZF literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/terrain/tree.png b/game/modules/tome/data/gfx/terrain/tree.png new file mode 100644 index 0000000000000000000000000000000000000000..f226a26f3df409e115e1269a396326874eb25413 GIT binary patch literal 918 zcmV;H18Mw;P)<h;3K|Lk000e1NJLTq001BW001Be0ssI2{21+{00006bW%=J0RI60 z0RJ~w8+`x(14~InK~zYIy_PMH8%Yp`AFmp;jIz=Ig9RoAw>n_p<q5E~e_%nt$?T#a z^E38xqsYrv0V~CS;3S_Ea|c+b)gCYz=?n&pw1-9mTFQZ{{_xn|gd`=)s_CwI>wT*~ zYFcIr@G1lNuLQ_00LoqTT@7Gt98WEc5rlNyG{X~f6AI|u>tiueM>u__8R4E<xx-BW z`d<Mytz_;K{Tntd&5>PDj3|<<se1WuD%gWwL|-1wmd%3xSIt_avwkEfRs~YofSy7J zTn*jEku<AVkX!EdR`kdk2-BnHatyfMURKv@a@tc6c7@On=)e9EgC1`^dN)dOJ#{39 z{7dyrQYCW~J>UvEdNEWIKi>K@d7Ls^9&a^ASc#UI9^o!}8%&i-Po4gaDoe#lfb2BM zp$by&!4FtMb5F7qJ;|+7x<K5=z!_d$O3>xF9ByF=(7&U97l9PZlZenmFZUB}Lb;>d zCA&yzCS<u%Ts;tXY<|adlN=J}M~vrZwm6S*7PWU1=ryci$Y!AxlOq;+tfQK+04~RD z_qJao5nsE)ba9f;?-QX@WwuQ%(7~#KZGWjlm0YfSPxg+P1_f(H2i(HfVZq;zwi;O0 zR0Er@lz8>t$}82twm<lkYh~$jT{$4TNKf*WzRwjdryAJyy1x9Ue!^DoZN6gpTnl=> zA~>@S<HD0m#5wPuy~@buu!-ov>|gSgX9|KC{N-~U(u@l~;S0b<e`ZR#qm|78jP=)j zU*l&ThUd2Xn)ZkK=@+|vuEz!949_hfBZ?Sa+{801mrzTdL(eKkF?4pVIfV7_+)9<i z#((-k&jHGJu-}WMH#8IAJ6GqPVx&33JIm)f;CAknqg>914OLra+Iz*9l;sXHWjtYa z9cvPxQ%j-K{&>8j9a=yip4-cZx`F;p+v~}P-xCGM8Z>yFiWifD%SgN`evp~;OD5&z z>cikTn|?Q>BZo0BDJb7j&Fu>T-(%)5f1{?2LvV`qA@`rP2B#PmBdWPg_m7yH#3Lql zO8racz)fQH)B4P=0mdV}65QwGtPAM;<`wAB$7KF5p5EGg#pOf&^wt8G54A%3d*T#y s%<+-z2K2M#ThT9@c@zD#IC6yl2b^r*Q;Tff7XSbN07*qoM6N<$f=yJp$N&HU literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/maps/wilderness/rhudaur.lua b/game/modules/tome/data/maps/wilderness/rhudaur.lua index 92beb24aea..50ca49c983 100644 --- a/game/modules/tome/data/maps/wilderness/rhudaur.lua +++ b/game/modules/tome/data/maps/wilderness/rhudaur.lua @@ -1,14 +1,14 @@ -quickEntity('M', {name='misty mountains', display='^', color=colors.UMBER, block_move=true}) -quickEntity('W', {name='weather hills', display='^', color=colors.UMBER, block_move=true}) -quickEntity('t', {name='Trallshaws', display='#', color=colors.LIGHT_GREEN, block_move=true}) -quickEntity('.', {name='plains', display='.', color=colors.LIGHT_GREEN}) -quickEntity('&', {name='Ettenmoors', display='^', color=colors.LIGHT_UMBER}) -quickEntity('_', {name='river', display='~', color={r=0, g=80, b=255}}) +quickEntity('M', {name='misty mountains', display='^', image="terrain/mountain.png", color=colors.UMBER, block_move=true}) +quickEntity('W', {name='weather hills', display='^', image="terrain/mountain.png", color=colors.UMBER, block_move=true}) +quickEntity('t', {name='Trallshaws', display='#', image="terrain/tree.png", color=colors.LIGHT_GREEN, block_move=true}) +quickEntity('.', {name='plains', display='.', image="terrain/grass.png", color=colors.LIGHT_GREEN}) +quickEntity('&', {name='Ettenmoors', display='^', image="terrain/hills.png", color=colors.LIGHT_UMBER}) +quickEntity('_', {name='river', display='~', image="terrain/river.png", color={r=0, g=80, b=255}}) -quickEntity('*', {name="Dunadan's Outpost", display='*', color={r=255, g=255, b=255}}) -quickEntity('1', {name="Caves below the tower of Amon Sûl", display='>', color={r=0, g=255, b=255}, change_level=1, change_zone="tower-amon-sul"}) -quickEntity('2', {name="Ettenmoors's cavern", display='>', color={r=80, g=255, b=255}}) -quickEntity('3', {name="Passageway into the Trollshaws", display='>', color={r=0, g=255, b=0}, change_level=1, change_zone="trollshaws"}) +quickEntity('*', {name="Dunadan's Outpost", display='*', color={r=255, g=255, b=255}}) +quickEntity('1', {name="Caves below the tower of Amon Sûl", display='>', color={r=0, g=255, b=255}, change_level=1, change_zone="tower-amon-sul"}) +quickEntity('2', {name="Ettenmoors's cavern", display='>', color={r=80, g=255, b=255}}) +quickEntity('3', {name="Passageway into the Trollshaws", display='>', color={r=0, g=255, b=0}, change_level=1, change_zone="trollshaws"}) return { [[W..........&&.....MM.]], diff --git a/game/modules/tome/data/zones/tower-amon-sul/npcs.lua b/game/modules/tome/data/zones/tower-amon-sul/npcs.lua index 401afd8982..666cb55219 100644 --- a/game/modules/tome/data/zones/tower-amon-sul/npcs.lua +++ b/game/modules/tome/data/zones/tower-amon-sul/npcs.lua @@ -17,7 +17,7 @@ newEntity{ define_as = "SHADE_OF_ANGMAR", stats = { str=16, dex=12, cun=14, mag=25, con=16 }, body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 }, - equipment = resolvers.equip{ {type="weapon", subtype="stagg", name="STAFF_ANGMAR"}, {type="armor", subtype="light"}, }, + equipment = resolvers.equip{ {type="weapon", subtype="stagg", defined="STAFF_ANGMAR"}, {type="armor", subtype="light"}, }, drops = resolvers.drops{chance=100, nb=3, {ego_chance=100} }, talents = resolvers.talents{ diff --git a/game/modules/tome/data/zones/trollshaws/npcs.lua b/game/modules/tome/data/zones/trollshaws/npcs.lua index f3260712c0..a7957fdb90 100644 --- a/game/modules/tome/data/zones/trollshaws/npcs.lua +++ b/game/modules/tome/data/zones/trollshaws/npcs.lua @@ -18,7 +18,7 @@ newEntity{ define_as = "TROLL_BILL", stats = { str=25, dex=10, cun=8, mag=10, con=20 }, body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 }, - equipment = resolvers.equip{ {type="weapon", subtype="greatmaul", name="GREATMAUL_BILL_TRUNK"}, }, + equipment = resolvers.equip{ {type="weapon", subtype="greatmaul", defined="GREATMAUL_BILL_TRUNK"}, }, drops = resolvers.drops{chance=100, nb=3, {ego_chance=100} }, talents = resolvers.talents{ diff --git a/game/modules/tome/data/zones/trollshaws/zone.lua b/game/modules/tome/data/zones/trollshaws/zone.lua index 4921602b4b..165e89cec7 100644 --- a/game/modules/tome/data/zones/trollshaws/zone.lua +++ b/game/modules/tome/data/zones/trollshaws/zone.lua @@ -4,7 +4,7 @@ return { level_scheme = "player", max_level = 5, width = 50, height = 50, - all_remembered = true, +-- all_remembered = true, -- all_lited = true, -- persistant = true, generator = { @@ -12,11 +12,11 @@ return { class = "engine.generator.map.Roomer", nb_rooms = 10, rooms = {"simple", "pilar"}, - ['.'] = "FLOOR", - ['#'] = "WALL", + ['.'] = function() if rng.chance(20) then return "FLOWER" else return "GRASS" end end, + ['#'] = "TREE", up = "UP", down = "DOWN", - door = "DOOR", + door = "GRASS", }, actor = { class = "engine.generator.actor.Random", @@ -27,7 +27,7 @@ return { }, object = { class = "engine.generator.object.Random", - nb_object = {2, 5}, + nb_object = {200, 500}, ood = {chance=5, range={1, 10}}, }, }, diff --git a/game/modules/tome/resolvers.lua b/game/modules/tome/resolvers.lua index 562e5caea8..897d0f5730 100644 --- a/game/modules/tome/resolvers.lua +++ b/game/modules/tome/resolvers.lua @@ -8,10 +8,10 @@ function resolvers.calc.equip(t, e) for i, filter in ipairs(t[1]) do print("Equipment resolver", filter.type, filter.subtype) local o - if not filter.name then + if not filter.defined then o = game.zone:makeEntity(game.level, "object", filter) else - o = game.zone:makeEntityByName(game.level, "object", filter.name) + o = game.zone:makeEntityByName(game.level, "object", filter.defined) end if o then print("Zone made us an equipment according to filter!", o:getName()) diff --git a/src/core_lua.c b/src/core_lua.c index 77cec6a144..4c3065e0c5 100644 --- a/src/core_lua.c +++ b/src/core_lua.c @@ -389,6 +389,65 @@ static int sdl_surface_drawstring_newsurface(lua_State *L) return 1; } + + +static int sdl_new_tile(lua_State *L) +{ + int w = luaL_checknumber(L, 1); + int h = luaL_checknumber(L, 2); + TTF_Font **f = (TTF_Font**)auxiliar_checkclass(L, "sdl{font}", 3); + const char *str = luaL_checkstring(L, 4); + int x = luaL_checknumber(L, 5); + int y = luaL_checknumber(L, 6); + int r = luaL_checknumber(L, 7); + int g = luaL_checknumber(L, 8); + int b = luaL_checknumber(L, 9); + int br = luaL_checknumber(L, 10); + int bg = luaL_checknumber(L, 11); + int bb = luaL_checknumber(L, 12); + int alpha = luaL_checknumber(L, 13); + + SDL_Color color = {r,g,b}; + SDL_Surface *txt = TTF_RenderUTF8_Blended(*f, str, color); + if (txt) + { + SDL_Surface **s = (SDL_Surface**)lua_newuserdata(L, sizeof(SDL_Surface*)); + auxiliar_setclass(L, "sdl{surface}", -1); + + Uint32 rmask, gmask, bmask, amask; +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + rmask = 0xff000000; + gmask = 0x00ff0000; + bmask = 0x0000ff00; + amask = 0x000000ff; +#else + rmask = 0x000000ff; + gmask = 0x0000ff00; + bmask = 0x00ff0000; + amask = 0xff000000; +#endif + + *s = SDL_CreateRGBSurface( + SDL_SWSURFACE | SDL_SRCALPHA, + w, + h, + 32, + rmask, gmask, bmask, amask + ); + + SDL_SetAlpha(txt, 0, 0); + SDL_FillRect(*s, NULL, SDL_MapRGBA((*s)->format, br, bg, bb, alpha)); + + sdlDrawImage(*s, txt, x, y); + SDL_FreeSurface(txt); + + return 1; + } + + lua_pushnil(L); + return 1; +} + static int sdl_new_surface(lua_State *L) { int w = luaL_checknumber(L, 1); @@ -632,13 +691,15 @@ static int sdl_texture_toscreen(lua_State *L) GLuint *t = (GLuint*)auxiliar_checkclass(L, "gl{texture}", 1); int x = luaL_checknumber(L, 2); int y = luaL_checknumber(L, 3); + int w = luaL_checknumber(L, 4); + int h = luaL_checknumber(L, 5); glBindTexture(GL_TEXTURE_2D, *t); glBegin( GL_QUADS ); /* Draw A Quad */ glTexCoord2f(0,0); glVertex2f(0 + x, 0 + y); - glTexCoord2f(0,1); glVertex2f(0 + x, 16 + y); - glTexCoord2f(1,1); glVertex2f(16 + x, 16 + y); - glTexCoord2f(1,0); glVertex2f(16 + x, 0 + y); + glTexCoord2f(0,1); glVertex2f(0 + x, h + y); + glTexCoord2f(1,1); glVertex2f(w + x, h + y); + glTexCoord2f(1,0); glVertex2f(w + x, 0 + y); glEnd( ); /* Done Drawing The Quad */ return 0; @@ -651,6 +712,7 @@ static const struct luaL_reg displaylib[] = {"size", sdl_screen_size}, {"newFont", sdl_new_font}, {"newSurface", sdl_new_surface}, + {"newTile", sdl_new_tile}, {"drawStringNewSurface", sdl_surface_drawstring_newsurface}, {"loadImage", sdl_load_image}, {"setWindowTitle", sdl_set_window_title}, diff --git a/src/main.c b/src/main.c index 6b7e7e0736..b55da2d0dd 100644 --- a/src/main.c +++ b/src/main.c @@ -14,8 +14,8 @@ #include "core_lua.h" #include "getself.h" -#define WIDTH 800 -#define HEIGHT 600 +#define WIDTH 1200 +#define HEIGHT 1024 lua_State *L = NULL; int current_mousehandler = LUA_NOREF; diff --git a/src/map.c b/src/map.c index 428e651a11..7f04b5e1c3 100644 --- a/src/map.c +++ b/src/map.c @@ -16,13 +16,18 @@ static int map_new(lua_State *L) int my = luaL_checknumber(L, 4); int mwidth = luaL_checknumber(L, 5); int mheight = luaL_checknumber(L, 6); + int tile_w = luaL_checknumber(L, 7); + int tile_h = luaL_checknumber(L, 8); + bool multidisplay = lua_toboolean(L, 9); map_type *map = (map_type*)lua_newuserdata(L, sizeof(map_type)); auxiliar_setclass(L, "core{map}", -1); - map->multidisplay = FALSE; + map->multidisplay = multidisplay; map->w = w; map->h = h; + map->tile_w = tile_w; + map->tile_h = tile_h; map->mx = mx; map->my = my; map->mwidth = mwidth; @@ -192,8 +197,8 @@ static int map_to_screen(lua_State *L) { if ((i < 0) || (j < 0) || (i >= map->w) || (j >= map->h)) continue; - int dx = x + (i - map->mx) * 16; - int dy = y + (j - map->my) * 16; + int dx = x + (i - map->mx) * map->tile_w; + int dy = y + (j - map->my) * map->tile_h; if (map->grids_seens[i][j] || map->grids_remembers[i][j]) { @@ -208,9 +213,9 @@ static int map_to_screen(lua_State *L) glBindTexture(GL_TEXTURE_2D, map->grids_terrain[i][j]); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex3f(0 +dx, 0 +dy,-99); - glTexCoord2f(1,0); glVertex3f(16 +dx, 0 +dy,-99); - glTexCoord2f(1,1); glVertex3f(16 +dx, 16 +dy,-99); - glTexCoord2f(0,1); glVertex3f(0 +dx, 16 +dy,-99); + glTexCoord2f(1,0); glVertex3f(map->tile_w +dx, 0 +dy,-99); + glTexCoord2f(1,1); glVertex3f(map->tile_w +dx, map->tile_h +dy,-99); + glTexCoord2f(0,1); glVertex3f(0 +dx, map->tile_h +dy,-99); glEnd(); } if (map->grids_object[i][j]) @@ -218,9 +223,9 @@ static int map_to_screen(lua_State *L) glBindTexture(GL_TEXTURE_2D, map->grids_object[i][j]); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex3f(0 +dx, 0 +dy,-99); - glTexCoord2f(1,0); glVertex3f(16 +dx, 0 +dy,-99); - glTexCoord2f(1,1); glVertex3f(16 +dx, 16 +dy,-99); - glTexCoord2f(0,1); glVertex3f(0 +dx, 16 +dy,-99); + glTexCoord2f(1,0); glVertex3f(map->tile_w +dx, 0 +dy,-99); + glTexCoord2f(1,1); glVertex3f(map->tile_w +dx, map->tile_h +dy,-99); + glTexCoord2f(0,1); glVertex3f(0 +dx, map->tile_h +dy,-99); glEnd(); } if (map->grids_actor[i][j]) @@ -228,9 +233,9 @@ static int map_to_screen(lua_State *L) glBindTexture(GL_TEXTURE_2D, map->grids_actor[i][j]); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex3f(0 +dx, 0 +dy,-99); - glTexCoord2f(1,0); glVertex3f(16 +dx, 0 +dy,-99); - glTexCoord2f(1,1); glVertex3f(16 +dx, 16 +dy,-99); - glTexCoord2f(0,1); glVertex3f(0 +dx, 16 +dy,-99); + glTexCoord2f(1,0); glVertex3f(map->tile_w +dx, 0 +dy,-99); + glTexCoord2f(1,1); glVertex3f(map->tile_w +dx, map->tile_h +dy,-99); + glTexCoord2f(0,1); glVertex3f(0 +dx, map->tile_h +dy,-99); glEnd(); } } @@ -241,9 +246,9 @@ static int map_to_screen(lua_State *L) glBindTexture(GL_TEXTURE_2D, map->grids_actor[i][j]); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex3f(0 +dx, 0 +dy,-99); - glTexCoord2f(1,0); glVertex3f(16 +dx, 0 +dy,-99); - glTexCoord2f(1,1); glVertex3f(16 +dx, 16 +dy,-99); - glTexCoord2f(0,1); glVertex3f(0 +dx, 16 +dy,-99); + glTexCoord2f(1,0); glVertex3f(map->tile_w +dx, 0 +dy,-99); + glTexCoord2f(1,1); glVertex3f(map->tile_w +dx, map->tile_h +dy,-99); + glTexCoord2f(0,1); glVertex3f(0 +dx, map->tile_h +dy,-99); glEnd(); } else if (map->grids_object[i][j]) @@ -251,9 +256,9 @@ static int map_to_screen(lua_State *L) glBindTexture(GL_TEXTURE_2D, map->grids_object[i][j]); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex3f(0 +dx, 0 +dy,-99); - glTexCoord2f(1,0); glVertex3f(16 +dx, 0 +dy,-99); - glTexCoord2f(1,1); glVertex3f(16 +dx, 16 +dy,-99); - glTexCoord2f(0,1); glVertex3f(0 +dx, 16 +dy,-99); + glTexCoord2f(1,0); glVertex3f(map->tile_w +dx, 0 +dy,-99); + glTexCoord2f(1,1); glVertex3f(map->tile_w +dx, map->tile_h +dy,-99); + glTexCoord2f(0,1); glVertex3f(0 +dx, map->tile_h +dy,-99); glEnd(); } else if (map->grids_terrain[i][j]) @@ -261,9 +266,9 @@ static int map_to_screen(lua_State *L) glBindTexture(GL_TEXTURE_2D, map->grids_terrain[i][j]); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex3f(0 +dx, 0 +dy,-99); - glTexCoord2f(1,0); glVertex3f(16 +dx, 0 +dy,-99); - glTexCoord2f(1,1); glVertex3f(16 +dx, 16 +dy,-99); - glTexCoord2f(0,1); glVertex3f(0 +dx, 16 +dy,-99); + glTexCoord2f(1,0); glVertex3f(map->tile_w +dx, 0 +dy,-99); + glTexCoord2f(1,1); glVertex3f(map->tile_w +dx, map->tile_h +dy,-99); + glTexCoord2f(0,1); glVertex3f(0 +dx, map->tile_h +dy,-99); glEnd(); } } @@ -276,9 +281,9 @@ static int map_to_screen(lua_State *L) glBindTexture(GL_TEXTURE_2D, map->grids_terrain[i][j]); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex3f(0 +dx, 0 +dy,-99); - glTexCoord2f(1,0); glVertex3f(16 +dx, 0 +dy,-99); - glTexCoord2f(1,1); glVertex3f(16 +dx, 16 +dy,-99); - glTexCoord2f(0,1); glVertex3f(0 +dx, 16 +dy,-99); + glTexCoord2f(1,0); glVertex3f(map->tile_w +dx, 0 +dy,-99); + glTexCoord2f(1,1); glVertex3f(map->tile_w +dx, map->tile_h +dy,-99); + glTexCoord2f(0,1); glVertex3f(0 +dx, map->tile_h +dy,-99); glEnd(); } } diff --git a/src/map.h b/src/map.h index b651e6b767..dea02c87f2 100644 --- a/src/map.h +++ b/src/map.h @@ -16,6 +16,7 @@ typedef struct { // Map size int w; int h; + int tile_w, tile_h; // Scrolling int mx, my, mwidth, mheight; -- GitLab