FILES ----- behaviors\npc\chat.behavior behaviors\npc\flee.behavior [NEW] behaviors\npc\friendlyidle.behavior [NEW] behaviors\npc\merchant.behavior behaviors\npc\villager.behavior celestial\system\terrestrial\horizon\masks\temperate\10_l.png celestial\system\terrestrial\horizon\masks\temperate\10_r.png celestial\system\terrestrial\horizon\masks\temperate\11_l.png celestial\system\terrestrial\horizon\masks\temperate\11_r.png celestial\system\terrestrial\horizon\masks\temperate\12_l.png celestial\system\terrestrial\horizon\masks\temperate\12_r.png celestial\system\terrestrial\horizon\masks\temperate\13_l.png celestial\system\terrestrial\horizon\masks\temperate\13_r.png celestial\system\terrestrial\horizon\masks\temperate\14_l.png celestial\system\terrestrial\horizon\masks\temperate\14_r.png celestial\system\terrestrial\horizon\masks\temperate\15_l.png celestial\system\terrestrial\horizon\masks\temperate\15_r.png celestial\system\terrestrial\horizon\masks\temperate\16_l.png celestial\system\terrestrial\horizon\masks\temperate\16_r.png celestial\system\terrestrial\horizon\masks\temperate\17_l.png celestial\system\terrestrial\horizon\masks\temperate\17_r.png celestial\system\terrestrial\horizon\masks\temperate\18_l.png celestial\system\terrestrial\horizon\masks\temperate\18_r.png celestial\system\terrestrial\horizon\masks\temperate\19_l.png celestial\system\terrestrial\horizon\masks\temperate\19_r.png celestial\system\terrestrial\horizon\masks\temperate\1_l.png celestial\system\terrestrial\horizon\masks\temperate\1_r.png celestial\system\terrestrial\horizon\masks\temperate\20_l.png celestial\system\terrestrial\horizon\masks\temperate\20_r.png celestial\system\terrestrial\horizon\masks\temperate\21_l.png celestial\system\terrestrial\horizon\masks\temperate\21_r.png celestial\system\terrestrial\horizon\masks\temperate\22_l.png celestial\system\terrestrial\horizon\masks\temperate\22_r.png celestial\system\terrestrial\horizon\masks\temperate\23_l.png celestial\system\terrestrial\horizon\masks\temperate\23_r.png celestial\system\terrestrial\horizon\masks\temperate\24_l.png celestial\system\terrestrial\horizon\masks\temperate\24_r.png celestial\system\terrestrial\horizon\masks\temperate\25_l.png celestial\system\terrestrial\horizon\masks\temperate\25_r.png celestial\system\terrestrial\horizon\masks\temperate\2_l.png celestial\system\terrestrial\horizon\masks\temperate\2_r.png celestial\system\terrestrial\horizon\masks\temperate\3_l.png celestial\system\terrestrial\horizon\masks\temperate\3_r.png celestial\system\terrestrial\horizon\masks\temperate\4_l.png celestial\system\terrestrial\horizon\masks\temperate\4_r.png celestial\system\terrestrial\horizon\masks\temperate\5_l.png celestial\system\terrestrial\horizon\masks\temperate\5_r.png celestial\system\terrestrial\horizon\masks\temperate\6_l.png celestial\system\terrestrial\horizon\masks\temperate\6_r.png celestial\system\terrestrial\horizon\masks\temperate\7_l.png celestial\system\terrestrial\horizon\masks\temperate\7_r.png celestial\system\terrestrial\horizon\masks\temperate\8_l.png celestial\system\terrestrial\horizon\masks\temperate\8_r.png celestial\system\terrestrial\horizon\masks\temperate\9_l.png celestial\system\terrestrial\horizon\masks\temperate\9_r.png dungeons\missions\floranmissions\floranmission1-liquids.png dungeons\missions\floranmissions\floranmission1-objects.png dungeons\missions\floranmissions\floranmission1-wires1.png dungeons\missions\floranmissions\floranmission1.dungeon dungeons\missions\floranmissions\floranmission1.png dungeons\other\challengerooms\choices1.json dungeons\other\challengerooms\grid.json [NEW] dungeons\other\challengerooms\hylotlmission1.json dungeons\other\challengerooms\laserdash.json items\armors\decorative\hats\kitty\kitty.head [NEW] items\armors\other\caretaker\back.png [NEW] items\armors\other\caretaker\bsleeve.png [NEW] items\armors\other\caretaker\caretaker.back [NEW] items\armors\other\caretaker\caretaker.chest [NEW] items\armors\other\caretaker\caretaker.head [NEW] items\armors\other\caretaker\caretaker.legs [NEW] items\armors\other\caretaker\chestf.png [NEW] items\armors\other\caretaker\chestm.png [NEW] items\armors\other\caretaker\fsleeve.png [NEW] items\armors\other\caretaker\head.png [NEW] items\armors\other\caretaker\icons.png [NEW] items\armors\other\caretaker\mask.png [NEW] items\armors\other\caretaker\pants.png monsters\bmonster.lua monsters\ground\largequadruped\largequadruped.monstertype monsters\skills\ranged\bonerainattack.monsterskill monsters\skills\ranged\cellblastattack.monsterskill monsters\skills\ranged\explosivephlegmattack.monsterskill monsters\skills\ranged\fishbreathattack.monsterskill monsters\skills\ranged\orbofzotsattack.monsterskill [NEW] monsters\skills\ranged\putridwaveattack.monsterskill monsters\skills\ranged\smokeringattack.monsterskill monsters\skills\ranged\snotshotattack.monsterskill [NEW] monsters\unique\bunny\behavior.lua [NEW] monsters\unique\bunny\body.monsterpart [NEW] monsters\unique\bunny\bunny.animation [NEW] monsters\unique\bunny\bunny.monstertype [NEW] monsters\unique\bunny\bunny.png [NEW] monsters\unique\bunny\default.frames [NEW] monsters\unique\floki\behavior.lua [NEW] monsters\unique\floki\body.monsterpart [NEW] monsters\unique\floki\default.frames [NEW] monsters\unique\floki\floki.animation [NEW] monsters\unique\floki\floki.monstertype [NEW] monsters\unique\floki\floki.png npcs\airshipquartermaster.npctype npcs\bmain.lua npcs\chefmerchant.npctype npcs\doctormerchant.npctype npcs\merchant.npctype npcs\shroommerchant.npctype npcs\stimmerchant.npctype npcs\toolmerchant.npctype npcs\villager.npctype npcs\wanderingmerchant.npctype npcs\wizardmerchant.npctype npcs\merchant\merchantstate.lua objects\ancient\airbooster\airbooster.object objects\ancient\ancientbigchest\ancientbigchest.png objects\ancient\ancientbigchest\ancientbigchestlit.png objects\ancient\ancientbouldertrap\ancientbouldertrap.object objects\ancient\ancientchest\ancientchest.object objects\ancient\ancientconsole\ancientconsole.object objects\ancient\ancientconsole\returnconsole.object objects\ancient\ancientcrystaltrap\ancientcrystaltrap.object objects\ancient\ancientdoor\ancientdoor.object objects\ancient\ancientflametrap\ancientflametrap.object objects\ancient\ancientgate\ancientgate.object objects\ancient\ancienthiddenplatform\ancienthiddenplatform.object objects\ancient\ancienticetrap\ancienticetrap.object [NEW] objects\ancient\ancientlight\ancientlight.frames [NEW] objects\ancient\ancientlight\ancientlight.object [NEW] objects\ancient\ancientlight\ancientlight.png [NEW] objects\ancient\ancientlight\ancientlighticon.png [NEW] objects\ancient\ancientlight\ancientlightlit.frames [NEW] objects\ancient\ancientlight\ancientlightlit.png objects\ancient\ancientlightplatform\ancientlightplatform.object objects\ancient\ancientpillar\ancientpillar.object objects\ancient\ancientplaque1\ancientplaque1.object [NEW] objects\ancient\ancientprop\ancientprop.frames [NEW] objects\ancient\ancientprop\ancientprop.object [NEW] objects\ancient\ancientprop\ancientprop.png [NEW] objects\ancient\ancientprop\icon.png objects\ancient\ancientsmallconsole\ancientsmallconsole.object objects\ancient\ancientstriplight1\ancientstriplight1.object objects\ancient\ancientstriplight10\ancientstriplight10.object objects\ancient\ancientstriplight11\ancientstriplight11.object objects\ancient\ancientstriplight12\ancientstriplight12.object objects\ancient\ancientstriplight13\ancientstriplight13.object objects\ancient\ancientstriplight2\ancientstriplight2.object objects\ancient\ancientstriplight3\ancientstriplight3.object objects\ancient\ancientstriplight4\ancientstriplight4.object objects\ancient\ancientstriplight5\ancientstriplight5.object objects\ancient\ancientstriplight6\ancientstriplight6.object objects\ancient\ancientstriplight7\ancientstriplight7.object objects\ancient\ancientstriplight8\ancientstriplight8.object objects\ancient\ancientstriplight9\ancientstriplight9.object [NEW] objects\ancient\ancienttorch\ancienttorch.animation [NEW] objects\ancient\ancienttorch\ancienttorch.frames [NEW] objects\ancient\ancienttorch\ancienttorch.object [NEW] objects\ancient\ancienttorch\ancienttorch.png [NEW] objects\ancient\ancienttorch\ancienttorchleft.frames [NEW] objects\ancient\ancienttorch\ancienttorchleft.png [NEW] objects\ancient\ancienttorch\ancienttorchleftlit.frames [NEW] objects\ancient\ancienttorch\ancienttorchleftlit.png [NEW] objects\ancient\ancienttorch\ancienttorchlit.frames [NEW] objects\ancient\ancienttorch\ancienttorchlit.png [NEW] objects\ancient\ancienttorch\ancienttorchright.frames [NEW] objects\ancient\ancienttorch\ancienttorchright.png [NEW] objects\ancient\ancienttorch\ancienttorchrightlit.frames [NEW] objects\ancient\ancienttorch\ancienttorchrightlit.png [NEW] objects\ancient\ancienttorch\icon.png objects\ancient\ancientverticaldoor\ancientverticaldoor.object objects\ancient\challengedoor\challengedoor.object objects\ancient\challengedoor\challengereturndoor.object objects\ancient\hologram1\hologram1.object objects\ancient\hologram2\hologram2.object objects\ancient\hologram3\hologram3.object objects\ancient\hologram4\hologram4.object objects\ancient\hologramgalaxy\hologramgalaxy.object objects\ancient\jumpbooster\jumpbooster.object objects\ancient\powerbooster\powerbooster.object objects\ancient\sawblade2\sawblade2.object objects\ancient\speedbooster\speedbooster.object [NEW] objects\floran\planttorch\planttorch.animation objects\floran\planttorch\planttorch.frames objects\floran\planttorch\planttorch.object objects\floran\planttorch\planttorchleft.frames objects\floran\planttorch\planttorchleftlit.frames objects\floran\planttorch\planttorchlit.frames objects\floran\planttorch\planttorchright.frames objects\floran\planttorch\planttorchrightlit.frames objects\hylotl\hylotlredalert\icon.png objects\mission\bossweb\bossweb.png objects\mission\skullwalltorch\skullwalltorch.object objects\outpost\penguinbay\penguinbay.object [NEW] objects\outpost\shipyardcaptain\shipyardcaptain.frames [NEW] objects\outpost\shipyardcaptain\shipyardcaptain.object [NEW] objects\outpost\shipyardcaptain\shipyardcaptain.png [NEW] objects\outpost\shipyardcaptain\shipyardcaptainicon.png [NEW] objects\outpost\shipyardcaptain\shipyardcaptainlit.frames [NEW] objects\outpost\shipyardcaptain\shipyardcaptainlit.png [NEW] objects\outpost\shipyardjunk\shipyardjunk.frames [NEW] objects\outpost\shipyardjunk\shipyardjunk.object [NEW] objects\outpost\shipyardjunk\shipyardjunk.png [NEW] objects\outpost\shipyardjunk\shipyardjunkicon.png [NEW] objects\outpost\shipyardjunk\shipyardjunklit.frames [NEW] objects\outpost\shipyardjunk\shipyardjunklit.png projectiles\minibiomelegendaries\cellblast\cellblast.projectile projectiles\npcs\acidspit\acidspit.projectile projectiles\npcs\explosivegoo\explosivegoo.projectile projectiles\npcs\orbofzots\orbofzots.projectile projectiles\npcs\orbofzots\zotsorb.png projectiles\npcs\orbofzots\zotsorb.projectile projectiles\npcs\orbofzots\zotszot.png projectiles\npcs\orbofzots\zotszot.projectile projectiles\npcs\smokering\smokering.projectile projectiles\npcs\snotblock\snotblock.projectile projectiles\npcs\sonicwave\sonicwave.projectile projectiles\throwable\bone\bone.projectile recipes\armor\apex\tier6accelerator\apextier6acceleratorchest.recipe recipes\armor\apex\tier6accelerator\apextier6acceleratorhead.recipe recipes\armor\apex\tier6accelerator\apextier6acceleratorpants.recipe recipes\armor\apex\tier6manipulator\apextier6manipulatorchest.recipe recipes\armor\apex\tier6manipulator\apextier6manipulatorhead.recipe recipes\armor\apex\tier6manipulator\apextier6manipulatorpants.recipe recipes\armor\apex\tier6separator\apextier6separatorchest.recipe recipes\armor\apex\tier6separator\apextier6separatorhead.recipe recipes\armor\apex\tier6separator\apextier6separatorpants.recipe recipes\armor\avian\tier6accelerator\aviantier6acceleratorchest.recipe recipes\armor\avian\tier6accelerator\aviantier6acceleratorhead.recipe recipes\armor\avian\tier6accelerator\aviantier6acceleratorpants.recipe recipes\armor\avian\tier6manipulator\aviantier6manipulatorchest.recipe recipes\armor\avian\tier6manipulator\aviantier6manipulatorhead.recipe recipes\armor\avian\tier6manipulator\aviantier6manipulatorpants.recipe recipes\armor\avian\tier6separator\aviantier6separatorchest.recipe recipes\armor\avian\tier6separator\aviantier6separatorhead.recipe recipes\armor\avian\tier6separator\aviantier6separatorpants.recipe recipes\armor\floran\tier6accelerator\florantier6acceleratorchest.recipe recipes\armor\floran\tier6accelerator\florantier6acceleratorhead.recipe recipes\armor\floran\tier6accelerator\florantier6acceleratorpants.recipe recipes\armor\floran\tier6manipulator\florantier6manipulatorchest.recipe recipes\armor\floran\tier6manipulator\florantier6manipulatorhead.recipe recipes\armor\floran\tier6manipulator\florantier6manipulatorpants.recipe recipes\armor\floran\tier6separator\florantier6separatorchest.recipe recipes\armor\floran\tier6separator\florantier6separatorhead.recipe recipes\armor\floran\tier6separator\florantier6separatorpants.recipe recipes\armor\glitch\tier6accelerator\glitchtier6acceleratorchest.recipe recipes\armor\glitch\tier6accelerator\glitchtier6acceleratorhead.recipe recipes\armor\glitch\tier6accelerator\glitchtier6acceleratorpants.recipe recipes\armor\glitch\tier6manipulator\glitchtier6manipulatorchest.recipe recipes\armor\glitch\tier6manipulator\glitchtier6manipulatorhead.recipe recipes\armor\glitch\tier6manipulator\glitchtier6manipulatorpants.recipe recipes\armor\glitch\tier6separator\glitchtier6separatorchest.recipe recipes\armor\glitch\tier6separator\glitchtier6separatorhead.recipe recipes\armor\glitch\tier6separator\glitchtier6separatorpants.recipe recipes\armor\human\tier6accelerator\humantier6acceleratorchest.recipe recipes\armor\human\tier6accelerator\humantier6acceleratorhead.recipe recipes\armor\human\tier6accelerator\humantier6acceleratorpants.recipe recipes\armor\human\tier6manipulator\humantier6manipulatorchest.recipe recipes\armor\human\tier6manipulator\humantier6manipulatorhead.recipe recipes\armor\human\tier6manipulator\humantier6manipulatorpants.recipe recipes\armor\human\tier6separator\humantier6separatorchest.recipe recipes\armor\human\tier6separator\humantier6separatorhead.recipe recipes\armor\human\tier6separator\humantier6separatorpants.recipe recipes\armor\hylotl\tier6accelerator\hylotltier6acceleratorchest.recipe recipes\armor\hylotl\tier6accelerator\hylotltier6acceleratorhead.recipe recipes\armor\hylotl\tier6accelerator\hylotltier6acceleratorpants.recipe recipes\armor\hylotl\tier6manipulator\hylotltier6manipulatorchest.recipe recipes\armor\hylotl\tier6manipulator\hylotltier6manipulatorhead.recipe recipes\armor\hylotl\tier6manipulator\hylotltier6manipulatorpants.recipe recipes\armor\hylotl\tier6separator\hylotltier6separatorchest.recipe recipes\armor\hylotl\tier6separator\hylotltier6separatorhead.recipe recipes\armor\hylotl\tier6separator\hylotltier6separatorpants.recipe recipes\armor\novakid\tier6accelerator\novatier6acceleratorchest.recipe recipes\armor\novakid\tier6accelerator\novatier6acceleratorhead.recipe recipes\armor\novakid\tier6accelerator\novatier6acceleratorpants.recipe recipes\armor\novakid\tier6manipulator\novatier6manipulatorchest.recipe recipes\armor\novakid\tier6manipulator\novatier6manipulatorhead.recipe recipes\armor\novakid\tier6manipulator\novatier6manipulatorpants.recipe recipes\armor\novakid\tier6separator\novatier6separatorchest.recipe recipes\armor\novakid\tier6separator\novatier6separatorhead.recipe recipes\armor\novakid\tier6separator\novatier6separatorpants.recipe scripts\behavior.lua scripts\actions\entities.lua [NEW] scripts\actions\merchant.lua [NEW] stagehands\coordinator.lua [NEW] stagehands\coordinator.stagehand tiles\materials\ancientblock.png treasure\dungeon.treasurepools DIFFS ----- behaviors\npc\chat.behavior 5d4 < "/scripts/actions/notification.lua", 7d5 < "/scripts/actions/movement.lua", 24c22 < "title": "selector", --- > "title": "sequence", 26,27c24,30 < "name": "selector", < "parameters": {}, --- > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, 30,32c33,35 < "title": "sequence", < "type": "composite", < "name": "sequence", --- > "title": "queryEntity", > "type": "action", > "name": "queryEntity", 34,37c37,43 < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" --- > "entityTypes": [ > "npc" > ], > "orderBy": "nearest", > "position": "self", > "range": 3, > "withoutEntity": "self" 39,60c45,47 < "children": [ < { < "title": "receivedNotification", < "type": "action", < "name": "receivedNotification", < "parameters": { < "type": "chat" < }, < "output": { < "source": "chatfriend" < } < }, < { < "title": "sendNotification", < "type": "action", < "name": "sendNotification", < "parameters": { < "type": "chatturn", < "entity": "chatfriend" < } < } < ] --- > "output": { > "entity": "chatfriend" > } 63,65c50,52 < "title": "sequence", < "type": "composite", < "name": "sequence", --- > "title": "entityInSight", > "type": "action", > "name": "entityInSight", 67,116c54,55 < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" < }, < "children": [ < { < "title": "cooldown", < "type": "decorator", < "name": "cooldown", < "parameters": { < "cooldown": 0.2, < "onFail": true < }, < "child": { < "title": "queryEntity", < "type": "action", < "name": "queryEntity", < "parameters": { < "entityTypes": [ < "npc" < ], < "orderBy": "nearest", < "position": "self", < "range": 3, < "withoutEntity": "self" < }, < "output": { < "entity": "chatfriend" < } < } < }, < { < "title": "entityInSight", < "type": "action", < "name": "entityInSight", < "parameters": { < "entity": "chatfriend" < } < }, < { < "title": "sendNotification", < "type": "action", < "name": "sendNotification", < "parameters": { < "type": "chat", < "entity": "chatfriend" < } < } < ] --- > "entity": "chatfriend" > } 121c60 < "title": "parallel", --- > "title": "selector", 123,127c62,63 < "name": "parallel", < "parameters": { < "fail": 1, < "success": -1 < }, --- > "name": "selector", > "parameters": {}, 130,132c66,68 < "title": "entityInRange", < "type": "action", < "name": "entityInRange", --- > "title": "group", > "type": "decorator", > "name": "group", 134,151c70,88 < "entity": "chatfriend", < "xRange": 5, < "position": "self" < } < }, < { < "title": "dynamic", < "type": "composite", < "name": "dynamic", < "parameters": {}, < "children": [ < { < "title": "inverter", < "type": "decorator", < "name": "inverter", < "parameters": {}, < "child": { < "title": "entityInRange", --- > "groupId": "chat", > "goalType": "entity", > "goal": "self", > "minMembers": 2, > "maxMembers": 2 > }, > "child": { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "say", 153c90 < "name": "entityInRange", --- > "name": "say", 155,157c92 < "entity": "chatfriend", < "xRange": 1, < "position": "self" --- > "content": "I am self" 159,169d93 < } < }, < { < "title": "sequence", < "type": "composite", < "name": "sequence", < "parameters": { < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" 171,202c95,100 < "children": [ < { < "title": "entityDirection", < "type": "action", < "name": "entityDirection", < "parameters": { < "entity": "self", < "target": "chatfriend" < }, < "output": { < "direction": "chatfriend" < } < }, < { < "title": "reverseDirection", < "type": "action", < "name": "reverseDirection", < "parameters": { < "direction": "chatfriend" < }, < "output": { < "direction": "chatseparate" < } < }, < { < "title": "move", < "type": "action", < "name": "move", < "parameters": { < "direction": "chatseparate", < "run": false < } --- > { > "title": "timer", > "type": "action", > "name": "timer", > "parameters": { > "time": 5 204,213c102,103 < ] < } < ] < }, < { < "title": "faceEntity", < "type": "action", < "name": "faceEntity", < "parameters": { < "entity": "chatfriend" --- > } > ] 217c107 < "title": "repeater", --- > "title": "group", 219c109 < "name": "repeater", --- > "name": "group", 221,222c111,115 < "maxLoops": 3, < "untilSuccess": false --- > "groupId": "chat", > "goalType": "entity", > "goal": "chatfriend", > "minMembers": 2, > "maxMembers": 2 236,265d128 < "title": "dynamic", < "type": "composite", < "name": "dynamic", < "parameters": {}, < "children": [ < { < "title": "receivedNotification", < "type": "action", < "name": "receivedNotification", < "parameters": { < "type": "chatturn" < } < }, < { < "title": "runner", < "type": "action", < "name": "runner", < "parameters": {} < } < ] < }, < { < "title": "emote", < "type": "action", < "name": "emote", < "parameters": { < "emote": "blabbering" < } < }, < { 270c133 < "time": 2 --- > "time": 2.5 274c137 < "title": "sendNotification", --- > "title": "say", 276c139 < "name": "sendNotification", --- > "name": "say", 278,279c141 < "type": "chatturn", < "entity": "chatfriend" --- > "content": "I am chatfriend" 286,318d147 < }, < { < "title": "dynamic", < "type": "composite", < "name": "dynamic", < "parameters": {}, < "children": [ < { < "title": "receivedNotification", < "type": "action", < "name": "receivedNotification", < "parameters": { < "type": "chatend" < } < }, < { < "title": "timer", < "type": "action", < "name": "timer", < "parameters": { < "time": 2 < } < } < ] < }, < { < "title": "sendNotification", < "type": "action", < "name": "sendNotification", < "parameters": { < "type": "chatend", < "entity": "chatfriend" < } behaviors\npc\flee.behavior 201c201 < "title": "", --- > "title": "sayToEntity", 203c203 < "name": "sayToTarget", --- > "name": "sayToEntity", 205,206c205,206 < "entity": "fleeTarget", < "dialogType": "flee.dialog.safe" --- > "dialogType": "flee.dialog.safe", > "entity": "fleeTarget" behaviors\npc\villager.behavior 4,6c4 < "scripts": [ < "/scripts/actions/time.lua" < ], --- > "scripts": [], 16c14,15 < "path": "/behaviors/npc/flee.behavior", --- > "path": "/behaviors/npc/tenant.behavior", > "title": "Tenant Baseline Behavior", 21c20 < "path": "/behaviors/npc/converse.behavior", --- > "path": "/behaviors/npc/flee.behavior", 25,37c24,26 < "title": "cooldown", < "type": "decorator", < "name": "cooldown", < "parameters": { < "cooldown": 60, < "onFail": false < }, < "child": { < "type": "module", < "path": "/behaviors/npc/chat.behavior", < "title": "NPC Chat", < "parameters": {} < } --- > "type": "module", > "path": "/behaviors/npc/converse.behavior", > "parameters": {} 40,84c29,32 < "type": "composite", < "name": "selector", < "parameters": {}, < "children": [ < { < "type": "module", < "path": "/behaviors/npc/sleep.behavior", < "parameters": {} < }, < { < "type": "decorator", < "name": "cooldown", < "parameters": { < "cooldown": 60 < }, < "child": { < "type": "module", < "path": "/behaviors/npc/sit.behavior", < "parameters": {} < } < }, < { < "type": "composite", < "name": "sequence", < "parameters": {}, < "children": [ < { < "type": "module", < "path": "/behaviors/npc/wander.behavior", < "parameters": {} < }, < { < "title": "Idle", < "type": "action", < "name": "timer", < "parameters": { < "time": [ < 2, < 10 < ] < } < } < ] < } < ] --- > "type": "module", > "path": "/behaviors/npc/friendlyidle.behavior", > "title": "/behaviors/npc/friendlyidle.behavior", > "parameters": {} dungeons\missions\floranmissions\floranmission1.dungeon 406a407,418 > "value" : [34, 0, 0, 255], > "comment" : "wire #34", > "brush" : [ [ "wire", { "group" : "group34", "local" : true } ] ] > }, > > { > "value" : [35, 0, 0, 255], > "comment" : "wire #35", > "brush" : [ [ "wire", { "group" : "group35", "local" : true } ] ] > }, > > { 2009c2021 < "brush" : [ [ "clear" ], [ "object", "planttorch" ] ] --- > "brush" : [ [ "clear" ], [ "object", "planttorch", { "interactive" : false } ] ] 2619a2632,2646 > } > } > ] ] > }, > > { > "value" : [176, 216, 156, 255], > "comment" : "nuru scene 4", > "brush" : [ [ "npc", > { > "kind" : "npc", > "species" : "floran", > "typeName" : "nuru", > "parameters" : { > "behavior" : "/behaviors/sequences/floranmission/nuruboss.behavior" dungeons\other\challengerooms\choices1.json [TMX file differences are left out for huge size.] dungeons\other\challengerooms\grid.json [TMX file differences are left out for huge size.] dungeons\other\challengerooms\laserdash.json [TMX file differences are left out for huge size.] items\armors\decorative\hats\kitty\kitty.head 19,20c19,20 < /* BLACK */ < { "ffca8a" : "838383", "e0975c" : "555555", "a85636" : "383838", "6f2919" : "151515" }, --- > /* WHITE */ > { "ffca8a" : "e6e6e6", "e0975c" : "b6b6b6", "a85636" : "7b7b7b", "6f2919" : "373737" }, monsters\bmonster.lua 17c17 < self.behavior = nodeFromJson(entity.behavior()) --- > self.behavior = BTree:new(entity.behavior()) monsters\ground\largequadruped\largequadruped.monstertype 76c76 < "specialSkills" : [ "smokeRingAttack" ] --- > "specialSkills" : [ "shockingWaveAttack", "staticDischargeAttack", "bubbleBlastAttack", "waterGunAttack", "burninghaloAttack", "gasBelchAttack", "rainbowVomitAttack", "shockingBoltAttack", "plasmaTorpedoAttack", "eyeballSprayAttack", "bloodVomitAttack", "acidicSpitAttack", "fireballAttack", "icerockShotAttack", "doubleBarbSprayAttack", "miniDragonBreathAttack", "acidSprayAttack", "beamBurstAttack", "plasmaSweepAttack", "eyeballShotAttack", "glitterAttack", "darkGravityBallAttack", "fireSwirlAttack", "rockRollAttack", "iceBlastAttack", "snotBubbleAttack", "leafyGustAttack", "mudBallAttack", "lightBallAttack", "shardSprayAttack", "blueFlameAttack", "smokeRingAttack", "putridWaveAttack", "boneRainAttack", "orbOfZotsAttack", "snotShotAttack", "fishBreathAttack", "explosivePhlegmAttack", "cellBlastAttack" ] 82c82 < "specialSkills" : [ "shockingWaveAttack", "staticDischargeAttack", "bubbleBlastAttack", "waterGunAttack", "burninghaloAttack", "gasBelchAttack", "rainbowVomitAttack", "shockingBoltAttack", "plasmaTorpedoAttack", "eyeballSprayAttack", "bloodVomitAttack", "acidicSpitAttack", "fireballAttack", "icerockShotAttack", "doubleBarbSprayAttack", "miniDragonBreathAttack", "acidSprayAttack", "beamBurstAttack", "plasmaSweepAttack", "eyeballShotAttack", "glitterAttack", "darkGravityBallAttack", "fireSwirlAttack", "rockRollAttack", "iceBlastAttack", "snotBubbleAttack", "leafyGustAttack", "mudBallAttack", "lightBallAttack", "shardSprayAttack", "blueFlameAttack" ] --- > "specialSkills" : [ "shockingWaveAttack", "staticDischargeAttack", "bubbleBlastAttack", "waterGunAttack", "burninghaloAttack", "gasBelchAttack", "rainbowVomitAttack", "shockingBoltAttack", "plasmaTorpedoAttack", "eyeballSprayAttack", "bloodVomitAttack", "acidicSpitAttack", "fireballAttack", "icerockShotAttack", "doubleBarbSprayAttack", "miniDragonBreathAttack", "acidSprayAttack", "beamBurstAttack", "plasmaSweepAttack", "eyeballShotAttack", "glitterAttack", "darkGravityBallAttack", "fireSwirlAttack", "rockRollAttack", "iceBlastAttack", "snotBubbleAttack", "leafyGustAttack", "mudBallAttack", "lightBallAttack", "shardSprayAttack", "blueFlameAttack", "smokeRingAttack", "putridWaveAttack", "boneRainAttack", "orbOfZotsAttack", "snotShotAttack", "fishBreathAttack", "explosivePhlegmAttack", "cellBlastAttack" ] monsters\skills\ranged\bonerainattack.monsterskill 4c4 < "image" : "/monsters/flying/skills/default.png", --- > "image" : "/monsters/skills/defaultpoison.png", 16c16,19 < "winddownTime" : 0.7 --- > "winddownTime" : 0.7, > "castTime" : 0.8, > "castEffect" : "castpoison", > "castAnimation" : "melee" monsters\skills\ranged\cellblastattack.monsterskill 3,4c3,4 < "label" : "CELL BLAST", < "image" : "/monsters/flying/skills/default.png", --- > "label" : "CELL SHOCK", > "image" : "/monsters/skills/defaultelectric.png", 11c11 < "speed" : 25, --- > "speed" : 40, 13c13,16 < "shots" : 1 --- > "shots" : 1, > "castTime" : 0.8, > "castEffect" : "castelectric", > "castAnimation" : "melee" monsters\skills\ranged\explosivephlegmattack.monsterskill 4c4 < "image" : "/monsters/flying/skills/default.png", --- > "image" : "/monsters/skills/defaultpoison.png", 16c16,19 < "winddownTime" : 0.2 --- > "winddownTime" : 0.2, > "castTime" : 0.8, > "castEffect" : "castpoison", > "castAnimation" : "melee" monsters\skills\ranged\fishbreathattack.monsterskill 3,4c3,4 < "label" : "FISH BREATH", < "image" : "/monsters/flying/skills/default.png", --- > "label" : "TOXIC REGURGITATION", > "image" : "/monsters/skills/defaultpoison.png", 16c16,19 < "windupTime" : 0.5 --- > "windupTime" : 0.5, > "castTime" : 0.8, > "castEffect" : "castpoison", > "castAnimation" : "melee" monsters\skills\ranged\orbofzotsattack.monsterskill 4c4 < "image" : "/monsters/flying/skills/default.png", --- > "image" : "/monsters/skills/defaultfire.png", 16c16,19 < "fireAnimationTiming" : 0.3 --- > "fireAnimationTiming" : 0.3, > "castTime" : 0.8, > "castEffect" : "castfire", > "castAnimation" : "melee" monsters\skills\ranged\smokeringattack.monsterskill 4c4 < "image" : "/monsters/flying/skills/default.png", --- > "image" : "/monsters/skills/defaultfire.png", 11c11 < "speed" : 20, --- > "speed" : 50, 14c14,17 < "windupTime" : 0.5 --- > "windupTime" : 0.5, > "castTime" : 0.8, > "castEffect" : "castfire", > "castAnimation" : "melee" monsters\skills\ranged\snotshotattack.monsterskill 3,4c3,4 < "label" : "SNOT SHOT", < "image" : "/monsters/flying/skills/default.png", --- > "label" : "BLOB SHOT", > "image" : "/monsters/skills/defaultpoison.png", 18c18,21 < "fireAnimationTiming" : 0.2 --- > "fireAnimationTiming" : 0.2, > "castTime" : 0.8, > "castEffect" : "castpoison", > "castAnimation" : "melee" npcs\airshipquartermaster.npctype 16a17 > "/scripts/actions/merchant.lua", npcs\bmain.lua 5a6 > self.coordinators = {} 13c14 < self.behavior = nodeFromJson(entity.behavior()) --- > self.behavior = BTree:new(entity.behavior()) 22a24,25 > self.tradingConfig = nil > 35a39,41 > if self.tradingConfig ~= nil then > return { "OpenMerchantInterface", self.tradingConfig } > end 41a48,51 > end > > function die() > self.behavior:die() npcs\chefmerchant.npctype 17a18 > "/scripts/actions/merchant.lua", npcs\doctormerchant.npctype 16a17 > "/scripts/actions/merchant.lua", npcs\merchant.npctype 15a16 > "/scripts/actions/merchant.lua", 93a95 > "The damage to my store is causing much concern to me...", npcs\shroommerchant.npctype 15a16 > "/scripts/actions/merchant.lua", npcs\stimmerchant.npctype 15a16 > "/scripts/actions/merchant.lua", npcs\toolmerchant.npctype 15a16 > "/scripts/actions/merchant.lua", npcs\villager.npctype 10,15c10,11 < "/npcs/main.lua", < "/scripts/pathing.lua", < "/npcs/tenant.lua", < "/npcs/timers.lua", < "/scripts/sensors.lua", < "/scripts/stateMachine.lua", --- > "/npcs/bmain.lua", > "/scripts/behavior.lua", 18,28c14,15 < < "/npcs/returnHomeState.lua", < "/npcs/grumbleState.lua", < "/npcs/chatState.lua", < "/npcs/converseState.lua", < "/npcs/fleeState.lua", < "/npcs/sitState.lua", < "/npcs/sleepState.lua", < "/npcs/standingIdleState.lua", < "/npcs/wanderState.lua", < "/npcs/workState.lua" --- > "/scripts/pathing.lua", > "/scripts/tenant.lua" 30a18,20 > > "behavior" : "/behaviors/npc/villager.behavior", > 1548c1538 < "You look like fun Can I chassse you?", --- > "You look like fun, can I chassse you?", npcs\wanderingmerchant.npctype 15a16 > "/scripts/actions/merchant.lua", npcs\wizardmerchant.npctype 16a17 > "/scripts/actions/merchant.lua", npcs\merchant\merchantstate.lua 13c13 < self.tradingConfig = merchantState.buildTradingConfig() --- > self.tradingConfig = buildTradingConfig() 57,151d56 < end < < -------------------------------------------------------------------------------- < function merchantState.buildTradingConfig() < -- Build list of all possible items < local level = entity.level() < local items = {} < for _, category in pairs(entity.configParameter("merchant.categories")) do < local levelSets = entity.configParameter("merchant.items." .. category, nil) < if levelSets ~= nil then < -- Find the highest available level within the category < local highestLevel, highestLevelSet = -1, nil < for _, levelSet in pairs(levelSets) do < if level >= levelSet[1] and levelSet[1] > highestLevel then < highestLevel, highestLevelSet = levelSet[1], levelSet[2] < end < end < < if highestLevelSet ~= nil then < for _, item in pairs(highestLevelSet) do < if item.item.parameters then item.item.parameters.level = entity.level() end < table.insert(items, item) < end < end < end < end < < -- Reset the PRNG so the same seed always generates the same set of items. < -- The uint64_t seed can get truncated when converted to a lua double, but < -- it will at least provide a deterministic seed, even if the full range of < -- input seeds can't be used < local seed = tonumber(entity.seed()) < math.randomseed(seed) < < -- Shuffle the list < for i = #items, 2, -1 do < local j = math.random(i) < items[i], items[j] = items[j], items[i] < end < < local selectedItems, skippedItems = {}, {} < local numItems = entity.configParameter("merchant.numItems") < for _, item in pairs(items) do < if item.rarity == nil or math.random() > item.rarity then < table.insert(selectedItems, item) < < if #selectedItems == numItems then < break < end < else < table.insert(skippedItems, item) < end < end < < -- May need to dip into the rare items to get enough < for i = 1, math.min(#skippedItems, numItems - #selectedItems) do < table.insert(selectedItems, skippedItems[i]) < end < < -- Generate all randomized items with a consistent seed and level < local level = entity.level() < for _, item in pairs(selectedItems) do < if item.item.name ~= nil and string.find(item.item.name, "^generated") then < if item.item.parameters then < if item.item.parameters.level == nil then < item.item.parameters.level = level < end < < if item.item.parameters.seed == nil then < item.item.parameters.seed = math.random() * seed < end < end < end < end < < -- If this is the first time, pick a randomized buyFactor and sellFactor < if storage.buyFactor == nil then < storage.buyFactor = entity.randomizeParameterRange("merchant.buyFactorRange") < end < if storage.sellFactor == nil then < storage.sellFactor = entity.randomizeParameterRange("merchant.sellFactorRange") < end < < -- Now build the actual trading config < local tradingConfig = { < config = "/interface/windowconfig/merchant.config", < sellFactor = storage.sellFactor, < buyFactor = storage.buyFactor, < items = selectedItems < } < < -- Reset RNG < math.randomseed(os.time()) < < return tradingConfig objects\ancient\airbooster\airbooster.object 5c5 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\ancientbouldertrap\ancientbouldertrap.object 5c5 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\ancientchest\ancientchest.object 4c4 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\ancientconsole\ancientconsole.object 4c4 < "rarity" : "Rare", --- > "rarity" : "Legendary", objects\ancient\ancientconsole\returnconsole.object 4c4 < "rarity" : "Rare", --- > "rarity" : "Legendary", objects\ancient\ancientcrystaltrap\ancientcrystaltrap.object 5c5 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\ancientdoor\ancientdoor.object 5c5 < "rarity" : "rare", --- > "rarity" : "Legendary", objects\ancient\ancientflametrap\ancientflametrap.object 5c5 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\ancientgate\ancientgate.object 4c4 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\ancienthiddenplatform\ancienthiddenplatform.object 4c4 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\ancienticetrap\ancienticetrap.object 5c5 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\ancientlightplatform\ancientlightplatform.object 4c4 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\ancientpillar\ancientpillar.object 4c4 < "rarity" : "Rare", --- > "rarity" : "Legendary", objects\ancient\ancientplaque1\ancientplaque1.object 4c4 < "rarity" : "Rare", --- > "rarity" : "Legendary", objects\ancient\ancientsmallconsole\ancientsmallconsole.object 5c5 < "rarity" : "rare", --- > "rarity" : "Legendary", objects\ancient\ancientstriplight1\ancientstriplight1.object 4c4 < "rarity" : "Uncommon", --- > "rarity" : "Legendary", objects\ancient\ancientstriplight10\ancientstriplight10.object 4c4 < "rarity" : "Uncommon", --- > "rarity" : "Legendary", objects\ancient\ancientstriplight11\ancientstriplight11.object 4c4 < "rarity" : "Uncommon", --- > "rarity" : "Legendary", objects\ancient\ancientstriplight12\ancientstriplight12.object 4c4 < "rarity" : "Uncommon", --- > "rarity" : "Legendary", objects\ancient\ancientstriplight13\ancientstriplight13.object 4c4 < "rarity" : "Uncommon", --- > "rarity" : "Legendary", objects\ancient\ancientstriplight2\ancientstriplight2.object 4c4 < "rarity" : "Uncommon", --- > "rarity" : "Legendary", objects\ancient\ancientstriplight3\ancientstriplight3.object 4c4 < "rarity" : "Uncommon", --- > "rarity" : "Legendary", objects\ancient\ancientstriplight4\ancientstriplight4.object 4c4 < "rarity" : "Uncommon", --- > "rarity" : "Legendary", objects\ancient\ancientstriplight5\ancientstriplight5.object 4c4 < "rarity" : "Uncommon", --- > "rarity" : "Legendary", objects\ancient\ancientstriplight6\ancientstriplight6.object 4c4 < "rarity" : "Uncommon", --- > "rarity" : "Legendary", objects\ancient\ancientstriplight7\ancientstriplight7.object 4c4 < "rarity" : "Uncommon", --- > "rarity" : "Legendary", objects\ancient\ancientstriplight8\ancientstriplight8.object 4c4 < "rarity" : "Uncommon", --- > "rarity" : "Legendary", objects\ancient\ancientstriplight9\ancientstriplight9.object 4c4 < "rarity" : "Uncommon", --- > "rarity" : "Legendary", objects\ancient\ancientverticaldoor\ancientverticaldoor.object 5c5 < "rarity" : "rare", --- > "rarity" : "Legendary", objects\ancient\challengedoor\challengedoor.object 4c4 < "rarity" : "Rare", --- > "rarity" : "Legendary", objects\ancient\challengedoor\challengereturndoor.object 4c4 < "rarity" : "Rare", --- > "rarity" : "Legendary", objects\ancient\hologram1\hologram1.object 4c4 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\hologram2\hologram2.object 4c4 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\hologram3\hologram3.object 4c4 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\hologram4\hologram4.object 4c4 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\hologramgalaxy\hologramgalaxy.object 4c4 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\jumpbooster\jumpbooster.object 5c5 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\powerbooster\powerbooster.object 5c5 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\sawblade2\sawblade2.object 4c4 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\ancient\speedbooster\speedbooster.object 5c5 < "rarity" : "Common", --- > "rarity" : "Legendary", objects\floran\planttorch\planttorch.frames 6c6 < "names" : [ [ "0", "1", "2", "3", "off" ] ] --- > "names" : [ [ "default.1", "default.2", "default.3", "default.4", "default.off" ] ] 10c10,11 < "default" : "off" --- > "default.default" : "default.off", > "default.on" : "default.1" objects\floran\planttorch\planttorch.object 31,53d30 < "particleEmitter" : { < "emissionRate" : 1.0, < "emissionVariance" : 0.5, < < "particle" : { < "type" : "ember", < "position" : [0, 1], < "size" : 1.0, < "color" : [255, 100, 0, 255], < "light" : [150, 50, 50], < "fade" : 0.9, < "initialVelocity" : [0.0, 5.0], < "finalVelocity" : [0.0, -50.0], < "approach" : [0, 20], < "timeToLive" : 0.6, < "layer" : "middle" < }, < < "particleVariance" : { < "initialVelocity" : [1.5, 2.0] < } < }, < 57c34 < "imageLayers" : [ { "image" : "planttorch.png:", "fullbright" : true }, { "image" : "planttorchlit.png:" } ], --- > "image" : "planttorch.png:.", 59,60c36,41 < "frames" : 4, < "animationCycle" : 0.5, --- > > "animationParts" : { > "bg" : "planttorch.png", > "fg" : "planttorchlit.png" > }, > "animationPosition" : [0, 0], 63c44,46 < "fgAnchors" : [ [-1, 0], [1, 0] ] --- > "fgAnchors" : [ [-1, 0], [1, 0] ], > > "direction" : "right" 67c50 < "imageLayers" : [ { "image" : "planttorch.png:", "fullbright" : true }, { "image" : "planttorchlit.png:" } ], --- > "image" : "planttorch.png:.", 69,70c52,57 < "frames" : 4, < "animationCycle" : 0.5, --- > > "animationParts" : { > "bg" : "planttorch.png", > "fg" : "planttorchlit.png" > }, > "animationPosition" : [0, 0], 73c60,62 < "fgAnchors" : [ [0, -1] ] --- > "fgAnchors" : [ [0, -1] ], > > "direction" : "right" 77c66 < "imageLayers" : [ { "image" : "planttorchleft.png:", "fullbright" : true }, { "image" : "planttorchleftlit.png:" } ], --- > "image" : "planttorchleft.png:.", 79,80c68,73 < "frames" : 4, < "animationCycle" : 0.5, --- > > "animationParts" : { > "bg" : "planttorchleft.png", > "fg" : "planttorchleftlit.png" > }, > "animationPosition" : [0, 0], 83c76,78 < "fgAnchors" : [ [-1, 0] ] --- > "fgAnchors" : [ [-1, 0], [-1, 1] ], > > "direction" : "right" 87c82 < "imageLayers" : [ { "image" : "planttorchright.png:", "fullbright" : true }, { "image" : "planttorchrightlit.png:" } ], --- > "image" : "planttorchright.png:.", 89,90c84,89 < "frames" : 4, < "animationCycle" : 0.5, --- > > "animationParts" : { > "bg" : "planttorchright.png", > "fg" : "planttorchrightlit.png" > }, > "animationPosition" : [0, 0], 93c92,94 < "fgAnchors" : [ [1, 0] ] --- > "fgAnchors" : [ [1, 0], [1, 1] ], > > "direction" : "right" 97c98 < "imageLayers" : [ { "image" : "planttorch.png:", "fullbright" : true }, { "image" : "planttorchlit.png:" } ], --- > "image" : "planttorch.png:.", 99,100c100,105 < "frames" : 4, < "animationCycle" : 0.5, --- > > "animationParts" : { > "bg" : "planttorch.png", > "fg" : "planttorchlit.png" > }, > "animationPosition" : [0, 0], 103c108,110 < "bgAnchors" : [ [0, 0] ] --- > "bgAnchors" : [ [0, 0] ], > > "direction" : "right" 107c114,129 < "soundEffect" : "/sfx/objects/torch.wav" --- > "soundEffect" : "/sfx/objects/torch.wav", > > "animation" : "planttorch.animation", > "animationCustom" : { > "sounds" : { > "on" : [ "/sfx/objects/torch_on1.wav", "/sfx/objects/torch_on2.wav" ], > "off" : [ "/sfx/objects/torch_off1.wav", "/sfx/objects/torch_off2.wav", "/sfx/objects/torch_off3.wav" ] > } > }, > > "scripts" : [ "/objects/wired/light/light.lua" ], > "scriptDelta" : 60, > > // "interactive" : false, > > "inboundNodes" : [ [0, 0] ] objects\floran\planttorch\planttorchleft.frames 6c6 < "names" : [ [ "0", "1", "2", "3", "off" ] ] --- > "names" : [ [ "default.1", "default.2", "default.3", "default.4", "default.off" ] ] 10c10,11 < "default" : "off" --- > "default.default" : "default.off", > "default.on" : "default.1" objects\floran\planttorch\planttorchleftlit.frames 6c6 < "names" : [ [ "0", "1", "2", "3", "off" ] ] --- > "names" : [ [ "default.1", "default.2", "default.3", "default.4", "default.off" ] ] 10c10,11 < "default" : "off" --- > "default.default" : "default.off", > "default.on" : "default.1" objects\floran\planttorch\planttorchlit.frames 6c6 < "names" : [ [ "0", "1", "2", "3", "off" ] ] --- > "names" : [ [ "default.1", "default.2", "default.3", "default.4", "default.off" ] ] 10c10,11 < "default" : "off" --- > "default.default" : "default.off", > "default.on" : "default.1" objects\floran\planttorch\planttorchright.frames 6c6 < "names" : [ [ "0", "1", "2", "3", "off" ] ] --- > "names" : [ [ "default.1", "default.2", "default.3", "default.4", "default.off" ] ] 10c10,11 < "default" : "off" --- > "default.default" : "default.off", > "default.on" : "default.1" objects\floran\planttorch\planttorchrightlit.frames 6c6 < "names" : [ [ "0", "1", "2", "3", "off" ] ] --- > "names" : [ [ "default.1", "default.2", "default.3", "default.4", "default.off" ] ] 10c10,11 < "default" : "off" --- > "default.default" : "default.off", > "default.on" : "default.1" objects\mission\skullwalltorch\skullwalltorch.object 3c3 < "tags" : ["floran","floranhuntinggrounds"], --- > "tags" : ["floran","floranhuntinggrounds", "evil"], 5c5 < "description" : "Deep shadows stretch away from this menacing torch.", --- > "description" : "A sinister torch made from old bones.", 21c21 < "lightColor" : [191, 124, 57], --- > "lightColor" : [253, 143, 77], 24,25c24,25 < "flickerMinIntensity" : 0.7, < "flickerMaxIntensity" : 0.75, --- > "flickerMinIntensity" : 0.85, > "flickerMaxIntensity" : 0.9, objects\outpost\penguinbay\penguinbay.object 10d9 < "hasObjectItem" : false, projectiles\minibiomelegendaries\cellblast\cellblast.projectile 8c8 < "animationCycle" : 0.4, --- > "animationCycle" : 0.3, 10a11 > "emitters" : [ "electricplasma" ], projectiles\npcs\acidspit\acidspit.projectile 16c16 < "emitters" : [ "poisonplasma" ] --- > "emitters" : [ "poisonplasma", "largepoisonswoosh" ] projectiles\npcs\explosivegoo\explosivegoo.projectile 23a24 > "emitters" : [ "poisonplasma", "largepoisonswoosh" ], projectiles\npcs\orbofzots\orbofzots.projectile 28c28 < "inheritSpeedFactor" : 1, --- > "inheritSpeedFactor" : 3, 36c36 < "inheritSpeedFactor" : 1, --- > "inheritSpeedFactor" : 3, 44c44 < "inheritSpeedFactor" : 1, --- > "inheritSpeedFactor" : 3, 52c52 < "inheritSpeedFactor" : 1, --- > "inheritSpeedFactor" : 3, 60c60 < "inheritSpeedFactor" : 1, --- > "inheritSpeedFactor" : 3, 68c68 < "inheritSpeedFactor" : 1, --- > "inheritSpeedFactor" : 3, 76c76 < "inheritSpeedFactor" : 1, --- > "inheritSpeedFactor" : 3, 84c84 < "inheritSpeedFactor" : 1, --- > "inheritSpeedFactor" : 3, 92c92 < "inheritSpeedFactor" : 1, --- > "inheritSpeedFactor" : 3, projectiles\npcs\orbofzots\zotsorb.projectile 8a9 > "emitters" : [ "fireplasma", "smoke", "flames", "fireplasma", "smoke", "flames" ], projectiles\npcs\orbofzots\zotszot.projectile 9a10 > "emitters" : [ "fireplasma", "flames", "fireplasma", "flames" ], projectiles\npcs\smokering\smokering.projectile 12a13 > "emitters" : [ "fireplasma", "flames", "fireplasma", "flames", "fireplasma", "flames", "fireplasma", "flames", "fireplasma", "flames", "fireplasma", "flames" ], projectiles\npcs\snotblock\snotblock.projectile 16c16 < "emitters" : [ "defaultgreen" ] --- > "emitters" : [ "poisonplasma", "largepoisonswoosh" ] projectiles\npcs\sonicwave\sonicwave.projectile 14c14,15 < "damageKind" : "slash" --- > "damageKind" : "slash", > "emitters" : [ "largepoisonswoosh" ] projectiles\throwable\bone\bone.projectile 10a11 > "emitters" : [ "largepoisonswoosh" ], recipes\armor\apex\tier6accelerator\apextier6acceleratorchest.recipe 3c3 < { "item" : "feroziumcompound", "count" : 10 } --- > { "item" : "feroziumcompound", "count" : 5 } recipes\armor\apex\tier6accelerator\apextier6acceleratorhead.recipe 3c3 < { "item" : "feroziumcompound", "count" : 6 } --- > { "item" : "feroziumcompound", "count" : 3 } recipes\armor\apex\tier6accelerator\apextier6acceleratorpants.recipe 3c3 < { "item" : "feroziumcompound", "count" : 4 } --- > { "item" : "feroziumcompound", "count" : 2 } recipes\armor\apex\tier6manipulator\apextier6manipulatorchest.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 10 } --- > { "item" : "ceruliumcompound", "count" : 5 } recipes\armor\apex\tier6manipulator\apextier6manipulatorhead.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 6 } --- > { "item" : "ceruliumcompound", "count" : 3 } recipes\armor\apex\tier6manipulator\apextier6manipulatorpants.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 4 } --- > { "item" : "ceruliumcompound", "count" : 2 } recipes\armor\apex\tier6separator\apextier6separatorchest.recipe 3c3 < { "item" : "imperviumcompound", "count" : 10 } --- > { "item" : "imperviumcompound", "count" : 5 } recipes\armor\apex\tier6separator\apextier6separatorhead.recipe 3c3 < { "item" : "imperviumcompound", "count" : 6 } --- > { "item" : "imperviumcompound", "count" : 3 } recipes\armor\apex\tier6separator\apextier6separatorpants.recipe 3c3 < { "item" : "imperviumcompound", "count" : 4 } --- > { "item" : "imperviumcompound", "count" : 2 } recipes\armor\avian\tier6accelerator\aviantier6acceleratorchest.recipe 3c3 < { "item" : "feroziumcompound", "count" : 10 } --- > { "item" : "feroziumcompound", "count" : 5 } recipes\armor\avian\tier6accelerator\aviantier6acceleratorhead.recipe 3c3 < { "item" : "feroziumcompound", "count" : 6 } --- > { "item" : "feroziumcompound", "count" : 3 } recipes\armor\avian\tier6accelerator\aviantier6acceleratorpants.recipe 3c3 < { "item" : "feroziumcompound", "count" : 4 } --- > { "item" : "feroziumcompound", "count" : 2 } recipes\armor\avian\tier6manipulator\aviantier6manipulatorchest.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 10 } --- > { "item" : "ceruliumcompound", "count" : 5 } recipes\armor\avian\tier6manipulator\aviantier6manipulatorhead.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 6 } --- > { "item" : "ceruliumcompound", "count" : 3 } recipes\armor\avian\tier6manipulator\aviantier6manipulatorpants.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 4 } --- > { "item" : "ceruliumcompound", "count" : 2 } recipes\armor\avian\tier6separator\aviantier6separatorchest.recipe 3c3 < { "item" : "imperviumcompound", "count" : 10 } --- > { "item" : "imperviumcompound", "count" : 5 } recipes\armor\avian\tier6separator\aviantier6separatorhead.recipe 3c3 < { "item" : "imperviumcompound", "count" : 6 } --- > { "item" : "imperviumcompound", "count" : 3 } recipes\armor\avian\tier6separator\aviantier6separatorpants.recipe 3c3 < { "item" : "imperviumcompound", "count" : 4 } --- > { "item" : "imperviumcompound", "count" : 2 } recipes\armor\floran\tier6accelerator\florantier6acceleratorchest.recipe 3c3 < { "item" : "feroziumcompound", "count" : 10 } --- > { "item" : "feroziumcompound", "count" : 5 } recipes\armor\floran\tier6accelerator\florantier6acceleratorhead.recipe 3c3 < { "item" : "feroziumcompound", "count" : 6 } --- > { "item" : "feroziumcompound", "count" : 3 } recipes\armor\floran\tier6accelerator\florantier6acceleratorpants.recipe 3c3 < { "item" : "feroziumcompound", "count" : 4 } --- > { "item" : "feroziumcompound", "count" : 2 } recipes\armor\floran\tier6manipulator\florantier6manipulatorchest.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 10 } --- > { "item" : "ceruliumcompound", "count" : 5 } recipes\armor\floran\tier6manipulator\florantier6manipulatorhead.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 6 } --- > { "item" : "ceruliumcompound", "count" : 3 } recipes\armor\floran\tier6manipulator\florantier6manipulatorpants.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 4 } --- > { "item" : "ceruliumcompound", "count" : 2 } recipes\armor\floran\tier6separator\florantier6separatorchest.recipe 3c3 < { "item" : "imperviumcompound", "count" : 10 } --- > { "item" : "imperviumcompound", "count" : 5 } recipes\armor\floran\tier6separator\florantier6separatorhead.recipe 3c3 < { "item" : "imperviumcompound", "count" : 6 } --- > { "item" : "imperviumcompound", "count" : 3 } recipes\armor\floran\tier6separator\florantier6separatorpants.recipe 3c3 < { "item" : "imperviumcompound", "count" : 4 } --- > { "item" : "imperviumcompound", "count" : 2 } recipes\armor\glitch\tier6accelerator\glitchtier6acceleratorchest.recipe 3c3 < { "item" : "feroziumcompound", "count" : 10 } --- > { "item" : "feroziumcompound", "count" : 5 } recipes\armor\glitch\tier6accelerator\glitchtier6acceleratorhead.recipe 3c3 < { "item" : "feroziumcompound", "count" : 6 } --- > { "item" : "feroziumcompound", "count" : 3 } recipes\armor\glitch\tier6accelerator\glitchtier6acceleratorpants.recipe 3c3 < { "item" : "feroziumcompound", "count" : 4 } --- > { "item" : "feroziumcompound", "count" : 2 } recipes\armor\glitch\tier6manipulator\glitchtier6manipulatorchest.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 10 } --- > { "item" : "ceruliumcompound", "count" : 5 } recipes\armor\glitch\tier6manipulator\glitchtier6manipulatorhead.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 6 } --- > { "item" : "ceruliumcompound", "count" : 3 } recipes\armor\glitch\tier6manipulator\glitchtier6manipulatorpants.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 4 } --- > { "item" : "ceruliumcompound", "count" : 2 } recipes\armor\glitch\tier6separator\glitchtier6separatorchest.recipe 3c3 < { "item" : "imperviumcompound", "count" : 10 } --- > { "item" : "imperviumcompound", "count" : 5 } recipes\armor\glitch\tier6separator\glitchtier6separatorhead.recipe 3c3 < { "item" : "imperviumcompound", "count" : 6 } --- > { "item" : "imperviumcompound", "count" : 3 } recipes\armor\glitch\tier6separator\glitchtier6separatorpants.recipe 3c3 < { "item" : "imperviumcompound", "count" : 4 } --- > { "item" : "imperviumcompound", "count" : 2 } recipes\armor\human\tier6accelerator\humantier6acceleratorchest.recipe 3c3 < { "item" : "feroziumcompound", "count" : 10 } --- > { "item" : "feroziumcompound", "count" : 5 } recipes\armor\human\tier6accelerator\humantier6acceleratorhead.recipe 3c3 < { "item" : "feroziumcompound", "count" : 6 } --- > { "item" : "feroziumcompound", "count" : 3 } recipes\armor\human\tier6accelerator\humantier6acceleratorpants.recipe 3c3 < { "item" : "feroziumcompound", "count" : 4 } --- > { "item" : "feroziumcompound", "count" : 2 } recipes\armor\human\tier6manipulator\humantier6manipulatorchest.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 10 } --- > { "item" : "ceruliumcompound", "count" : 5 } recipes\armor\human\tier6manipulator\humantier6manipulatorhead.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 6 } --- > { "item" : "ceruliumcompound", "count" : 3 } recipes\armor\human\tier6manipulator\humantier6manipulatorpants.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 4 } --- > { "item" : "ceruliumcompound", "count" : 2 } recipes\armor\human\tier6separator\humantier6separatorchest.recipe 3c3 < { "item" : "imperviumcompound", "count" : 10 } --- > { "item" : "imperviumcompound", "count" : 5 } recipes\armor\human\tier6separator\humantier6separatorhead.recipe 3c3 < { "item" : "imperviumcompound", "count" : 6 } --- > { "item" : "imperviumcompound", "count" : 3 } recipes\armor\human\tier6separator\humantier6separatorpants.recipe 3c3 < { "item" : "imperviumcompound", "count" : 4 } --- > { "item" : "imperviumcompound", "count" : 2 } recipes\armor\hylotl\tier6accelerator\hylotltier6acceleratorchest.recipe 3c3 < { "item" : "feroziumcompound", "count" : 10 } --- > { "item" : "feroziumcompound", "count" : 5 } recipes\armor\hylotl\tier6accelerator\hylotltier6acceleratorhead.recipe 3c3 < { "item" : "feroziumcompound", "count" : 6 } --- > { "item" : "feroziumcompound", "count" : 3 } recipes\armor\hylotl\tier6accelerator\hylotltier6acceleratorpants.recipe 3c3 < { "item" : "feroziumcompound", "count" : 4 } --- > { "item" : "feroziumcompound", "count" : 2 } recipes\armor\hylotl\tier6manipulator\hylotltier6manipulatorchest.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 10 } --- > { "item" : "ceruliumcompound", "count" : 5 } recipes\armor\hylotl\tier6manipulator\hylotltier6manipulatorhead.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 6 } --- > { "item" : "ceruliumcompound", "count" : 3 } recipes\armor\hylotl\tier6manipulator\hylotltier6manipulatorpants.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 4 } --- > { "item" : "ceruliumcompound", "count" : 2 } recipes\armor\hylotl\tier6separator\hylotltier6separatorchest.recipe 3c3 < { "item" : "imperviumcompound", "count" : 10 } --- > { "item" : "imperviumcompound", "count" : 5 } recipes\armor\hylotl\tier6separator\hylotltier6separatorhead.recipe 3c3 < { "item" : "imperviumcompound", "count" : 6 } --- > { "item" : "imperviumcompound", "count" : 3 } recipes\armor\hylotl\tier6separator\hylotltier6separatorpants.recipe 3c3 < { "item" : "imperviumcompound", "count" : 4 } --- > { "item" : "imperviumcompound", "count" : 2 } recipes\armor\novakid\tier6accelerator\novatier6acceleratorchest.recipe 3c3 < { "item" : "feroziumcompound", "count" : 10 } --- > { "item" : "feroziumcompound", "count" : 5 } recipes\armor\novakid\tier6accelerator\novatier6acceleratorhead.recipe 3c3 < { "item" : "feroziumcompound", "count" : 6 } --- > { "item" : "feroziumcompound", "count" : 3 } recipes\armor\novakid\tier6accelerator\novatier6acceleratorpants.recipe 3c3 < { "item" : "feroziumcompound", "count" : 4 } --- > { "item" : "feroziumcompound", "count" : 2 } recipes\armor\novakid\tier6manipulator\novatier6manipulatorchest.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 10 } --- > { "item" : "ceruliumcompound", "count" : 5 } recipes\armor\novakid\tier6manipulator\novatier6manipulatorhead.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 6 } --- > { "item" : "ceruliumcompound", "count" : 3 } recipes\armor\novakid\tier6manipulator\novatier6manipulatorpants.recipe 3c3 < { "item" : "ceruliumcompound", "count" : 4 } --- > { "item" : "ceruliumcompound", "count" : 2 } recipes\armor\novakid\tier6separator\novatier6separatorchest.recipe 3c3 < { "item" : "imperviumcompound", "count" : 10 } --- > { "item" : "imperviumcompound", "count" : 5 } recipes\armor\novakid\tier6separator\novatier6separatorhead.recipe 3c3 < { "item" : "imperviumcompound", "count" : 6 } --- > { "item" : "imperviumcompound", "count" : 3 } recipes\armor\novakid\tier6separator\novatier6separatorpants.recipe 3c3 < { "item" : "imperviumcompound", "count" : 4 } --- > { "item" : "imperviumcompound", "count" : 2 } scripts\behavior.lua 14a15,43 > BTree = {} > > function BTree:new(json) > local newTree = {} > setmetatable(newTree, extend(self)) > > if json then > newTree.root = nodeFromJson(json) > end > > return newTree > end > > function BTree:run(dt) > if self.root then > return self.root:run(dt) > end > end > > function BTree:die() > self.root:reset() > end > > function BTree:reset() > if self.root then > self.root:reset() > end > end > 528a558,613 > -- Repeater > -- Loop n times > BTGroup = BTDecorator.new() > decorators["group"] = BTGroup > > function BTGroup.new(args, child) > local newNode = { > group = { > groupId = args.groupId, > goalType = args.goalType, > goal = args.goal, > minMembers = args.minMembers, > maxMembers = args.maxMembers, > position = BData:getPosition(args.position), > behavior = args.behavior > } > } > setmetatable(newNode, extend(BTGroup)) > newNode:setChild(child) > return newNode > end > > function BTGroup.fromJson(node) > local args = node.parameters or {} > args = parseArgs(args, { > }) > return BTGroup.new(args, nodeFromJson(node.child)) > end > > function BTGroup:run(dt) > if self.group.goalType == "entity" then > self.group.goal = BData:getEntity(self.group.goal) > elseif self.group.goalType == "position" then > self.group.goal = BData:getPosition(self.group.goal) > end > self.coordinator = joinGroup(self.group) > if self.coordinator then > local result = self.child:run(dt) > if result == true or result == false then > self:reset() > end > return result > else > self:reset() > return false > end > end > > function BTGroup:reset(dt) > if self.coordinator then > leaveGroup(self.coordinator) > self.coordinator = nil > end > self.child:reset() > end > 710a796,834 > > ----------------------------------------------------------- > -- BEHAVIOR GROUPS > ----------------------------------------------------------- > > function findGroupPosition(goalType, goal) > if goalType == "entity" then > return world.entityPosition(goal) > elseif goalType == "position" then > return goal > end > end > > function joinGroup(group) > --Query existing coordinators > local position = group.position or findGroupPosition(group.goalType, group.goal) > local stagehands = world.entityQuery(position, 10, {includedTypes = {"stagehand"}}) > for k,stagehandId in ipairs(stagehands) do > if world.stagehandType(stagehandId) == "coordinator" then > if world.callScriptedEntity(stagehandId, "onRequestJoin", entity.id(), group.goalType, group.goal) then > return stagehandId > else > return false > end > end > end > > --Spawn a coordinator > local stagehandId = world.spawnStagehand(position, "coordinator", {scriptConfig = group}) > world.callScriptedEntity(stagehandId, "onRequestJoin", entity.id(), group.goalType, group.goal) > return false > end > > function leaveGroup(coordinator) > if world.entityExists(coordinator) then > world.callScriptedEntity(coordinator, "onLeaveGroup", entity.id()) > end > end > 880a1005 > if value == nil then return false end scripts\actions\entities.lua 370a371,388 > end > > > -- param position > -- param type > -- param config > function spawnStagehand(args) > args = parseArgs(args, { > position = "self", > type = "smallbiped", > config = {} > }) > > local position = BData:getPosition(args.position) > if position == nil then return false end > > world.spawnStagehand(position, args.type, args.config) > return true treasure\dungeon.treasurepools 280a281,298 > "choices1a" : [ > [0, { > "fill" : [ > {"item" : ["kittyhead", 1]} > ], > "allowDuplication" : true > }] > ], > > "choices1b" : [ > [0, { > "fill" : [ > {"item" : ["bunnyhead", 1]} > ], > "allowDuplication" : true > }] > ], >