FILES ----- liquids.config merchant.config spawner.config terrestrial_worlds.config universe_server.config versioning.config biomes\surface_detached\flesh.biome biomes\surface_detached\swamp.biome [NEW] dialog\eyepatch.config dungeons\microdungeons\biomes\flesh\fleshmicrodungeons.dungeon dungeons\microdungeons\biomes\giantflowers\bridge1.json dungeons\microdungeons\biomes\giantflowers\burrow1.json [NEW] dungeons\microdungeons\biomes\giantflowers\burrow2.json [NEW] dungeons\microdungeons\biomes\giantflowers\burrow3.json dungeons\microdungeons\biomes\giantflowers\giantflowersmicrodungeons.dungeon [NEW] dungeons\microdungeons\biomes\giantflowers\pond1.json [NEW] dungeons\microdungeons\biomes\giantflowers\pond2.json dungeons\microdungeons\biomes\giantflowers\rockformation1.json dungeons\microdungeons\biomes\giantflowers\rockformation2.json [NEW] dungeons\microdungeons\biomes\giantflowers\rockformation3.json [NEW] dungeons\microdungeons\biomes\giantflowers\rockformation4.json [NEW] dungeons\microdungeons\biomes\giantflowers\rockformation5.json [NEW] dungeons\microdungeons\biomes\giantflowers\slope1.json [NEW] dungeons\microdungeons\biomes\giantflowers\slope2.json dungeons\microdungeons\biomes\giantflowers\test.json [NEW] dungeons\microdungeons\biomes\giantflowers\tower1.json [NEW] dungeons\microdungeons\biomes\swamp\hut1.json [NEW] dungeons\microdungeons\biomes\swamp\hut2.json [NEW] dungeons\microdungeons\biomes\swamp\hut3.json [NEW] dungeons\microdungeons\biomes\swamp\hut4.json [NEW] dungeons\microdungeons\biomes\swamp\hut5.json [NEW] dungeons\microdungeons\biomes\swamp\swampmicrodungeons.dungeon interface\games\util.lua [NEW] interface\games\fossilgame\fossil.lua interface\games\fossilgame\fossilgame.lua interface\games\fossilgame\tileset.lua [NEW] interface\games\fossilgame\tools.lua [NEW] interface\games\fossilgame\world.lua items\defaultparameters.config items\armors\decorative\hats\eye\head.png items\armors\decorative\hats\eyehead\eyehead.head items\armors\decorative\hats\eyehead\head.png items\armors\decorative\hats\eyehead\icons.png leveling\levelingmultipliers.functions monsters\capturepod.lua [NEW] monsters\critter\bloodtoadcritter\bloodtoadcritter.animation [NEW] monsters\critter\bloodtoadcritter\bloodtoadcritter.monstertype [NEW] monsters\critter\bloodtoadcritter\body.frames [NEW] monsters\critter\bloodtoadcritter\body.monsterpart [NEW] monsters\critter\bloodtoadcritter\body.png monsters\pets\petbehavior.lua monsters\pets\petcapturepod.lua monsters\pets\actions\inspectaction.lua monsters\unique\heckblob\behavior.lua monsters\unique\po\behavior.lua npcs\wizardmerchant.npctype [NEW] npcs\subbiometenants\eyepatch.npctype [NEW] npcs\subbiometenants\flesh.npctype [NEW] objects\generic\fairylights\fairylights.frames [NEW] objects\generic\fairylights\fairylights.object [NEW] objects\generic\fairylights\fairylights.png [NEW] objects\generic\fairylights\fairylightsicon.png objects\minibiome\swamp\gasprimer\gasprimer.png objects\minibiome\swamp\rootbush1\rootbush1.png objects\minibiome\swamp\rootbush2\rootbush2.png objects\minibiome\swamp\rootbush3\rootbush3.png objects\minibiome\swamp\rootbush4\rootbush4.png objects\minibiome\swamp\rootbush5\rootbush5.png [NEW] objects\minibiome\swamp\swampbed\swampbed.frames [NEW] objects\minibiome\swamp\swampbed\swampbed.object [NEW] objects\minibiome\swamp\swampbed\swampbed.png [NEW] objects\minibiome\swamp\swampbed\swampbedcover.png [NEW] objects\minibiome\swamp\swampbed\swampbedicon.png objects\minibiome\swamp\swamproot1\swamproot1.png objects\minibiome\swamp\swamproot2\swamproot2.png objects\minibiome\swamp\swamproot3\swamproot3.png objects\minibiome\swamp\swamproot4\swamproot4.png objects\minibiome\swamp\swamproot5\swamproot5.png [NEW] objects\minibiome\swamp\swamptable\swamptable.frames [NEW] objects\minibiome\swamp\swamptable\swamptable.object [NEW] objects\minibiome\swamp\swamptable\swamptable.png [NEW] objects\minibiome\swamp\swamptable\swamptableicon.png projectiles\staves\fleshstaff\fleshsplosion.frames projectiles\staves\fleshstaff\fleshsplosion.projectile scripts\versioningutils.lua [NEW] tenants\sub-biome\eyepatch_glitch.tenant [NEW] tenants\sub-biome\flesh_human.tenant treasure\tenants.treasurepools [NEW] versioning\celestialchunk_3_4.lua [NEW] versioning\worldmetadata_10_11.lua DIFFS ----- liquids.config 192c192 < "color" : [255, 255, 255, 235], --- > "color" : [132, 130, 50, 235], merchant.config 10d9 < "defaultItemPrice" : 1, spawner.config 1628c1628,1656 < }, --- > }, > > "bloodtoadcritter" : { > "spawnParameters" : { > "area" : "surface", > "region" : "exposed", > "time" : "all" > }, > > "targetDensity" : 0.02, > "monsterType" : "bloodtoadcritter", > "monsterParameters" : { > "aggressive" : false > } > }, > > "maggotcritter" : { > "spawnParameters" : { > "area" : "surface", > "region" : "exposed", > "time" : "all" > }, > > "targetDensity" : 0.02, > "monsterType" : "maggotcritter", > "monsterParameters" : { > "aggressive" : false > } > }, terrestrial_worlds.config 698a699 > "encloseOcean" : false, // whether the ocean should be converted to finite liquid with background blocks 954a956 > "encloseOcean" : true, universe_server.config 36c36 < "terrestrialBiome" : "alien", --- > "terrestrialBiome" : "jungle", versioning.config 3c3 < "WorldMetadata" : 10, --- > "WorldMetadata" : 11, 6c6 < "CelestialChunk" : 3, --- > "CelestialChunk" : 4, biomes\surface_detached\flesh.biome 8c8 < "extraSpawns" : [ ] --- > "extraSpawns" : [ "bloodtoadcritter", "vulturecritter", "maggotcritter" ] 12c12 < "extraSpawns" : [ ] --- > "extraSpawns" : [ "bloodtoadcritter", "vulturecritter", "maggotcritter" ] biomes\surface_detached\swamp.biome 8c8 < "extraSpawns" : [ "flyspawner", "fireflyspawner" ], --- > "extraSpawns" : [ "flyspawner", "fireflyspawner", "frog", "snakecritter" ], 21c21 < "extraSpawns" : [ "flyspawner", "fireflyspawner" ], --- > "extraSpawns" : [ "flyspawner", "fireflyspawner", "frog", "snakecritter" ], 35c35 < "subBlocks" : [ "wetdirt", "dirt" ], --- > "subBlocks" : [ "wetdirt", "dirt", "clay" ], 39c39 < "grassMod" : [ "grass" ], --- > "grassMod" : [ "junglegrass" ], 67a68,76 > "priority" : 1, > "variants" : 1, > "distribution" : "/biomes/distributions.config:mainBiomeMicrodungeon", > > "type" : "microdungeon", > "microdungeons" : [ "swampmicrodungeons" ] > }, > { > "mode" : "floor", 85c94 < "grasses" : [ "rockstacks" ] --- > "grasses" : [ "vine" ] 119,124c128,129 < "items" : [ < { < "mode" : "floor", < "priority" : 1.0, < "variants" : 1, < "distribution" : "/biomes/distributions.config:undergroundCapsules", --- > "grassMod" : [ "roots" ], > "grassModDensity" : 0.3, 126,133c131,134 < "type" : "object", < "objectSets" : [ < { < "pool" : [ [0.35, "capsulesmall" ], [0.35, "capsulemed" ], [0.35, "capsulebig" ] ], < "parameters" : { } < } < ] < }, --- > "ceilingGrassMod" : [ "roots" ], > "ceilingGrassModDensity" : 0.3, > > "items" : [ 135,136c136,137 < "mode" : "floor", < "priority" : 0.0, --- > "mode" : "ceiling", > "priority" : 2.0, 138c139 < "distribution" : "/biomes/distributions.config:minibiomeChests", --- > "distribution" : "/biomes/distributions.config:denseLarge", 140,141c141,145 < "type" : "treasureBox", < "treasureBoxSets" : [ "jungleChest" ] --- > "type" : "tree", > "treeFoliageHueShiftMax" : 180, > "treeStemHueShiftMax" : 180, > "treeStemList" : [ "vine", "vine2", "vine3", "vine4", "wildernessvine" ], > "treeFoliageList" : [ "flowery", "starry", "dreamy" ] dungeons\microdungeons\biomes\flesh\fleshmicrodungeons.dungeon 8c8 < "anchor" : [ "mouthcave1", "mouthcave2", "mouthcave3", "fleshcliff1", "fleshcliff2", "fleshterrain1", "fleshterrain2", "fleshterrain3", "fleshterrain4", "fleshterrain5", "fleshterrain6", "fleshterrain7", "fleshterrain8", "fleshterrain9", "fleshterrain10" ], --- > "anchor" : [ "mouthcave2" ], dungeons\microdungeons\biomes\giantflowers\bridge1.json [TMX file differences are left out for huge size.] dungeons\microdungeons\biomes\giantflowers\burrow1.json [TMX file differences are left out for huge size.] dungeons\microdungeons\biomes\giantflowers\giantflowersmicrodungeons.dungeon 8c8,11 < "anchor" : [ "test" ], --- > "anchor" : [ > //"test" > "bridge1", "burrow1", "burrow2", "burrow3", "pond1", "pond2", "rockformation1", "rockformation2", "rockformation3", "rockformation4", "rockformation5", "slope1", "slope2", "tower1" > ], 22a26,137 > }, > > { > "name" : "bridge1", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "bridge1.json" ] > }, > > { > "name" : "burrow1", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "burrow1.json" ] > }, > > { > "name" : "burrow2", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "burrow2.json" ] > }, > > { > "name" : "burrow3", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "burrow3.json" ] > }, > > { > "name" : "pond1", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "pond1.json" ] > }, > > { > "name" : "pond2", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "pond2.json" ] > }, > > { > "name" : "rockformation1", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "rockformation1.json" ] > }, > > { > "name" : "rockformation2", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "rockformation2.json" ] > }, > > { > "name" : "rockformation3", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "rockformation3.json" ] > }, > > { > "name" : "rockformation4", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "rockformation4.json" ] > }, > > { > "name" : "rockformation5", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "rockformation5.json" ] > }, > > { > "name" : "slope1", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "slope1.json" ] > }, > > { > "name" : "slope2", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "slope2.json" ] > }, > > { > "name" : "tower1", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "tower1.json" ] dungeons\microdungeons\biomes\giantflowers\rockformation1.json [TMX file differences are left out for huge size.] dungeons\microdungeons\biomes\giantflowers\rockformation2.json [TMX file differences are left out for huge size.] dungeons\microdungeons\biomes\giantflowers\test.json [TMX file differences are left out for huge size.] interface\games\util.lua 11a12,23 > end > > function copy(v) > if type(v) ~= "table" then > return v > else > local c = {} > for k,v in pairs(v) do > c[k] = v > end > return c > end interface\games\fossilgame\fossilgame.lua 1c1,3 < require "/interface/games/fossilgame/tileset.lua" --- > require "/interface/games/util.lua" > require "/interface/games/fossilgame/world.lua" > require "/interface/games/fossilgame/tools.lua" 3,12c5,28 < tiles = { < [8] = { < path = "/tiles/materials/dirt.png", < variants = { < {4, 12, 12, 20}, < {20, 12, 28, 20}, < {36, 12, 44, 20}, < {52, 12, 60, 20}, < {68, 12, 76, 20} < } --- > function init() > self.world = World:new({10,10}, 16, {16,16}, 8, 3, 129) > > self.fossilTiles = 0 > self.fossilDamage = 0 > self.progress = 0 > table.insert(self.world.boneLayer.onTileAdded, function(tilePos) > self.fossilTiles = self.fossilTiles + 1 > end) > table.insert(self.world.boneLayer.onTileRemoved, function(tilePos) > self.fossilDamage = self.fossilDamage + 1 > end) > table.insert(self.world.dirtLayer.onTileRemoved, function(tilePos) > if self.world:fossilAt(tilePos) then > self.progress = self.progress + 1 > end > end) > > self.world:init() > > self.tools = { > BrushTool:new(self.world), > HammerTool:new(self.world), > PickaxeTool:new(self.world) 14c30,31 < } --- > self.activeTool = 1 > end 16,18c33,37 < function init() < self.dirt = TileSet:new({10,10}, {16,16}) < self.dirt:fill(8) --- > function activeTool() > if self.tools[self.activeTool] == nil then > self.activeTool = 1 > end > return self.tools[self.activeTool] 22c41,48 < self.dirt:draw() --- > self.world:update() > > activeTool():draw() > > console.canvasDrawText("Total fossil tiles: " .. self.fossilTiles, {position = {200, 150}}, 8, {255, 255, 255, 255}) > console.canvasDrawText("Fossil damage: " .. self.fossilDamage, {position = {200, 135}}, 8, {255, 255, 255, 255}) > console.canvasDrawText("Progress: " .. math.floor(self.progress / self.fossilTiles * 100) .. "%", {position = {200, 120}}, 8, {255, 255, 255, 255}) > console.canvasDrawText("Tool: " .. activeTool().name, {position = {200, 50}}, 8, {255, 255, 255, 255}) 34,38c60,61 < world.logInfo("Button %s was pressed at %s", button, position) < local clickedTile = self.dirt:tileAt(mousePosition()) < if clickedTile then < self.dirt:setTile(clickedTile, 0) < end --- > --world.logInfo("Button %s was pressed at %s", button, position) > activeTool():trigger() 40c63,64 < world.logInfo("Button %s was released at %s", button, position) --- > --world.logInfo("Button %s was released at %s", button, position) > activeTool():release() 46a71,79 > if key == 49 then > self.activeTool = 1 > end > if key == 50 then > self.activeTool = 2 > end > if key == 51 then > self.activeTool = 3 > end interface\games\fossilgame\tileset.lua 3,4c3,19 < TileSet = {} < function TileSet:new(size, tileSize) --- > Materials = { > [8] = { > path = "/tiles/materials/dirt.png", > variants = 5 > }, > [3] = { > path = "/tiles/materials/cobblestone.png", > variants = 5 > }, > [129] = { > path = "/tiles/materials/bonematerial.png", > variants = 9 > } > } > > TileLayer = {} > function TileLayer:new(size, tileSize, materialId) 6a22 > color = {255, 255, 255}, 10c26,30 < tiles = {} --- > tiles = {}, > material = Materials[materialId], > outerEdge = false, > onTileAdded = {}, > onTileRemoved = {} 13c33 < table.insert(newSet.tiles, 0) --- > table.insert(newSet.tiles, false) 19c39 < function TileSet:fill(materialId) --- > function TileLayer:fill() 21c41 < self.tiles[i] = materialId --- > self.tiles[i] = 1 25,26c45,46 < function TileSet:index(x, y) < local zeroIndex = (y * self.size[1]) + x --- > function TileLayer:index(position) > local zeroIndex = (position[2] * self.size[1]) + position[1] 30,31c50,51 < function TileSet:tile(tilePosition) < return self.tiles[self:index(tilePosition[1], tilePosition[2])] --- > function TileLayer:tile(tilePosition) > return self.tiles[self:index(tilePosition)] 34,35c54,61 < function TileSet:setTile(tilePosition, materialId) < self.tiles[self:index(tilePosition[1], tilePosition[2])] = materialId --- > function TileLayer:setTile(tilePosition, filled) > local tile = self.tiles[self:index(tilePosition)] > if tile and not filled then > for _,callback in pairs(self.onTileRemoved) do callback(tilePosition) end > elseif not tile and filled then > for _,callback in pairs(self.onTileAdded) do callback(tilePosition) end > end > self.tiles[self:index(tilePosition)] = filled 38,40c64,66 < function TileSet:tileAt(screenPosition) < local x = math.floor((screenPosition[1] - self.position[1]) / self.tileSize[1]) < local y = math.floor((screenPosition[2] - self.position[2]) / self.tileSize[2]) --- > function TileLayer:tilePosition(screenPosition) > local x = math.floor((screenPosition[1] - self.position[1]) / self.tileSize) > local y = math.floor((screenPosition[2] - self.position[2]) / self.tileSize) 48,49c74,80 < function TileSet:draw() < math.randomseed(self.seed) --- > function TileLayer:tile(tilePosition) > if tilePosition[1] < 0 or tilePosition[1] >= self.size[1] or tilePosition[2] < 0 or tilePosition[2] >= self.size[2] then > return self.outerEdge > else > return self.tiles[self:index(tilePosition)] > end > end 51,62c82,83 < for i,materialId in ipairs(self.tiles) do < local rand = math.random() < if materialId ~= 0 then < i = i - 1 -- Lua is 1-indexed but we want to start at 0 < local x = i % self.size[1] < local y = (i - x) / self.size[1] < local screenX = x * self.tileSize[1] + self.position[1] < local screenY = y * self.tileSize[2] + self.position[1] < < local material = tiles[materialId] < local variantIndex = math.floor(rand * #material.variants) + 1 < local variant = material.variants[variantIndex] --- > function TileLayer:draw() > math.randomseed(self.seed) 64c85,93 < console.canvasDrawImageRect(material.path, variant, {screenX, screenY, screenX + self.tileSize[1], screenY + self.tileSize[2]}, {255, 255, 255}) --- > local layers = {} > for i,filled in ipairs(self.tiles) do > i = i - 1 -- Lua is 1-indexed but we want to start at 0 > local x = i % self.size[1] > local y = (i - x) / self.size[1] > if filled then > self:drawTile(x, y) > else > self:renderEmpty(x, y) 65a95,178 > end > end > > function TileLayer:drawTile(x, y, materialId) > local screenX = x * self.tileSize + self.position[1] > local screenY = y * self.tileSize + self.position[1] > local quad = {screenX, screenY, screenX + self.tileSize, screenY + self.tileSize} > local centerQuad = {quad[1], quad[2], quad[3], quad[4]} > > local variant = self:variant() > local scale = self.tileSize / 8 > > local texCoords = {4 + (16 * variant), 12, 12 + (16 * variant), 20} > > console.canvasDrawImageRect(self.material.path, texCoords, quad, self.color) > end > > function TileLayer:variant() > return math.floor(math.random() * self.material.variants) > end > > function TileLayer:renderEmpty(x, y) > local right = self:tile({x + 1, y}) > local top = self:tile({x, y + 1}) > local left = self:tile({x - 1, y}) > local bottom = self:tile({x, y - 1}) > > local variant = self:variant() > local scale = self.tileSize / 8 > > local screenX = x * self.tileSize + self.position[1] > local screenY = y * self.tileSize + self.position[1] > local texCoords = {4 + (16 * variant), 12, 12 + (16 * variant), 20} > local quad = {screenX, screenY, screenX + self.tileSize, screenY + self.tileSize} > > if not right and not top and not left and not bottom then > return > end > > if right and top and left and bottom then > console.canvasDrawImageRect(self.material.path, {texCoords[1] - 4, 0, texCoords[1] + 4, 8}, quad, self.color) > return > end > > --Right side > if right and top and bottom then > console.canvasDrawImageRect(self.material.path, {texCoords[1], 0, texCoords[1] + 4, 8}, {quad[1] + 4*scale, quad[2], quad[3], quad[4]}, self.color) > elseif right and top then > console.canvasDrawImageRect(self.material.path, {texCoords[1], 0, texCoords[1] + 4, 4}, {quad[1] + 4*scale, quad[2] + 4*scale, quad[3], quad[4]}, self.color) > console.canvasDrawImageRect(self.material.path, {texCoords[1] - 4, texCoords[2] + 4, texCoords[1], texCoords[4]}, {quad[1] + 4*scale, quad[2], quad[3], quad[4] - 4*scale}, self.color) > elseif right and bottom then > console.canvasDrawImageRect(self.material.path, {texCoords[1], 4, texCoords[1] + 4, 8}, {quad[1] + 4*scale, quad[2], quad[3], quad[4] - 4*scale}, self.color) > console.canvasDrawImageRect(self.material.path, {texCoords[1] - 4, texCoords[2], texCoords[1], texCoords[4] - 4}, {quad[1] + 4*scale, quad[2] + 4*scale, quad[3], quad[4]}, self.color) > elseif right then > console.canvasDrawImageRect(self.material.path, {texCoords[1] - 4, texCoords[2], texCoords[1], texCoords[4]}, {quad[1] + 4*scale, quad[2], quad[3], quad[4]}, self.color) > end > > --Left side > if left and top and bottom then > console.canvasDrawImageRect(self.material.path, {texCoords[1] - 4, 0, texCoords[1], 8}, {quad[1], quad[2], quad[3] - 4*scale, quad[4]}, self.color) > elseif left and top then > console.canvasDrawImageRect(self.material.path, {texCoords[1] - 4, 0, texCoords[1], 4}, {quad[1], quad[2] + 4*scale, quad[3] - 4*scale, quad[4]}, self.color) > console.canvasDrawImageRect(self.material.path, {texCoords[3], texCoords[2] + 4, texCoords[3] + 4, texCoords[4]}, {quad[1], quad[2], quad[3] - 4*scale, quad[4] - 4*scale}, self.color) > elseif left and bottom then > console.canvasDrawImageRect(self.material.path, {texCoords[1] - 4, 4, texCoords[1], 8}, {quad[1], quad[2], quad[3] - 4*scale, quad[4] - 4*scale}, self.color) > console.canvasDrawImageRect(self.material.path, {texCoords[3], texCoords[2], texCoords[3] + 4, texCoords[4] - 4}, {quad[1], quad[2] + 4*scale, quad[3] - 4, quad[4]}, self.color) > elseif left then > console.canvasDrawImageRect(self.material.path, {texCoords[3], texCoords[2], texCoords[3] + 4, texCoords[4]}, {quad[1], quad[2], quad[3] - 4*scale, quad[4]}, self.color) > end > > if top and not left and not right then > console.canvasDrawImageRect(self.material.path, {texCoords[1], texCoords[4], texCoords[3], texCoords[4] + 4}, {quad[1], quad[2] + 4*scale, quad[3], quad[4]}, self.color) > elseif top and not left then > console.canvasDrawImageRect(self.material.path, {texCoords[1], texCoords[4], texCoords[3] - 4, texCoords[4] + 4}, {quad[1], quad[2] + 4*scale, quad[3] - 4*scale, quad[4]}, self.color) > elseif top and not right then > console.canvasDrawImageRect(self.material.path, {texCoords[1] + 4, texCoords[4], texCoords[3], texCoords[4] + 4}, {quad[1] + 4*scale, quad[2] + 4*scale, quad[3], quad[4]}, self.color) > end > > if bottom and not left and not right then > console.canvasDrawImageRect(self.material.path, {texCoords[1], texCoords[2] - 4, texCoords[3], texCoords[2]}, {quad[1], quad[2], quad[3], quad[4] - 4*scale}, self.color) > elseif bottom and not left then > console.canvasDrawImageRect(self.material.path, {texCoords[1], texCoords[2] - 4, texCoords[3] - 4, texCoords[2]}, {quad[1], quad[2], quad[3] - 4*scale, quad[4] - 4*scale}, self.color) > elseif bottom and not right then > console.canvasDrawImageRect(self.material.path, {texCoords[1] + 4, texCoords[2] - 4, texCoords[3], texCoords[2]}, {quad[1] + 4*scale, quad[2], quad[3], quad[4] - 4*scale}, self.color) items\defaultparameters.config 12,22d11 < "levelMattersTypes" : [ < "gun", < "sword", < "staff", < "shield", < "headarmor", < "chestarmor", < "legsarmor", < "backarmor" < ], < 40c29,31 < "defaultMaxStack" : 1000 --- > "defaultMaxStack" : 1000, > > "defaultPrice" : 0 items\armors\decorative\hats\eyehead\eyehead.head 20,21c20,21 < /* DEFAULT */ < { "ffca8a" : "faac88", "e0975c" : "d15a46", "a85636" : "80231e", "6f2919" : "80231e" }, --- > /* RED */ > { "ffca8a" : "f4988c", "e0975c" : "d93a3a", "a85636" : "932625", "6f2919" : "601119" }, leveling\levelingmultipliers.functions 181a182,195 > ], > > "itemLevelPriceMultiplier" : [ "linear", "clamp", > [0, 1.0], > [1, 1.0], > [2, 1.5], > [3, 2.0], > [4, 2.5], > [5, 3.0], > [6, 3.5], > [7, 4.0], > [8, 4.5], > [9, 5.0], > [10,5.5] monsters\capturepod.lua 47c47 < if world.entityUuid(args.sourceId) == storage.ownerUuid then --- > if world.entityUniqueId(args.sourceId) == storage.ownerUuid then 55c55 < storage.ownerUuid = world.entityUuid(args.sourceId) --- > storage.ownerUuid = world.entityUniqueId(args.sourceId) 134c134 < if world.entityUuid(playerId) == storage.ownerUuid then --- > if world.entityUniqueId(playerId) == storage.ownerUuid then monsters\pets\petbehavior.lua 140c140 < local playerUuid = world.entityUuid(entityId) --- > local playerUuid = world.entityUniqueId(entityId) 204c204 < end \ No newline at end of file --- > end monsters\pets\petcapturepod.lua 26c26 < if world.entityUuid(args.sourceId) == storage.ownerUuid then --- > if world.entityUniqueId(args.sourceId) == storage.ownerUuid then 30c30 < storage.ownerUuid = world.entityUuid(args.sourceId) --- > storage.ownerUuid = world.entityUniqueId(args.sourceId) 83c83 < end \ No newline at end of file --- > end monsters\pets\actions\inspectaction.lua 111c111 < local uuid = world.entityUuid(stateData.inspectTarget) --- > local uuid = world.entityUniqueId(stateData.inspectTarget) 121c121 < end \ No newline at end of file --- > end monsters\unique\heckblob\behavior.lua 160c160 < if world.entityUuid(playerId) == storage.ownerUuid then --- > if world.entityUniqueId(playerId) == storage.ownerUuid then monsters\unique\po\behavior.lua 225c225 < if world.entityUuid(playerId) == storage.ownerUuid then --- > if world.entityUniqueId(playerId) == storage.ownerUuid then npcs\wizardmerchant.npctype 12c12,13 < "priceVarianceRange" : [1, 1], --- > "buyFactorRange" : [ 1.0, 1.0 ], > "sellFactorRange" : [ 0.2, 0.2 ], 14c15,21 < "storeRadius" : -1 --- > "storeRadius" : -1, > "paneLayoutOverride" : { > "windowtitle" : { > "title" : " Wizard", > "subtitle" : " Sells powerful magicks" > } > } projectiles\staves\fleshstaff\fleshsplosion.frames 4c4 < "dimensions" : [20, 1], --- > "dimensions" : [19, 1], 7c7 < [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19" ] --- > [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18" ] projectiles\staves\fleshstaff\fleshsplosion.projectile 10c10 < "frameNumber" : 20, --- > "frameNumber" : 19, scripts\versioningutils.lua 0a1,27 > -- find a key and/or value in a pile of structure and log the relevant path > -- (does no transformation, but useful for determining paths for versioning) > function findInData(data, keyname, value, path) > if type(data) == "table" then > path = path or "" > for k, v in pairs(data) do > if (k == keyname or keyname == nil) and (v == value or value == nil) then > sb.logInfo("Found %s : %s in data at path %s", k, v, path) > end > findInData(v, keyname, value, string.format("%s.%s", path, k)) > end > end > end > > -- find a key and/or value in a pile of structure and execute the given function on the containing object > function executeWhere(data, keyname, value, f) > if type(data) == "table" then > local didExecute = false > for k, v in pairs(data) do > if not didExecute and (k == keyname or keyname == nil) and (v == value or value == nil) then > f(data) > end > executeWhere(v, keyname, value, f) > end > end > end > treasure\tenants.treasurepools 42a43,56 > ], > > "fleshGift" : [ > [1, { > "pool" : [ > {"weight" : 0.3, "pool" : "basicTreasure"}, > {"weight" : 0.1, "item" : [ "fleshstaff", 1]}, > {"weight" : 0.2, "pool" : "food"} > ], > "poolRounds" : [ > [1, 1] > ], > "allowDuplication" : false > }]