FILES ----- dungeons\glitch\glitchcastle\glitchcastle.dungeon dungeons\glitch\glitchcastle\key with grid.png dungeons\glitch\glitchcastle\key.png dungeons\glitch\glitchsewer\1a-objects.png dungeons\glitch\glitchsewer\1a.png dungeons\glitch\glitchsewer\1b-objects.png dungeons\glitch\glitchsewer\1b.png dungeons\glitch\glitchsewer\1c-objects.png dungeons\glitch\glitchsewer\1c.png dungeons\glitch\glitchsewer\2a-objects.png dungeons\glitch\glitchsewer\2a.png dungeons\glitch\glitchsewer\2b-objects.png dungeons\glitch\glitchsewer\2b.png dungeons\glitch\glitchsewer\3a-objects.png dungeons\glitch\glitchsewer\3a.png dungeons\glitch\glitchsewer\3b-objects.png dungeons\glitch\glitchsewer\3b.png dungeons\glitch\glitchsewer\4a-objects.png dungeons\glitch\glitchsewer\4a.png dungeons\glitch\glitchsewer\4b-objects.png dungeons\glitch\glitchsewer\4b.png dungeons\glitch\glitchsewer\5a-objects.png dungeons\glitch\glitchsewer\5a.png dungeons\glitch\glitchsewer\5b-objects.png dungeons\glitch\glitchsewer\5b.png dungeons\glitch\glitchsewer\6a-objects.png dungeons\glitch\glitchsewer\6a.png dungeons\glitch\glitchsewer\6b-objects.png dungeons\glitch\glitchsewer\6b.png dungeons\glitch\glitchsewer\7a-objects.png dungeons\glitch\glitchsewer\7a.png dungeons\glitch\glitchsewer\8a-objects.png dungeons\glitch\glitchsewer\8a.png dungeons\glitch\glitchsewer\endleft1.png dungeons\glitch\glitchsewer\endright1.png dungeons\glitch\glitchsewer\entrance-objects.png dungeons\glitch\glitchsewer\entrance.png dungeons\glitch\glitchsewer\glitchsewer.dungeon dungeons\glitch\glitchsewer\key with grid.png dungeons\glitch\glitchsewer\key.png dungeons\glitch\glitchvillage\glitchvillage.dungeon dungeons\glitch\glitchvillage\key with grid.png dungeons\glitch\glitchvillage\key.png dungeons\microdungeons\randomencounter\glitchunderground\glitchkey.png dungeons\microdungeons\randomencounter\glitchunderground\glitchundergroundencounter.dungeon dungeons\microdungeons\randomencounter\glitchunderground\sewer1.png dungeons\microdungeons\randomencounter\glitchunderground\sewer3.png dungeons\microdungeons\randomencounter\glitchunderground\sewer4.png dungeons\microdungeons\randomencounter\unsorted\generic\miniboss.dungeon dungeons\microdungeons\randomencounter\unsorted\generic\randomencounter.dungeon dungeons\microdungeons\randomencounter\unsorted\glitch\glitchencounter.dungeon [NEW] dungeons\microdungeons\randomencounter\unsorted\glitch\glitchkey.png dungeons\microdungeons\randomencounter\unsorted\shroomencounter\shroomencounter.dungeon dungeons\microdungeons\randomencounter\unsorted\treasureroom\treasureroom.dungeon dungeons\missions\glitchmissions\glitchmission1.dungeon interface\statuses\rage.png [NEW] interface\warpmenu\gate.png [NEW] interface\warpmenu\gateup.png interface\warpmenu\outpost.png interface\warpmenu\outpostup.png interface\warpmenu\returnwarp.config items\armors\decorative\hats\shroomhead\head.png items\armors\decorative\hats\shroomhead\icons.png items\armors\decorative\hats\shroomhead\shroom.head items\armors\decorative\hats\shroomhead2\head.png items\armors\decorative\hats\shroomhead2\icons.png items\armors\decorative\hats\shroomhead2\shroom.head items\armors\decorative\hats\shroomhead3\head.png items\armors\decorative\hats\shroomhead3\icons.png items\armors\decorative\hats\shroomhead3\shroom.head items\armors\decorative\hats\shroomhead4\head.png items\armors\decorative\hats\shroomhead4\icons.png items\armors\decorative\hats\shroomhead4\shroom.head items\armors\decorative\hats\tvhelmet\mask.png items\armors\floran\floran-tier6\florantier6.chest items\armors\human\human-tier3\head.png items\armors\human\human-tier6\chestf.png items\armors\human\human-tier6\head.png items\armors\human\human-tier6\humantier6.chest items\armors\human\human-tier6\humantier6.head items\armors\human\human-tier6\icons.png items\armors\human\human-tier6\mask.png items\armors\human\human-tier6\pants.png items\materials\supermatter.matitem monsters\boss\crystalboss\diestate.lua monsters\ground\approachstate.lua monsters\ground\groundmonster.lua monsters\unique\chesttrapper\chesttrapper.monstertype monsters\unique\cleaningbot\cleaningbot.monstertype monsters\unique\giftmonster\giftmonster.monstertype monsters\unique\giftmonster\giftmonstersmall.monstertype monsters\unique\po\behavior.lua monsters\unique\po\megapo.monstertype monsters\unique\po\micropo.monstertype monsters\unique\po\po.monstertype monsters\unique\pogolem\pogolem.monstertype monsters\unique\repairbot\repairbot.monstertype monsters\unique\robotchicken\robotchicken.monstertype monsters\unique\serpentdroid\serpentdroid.monstertype monsters\unique\sewerfly\sewerfly.monstertype monsters\unique\swarpion\swarpion.monstertype monsters\unique\toxicfly\toxicfly.monstertype monsters\unique\toxicgolem\toxicgolem.monstertype npcs\followstate.lua npcs\friendlyguard.npctype npcs\friendlypirateguard.npctype npcs\meleeattackstate.lua npcs\rangedattackstate.lua objects\bugs\ashsprite\ashsprite.object objects\bugs\aurorabee\aurorabee.object objects\bugs\blueback\blueback.object objects\bugs\brightstripe\brightstripe.object objects\bugs\butterbee\butterbee.object objects\bugs\cinderfly\cinderfly.object objects\bugs\dewhopper\dewhopper.object objects\bugs\driftbell\driftbell.object objects\bugs\dustmoth\dustmoth.object objects\bugs\fawnfly\fawnfly.object objects\bugs\fireygiant\fireygiant.object objects\bugs\flameroach\flameroach.object objects\bugs\frostfleck\frostfleck.object objects\bugs\frostfly\frostfly.object objects\bugs\gasgiant\gasgiant.object objects\bugs\glowbug\glowbug.object objects\bugs\goldbuck\goldbuck.object objects\bugs\greentip\greentip.object objects\bugs\heathugger\heathugger.object objects\bugs\hivehog\hivehog.object objects\bugs\icetip\icetip.object objects\bugs\lavahopper\lavahopper.object objects\bugs\muddancer\muddancer.object objects\bugs\mudstag\mudstag.object objects\bugs\orphanfly\orphanfly.object objects\bugs\phoenixfly\phoenixfly.object objects\bugs\polarmoth\polarmoth.object objects\bugs\redwing\redwing.object objects\bugs\sandclown\sandclown.object objects\bugs\scuttleploom\scuttleploom.object objects\bugs\seahornet\seahornet.object objects\bugs\shadowmoth\shadowmoth.object objects\bugs\shardwing\shardwing.object objects\bugs\shellcreep\shellcreep.object objects\bugs\snowskater\snowskater.object objects\bugs\stinkjack\stinkjack.object objects\bugs\sunskipper\sunskipper.object objects\bugs\testbug\testbug.object objects\bugs\thornbee\thornbee.object objects\bugs\tidefly\tidefly.object objects\bugs\vineclimber\vineclimber.object objects\bugs\wavebird\wavebird.object objects\bugs\xenofly\xenofly.object objects\glitch\outhouse\outhouse.object objects\glitch\sewervalve\sewervalve.object objects\glitch\wallpipe\wallpipe.object plants\trees\desert\stem\coconut\crown1.png plants\trees\desert\stem\coconut\crown2.png plants\trees\desert\stem\coconut\crown3.png projectiles\unsorted\coconut\coconut.png projectiles\weather\fogprimer\fogprimer.projectile projectiles\weather\mistprimer\mistprimer.projectile DIFFS ----- dungeons\glitch\glitchcastle\glitchcastle.dungeon 2102c2102 < "value" : [255, 102, 26, 255], --- > "value" : [179, 98, 18, 255], 2104c2104 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] 2108c2108 < "value" : [242, 97, 24, 255], --- > "value" : [166, 91, 17, 255], 2110c2110 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] dungeons\glitch\glitchsewer\glitchsewer.dungeon 2120c2120 < "value" : [255, 102, 26, 255], --- > "value" : [179, 98, 18, 255], 2126c2126 < "value" : [242, 97, 24, 255], --- > "value" : [166, 91, 17, 255], dungeons\glitch\glitchvillage\glitchvillage.dungeon 2102c2102 < "value" : [255, 102, 26, 255], --- > "value" : [179, 98, 18, 255], 2104c2104 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] 2108c2108 < "value" : [242, 97, 24, 255], --- > "value" : [166, 91, 17, 255], 2110c2110 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] dungeons\microdungeons\randomencounter\glitchunderground\glitchundergroundencounter.dungeon 2102c2102 < "value" : [255, 102, 26, 255], --- > "value" : [179, 98, 18, 255], 2104c2104 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] 2108c2108 < "value" : [242, 97, 24, 255], --- > "value" : [166, 91, 17, 255], 2110c2110 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] dungeons\microdungeons\randomencounter\unsorted\generic\miniboss.dungeon 3586c3586 < "value" : [255, 102, 26, 255], --- > "value" : [179, 98, 18, 255], 3588c3588 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] 3592c3592 < "value" : [242, 97, 24, 255], --- > "value" : [166, 91, 17, 255], 3594c3594 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] dungeons\microdungeons\randomencounter\unsorted\generic\randomencounter.dungeon 3541c3541 < "value" : [255, 102, 26, 255], --- > "value" : [179, 98, 18, 255], 3543c3543 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] 3547c3547 < "value" : [242, 97, 24, 255], --- > "value" : [166, 91, 17, 255], 3549c3549 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] dungeons\microdungeons\randomencounter\unsorted\glitch\glitchencounter.dungeon 1871c1871 < "value" : [255, 102, 26, 255], --- > "value" : [179, 98, 18, 255], 1873c1873 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] 1877c1877 < "value" : [242, 97, 24, 255], --- > "value" : [166, 91, 17, 255], 1879c1879 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] dungeons\microdungeons\randomencounter\unsorted\shroomencounter\shroomencounter.dungeon 3572c3572 < "value" : [255, 102, 26, 255], --- > "value" : [179, 98, 18, 255], 3574c3574 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] 3578c3578 < "value" : [242, 97, 24, 255], --- > "value" : [166, 91, 17, 255], 3580c3580 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] dungeons\microdungeons\randomencounter\unsorted\treasureroom\treasureroom.dungeon 1871c1871 < "value" : [255, 102, 26, 255], --- > "value" : [179, 98, 18, 255], 1873c1873 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] 1877c1877 < "value" : [242, 97, 24, 255], --- > "value" : [166, 91, 17, 255], 1879c1879 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] dungeons\missions\glitchmissions\glitchmission1.dungeon 1832c1832 < "value" : [255, 102, 26, 255], --- > "value" : [179, 98, 18, 255], 1834c1834 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "left", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] 1838c1838 < "value" : [242, 97, 24, 255], --- > "value" : [166, 91, 17, 255], 1840c1840 < "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right" } ] ] --- > "brush" : [ [ "clear" ], [ "object", "trashbag", { "direction" : "right", "parameters" : { "treasurePools" : [ "glitchSewerLore" ] } } ] ] interface\warpmenu\returnwarp.config 28,29c28,29 < "base" : "/interface/warpmenu/outpostup.png", < "hover" : "/interface/warpmenu/outpost.png" --- > "base" : "/interface/warpmenu/gateup.png", > "hover" : "/interface/warpmenu/gate.png" items\armors\decorative\hats\shroomhead\shroom.head 7,8c7,8 < "description" : "An Agaran hat. It looks like a puffball mushroom. Cute.", < "shortdescription" : "Agaran Puffball Hat", --- > "description" : "Look like an Agaran with this Waxcap Mushroom hat!", > "shortdescription" : "Agaran Waxcap Hat", items\armors\decorative\hats\shroomhead2\shroom.head 7,8c7,8 < "description" : "An Agaran Hat. It looks like a stinkhorn mushroom. Weird.", < "shortdescription" : "Agaran Stinkhorn Hat", --- > "description" : "Look like an Agaran with this Gilled Mushroom hat!", > "shortdescription" : "Agaran Gilled Hat", items\armors\decorative\hats\shroomhead3\shroom.head 7c7 < "description" : "An Agaran hat. It looks like a fly agaric. Menacing.", --- > "description" : "Look like an Agaran with this Agaric Mushroom hat!", items\armors\decorative\hats\shroomhead4\shroom.head 7,8c7,8 < "description" : "An Agaran hat. It looks like a sky blue mushroom. Colourful.", < "shortdescription" : "Agaran Sky Blue Hat", --- > "description" : "Look like an Agaran with this Gilled Mushroom hat!", > "shortdescription" : "Agaran Gilled Hat", items\armors\floran\floran-tier6\florantier6.chest 7c7 < "description" : "Florans believe to devourer a fallen wiseman's brain is to gain their wisdom.", --- > "description" : "Florans believe to devour a fallen wiseman's brain is to gain their wisdom.", items\armors\human\human-tier6\humantier6.chest 7c7 < "description" : "Circuitry runs throughout this entire unit, it regulates breath rate and aids in producing a meditative state.", --- > "description" : "The circuitry within this armor regulates breath rate and helps the wearer keep a steady aim.", items\armors\human\human-tier6\humantier6.head 7,8c7,8 < "description" : "This tall helmet has brain-amplifying circuitry running throughout the inside.", < "shortdescription" : "Seeker's Braincage", --- > "description" : "The visor on this tough helmet is designed to sharpen the wearer's sight.", > "shortdescription" : "Seeker's Helmet", items\materials\supermatter.matitem 6c6 < "description" : "A crytal used to build FTL technology. We still don't fully understand it.", --- > "description" : "A crystal used to build FTL technology. We still don't fully understand it.", monsters\boss\crystalboss\diestate.lua 75a76,78 > > --And spawn a miner survivor > world.spawnNpc(mcontroller.position(), "human", "minersurvivor", entity.level()) monsters\ground\approachstate.lua 40,41d39 < entity.setAnimationState("movement", "run") < 46c44 < entity.setAnimationState("movement", "run") --- > setMovementState() monsters\ground\groundmonster.lua 827a828,839 > function setMovementState(running) > if not mcontroller.onGround() then > entity.setAnimationState("movement", "jump") > else > if running then > entity.setAnimationState("movement", "run") > else > entity.setAnimationState("movement", "walk") > end > end > end > 1059c1071 < groundTestRegion[2] = groundTestRegion[2] + bounds[1] + 1 --- > groundTestRegion[3] = groundTestRegion[3] + bounds[1] + 1 1066c1078 < timedJump(0.02, {position[1] + 2, position[2] + 1}) --- > timedJump(0.02, {position[1] + deltaDir * 2, position[2] + 1}) monsters\unique\chesttrapper\chesttrapper.monstertype 71a72,74 > }, > "poisonImmunity" : { > "baseValue" : 1.0 monsters\unique\cleaningbot\cleaningbot.monstertype 73a74,76 > }, > "poisonImmunity" : { > "baseValue" : 1.0 monsters\unique\giftmonster\giftmonster.monstertype 72a73,75 > }, > "poisonImmunity" : { > "baseValue" : 1.0 monsters\unique\giftmonster\giftmonstersmall.monstertype 72a73,75 > }, > "poisonImmunity" : { > "baseValue" : 1.0 monsters\unique\po\behavior.lua 104a105,108 > if delta[2] < 0 and not onSolidGround() then > mcontroller.controlDown() > return > end 115a120,149 > end > > --Check if entity is on solid ground (not platforms) > function onSolidGround() > local position = mcontroller.position() > local bounds = boundingBox() > > local groundRegion = { > position[1] + bounds[1] - 0.05, position[2] + bounds[2] - 0.95, > position[1] + bounds[3] + 0.05, position[2] + bounds[2] + 0.05 > } > return world.rectCollision(groundRegion, true) > end > > -------------------------------------------------------------------------------- > function boundingBox(force) > if self.boundingBox and not force then return self.boundingBox end > > local collisionPoly = mcontroller.collisionPoly() > local bounds = {0, 0, 0, 0} > > for _,point in pairs(collisionPoly) do > if point[1] < bounds[1] then bounds[1] = point[1] end > if point[2] < bounds[2] then bounds[2] = point[2] end > if point[1] > bounds[3] then bounds[3] = point[1] end > if point[2] > bounds[4] then bounds[4] = point[2] end > end > self.boundingBox = bounds > > return bounds monsters\unique\po\megapo.monstertype 78a79,81 > }, > "poisonImmunity" : { > "baseValue" : 1.0 monsters\unique\po\micropo.monstertype 76a77,79 > }, > "poisonImmunity" : { > "baseValue" : 1.0 monsters\unique\po\po.monstertype 76a77,79 > }, > "poisonImmunity" : { > "baseValue" : 1.0 monsters\unique\pogolem\pogolem.monstertype 104a105,107 > }, > "poisonImmunity" : { > "baseValue" : 1.0 monsters\unique\repairbot\repairbot.monstertype 72a73,75 > }, > "poisonImmunity" : { > "baseValue" : 1.0 monsters\unique\robotchicken\robotchicken.monstertype 76a77,79 > }, > "poisonImmunity" : { > "baseValue" : 1.0 monsters\unique\serpentdroid\serpentdroid.monstertype 107a108,110 > "poisonImmunity" : { > "baseValue" : 1.0 > }, monsters\unique\sewerfly\sewerfly.monstertype 118a119,121 > }, > "poisonImmunity" : { > "baseValue" : 1.0 134c137 < "blockedSensors" : [ [1.5, -1.1], [1.5, -0.5], [1.5, 0.5], [1.5, 1.1] ], --- > "blockedSensors" : [ [2.0, -1.1], [2.0, -0.5], [2.0, 0.5], [2.0, 1.1] ], monsters\unique\swarpion\swarpion.monstertype 74a75,77 > }, > "poisonImmunity" : { > "baseValue" : 1.0 monsters\unique\toxicfly\toxicfly.monstertype 118a119,121 > }, > "poisonImmunity" : { > "baseValue" : 1.0 monsters\unique\toxicgolem\toxicgolem.monstertype 75a76,78 > }, > "poisonImmunity" : { > "baseValue" : 1.0 npcs\followstate.lua 99c99,102 < stateData.targetPosition = stateData.playerPosition --- > local groundPosition = findGroundPosition(stateData.playerPosition, -15, 4) > if groundPosition then > stateData.targetPosition = groundPosition > end 123a127,129 > world.debugLine(mcontroller.position(), stateData.targetPosition, "green") > world.debugPoint(stateData.targetPosition, "green") > 164c170,174 < targetPosition[2] = followState.groundLevelAt(targetPosition) + 2.5 --- > local groundPosition = findGroundPosition(targetPosition, -15, 4) > if groundPosition then > return groundPosition > else > targetPosition[2] = followState.groundLevelAt(targetPosition) + 2.5 166c176,177 < return targetPosition --- > return targetPosition > end 192c203 < if oldTarget ~= stateData.targetId and shouldAttackOnSight(stateData.targetId) then --- > if oldTarget ~= stateData.targetId and followState.shouldAttack(stateData.targetId, stateData) then 199a211,226 > end > > function followState.shouldAttack(targetId, stateData) > if not entity.entityInSight(targetId) then return false end > > --Is aggressive monster > if world.isMonster(targetId, true) then > return true > end > > --Is aggressive NPC or NPC attacking the follow target > if world.isNpc(targetId, 2) or (world.isNpc(targetId) and world.callScriptedEntity(targetId, "attackTargetId") == stateData.targetPlayer) then > return true > end > > return false npcs\friendlyguard.npctype 4a5 > "damageTeamType" : "friendly", 22,23c23,24 < "/npcs/guard/guardState.lua", < "/npcs/guard/returnToPostState.lua" --- > "/npcs/followState.lua", > "/npcs/standingIdleState.lua" 29a31,32 > "idleTimeRange" : [1, 2], > 96a100,163 > }, > > "follower" : { > "playerQueryRadius" : 15, > "follower.maxFollowRange" : 40, > > "attackDistance" : 40, > > "attackSayingPercent" : 25, > "returnSayingPercent" : 25, > > "dialog" : { > "attack" : { > "default" : [ > "Don't worry, I'll take care of this", > "What kind of monster is this!?" > ] > }, > "join" : { > "default" : [ > "Hello adventurer, mind if I join you?", > "You look strong. We're friends now." > ] > }, > "returnFromCombat" : { > "default" : [ > "Now that was a fight!", > "Phew, you handle yourself quite well." > ] > }, > "wait" : { > "default" : [ > "I'll just wait here." > ] > }, > "returnFromWait" : { > "default" : [ > "You came back!" > ] > } > } > }, > > "meleeAttack" : { > "swingDistance" : 5, > "swingTime" : 0.4, > "swingCooldownTime" : 0.6, > "switchDistance" : 15, > "runThreshold" : 0, > "searchTime" : 10, > "backoffDistanceRange" : [8.0, 12.0], > "repositionCooldownTimeRange" : [2.0, 3.0] > }, > > "rangedAttack" : { > "minDistance" : 10, > "maxDistance" : 30, > "coverYOffset" : -1.5, > "coverYClearanceOffset" : 0.5, > "coverDistance" : 2.5, > "coverHideTimeRange" : [0.5, 1.0], > "coverFireTimeRange" : [1.0, 3.0], > "attackerSpacing" : 2.5, > "searchTime" : 10 npcs\friendlypirateguard.npctype 4a5 > "damageTeamType" : "friendly", 22,23c23,24 < "/npcs/guard/guardState.lua", < "/npcs/guard/returnToPostState.lua" --- > "/npcs/followState.lua", > "/npcs/standingIdleState.lua" 29a31,32 > "idleTimeRange" : [1, 2], > 99a103,166 > }, > > "follower" : { > "playerQueryRadius" : 15, > "follower.maxFollowRange" : 40, > > "attackDistance" : 40, > > "attackSayingPercent" : 25, > "returnSayingPercent" : 25, > > "dialog" : { > "attack" : { > "default" : [ > "Don't worry, I'll take care of this", > "What kind of monster is this!?" > ] > }, > "join" : { > "default" : [ > "Hello adventurer, mind if I join you?", > "You look strong. We're friends now." > ] > }, > "returnFromCombat" : { > "default" : [ > "Now that was a fight!", > "Phew, you handle yourself quite well." > ] > }, > "wait" : { > "default" : [ > "I'll just wait here." > ] > }, > "returnFromWait" : { > "default" : [ > "You came back!" > ] > } > } > }, > > "meleeAttack" : { > "swingDistance" : 5, > "swingTime" : 0.4, > "swingCooldownTime" : 0.6, > "switchDistance" : 15, > "runThreshold" : 0, > "searchTime" : 10, > "backoffDistanceRange" : [8.0, 12.0], > "repositionCooldownTimeRange" : [2.0, 3.0] > }, > > "rangedAttack" : { > "minDistance" : 10, > "maxDistance" : 30, > "coverYOffset" : -1.5, > "coverYClearanceOffset" : 0.5, > "coverDistance" : 2.5, > "coverHideTimeRange" : [0.5, 1.0], > "coverFireTimeRange" : [1.0, 3.0], > "attackerSpacing" : 2.5, > "searchTime" : 10 npcs\meleeattackstate.lua 104c104 < if not targetPosition or stateData.searchTimer >= entity.configParameter("meleeAttack.searchTime") then --- > if not targetPosition or stateData.searchTimer >= entity.configParameter("meleeAttack.searchTime") or meleeAttackState.outOfSpawnRange(spawnDistance, stateData.maxSpawnDistance) then 110c110 < if entityInSight and spawnDistance < stateData.maxSpawnDistance then --- > if entityInSight and not meleeAttackState.outOfSpawnRange(spawnDistance, stateData.maxSpawnDistance) then 244a245,250 > end > > function meleeAttackState.outOfSpawnRange(spawnDistance, maxSpawnDistance) > if followState ~= nil or returnToPostState == nil then return false end > > return spawnDistance > maxSpawnDistance npcs\rangedattackstate.lua 56c56 < if entityInSight and spawnDistance < stateData.maxSpawnDistance then --- > if entityInSight and not rangedAttackState.outOfSpawnRange(spawnDistance, stateData.maxSpawnDistance) then 75c75 < if stateData.searchTimer >= entity.configParameter("rangedAttack.searchTime") or spawnDistance > stateData.maxSpawnDistance then --- > if stateData.searchTimer >= entity.configParameter("rangedAttack.searchTime") or rangedAttackState.outOfSpawnRange(spawnDistance, stateData.maxSpawnDistance) then 195a196,201 > end > > function rangedAttackState.outOfSpawnRange(spawnDistance, maxSpawnDistance) > if followState ~= nil or returnToPostState == nil then return false end > > return spawnDistance > maxSpawnDistance objects\bugs\ashsprite\ashsprite.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\aurorabee\aurorabee.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\blueback\blueback.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\brightstripe\brightstripe.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\butterbee\butterbee.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\cinderfly\cinderfly.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\dewhopper\dewhopper.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\driftbell\driftbell.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\dustmoth\dustmoth.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\fawnfly\fawnfly.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\fireygiant\fireygiant.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\flameroach\flameroach.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\frostfleck\frostfleck.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\frostfly\frostfly.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\gasgiant\gasgiant.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\glowbug\glowbug.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\goldbuck\goldbuck.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\greentip\greentip.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\heathugger\heathugger.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\hivehog\hivehog.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\icetip\icetip.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\lavahopper\lavahopper.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\muddancer\muddancer.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\mudstag\mudstag.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\orphanfly\orphanfly.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\phoenixfly\phoenixfly.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\polarmoth\polarmoth.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\redwing\redwing.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\sandclown\sandclown.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\scuttleploom\scuttleploom.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\seahornet\seahornet.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\shadowmoth\shadowmoth.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\shardwing\shardwing.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\shellcreep\shellcreep.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\snowskater\snowskater.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\stinkjack\stinkjack.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\sunskipper\sunskipper.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\testbug\testbug.object 21c21 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\thornbee\thornbee.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\tidefly\tidefly.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\vineclimber\vineclimber.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\wavebird\wavebird.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\bugs\xenofly\xenofly.object 16c16 < "imagePosition" : [0, 0], --- > "imagePosition" : [-1, 0], objects\glitch\outhouse\outhouse.object 22c22 < "sitPosition" : [-6, 22], --- > "sitPosition" : [2, 22], 25c25 < "imagePosition" : [-8, 0], --- > "imagePosition" : [-16, 0], 38c38 < "imagePosition" : [-8, 0], --- > "imagePosition" : [-16, 0], objects\glitch\sewervalve\sewervalve.object 25c25 < "anchors" : [ "background" ] --- > "bgAnchors" : [ [0, 0] ] objects\glitch\wallpipe\wallpipe.object 20c20 < "dualImage" : "wallpipe.png:default", --- > "image" : "wallpipe.png:default", 21a22,31 > "direction" : "left", > "flipImages" : true, > > "spaceScan" : 0.1, > "anchors" : [ "background" ] > }, > { > "image" : "wallpipe.png:default", > "imagePosition" : [-11, -14], > "direction" : "right", projectiles\weather\fogprimer\fogprimer.projectile 31a32 > "onlyHitTerrain" : true, projectiles\weather\mistprimer\mistprimer.projectile 31a32 > "onlyHitTerrain" : true,