FILES ----- dungeon_worlds.config liquids.config terrestrial_worlds.config unique_worlds.config [NEW] animations\drippingslime\drippingslime.animation [NEW] animations\drippingslime\drippingslime.frames [NEW] animations\drippingslime\drippingslime.png [NEW] animations\slime\slime1.animation [NEW] animations\slime\slime1.frames [NEW] animations\slime\slime1.png [NEW] animations\slime\slime2.animation [NEW] animations\slime\slime2.frames [NEW] animations\slime\slime2.png [NEW] animations\slime\slimedrop.animation [NEW] animations\slime\slimedrop.frames [NEW] animations\slime\slimedrop.png biomes\underground_detached\cellcave.biome [NEW] biomes\underground_detached\slimecaves.biome biomes\underground_detached\old\slime\slime.biome [NEW] biomes\underground_detached\slimecaves\dripslime1\dripslime1.frames [NEW] biomes\underground_detached\slimecaves\dripslime1\dripslime1.object [NEW] biomes\underground_detached\slimecaves\dripslime1\dripslime1.png [NEW] biomes\underground_detached\slimecaves\dripslime1\dripslime1icon.png effects\defaultlightblue.effectsource [NEW] effects\drippingslime.effectsource [NEW] effects\slimeslow.effectsource interface\easel\signstoregui.lua interface\optionsmenu\optionsmenu.config [NEW] items\staves\fleshstaff\fleshglow.frames [NEW] items\staves\fleshstaff\fleshglow.png [NEW] items\staves\fleshstaff\fleshstaff.frames [NEW] items\staves\fleshstaff\fleshstaff.png [NEW] items\staves\fleshstaff\fleshstaff.staff [NEW] liquids\slimetex.png monsters\boss\penguin\general.monstertype monsters\boss\penguin\trooper.monstertype monsters\pets\groundpet.lua monsters\pets\actions\eataction.lua monsters\pets\cat\catbehavior.lua monsters\pets\cat\petcat.monstertype objects\farmables\sugarcane\sugarcaneseed.object [NEW] objects\minibiome\slime\ceilingslime1\ceilingslime1.frames [NEW] objects\minibiome\slime\ceilingslime1\ceilingslime1.object [NEW] objects\minibiome\slime\ceilingslime1\ceilingslime1.png [NEW] objects\minibiome\slime\ceilingslime1\ceilingslime1icon.png [NEW] objects\minibiome\slime\ceilingslime2\ceilingslime2.frames [NEW] objects\minibiome\slime\ceilingslime2\ceilingslime2.object [NEW] objects\minibiome\slime\ceilingslime2\ceilingslime2.png [NEW] objects\minibiome\slime\ceilingslime2\ceilingslime2icon.png [NEW] objects\minibiome\slime\ceilingslime3\ceilingslime3.frames [NEW] objects\minibiome\slime\ceilingslime3\ceilingslime3.object [NEW] objects\minibiome\slime\ceilingslime3\ceilingslime3.png [NEW] objects\minibiome\slime\ceilingslime3\ceilingslime3icon.png objects\outpost\customsign\customicons.frames objects\outpost\customsign\customicons.png objects\outpost\customsign\customsign.lua objects\outpost\customsign\customsign.object objects\outpost\signstore\signstoreobject.lua [NEW] particles\slimeslow.particle [NEW] particles\dripslime\dripslime.particle [NEW] projectiles\staves\fleshstaff\fleshseed1.frames [NEW] projectiles\staves\fleshstaff\fleshseed1.png [NEW] projectiles\staves\fleshstaff\fleshseed1.projectile [NEW] projectiles\staves\fleshstaff\fleshseedspawn.frames [NEW] projectiles\staves\fleshstaff\fleshseedspawn.png [NEW] projectiles\staves\fleshstaff\fleshseedspawn.projectile [NEW] projectiles\staves\fleshstaff\fleshsplosion.frames [NEW] projectiles\staves\fleshstaff\fleshsplosion.png [NEW] projectiles\staves\fleshstaff\fleshsplosion.projectile [NEW] projectiles\unsorted\slimep\icon.png [NEW] projectiles\unsorted\slimep\slimep.frames [NEW] projectiles\unsorted\slimep\slimep.png [NEW] projectiles\unsorted\slimep\slimep.projectile [NEW] stats\effects\slimeslow\slimeslow.animation [NEW] stats\effects\slimeslow\slimeslow.lua [NEW] stats\effects\slimeslow\slimeslow.statuseffect [NEW] tiles\mods\slimegrass.matmod [NEW] tiles\mods\slimegrass.png DIFFS ----- dungeon_worlds.config 64a65,76 > }, > > "monolith" : { > "primaryDungeon" : "monolith", > "threatLevel" : 5, > "gravity" : 80, > "worldSize" : [2000, 2000], > "dungeonBaseHeight" : 1000, > "dungeonSurfaceHeight" : 810, > "ambientLightLevel" : [32, 32, 32], > "biome" : "tundra", > "musicTrack" : "/music/arctic-battle2.ogg" liquids.config 199a200,222 > }, > > "12" : { > "name" : "slimeliquid", > "tickDelta" : 3, > "color" : [90, 211, 133, 200], > "statusEffects" : [ "slimeslow" ], > "itemDrop" : "liquidoil", > > "interactions" : [ > { > "liquid" : 8, > "liquidResult" : 2 > }, > { > "liquid" : 2, > "liquidResult" : 2 > } > ], > > "texture" : "/liquids/slimetex.png", > "bottomLightMix" : [0, 78, 255], > "textureMovementFactor" : 2.6 terrestrial_worlds.config 438c438 < "secondaryRegion" : [ "cellcaves", "fleshcaves" ] --- > "secondaryRegion" : [ "cellcaves", "fleshcaves", "slimecaves" ] 441c441 < "secondaryRegion" : [ "cellcaves", "fleshcaves" ] --- > "secondaryRegion" : [ "cellcaves", "fleshcaves", "slimecaves" ] 444c444 < "secondaryRegion" : [ "cellcaves", "fleshcaves" ] --- > "secondaryRegion" : [ "cellcaves", "fleshcaves", "slimecaves" ] 447c447 < "secondaryRegion" : [ "cellcaves", "fleshcaves" ] --- > "secondaryRegion" : [ "cellcaves", "fleshcaves", "slimecaves" ] 450c450 < "secondaryRegion" : [ "cellcaves", "fleshcaves" ] --- > "secondaryRegion" : [ "cellcaves", "fleshcaves", "slimecaves" ] 453c453 < "secondaryRegion" : [ "cellcaves", "fleshcaves" ] --- > "secondaryRegion" : [ "cellcaves", "fleshcaves", "slimecaves" ] 1099a1100,1107 > ] > }, > > "slimecaves" : { > "caveLiquid" : [ "slimeliquid" ], > "caveLiquidChanceRange" : [5, 10], > "biome" : [ > [0, [ "slimecaves" ]] unique_worlds.config 280a281,386 > "monolith" : { > "type" : "FloatingDungeon", > "dungeonWorld" : "monolith", > "seed" : 1234, > > "skyParameters" : { > "dayLength" : 10000, > "surfaceLevel" : 1000, > "spaceLevel" : 3000, > "seed" : -5288806180628666923, > > "skyType" : "atmospheric", > "skyColoring" : { > "mainColor" : [200, 200, 255], > > "morningColors" : [[200, 200, 255], [200, 200, 255]], > "dayColors" : [[200, 200, 255], [200, 200, 255]], > "eveningColors" : [[200, 200, 255], [200, 200, 255]], > "nightColors" : [[200, 200, 255], [200, 200, 255]], > > "morningLightColor" : [200, 200, 200], > "dayLightColor" : [200, 200, 200], > "eveningLightColor" : [200, 200, 200], > "nightLightColor" : [200, 200, 200] > }, > > "satellites" : [ { > "pos" : [ 0.310561, 0.21497 ], > "drawables" : [ { > "scale" : [ 0.055, 0.055 ], > "mirrored" : false, > "rotation" : 0, > "flipHorizontal" : false, > "centered" : true, > "image" : "/celestial/system/terrestrial/biomes/desert/maskie3.png?hueshift=-45" > }, { > "scale" : [ 0.055, 0.055 ], > "mirrored" : false, > "rotation" : 0, > "flipHorizontal" : false, > "centered" : true, > "image" : "/celestial/system/terrestrial/biomes/desert/maskie3.png?hueshift=-45?addmask=/celestial/system/terrestrial/dynamics/2.png" > }, { > "scale" : [ 0.055, 0.055 ], > "mirrored" : false, > "rotation" : 0, > "flipHorizontal" : false, > "centered" : true, > "image" : "/celestial/system/terrestrial/biomes/desert/maskie2.png?hueshift=-45?addmask=/celestial/system/terrestrial/dynamics/20.png" > }, { > "scale" : [ 0.055, 0.055 ], > "mirrored" : false, > "rotation" : 0, > "flipHorizontal" : false, > "centered" : true, > "image" : "/celestial/system/terrestrial/biomes/desert/maskie1.png?hueshift=-45?addmask=/celestial/system/terrestrial/dynamics/5.png" > }, { > "scale" : [ 0.055, 0.055 ], > "mirrored" : false, > "rotation" : 0, > "flipHorizontal" : false, > "centered" : true, > "image" : "/celestial/system/terrestrial/shadows/9.png" > } ] > } ], > "planet" : { > "pos" : [ 0.00538729, 0.46961 ], > "drawables" : [ { > "scale" : [ 0.15, 0.15 ], > "mirrored" : false, > "rotation" : 0, > "flipHorizontal" : false, > "centered" : true, > "image" : "/celestial/system/gas_giant/gas_giant_base.png" > }, { > "scale" : [ 0.15, 0.15 ], > "mirrored" : false, > "rotation" : 0, > "flipHorizontal" : false, > "centered" : true, > "image" : "/celestial/system/gas_giant/gas_giant_clouds.png?addmask=/celestial/system/gas_giant/gas_giant_dynamics/17.png+/celestial/system/gas_giant/gas_giant_dynamics/29.png" > }, { > "scale" : [ 0.15, 0.15 ], > "mirrored" : false, > "rotation" : 0, > "flipHorizontal" : false, > "centered" : true, > "image" : "/celestial/system/gas_giant/shadows/9.png" > } ] > }, > "horizonImages" : [ { > "right" : "/celestial/system/terrestrial/horizon/liquids/water_r.png", > "left" : "/celestial/system/terrestrial/horizon/liquids/water_l.png" > }, { > "right" : "/celestial/system/terrestrial/horizon/textures/forest_r.png?hueshift=-30?addmask=/celestial/system/terrestrial/horizon/masks/32_r.png;0;0", > "left" : "/celestial/system/terrestrial/horizon/textures/forest_l.png?hueshift=-30?addmask=/celestial/system/terrestrial/horizon/masks/32_l.png;0;0" > }, { > "right" : "/celestial/system/terrestrial/horizon/atmosphere/atmosphere_r.png", > "left" : "/celestial/system/terrestrial/horizon/atmosphere/atmosphere_l.png" > }, { > "right" : "/celestial/system/terrestrial/horizon/shadow/shadow_r.png", > "left" : "/celestial/system/terrestrial/horizon/shadow/shadow_l.png" > } ] > } > }, > 385a492 > biomes\underground_detached\cellcave.biome 34c34 < "mainBlock" : "slime", --- > "mainBlock" : "fleshblock", biomes\underground_detached\old\slime\slime.biome 2,3c2,3 < "name" : "slimecaves", < "friendlyName" : "Slime Caves", --- > "name" : "slime", > "friendlyName" : "Slime", effects\defaultlightblue.effectsource 14c14 < [ "defaultlightblue" ] --- > [ "defaultorange" ] interface\easel\signstoregui.lua 62,63c62,63 < ["frameLeft"] = {"main", 135, 3, 135+11, 3+23}, < ["frameRight"] = {"main", 172, 3, 172+11, 3+23}, --- > ["frameLeft"] = {"main", 135, 3, 135+11, 3+11}, > ["frameRight"] = {"main", 172, 3, 172+11, 3+11}, 419c419 < console.canvasDrawImage("/interface/easel/"..templates["fromContainer"].currentIcon, vec2.add(buttonPosition("templateSlotCopy"), {1,0}), 1) --- > console.canvasDrawImage("/objects/outpost/customsign/"..templates["fromContainer"].currentIcon, vec2.add(buttonPosition("templateSlotCopy"), {1,0}), 1) 815,819d814 < --Usually the script will grab an item drop before a player can, but hedgeing bets < dropSpot = world.entityPosition(console.sourceEntity()) < dropSpot = {dropSpot[1] - 4, dropSpot[2] + 4} < local findPlayerlessSpot = world.playerQuery(dropSpot,4) < if findPlayerlessSpot ~= nil then dropSpot = {dropSpot[1]+12,dropSpot[2]} end 821d815 < --world.logInfo("Requesting drop from %s at %s", console.sourceEntity(), dropSpot) 827,837c821,822 < local foundDroppedSign = false < self.droppedSign = world.itemDropQuery(args, 5) < for p,q in ipairs(self.droppedSign) do < if world.entityName(q) == "customsign" or world.entityName(q) == "customsigncontainer" then < self.droppedSign = q < foundDroppedSign = true < break < end < end < if foundDroppedSign == true then < --world.logInfo("Sign drop found") --- > self.droppedSign = world.getProperty("SignStoreDrop") > if self.droppedSign ~= nil then 839,862c824,845 < self.droppedSign = world.takeItemDrop(self.droppedSign, console.sourceEntity()) < if self.droppedSign ~= nil then < templates["fromContainer"] = {} < --world.logInfo("Dropped sign: %s", data.droppedSign) < templates["fromContainer"].signPixels = deconstructDirectiveStrings(self.droppedSign["parameters"]["signData"], self.droppedSign["parameters"]["signLight"]) < templates["fromContainer"].frameTypesIndex = self.droppedSign["parameters"]["frameColors"] < for p,q in ipairs(storage.frameTypes) do < if templates["fromContainer"].frameTypesIndex[1] == q[2] and templates["fromContainer"].frameTypesIndex[2] == q[3] then < templates["fromContainer"].frameTypesIndex = p break < end < end < templates["fromContainer"].backingTypesIndex = self.droppedSign["parameters"]["signBacking"] < for p,q in ipairs(storage.backingTypes) do < if templates["fromContainer"].backingTypesIndex == q then templates["fromContainer"].backingTypesIndex = p break end < end < if self.droppedSign["parameters"]["isWired"] then < templates["fromContainer"].isWired = true < else < templates["fromContainer"].isWired = false < end < templates["fromContainer"].currentIcon = self.droppedSign["parameters"]["inventoryIcon"] < templates["fromContainer"].signName = self.droppedSign["parameters"]["signName"] < templates["fromContainer"].lightData = self.droppedSign["parameters"]["signLight"] or {} < end --- > templates["fromContainer"] = {} > --world.logInfo("Dropped sign: %s", data.droppedSign) > templates["fromContainer"].signPixels = deconstructDirectiveStrings(self.droppedSign["signData"], self.droppedSign["lightData"]) > templates["fromContainer"].frameTypesIndex = self.droppedSign["frameColors"] > for p,q in ipairs(storage.frameTypes) do > if templates["fromContainer"].frameTypesIndex[1] == q[2] and templates["fromContainer"].frameTypesIndex[2] == q[3] then > templates["fromContainer"].frameTypesIndex = p break > end > end > templates["fromContainer"].backingTypesIndex = self.droppedSign["signBacking"] > for p,q in ipairs(storage.backingTypes) do > if templates["fromContainer"].backingTypesIndex == q then templates["fromContainer"].backingTypesIndex = p break end > end > if self.droppedSign["isWired"] then > templates["fromContainer"].isWired = true > else > templates["fromContainer"].isWired = false > end > templates["fromContainer"].currentIcon = self.droppedSign["inventoryIcon"] > templates["fromContainer"].signName = self.droppedSign["signName"] > templates["fromContainer"].lightData = self.droppedSign["lightData"] or {} > world.setProperty("SignStoreDrop", nil) 880c863 < if directiveStrings[i] ~= nil then --- > if directiveStrings[i] ~= nil and directiveStrings[i] ~= "" then 929,939c912,917 < --I don't want to use a less specific fucntion to add the signs to the container because no output should go in the input slot < for i=0,7 do < signInSlot = world.containerItemAt(self.matchingCabinet,i) < --world.logInfo("%s", signInSlot) < if signInSlot == nil or table.tostring(signInSlot.parameters) == table.tostring(parameters) then < placementSlot = i < break < end < end < if type(placementSlot) == "number" then < world.callScriptedEntity(console.sourceEntity(), "putInChest", signToPlace, placementSlot) --- > > --Can't use the world.container_ commands directly, they don't work properly from this context > local fitSpots = world.containerItemsFitWhere(self.matchingCabinet, signToPlace).slots > table.sort(fitSpots) > if #fitSpots >= 1 and fitSpots[1] ~= 8 then > world.callScriptedEntity(console.sourceEntity(), "putInChest", signToPlace, fitSpots[1]) 967,971c945,947 < --if a frame doesn't change from the last, might as use those savings - that entry will be nil < if subDirective ~= oldDirective then < storage.signDirectiveStrings[i] = subDirective < oldDirective = subDirective < end --- > --entries with no pixels are "" > if subDirective == "replace=" then subDirective = "" end > storage.signDirectiveStrings[i] = subDirective interface\optionsmenu\optionsmenu.config 41c41,43 < 4 --- > 4, > 5, > 6 monsters\boss\penguin\general.monstertype 67c67 < "baseValue" : 16 --- > "baseValue" : 100 monsters\boss\penguin\trooper.monstertype 67c67 < "baseValue" : 5 --- > "baseValue" : 100 monsters\pets\groundpet.lua 2d1 < 23c22 < --- > 72a72,73 > script.setUpdateDelta(1) > 77a79 > drawDebugResources() 79c81 < --- > 115c117 < function itemFoodAction(entityName) --- > function itemFoodLiking(entityName) 122,129c124 < --Never seen this food before, inspect then eat < return {"inspect", 2, {"eat", 2}} < elseif foodLiking == true then < --Seen this food before and like it, eat it! < return {"eat", 2} < else < --Seen this food before and don't like it < return {"inspect", 2, {"emote", "sad"}} --- > return nil 132c127,137 < return false --- > --How much does it like the food > if foodLiking == true or foodLiking == false then > if foodLiking == true then > foodLiking = math.random(50, 100) > elseif foodLiking == false then > foodLiking = math.random(0, 50) > end > storage.behaviorParams.food[entityName] = foodLiking > end > > return foodLiking 154a160,182 > function drawDebugResources() > local resources = storage.petResources > local position = mcontroller.position() > > local y = 2 > for resourceName, resourceValue in pairs(storage.petResources) do > --Border > world.debugLine(vec2.add(position, {-2, y+0.125}), vec2.add(position, {-2, y + 0.75}), "black") > world.debugLine(vec2.add(position, {-2, y + 0.75}), vec2.add(position, {2, y + 0.75}), "black") > world.debugLine(vec2.add(position, {2, y + 0.75}), vec2.add(position, {2, y+0.125}), "black") > world.debugLine(vec2.add(position, {2, y+0.125}), vec2.add(position, {-2, y+0.125}), "black") > > local width = 3.75 * status.resource(resourceName) / 100 > world.debugLine(vec2.add(position, {-1.875, y + 0.25}), vec2.add(position, {-1.875 + width, y + 0.25}), "green") > world.debugLine(vec2.add(position, {-1.875, y + 0.375}), vec2.add(position, {-1.875 + width, y + 0.375}), "green") > world.debugLine(vec2.add(position, {-1.875, y + 0.5}), vec2.add(position, {-1.875 + width, y + 0.5}), "green") > world.debugLine(vec2.add(position, {-1.875, y + 0.625}), vec2.add(position, {-1.875 + width, y + 0.625}), "green") > > world.debugText(resourceName, vec2.add(position, {2.25, y - 0.125}), "blue") > y = y + 1 > end > end > 158d185 < monsters\pets\actions\eataction.lua 2d1 < cooldown = 10 41d39 < 44,51c42,57 < if stateData.eatTimer < 0 and world.takeItemDrop(stateData.targetId) then < local itemName = world.entityName(stateData.targetId) < local foodLiking = storage.behaviorParams.food[itemName] < < if foodLiking == nil then < foodLiking = math.random() > 0.5 < storage.behaviorParams.food[itemName] = foodLiking < end --- > if stateData.eatTimer < 0 then > local itemDrop = world.takeItemDrop(stateData.targetId) > if itemDrop then > local itemName = world.entityName(stateData.targetId) > local foodLiking = itemFoodLiking(itemName) > > if foodLiking == nil then > foodLiking = math.random(100) > storage.behaviorParams.food[itemName] = foodLiking > end > > if foodLiking > 50 then > emote("happy") > else > emote("sad") > end 53,56c59,60 < if foodLiking then < emote("happy") < else < emote("sad") --- > status.modifyResource("hunger", -20 * itemDrop.count) > return true 58,59d61 < < return true, eatAction.cooldown monsters\pets\cat\catbehavior.lua 49,51c49,55 < local foodAction = itemFoodAction(entityName) < if foodAction then < return catBehavior.actions[foodAction[1]](entityId, foodAction) --- > local foodLiking = itemFoodLiking(entityName) > if foodLiking then > if 100 - foodLiking < status.resource("hunger") then > return catBehavior.eat(entityId, {"eat", 2}) > end > elseif foodLiking == nil then > return catBehavior.inspect(entityId, {"inspect", 2, {"eat", 2}}) monsters\pets\cat\petcat.monstertype 37c37,38 < "sleepy" : 10 --- > "sleepy" : 10, > "hunger" : 10 40c41,42 < "sleepy" : 1 --- > "sleepy" : 1, > "hunger" : 0.5 125a128,131 > "maxValue" : 100, > "defaultPercentage" : 10 > }, > "hunger" : { objects\farmables\sugarcane\sugarcaneseed.object 5,6c5,6 < "description" : "sugarcane! Good for diabetes.", < "shortdescription" : "sugarcane Seed", --- > "description" : "Sugarcane! A fibrous crop with rich, sweet sap.", > "shortdescription" : "Sugarcane Seed", objects\outpost\customsign\customicons.frames 4c4 < "dimensions" : [12, 10], --- > "dimensions" : [12, 5], 10,15c10 < [ "none-black" , "blank-black" , "parchment-black" , "blackboard-black" , "glass-black" , "hazard-black", "none-black-wired" , "blank-black-wired" , "parchment-black-wired" , "blackboard-black-wired" , "glass-black-wired" , "hazard-black-wired"], < [ "none-gold-container" , "blank-gold-container" , "parchment-gold-container" , "blackboard-gold-container" , "glass-gold-container" , "hazard-gold-container", "none-gold-wired-container" , "blank-gold-wired-container" , "parchment-gold-wired-container" , "blackboard-gold-wired-container" , "glass-gold-wired-container", "hazard-gold-wired-container" ], < [ "none-wood-container" , "blank-wood-container" , "parchment-wood-container" , "blackboard-wood-container" , "glass-wood-container","hazard-wood-container" , "none-wood-wired-container" , "blank-wood-wired-container" , "parchment-wood-wired-container" , "blackboard-wood-wired-container" , "glass-wood-wired-container" ,"hazard-wood-wired-container"], < [ "none-grey-container" , "blank-grey-container" , "parchment-grey-container" , "blackboard-grey-container" , "glass-grey-container" , "hazard-grey-container", "none-grey-wired-container" , "blank-grey-wired-container" , "parchment-grey-wired-container" , "blackboard-grey-wired-container" , "glass-grey-wired-container", "hazard-grey-wired-container" ], < [ "none-white-container" , "blank-white-container" , "parchment-white-container" , "blackboard-white-container" , "glass-white-container" , "hazard-white-container", "none-white-wired-container" , "blank-white-wired-container" , "parchment-white-wired-container" , "blackboard-white-wired-container" , "glass-white-wired-container" , "hazard-white-wired-container"], < [ "none-black-container" , "blank-black-container" , "parchment-black-container" , "blackboard-black-container" , "glass-black-container", "hazard-black-container" , "none-black-wired-container" , "blank-black-wired-container" , "parchment-black-wired-container" , "blackboard-black-wired-container" , "glass-black-wired-container" , "hazard-black-wired-container"] --- > [ "none-black" , "blank-black" , "parchment-black" , "blackboard-black" , "glass-black" , "hazard-black", "none-black-wired" , "blank-black-wired" , "parchment-black-wired" , "blackboard-black-wired" , "glass-black-wired" , "hazard-black-wired"] objects\outpost\customsign\customsign.lua 18,19c18,24 < < self.scanCountdown = 6 --- > > self.scanCooldown = entity.configParameter("scanCooldown", 1) > > self.scanTimer = math.random() * self.scanCooldown > self.drawCooldown = entity.configParameter("drawCooldown", 0.5) > self.drawTimer = self.drawCooldown > 38c43 < if storage.isOn then storage.frame = 1 else storage.frame = 2 end --- > if storage.isOn then storage.frame = 2 else storage.frame = 1 end 46c51 < --want wired signs to stop functioning as switches when somehthing's feeding them input --- > --want wired signs to stop functioning as switches when something's feeding them input 87c92 < function update(args) --- > function update(dt) 90,95c95,110 < if self.isWired == true then < if storage.isOn and #self.signDirectiveStrings > 2 then < if storage.frame < #self.signDirectiveStrings then < storage.frame = storage.frame + 1 < else < storage.frame = 2 --- > if self.drawTimer <= 0 then > if self.isWired == true then > if storage.isOn and #self.signDirectiveStrings > 2 then > if storage.frame < #self.signDirectiveStrings then > storage.frame = storage.frame + 1 > else > storage.frame = 2 > end > --need to handle the special cases for this string, blank frames and filler frames > if self.signDirectiveStrings[storage.frame] == "replace=" and storage.storedDirectiveString ~= self.signDirectiveStrings[storage.frame] then > storage.storedDirectiveString = "" > applyDirectives() > elseif self.signDirectiveStrings[storage.frame] ~= nil and storage.storedDirectiveString ~= self.signDirectiveStrings[storage.frame] then > storage.storedDirectiveString = self.signDirectiveStrings[storage.frame] > applyDirectives() > end 97,98c112,114 < --need to handle the special cases for this string, blank frames and filler frames < if self.signDirectiveStrings[storage.frame] == "replace=" then --- > else > if storage.frame < #self.signDirectiveStrings then storage.frame = storage.frame + 1 else storage.frame = 1 end > if self.signDirectiveStrings[storage.frame] == "replace=" and storage.storedDirectiveString ~= self.signDirectiveStrings[storage.frame] then 101c117 < elseif self.signDirectiveStrings[storage.frame] ~= nil then --- > elseif self.signDirectiveStrings[storage.frame] ~= nil and storage.storedDirectiveString ~= self.signDirectiveStrings[storage.frame] then 105a122 > self.drawTimer = self.drawCooldown 107,114c124 < if storage.frame < #self.signDirectiveStrings then storage.frame = storage.frame + 1 else storage.frame = 1 end < if self.signDirectiveStrings[storage.frame] == "replace=" then < storage.storedDirectiveString = "" < applyDirectives() < elseif self.signDirectiveStrings[storage.frame] ~= nil then < storage.storedDirectiveString = self.signDirectiveStrings[storage.frame] < applyDirectives() < end --- > self.drawTimer = self.drawTimer - dt 117,118c127 < < if self.scanCountdown <= 0 then --- > if self.scanTimer <= 0 then 120c129 < self.scanCountdown = 6 --- > self.scanTimer = self.scanCooldown 122c131 < self.scanCountdown = self.scanCountdown - 1 --- > self.scanTimer = self.scanTimer - dt 138,141c147,155 < world.debugPoint({entity.position()[1] + v[1][1] + 0.5, entity.position()[2] + v[1][2] + 0.5}, "red") < if v[3] ~= "tile" then < v[3] = "tile" < needsRedraw = true --- > local signPos = world.distance(world.entityPosition(objectId) , entity.position()) > --world.logInfo("%s, %s", v[1] ,signPos) > if signPos[2] == v[1][2] and signPos[1] <= v[1][1] + 2 and signPos[1] >= v[1][1] - 1 then > if v[3] ~= "tile" then > v[3] = "tile" > needsRedraw = true > end > isOccupied = true > break 143,144d156 < isOccupied = true < break 154a167,176 > > --"bl" = "bl" or "ml" or "b1" > storage.nearSpaces[1][3] = storage.nearSpaces[1][3] or storage.nearSpaces[2][3] or storage.nearSpaces[4][3] > --"ul" = "ul" or "ml" or "u1" > storage.nearSpaces[3][3] = storage.nearSpaces[3][3] or storage.nearSpaces[2][3] or storage.nearSpaces[9][3] > --"br" = "br" or "mr" or "b4" > storage.nearSpaces[8][3] = storage.nearSpaces[8][3] or storage.nearSpaces[14][3] or storage.nearSpaces[7][3] > --"ur" = "ur" or "mr" or "u4" > storage.nearSpaces[13][3] = storage.nearSpaces[13][3] or storage.nearSpaces[14][3] or storage.nearSpaces[12][3] > 190,195d211 < end < < function die() < --too many variable parameters for breakDropOptions to handle, so we do that here < world.spawnItem("customsign", {entity.position()[1]+2,entity.position()[2]+0.5}, 1, {inventoryIcon = entity.configParameter("inventoryIcon"), signData = self.signDirectiveStrings, signBacking = self.signBacking, < frameColors = self.frameColors, inboundNodes = entity.configParameter("inboundNodes"), outboundNodes = entity.configParameter("outboundNodes"), isContainer = self.isContainer, isWired = self.isWired, animationParts = entity.configParameter("animationParts"), lightData = entity.configParameter("lightData")}) objects\outpost\customsign\customsign.object 17,19d16 < < "breakDropOptions" : [ < ], 49c46,48 < "interval" : 30 --- > "interval" : 30, > > "retainObjectParametersInItem" : true objects\outpost\signstore\signstoreobject.lua 2c2 < storeData(entity.configParameter("storedStorage"), entity.configParameter("storedTemplates")) --- > storeData(entity.configParameter("storedStorage"), entity.configParameter("storedTemplates")) 6,11c6,11 < if matchingCabinet == nil or world.entityExists(matchingCabinet) == false then < local matchingCabinetList = world.objectQuery({entity.position()[1]+7,entity.position()[2]},1) < for i,j in ipairs(matchingCabinetList) do < if world.entityName(j) == "signdispenser" then matchingCabinet = j end < end < end --- > if matchingCabinet == nil or world.entityExists(matchingCabinet) == false then > local matchingCabinetList = world.objectQuery({entity.position()[1]+7,entity.position()[2]},1) > for i,j in ipairs(matchingCabinetList) do > if world.entityName(j) == "signdispenser" then matchingCabinet = j end > end > end 14,22c14,18 < function requestSignDrop(pos) < local item = world.containerItemAt(matchingCabinet,8) < if item ~= nil then < --world.logInfo("Found in output slot: %s", item) < if item.name == "customsign" then < item.parameters["timeToLive"] = 0.05 < world.spawnItem(item.name, pos, 1, item.parameters) < end < end --- > function requestSignDrop() > local item = world.containerItemAt(matchingCabinet,8) > if item ~= nil and item.name == "customsign" then > world.setProperty("SignStoreDrop", item.parameters) > end 26,27c22,23 < storage.heldStorage = tablecopy(storageInput) < storage.heldTemplates = tablecopy(templatesInput) --- > storage.heldStorage = tablecopy(storageInput) > storage.heldTemplates = tablecopy(templatesInput) 31c27 < world.containerPutItemsAt(matchingCabinet, item, offset) --- > world.containerPutItemsAt(matchingCabinet, item, offset) 35,44c31,40 < if input == nil then return nil end < if type(input) ~= "table" then < local newinput = input < return newinput < end < local newtab = {} < for i,j in pairs(input) do < newtab[i] = tablecopy(j) < end < return newtab --- > if input == nil then return nil end > if type(input) ~= "table" then > local newinput = input > return newinput > end > local newtab = {} > for i,j in pairs(input) do > newtab[i] = tablecopy(j) > end > return newtab