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
> }]
> ],
>