FILES ----- behaviors\monsters\modular\basemonster.behavior behaviors\monsters\modular\actions\charge.behavior behaviors\monsters\modular\actions\fire.behavior [NEW] behaviors\monsters\modular\actions\ghostsparkle.behavior [NEW] behaviors\monsters\modular\actions\invulnerable.behavior [NEW] behaviors\monsters\modular\actions\stop.behavior behaviors\monsters\modular\movement\crawlidle.behavior behaviors\monsters\modular\movement\flyapproach.behavior behaviors\monsters\modular\movement\flywander.behavior [NEW] behaviors\monsters\modular\movement\land-fly.behavior behaviors\monsters\modular\movement\walkapproach.behavior biomes\underground\underground0a.biome damage\fire.damage [NEW] dungeons\microdungeons\underground\underground0a\underground0amicrodungeons.dungeon [NEW] dungeons\microdungeons\underground\underground0a\underground0a_open1.json [NEW] dungeons\microdungeons\underground\underground0a\underground0a_tunnel1.json [NEW] dungeons\microdungeons\underground\underground0a\underground0a_tunnelbackslope1.json [NEW] dungeons\microdungeons\underground\underground0a\underground0a_tunnelforwardslope.json [NEW] dungeons\microdungeons\underground\underground0a\underground0a_tunnelweakbackslope1.json [NEW] dungeons\microdungeons\underground\underground0a\underground0a_tunnelweakforwardslope1.json effects\elemental\largeelectriccloud.effectsource [NEW] items\active\vehiclecontroller\emptyvehiclecontroller.png [NEW] items\active\vehiclecontroller\filledvehiclecontroller.png [NEW] items\active\vehiclecontroller\vehiclecontroller.activeitem [NEW] items\active\vehiclecontroller\vehiclecontroller.lua items\active\weapons\melee\altabilities\spear\rocketspear\rocketspear.altability items\active\weapons\melee\altabilities\spear\rocketspear\rocketspear.lua items\active\weapons\ranged\altabilities\markedshot\markedshot.altability items\active\weapons\ranged\altabilities\shrapnelbomb\shrapnelbomb.altability monsters\crawlers\crustoise\crustoise.monstertype [NEW] monsters\crawlers\triplod\body.monsterpart [NEW] monsters\crawlers\triplod\head.monsterpart [NEW] monsters\crawlers\triplod\triplod-body.frames [NEW] monsters\crawlers\triplod\triplod-body.png [NEW] monsters\crawlers\triplod\triplod-head.frames [NEW] monsters\crawlers\triplod\triplod-head.png [NEW] monsters\crawlers\triplod\triplod.animation [NEW] monsters\crawlers\triplod\triplod.monstertype monsters\flyers\batong\batong.monstertype [NEW] monsters\ghosts\ignome\body.monsterpart [NEW] monsters\ghosts\ignome\ignome.animation [NEW] monsters\ghosts\ignome\ignome.frames [NEW] monsters\ghosts\ignome\ignome.monstertype [NEW] monsters\ghosts\ignome\ignome.png [NEW] monsters\ghosts\spookit\body.monsterpart [NEW] monsters\ghosts\spookit\spookit.animation [NEW] monsters\ghosts\spookit\spookit.frames [NEW] monsters\ghosts\spookit\spookit.monstertype [NEW] monsters\ghosts\spookit\spookit.png [NEW] monsters\ghosts\squeem\body.monsterpart [NEW] monsters\ghosts\squeem\squeem.animation [NEW] monsters\ghosts\squeem\squeem.frames [NEW] monsters\ghosts\squeem\squeem.monstertype [NEW] monsters\ghosts\squeem\squeem.png [NEW] monsters\walkers\crabcano\body.monsterpart [NEW] monsters\walkers\crabcano\crabcano.animation [NEW] monsters\walkers\crabcano\crabcano.frames [NEW] monsters\walkers\crabcano\crabcano.monstertype [NEW] monsters\walkers\crabcano\crabcano.png [NEW] particles\elemental\largecloud\largeelectriccloud1.particle [NEW] particles\elemental\largecloud\largeelectriccloud2.particle [NEW] particles\elemental\largecloud\largeelectriccloud3.particle [NEW] particles\monsters\ghosts\ghostsparkle.particle projectiles\physics.config projectiles\guns\clouds\largecloud\default.frames projectiles\guns\clouds\largecloud\largeelectriccloud.png projectiles\guns\clouds\largecloud\largeelectriccloud.projectile projectiles\guns\clouds\largecloud\largefirecloud.png projectiles\guns\clouds\largecloud\largefirecloud.projectile projectiles\guns\clouds\largecloud\largeicecloud.png projectiles\guns\clouds\largecloud\largeicecloud.projectile projectiles\guns\clouds\largecloud\largepoisoncloud.png projectiles\guns\clouds\largecloud\largepoisoncloud.projectile projectiles\guns\grenades\cloudgrenade\electriccloudgrenade.projectile projectiles\guns\grenades\cloudgrenade\firecloudgrenade.projectile projectiles\guns\grenades\cloudgrenade\icecloudgrenade.projectile projectiles\guns\grenades\cloudgrenade\poisoncloudgrenade.projectile projectiles\guns\grenades\shrapnelbomb\shrapnel.png projectiles\guns\grenades\shrapnelbomb\shrapnel.projectile projectiles\guns\grenades\shrapnelbomb\shrapnelbomb.frames projectiles\guns\grenades\shrapnelbomb\shrapnelbomb.png projectiles\guns\grenades\shrapnelbomb\shrapnelbomb.projectile projectiles\guns\plasmabullets\chainplasma\chainelectricplasma.projectile projectiles\guns\plasmabullets\chainplasma\chainelectricplasma2.projectile projectiles\guns\plasmabullets\chainplasma\chainfireplasma.projectile projectiles\guns\plasmabullets\chainplasma\chainfireplasma2.projectile projectiles\guns\plasmabullets\chainplasma\chainiceplasma.projectile projectiles\guns\plasmabullets\chainplasma\chainiceplasma2.projectile projectiles\guns\plasmabullets\chainplasma\chainpoisonplasma.projectile projectiles\guns\plasmabullets\chainplasma\chainpoisonplasma2.projectile quests\generated\subquests.config quests\generated\subquests\collect_fine.questtemplate quests\generated\subquests\craft.questtemplate quests\generated\subquests\fetch.questtemplate quests\generated\subquests\gift.questtemplate quests\scripts\generated\protect.lua scripts\relationships.lua scripts\actions\builders.lua scripts\actions\math.lua scripts\actions\movement.lua scripts\actions\sensor.lua scripts\behavior\bdata.lua scripts\projectiles\chainbullet.lua scripts\questgen\context.lua scripts\questgen\generator.lua scripts\questgen\relations.lua sfx\interface\sniper_mark_start2.ogg sfx\interface\sniper_mark_stop2.ogg [NEW] stats\effects\maxprotection\maxprotection.lua [NEW] stats\effects\maxprotection\maxprotection.statuseffect vehicles\hoverbike\hoverbike.lua vehicles\hoverbike\hoverbike.vehicle DIFFS ----- behaviors\monsters\modular\basemonster.behavior 2a3 > "description": "", 7d7 < "/scripts/actions/status.lua", 13d12 < "periodicActions": [], 14a14,17 > "hurtTime": 0.25, > "hurtWaitForGround": true, > "hurtWaitForGroundTime": 0.5, > "periodicActions": [], 21c24,25 < "fleeActions": [] --- > "fleeActions": [], > "damageTakenActions": [] 83c87 < "name": "selectorActions", --- > "name": "parallelActions", 110c114 < "name": "selectorActions", --- > "name": "parallelActions", 135,177d138 < "title": "inverter", < "type": "decorator", < "name": "inverter", < "parameters": {}, < "child": { < "title": "resourcePercentage", < "type": "action", < "name": "resourcePercentage", < "parameters": { < "percentage": 0, < "resource": "health" < } < } < }, < { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "hurt", < "type": "body" < } < }, < { < "title": "runner", < "type": "action", < "name": "runner", < "parameters": {} < } < ] < }, < { < "title": "sequence", < "type": "composite", < "name": "sequence", < "parameters": { < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" < }, < "children": [ < { 197c158 < "time": 0.25 --- > "time": "" 201,203c162,164 < "title": "dynamic", < "type": "composite", < "name": "dynamic", --- > "title": "succeeder", > "type": "decorator", > "name": "succeeder", 205,210c166,171 < "children": [ < { < "title": "onGround", < "type": "action", < "name": "onGround", < "parameters": {} --- > "child": { > "title": "optional", > "type": "decorator", > "name": "optional", > "parameters": { > "shouldRun": "" 212,218c173,193 < { < "title": "timer", < "type": "action", < "name": "timer", < "parameters": { < "time": 0.5 < } --- > "child": { > "title": "dynamic", > "type": "composite", > "name": "dynamic", > "parameters": {}, > "children": [ > { > "title": "onGround", > "type": "action", > "name": "onGround", > "parameters": {} > }, > { > "title": "timer", > "type": "action", > "name": "timer", > "parameters": { > "time": "" > } > } > ] 220c195 < ] --- > } 228a204,211 > } > }, > { > "title": "damageTakenActions", > "type": "action", > "name": "selectorActions", > "parameters": { > "actions": "" behaviors\monsters\modular\actions\charge.behavior 3d2 < "description": "", 6d4 < "/scripte/actions/sensor.lua", 13a12 > "minimumRange": 10, 15d13 < "windupTime": 0.25, 17d14 < "winddownTime": 0.25, 18a16,18 > "windupTime": 0.25, > "windupStopForce": 0, > "winddownTime": 0.25, 20a21,23 > "chargeTime": 1.5, > "onGround": true, > "wallCollide": true, 22c25,27 < "chargeTime": 1.5 --- > "wallCrashEmitter": "crash", > "aimAtTarget": false, > "aimDirection": [1, 0] 49c54 < "xRange": "", --- > "range": "", 54,68c59,81 < "title": "groundCollision", < "type": "action", < "name": "groundCollision", < "parameters": {} < }, < { < "title": "entityDirection", < "type": "action", < "name": "entityDirection", < "parameters": { < "entity": "self", < "target": "target" < }, < "output": { < "direction": "facingDirection" --- > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "optional", > "type": "decorator", > "name": "optional", > "parameters": { > "shouldRun": "" > }, > "child": { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "groundCollision", > "type": "action", > "name": "groundCollision", > "parameters": {} > } > } 77,79c90,92 < "title": "wallCollision", < "type": "action", < "name": "wallCollision", --- > "title": "optional", > "type": "decorator", > "name": "optional", 81c94,102 < "direction": "facingDirection" --- > "shouldRun": "" > }, > "child": { > "title": "wallCollision", > "type": "action", > "name": "wallCollision", > "parameters": { > "direction": "facingDirection" > } 85a107,119 > "title": "entityDirection", > "type": "action", > "name": "entityDirection", > "parameters": { > "entity": "self", > "target": "target" > }, > "output": { > "direction": "facingDirection", > "vector": "targetVector" > } > }, > { 94c128 < "title": "multiply", --- > "title": "vecMultiply", 96c130 < "name": "multiply", --- > "name": "vecMultiply", 98,99c132,136 < "number": "", < "factor": "facingDirection" --- > "first": "", > "second": [ > "facingDirection", > 1 > ] 102c139 < "result": "xSpeed" --- > "vector": "aimDirection" 106,117c143,154 < "title": "halt", < "type": "action", < "name": "halt", < "parameters": {} < }, < { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "", < "type": "body" --- > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "state": "", > "type": "body" > } 121,123c158,160 < "title": "timer", < "type": "action", < "name": "timer", --- > "title": "parallel", > "type": "composite", > "name": "parallel", 125,126c162,219 < "time": "" < } --- > "fail": -1, > "success": -1 > }, > "children": [ > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "controlApproachVelocity", > "type": "action", > "name": "controlApproachVelocity", > "parameters": { > "velocity": [ > 0, > 0 > ], > "force": "" > } > } > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "optional", > "type": "decorator", > "name": "optional", > "parameters": { > "shouldRun": "" > }, > "child": { > "title": "entityDirection", > "type": "action", > "name": "entityDirection", > "parameters": { > "entity": "self", > "target": "target" > }, > "output": { > "direction": "direction", > "vector": "aimDirection" > } > } > } > }, > { > "title": "timer", > "type": "action", > "name": "timer", > "parameters": { > "time": "" > } > } > ] 149,154c242,253 < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "", < "type": "body" --- > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "state": "", > "type": "body" > } 167c266 < "title": "controlApproachXVelocity", --- > "title": "vecAngle", 169c268 < "name": "controlApproachXVelocity", --- > "name": "vecAngle", 171c270,282 < "velocity": "xSpeed", --- > "vector": "aimDirection" > }, > "output": { > "angle": "aimAngle" > } > }, > { > "title": "controlApproachVelocityAlongAngle", > "type": "action", > "name": "controlApproachVelocityAlongAngle", > "parameters": { > "angle": "aimAngle", > "velocity": "", 192,194c303,305 < "title": "sequence", < "type": "composite", < "name": "sequence", --- > "title": "optional", > "type": "decorator", > "name": "optional", 196,199c307 < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" --- > "shouldRun": "" 201,208c309,317 < "children": [ < { < "title": "wallCollision", < "type": "action", < "name": "wallCollision", < "parameters": { < "direction": "facingDirection" < } --- > "child": { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" 210,216c319,321 < { < "title": "succeeder", < "type": "decorator", < "name": "succeeder", < "parameters": {}, < "child": { < "title": "playSound", --- > "children": [ > { > "title": "wallCollision", 218c323 < "name": "playSound", --- > "name": "wallCollision", 220c325 < "sound": "" --- > "direction": "facingDirection" 222,234c327,353 < } < }, < { < "title": "succeeder", < "type": "decorator", < "name": "succeeder", < "parameters": {}, < "child": { < "title": "burstParticleEmitter", < "type": "action", < "name": "burstParticleEmitter", < "parameters": { < "emitter": "" --- > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "playSound", > "type": "action", > "name": "playSound", > "parameters": { > "sound": "" > } > } > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "burstParticleEmitter", > "type": "action", > "name": "burstParticleEmitter", > "parameters": { > "emitter": "" > } 237,238c356,357 < } < ] --- > ] > } 253,258c372,383 < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "", < "type": "body" --- > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "state": "", > "type": "body" > } behaviors\monsters\modular\actions\fire.behavior 3d2 < "description": "", 9d7 < "/scripts/behavior/bdata.lua", 13d10 < "aimAtTarget": true, 15c12,14 < "windupTime": 0.25, --- > "onGround": true, > "faceTarget": true, > "minimumRange": 5, 17,22c16,18 < "fireWindupState": "firewindup", < "fireState": "fire", < "winddownTime": 0.25, < "fireWinddownState": "firewinddown", < "fireOffset": [ < 0, --- > "aimAtTarget": true, > "aimDirection": [ > 1, 26a23 > "inaccuracy": 0, 28a26,29 > "fireOffset": [ > 0, > 0 > ], 30c31,36 < "minimumRange": 5 --- > "windupTime": 0.25, > "winddownTime": 0.25, > "fireWindupState": "firewindup", > "fireState": "fire", > "fireWinddownState": "firewinddown", > "windupStopForce": 0 44,47c50,73 < "title": "onGround", < "type": "action", < "name": "onGround", < "parameters": {} --- > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "optional", > "type": "decorator", > "name": "optional", > "parameters": { > "shouldRun": "" > }, > "child": { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "onGround", > "type": "action", > "name": "onGround", > "parameters": {} > } > } > } 134,138c160,196 < "title": "faceEntity", < "type": "action", < "name": "faceEntity", < "parameters": { < "entity": "target" --- > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "controlApproachVelocity", > "type": "action", > "name": "controlApproachVelocity", > "parameters": { > "velocity": [ > 0, > 0 > ], > "force": "" > } > } > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "optional", > "type": "decorator", > "name": "optional", > "parameters": { > "shouldRun": "" > }, > "child": { > "title": "faceEntity", > "type": "action", > "name": "faceEntity", > "parameters": { > "entity": "target" > } > } 208,212c266,284 < "title": "faceDirection", < "type": "action", < "name": "faceDirection", < "parameters": { < "direction": "facingDirection" --- > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "optional", > "type": "decorator", > "name": "optional", > "parameters": { > "shouldRun": "" > }, > "child": { > "title": "faceDirection", > "type": "action", > "name": "faceDirection", > "parameters": { > "direction": "facingDirection" > } > } 219c291,332 < "title": "setVector", --- > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "vecMultiply", > "type": "action", > "name": "vecMultiply", > "parameters": { > "first": "", > "second": [ > "facingDirection", > 1 > ] > }, > "output": { > "vector": "aimVector" > } > } > ] > } > ] > }, > { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "multiply", 221c334 < "name": "setVector", --- > "name": "multiply", 223,226c336,361 < "vector": [ < "facingDirection", < 0 < ] --- > "number": "", > "factor": -1 > }, > "output": { > "result": "minInaccuracy" > } > }, > { > "title": "random", > "type": "action", > "name": "random", > "parameters": { > "max": "", > "min": "minInaccuracy" > }, > "output": { > "number": "angleOffset" > } > }, > { > "title": "vecRotate", > "type": "action", > "name": "vecRotate", > "parameters": { > "vector": "aimVector", > "angle": "angleOffset" 264,287c399,444 < "title": "setVector", < "type": "action", < "name": "setVector", < "parameters": { < "vector": [ < "facingDirection", < 1 < ] < }, < "output": { < "vector": "facingVector" < } < }, < { < "title": "vecMultiply", < "type": "action", < "name": "vecMultiply", < "parameters": { < "first": "", < "second": "facingVector" < }, < "output": { < "vector": "fireOffset" < } --- > "title": "selector", > "type": "composite", > "name": "selector", > "parameters": {}, > "children": [ > { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "vecRotate", > "type": "action", > "name": "vecRotate", > "parameters": { > "vector": "", > "angle": "heading" > }, > "output": { > "vector": "fireOffset" > } > } > ] > }, > { > "title": "vecMultiply", > "type": "action", > "name": "vecMultiply", > "parameters": { > "first": "", > "second": [ > "facingDirection", > 1 > ] > }, > "output": { > "vector": "fireOffset" > } > } > ] behaviors\monsters\modular\movement\crawlidle.behavior 7c7,8 < "/monsters/bmonster.lua" --- > "/monsters/bmonster.lua", > "/scripts/behavior.lua" 10,17d10 < "wanderTime": [ < 1, < 4 < ], < "idleTime": [ < 3, < 9 < ] 44,59c37,71 < "title": "setDirection", < "type": "action", < "name": "setDirection", < "parameters": { < "direction": "crawlDirection" < }, < "output": { < "direction": "crawlDirection" < } < }, < { < "title": "crawlFaceDirection", < "type": "action", < "name": "crawlFaceDirection", < "parameters": { < "direction": "crawlDirection" --- > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "setDirection", > "type": "action", > "name": "setDirection", > "parameters": { > "direction": "crawlDirection" > }, > "output": { > "direction": "crawlDirection" > } > }, > { > "title": "crawlFaceDirection", > "type": "action", > "name": "crawlFaceDirection", > "parameters": { > "direction": "crawlDirection" > } > } > ] 107a120,130 > } > }, > { > "title": "setNumber", > "type": "action", > "name": "setNumber", > "parameters": { > "number": 0 > }, > "output": { > "number": "heading" behaviors\monsters\modular\movement\flyapproach.behavior 10c10,11 < "avoidLiquid": true --- > "avoidLiquid": true, > "usePathfinding": true 33c34 < "title": "selector", --- > "title": "parallel", 35,36c36,40 < "name": "selector", < "parameters": {}, --- > "name": "parallel", > "parameters": { > "fail": -1, > "success": -1 > }, 39,41c43,45 < "title": "parallel", < "type": "composite", < "name": "parallel", --- > "title": "entityPosition", > "type": "action", > "name": "entityPosition", 43,44c47 < "fail": -1, < "success": -1 --- > "entity": "target" 46,72c49,51 < "children": [ < { < "title": "entityPosition", < "type": "action", < "name": "entityPosition", < "parameters": { < "entity": "target" < }, < "output": { < "position": "targetPosition" < } < }, < { < "title": "moveToPosition", < "type": "action", < "name": "moveToPosition", < "parameters": { < "avoidLiquid": "", < "failFast": false, < "groundPosition": false, < "maxGround": 5, < "minGround": -5, < "position": "targetPosition", < "run": false < } < } < ] --- > "output": { > "position": "targetPosition" > } 75,83c54,107 < "title": "controlApproachVelocity", < "type": "action", < "name": "controlApproachVelocity", < "parameters": { < "velocity": [ < 0, < 0 < ], < "force": "" --- > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "selector", > "type": "composite", > "name": "selector", > "parameters": {}, > "children": [ > { > "title": "optional", > "type": "decorator", > "name": "optional", > "parameters": { > "shouldRun": "" > }, > "child": { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "moveToPosition", > "type": "action", > "name": "moveToPosition", > "parameters": { > "avoidLiquid": "", > "failFast": false, > "groundPosition": false, > "maxGround": 5, > "minGround": -5, > "position": "targetPosition", > "run": false > } > } > } > }, > { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "flyToPosition", > "type": "action", > "name": "flyToPosition", > "parameters": { > "position": "targetPosition", > "tolerance": 0 > } > } > } > ] behaviors\monsters\modular\movement\flywander.behavior 5a6,7 > "/scripts/actions/flying.lua", > "/scripts/actions/math.lua", 7c9 < "/scripts/actions/flying.lua" --- > "/scripts/actions/time.lua" 9c11,17 < "parameters": {}, --- > "parameters": { > "wanderTime": 2, > "groundDistance": 10, > "ceilingDistance": 10, > "xVelocity": 8, > "yVelocity": 12 > }, 53c61 < "success": -1 --- > "success": 2 57,59c65,67 < "title": "sequence", < "type": "composite", < "name": "sequence", --- > "title": "flyAlongGround", > "type": "action", > "name": "flyAlongGround", 61,73c69,89 < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" < }, < "children": [ < { < "title": "wallCollision", < "type": "action", < "name": "wallCollision", < "parameters": { < "direction": "facingDirection" < } --- > "keepGroundDistance": "", > "keepCeilingDistance": "", > "yVelocityVariance": "", > "maxXVelocity": "", > "maxYVelocity": "" > } > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" 75,80c91,108 < { < "title": "reverseDirection", < "type": "action", < "name": "reverseDirection", < "parameters": { < "direction": "facingDirection" --- > "children": [ > { > "title": "vecMultiply", > "type": "action", > "name": "vecMultiply", > "parameters": { > "first": [ > "facingDirection", > 0 > ], > "second": [ > 2, > 1 > ] > }, > "output": { > "vector": "forwardLine" > } 82,91c110,141 < "output": { < "direction": "facingDirection" < } < }, < { < "title": "faceDirection", < "type": "action", < "name": "faceDirection", < "parameters": { < "direction": "facingDirection" --- > { > "title": "lineTileCollision", > "type": "action", > "name": "lineTileCollision", > "parameters": { > "position": "self", > "offset": "forwardLine", > "collisionType": [ > "Null", > "Block", > "Dynamic" > ] > } > }, > { > "title": "reverseDirection", > "type": "action", > "name": "reverseDirection", > "parameters": { > "direction": "facingDirection" > }, > "output": { > "direction": "facingDirection" > } > }, > { > "title": "faceDirection", > "type": "action", > "name": "faceDirection", > "parameters": { > "direction": "facingDirection" > } 93,94c143,144 < } < ] --- > ] > } 97c147 < "title": "flyAlongGround", --- > "title": "timer", 99c149 < "name": "flyAlongGround", --- > "name": "timer", 101,105c151 < "keepGroundDistance": 10, < "keepCeilingDistance": 10, < "yVelocityVariance": 0, < "maxXVelocity": 8, < "maxYVelocity": 12 --- > "time": "" behaviors\monsters\modular\movement\walkapproach.behavior 3d2 < "description": "", 19c18,19 < "moveState": "walk" --- > "moveState": "walk", > "minXRange": 2 22c22 < "title": "cleanup", --- > "title": "sequence", 24,25c24,30 < "name": "cleanup", < "parameters": {}, --- > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, 28c33,45 < "title": "sequence", --- > "title": "entityDirection", > "type": "action", > "name": "entityDirection", > "parameters": { > "entity": "self", > "target": "target" > }, > "output": { > "direction": "targetDirection" > } > }, > { > "title": "parallel", 30c47 < "name": "sequence", --- > "name": "parallel", 32,35c49,50 < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" --- > "fail": 1, > "success": -1 39,41c54,56 < "title": "entityDirection", < "type": "action", < "name": "entityDirection", --- > "title": "sequence", > "type": "composite", > "name": "sequence", 43,44c58,61 < "entity": "self", < "target": "target" --- > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" 46,48c63,84 < "output": { < "direction": "targetDirection" < } --- > "children": [ > { > "title": "entityInSight", > "type": "action", > "name": "entityInSight", > "parameters": { > "entity": "target" > } > }, > { > "title": "entityDirection", > "type": "action", > "name": "entityDirection", > "parameters": { > "entity": "self", > "target": "target" > }, > "output": { > "direction": "targetDirection" > } > } > ] 51c87 < "title": "parallel", --- > "title": "dynamic", 53,57c89,90 < "name": "parallel", < "parameters": { < "fail": -1, < "success": -1 < }, --- > "name": "dynamic", > "parameters": {}, 71c104,110 < "title": "entityInSight", --- > "title": "onGround", > "type": "action", > "name": "onGround", > "parameters": {} > }, > { > "title": "setAnimationState", 73c112 < "name": "entityInSight", --- > "name": "setAnimationState", 75c114,115 < "entity": "target" --- > "state": "walk", > "type": "body" 79c119 < "title": "entityDirection", --- > "title": "move", 81c121 < "name": "entityDirection", --- > "name": "move", 83,87c123,124 < "entity": "self", < "target": "target" < }, < "output": { < "direction": "targetDirection" --- > "direction": "targetDirection", > "run": false 93c130 < "title": "dynamic", --- > "title": "selector", 95c132 < "name": "dynamic", --- > "name": "selector", 110c147 < "title": "onGround", --- > "title": "entityDirection", 112,113c149,157 < "name": "onGround", < "parameters": {} --- > "name": "entityDirection", > "parameters": { > "entity": "self", > "target": "target" > }, > "output": { > "direction": "direction", > "yDirection": "targetYDir" > } 116c160 < "title": "setAnimationState", --- > "title": "greaterThan", 118c162 < "name": "setAnimationState", --- > "name": "greaterThan", 120,121c164,165 < "state": "walk", < "type": "body" --- > "first": "targetYDir", > "second": 0 125,130c169,200 < "title": "move", < "type": "action", < "name": "move", < "parameters": { < "direction": "targetDirection", < "run": false --- > "title": "failer", > "type": "decorator", > "name": "failer", > "parameters": {}, > "child": { > "title": "optional", > "type": "decorator", > "name": "optional", > "parameters": { > "shouldRun": "" > }, > "child": { > "title": "repeater", > "type": "decorator", > "name": "repeater", > "parameters": { > "maxLoops": "", > "untilSuccess": false > }, > "child": { > "title": "jump", > "type": "module", > "name": "jump", > "parameters": { > "fallState": "", > "jumpState": "", > "jumpXVelocity": "", > "jumpYVelocity": "", > "jumpXControlForce": "" > } > } > } 136c206 < "title": "selector", --- > "title": "parallel", 138,139c208,212 < "name": "selector", < "parameters": {}, --- > "name": "parallel", > "parameters": { > "fail": -1, > "success": -1 > }, 142,207c215,224 < "title": "sequence", < "type": "composite", < "name": "sequence", < "parameters": { < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" < }, < "children": [ < { < "title": "entityDirection", < "type": "action", < "name": "entityDirection", < "parameters": { < "entity": "self", < "target": "target" < }, < "output": { < "direction": "direction", < "yDirection": "targetYDir" < } < }, < { < "title": "greaterThan", < "type": "action", < "name": "greaterThan", < "parameters": { < "first": "targetYDir", < "second": 0 < } < }, < { < "title": "failer", < "type": "decorator", < "name": "failer", < "parameters": {}, < "child": { < "title": "optional", < "type": "decorator", < "name": "optional", < "parameters": { < "shouldRun": "" < }, < "child": { < "title": "repeater", < "type": "decorator", < "name": "repeater", < "parameters": { < "maxLoops": "", < "untilSuccess": false < }, < "child": { < "title": "jump", < "type": "module", < "name": "jump", < "parameters": { < "fallState": "", < "jumpState": "", < "jumpXVelocity": "", < "jumpYVelocity": "", < "jumpXControlForce": "" < } < } < } < } --- > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "wallCollision", > "type": "action", > "name": "wallCollision", > "parameters": { > "direction": "targetDirection" 209c226 < ] --- > } 212,214c229,231 < "title": "parallel", < "type": "composite", < "name": "parallel", --- > "title": "controlMove", > "type": "action", > "name": "controlMove", 216,249c233,241 < "fail": -1, < "success": -1 < }, < "children": [ < { < "title": "inverter", < "type": "decorator", < "name": "inverter", < "parameters": {}, < "child": { < "title": "wallCollision", < "type": "action", < "name": "wallCollision", < "parameters": { < "direction": "targetDirection" < } < } < }, < { < "title": "controlMove", < "type": "action", < "name": "controlMove", < "parameters": { < "direction": "targetDirection", < "run": false < } < }, < { < "title": "runner", < "type": "action", < "name": "runner", < "parameters": {} < } < ] --- > "direction": "targetDirection", > "run": false > } > }, > { > "title": "runner", > "type": "action", > "name": "runner", > "parameters": {} 258,266d249 < }, < { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "idle", < "type": "body" < } biomes\underground\underground0a.biome 139c139 < "microdungeons" : [ "undergroundmicrodungeons" ] --- > "microdungeons" : [ "underground0amicrodungeons" ] damage\fire.damage 2a3,6 > "damageNumberParticleKind" : { > "hit" : "burningdamagenumber", > "kill" : "burningdamagenumber" > }, effects\elemental\largeelectriccloud.effectsource 8c8 < [ ] --- > [ "largeelectriccloud1" ], [ "largeelectriccloud2" ], [ "largeelectriccloud3" ], [ "largeelectriccloud1" ], [ "largeelectriccloud1" ], [ "largeelectriccloud3" ], [ "largeelectriccloud3" ] 13c13 < [ "sparkle1" ], [ "sparkle2" ], [ "sparkle3" ], [ "sparkle4" ] --- > [ "largeelectriccloud1" ], [ "largeelectriccloud2" ], [ "largeelectriccloud3" ] 18c18 < [ ] --- > [ "largeelectriccloud1" ], [ "largeelectriccloud2" ], [ "largeelectriccloud3" ], [ "largeelectriccloud1" ], [ "largeelectriccloud1" ], [ "largeelectriccloud3" ], [ "largeelectriccloud3" ] items\active\weapons\melee\altabilities\spear\rocketspear\rocketspear.altability 82c82,83 < "boostForce" : 130, --- > "boostSpeed" : 20, > "boostForce" : 100, items\active\weapons\melee\altabilities\spear\rocketspear\rocketspear.lua 51,52c51,52 < local boostForce = vec2.mul({mcontroller.facingDirection() * math.cos(self.weapon.aimAngle + math.pi), math.sin(self.weapon.aimAngle + math.pi)}, self.boostForce) < mcontroller.controlForce(boostForce) --- > local boostAngle = mcontroller.facingDirection() == 1 and self.weapon.aimAngle + math.pi or math.pi - self.weapon.aimAngle + math.pi > mcontroller.controlApproachVelocityAlongAngle(boostAngle, self.boostSpeed, self.boostForce) items\active\weapons\ranged\altabilities\markedshot\markedshot.altability 37c37 < "duration" : 0.15, --- > "duration" : 0.6, items\active\weapons\ranged\altabilities\shrapnelbomb\shrapnelbomb.altability 5c5 < "altFire" : [ "/sfx/gun/shotgun1.ogg" ] --- > "altFire" : [ "/sfx/gun/grenade2.ogg" ] 15c15,16 < "baseDps" : 6, --- > "baseDps" : 0.75, > "energyUsageMultiplier" : 16, monsters\crawlers\crustoise\crustoise.monstertype 37c37 < "minimumXRange" : 10, --- > "minimumRange" : 10, monsters\flyers\batong\batong.monstertype 45c45,62 < "name" : "wander-fly" --- > "name" : "land-fly", > "cooldown" : 2, > "parameters" : { > "landDirection" : [0, 1], > "flySpeed" : 8, > "flyControlForce" : 5, > "idleTime" : [5,10] > } > }, > { > "name" : "wander-fly", > "parameters" : { > "wanderTime" : [2,4], > "groundDistance" : 8, > "ceilingDistance" : 8, > "xVelocity" : 8, > "yVelocity" : 12 > } projectiles\physics.config 153a154,167 > "shrapnel" : { > "mass" : 1.0, > "gravityMultiplier" : 0.8, > "bounceFactor" : 0.7, > "maxMovementPerStep" : 0.4, > > "collisionPoly" : [ [-0.25, -0.25], [0.25, -0.25], [0.25, 0.25], [-0.25, 0.25] ], > "ignorePlatformCollision" : true, > > "airFriction" : 0.0, > "liquidFriction" : 8.0, > "groundFriction" : 15.0 > }, > projectiles\guns\clouds\largecloud\default.frames 3,4c3,4 < "size" : [40, 40], < "dimensions" : [4, 1] --- > "size" : [32, 32], > "dimensions" : [13, 1] projectiles\guns\clouds\largecloud\largeelectriccloud.projectile 5,6c5,6 < "frameNumber" : 4, < "animationCycle" : 0.4, --- > "frameNumber" : 13, > "animationCycle" : 2, 8,9c8,9 < "speed" : 0, < "timeToLive" : 4, --- > "speed" : 5, > "timeToLive" : 2, 11c11 < "damagePoly" : [ [-20, 0], [-14, -14], [0, -20], [14, -14], [20, 0], [14, 14], [0, 20], [-14, 14] ], --- > "damagePoly" : [ [-16, 0], [-12, -12], [0, -16], [12, -12], [16, 0], [12, 12], [0, 16], [-12, 12] ], 14c14 < "damageKind" : "electricplasma", --- > "damageKind" : "electricbarrier", projectiles\guns\clouds\largecloud\largefirecloud.projectile 5,6c5,6 < "frameNumber" : 4, < "animationCycle" : 0.4, --- > "frameNumber" : 13, > "animationCycle" : 2, 8,9c8,9 < "speed" : 0, < "timeToLive" : 4, --- > "speed" : 5, > "timeToLive" : 2, 11c11 < "damagePoly" : [ [-20, 0], [-14, -14], [0, -20], [14, -14], [20, 0], [14, 14], [0, 20], [-14, 14] ], --- > "damagePoly" : [ [-16, 0], [-12, -12], [0, -16], [12, -12], [16, 0], [12, 12], [0, 16], [-12, 12] ], 14c14 < "damageKind" : "fireplasma", --- > "damageKind" : "fire", projectiles\guns\clouds\largecloud\largeicecloud.projectile 5,6c5,6 < "frameNumber" : 4, < "animationCycle" : 0.4, --- > "frameNumber" : 13, > "animationCycle" : 2, 8,9c8,9 < "speed" : 0, < "timeToLive" : 4, --- > "speed" : 5, > "timeToLive" : 2, 11c11 < "damagePoly" : [ [-20, 0], [-14, -14], [0, -20], [14, -14], [20, 0], [14, 14], [0, 20], [-14, 14] ], --- > "damagePoly" : [ [-16, 0], [-12, -12], [0, -16], [12, -12], [16, 0], [12, 12], [0, 16], [-12, 12] ], 14c14 < "damageKind" : "iceplasma", --- > "damageKind" : "ice", projectiles\guns\clouds\largecloud\largepoisoncloud.projectile 5,6c5,6 < "frameNumber" : 4, < "animationCycle" : 0.4, --- > "frameNumber" : 13, > "animationCycle" : 2, 8,9c8,9 < "speed" : 0, < "timeToLive" : 4, --- > "speed" : 5, > "timeToLive" : 2, 11c11 < "damagePoly" : [ [-20, 0], [-14, -14], [0, -20], [14, -14], [20, 0], [14, 14], [0, 20], [-14, 14] ], --- > "damagePoly" : [ [-16, 0], [-12, -12], [0, -16], [12, -12], [16, 0], [12, 12], [0, 16], [-12, 12] ], 14c14 < "damageKind" : "poisonplasma", --- > "damageKind" : "poison", projectiles\guns\grenades\cloudgrenade\electriccloudgrenade.projectile 17,18c17,41 < "inheritDamageFactor" : 0.1, < "type" : "largeelectriccloud" --- > "inheritDamageFactor" : 0.05, > "type" : "largeelectriccloud", > "fuzzAngle" : 30, > "angleAdjust" : 0 > }, > { > "action" : "projectile", > "inheritDamageFactor" : 0.05, > "type" : "largeelectriccloud", > "fuzzAngle" : 30, > "angleAdjust" : 90 > }, > { > "action" : "projectile", > "inheritDamageFactor" : 0.05, > "type" : "largeelectriccloud", > "fuzzAngle" : 30, > "angleAdjust" : 180 > }, > { > "action" : "projectile", > "inheritDamageFactor" : 0.05, > "type" : "largeelectriccloud", > "fuzzAngle" : 30, > "angleAdjust" : 270 projectiles\guns\grenades\cloudgrenade\firecloudgrenade.projectile 17,18c17,41 < "inheritDamageFactor" : 0.1, < "type" : "largefirecloud" --- > "inheritDamageFactor" : 0.05, > "type" : "largefirecloud", > "fuzzAngle" : 30, > "angleAdjust" : 0 > }, > { > "action" : "projectile", > "inheritDamageFactor" : 0.05, > "type" : "largefirecloud", > "fuzzAngle" : 30, > "angleAdjust" : 90 > }, > { > "action" : "projectile", > "inheritDamageFactor" : 0.05, > "type" : "largefirecloud", > "fuzzAngle" : 30, > "angleAdjust" : 180 > }, > { > "action" : "projectile", > "inheritDamageFactor" : 0.05, > "type" : "largefirecloud", > "fuzzAngle" : 30, > "angleAdjust" : 270 projectiles\guns\grenades\cloudgrenade\icecloudgrenade.projectile 17,18c17,41 < "inheritDamageFactor" : 0.1, < "type" : "largeicecloud" --- > "inheritDamageFactor" : 0.05, > "type" : "largeicecloud", > "fuzzAngle" : 30, > "angleAdjust" : 0 > }, > { > "action" : "projectile", > "inheritDamageFactor" : 0.05, > "type" : "largeicecloud", > "fuzzAngle" : 30, > "angleAdjust" : 90 > }, > { > "action" : "projectile", > "inheritDamageFactor" : 0.05, > "type" : "largeicecloud", > "fuzzAngle" : 30, > "angleAdjust" : 180 > }, > { > "action" : "projectile", > "inheritDamageFactor" : 0.05, > "type" : "largeicecloud", > "fuzzAngle" : 30, > "angleAdjust" : 270 projectiles\guns\grenades\cloudgrenade\poisoncloudgrenade.projectile 17,18c17,41 < "inheritDamageFactor" : 0.1, < "type" : "largepoisoncloud" --- > "inheritDamageFactor" : 0.05, > "type" : "largepoisoncloud", > "fuzzAngle" : 30, > "angleAdjust" : 0 > }, > { > "action" : "projectile", > "inheritDamageFactor" : 0.05, > "type" : "largepoisoncloud", > "fuzzAngle" : 30, > "angleAdjust" : 90 > }, > { > "action" : "projectile", > "inheritDamageFactor" : 0.05, > "type" : "largepoisoncloud", > "fuzzAngle" : 30, > "angleAdjust" : 180 > }, > { > "action" : "projectile", > "inheritDamageFactor" : 0.05, > "type" : "largepoisoncloud", > "fuzzAngle" : 30, > "angleAdjust" : 270 projectiles\guns\grenades\shrapnelbomb\shrapnel.projectile 5,6c5,6 < "physics" : "laser", < "bounces" : 2, --- > "physics" : "shrapnel", > "bounces" : 0, 9a10,19 > "actionOnReap" : [ > { > "action" : "config", > "file" : "/projectiles/explosions/bulletexplosion/bulletexplosion.config" > } > ], > "statusEffects" : [ > "damageflash" > ], > "emitters" : [ "rocketsmoke" ], 11c21,22 < "speed" : 100, --- > "speed" : 35, > "knockback" : 10, projectiles\guns\grenades\shrapnelbomb\shrapnelbomb.frames 3c3 < "size" : [8, 8], --- > "size" : [10, 10], projectiles\guns\grenades\shrapnelbomb\shrapnelbomb.projectile 3,5c3,6 < "physics" : "gravitybomb", < "bounces" : -1, < "timeToLive" : 1.5, --- > "physics" : "grenade", > "bounces" : 0, > "timeToLive" : 3, > "speed" : 50, 18,19c19,20 < "fuzzAngle" : 0, < "inheritDamageFactor" : 0.25, --- > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, 25,27c26,28 < "fuzzAngle" : 0, < "inheritDamageFactor" : 0.25, < "angleAdjust" : 45 --- > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 20 32,34c33,35 < "fuzzAngle" : 0, < "inheritDamageFactor" : 0.25, < "angleAdjust" : 90 --- > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 340 39,41c40,42 < "fuzzAngle" : 0, < "inheritDamageFactor" : 0.25, < "angleAdjust" : 135 --- > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 40 46,48c47,84 < "fuzzAngle" : 0, < "inheritDamageFactor" : 0.25, < "angleAdjust" : 180 --- > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 320 > }, > { > "action" : "projectile", > "type" : "shrapnel", > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 60 > }, > { > "action" : "projectile", > "type" : "shrapnel", > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 300 > }, > { > "action" : "projectile", > "type" : "shrapnel", > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 80 > }, > { > "action" : "projectile", > "type" : "shrapnel", > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 280 > }, > { > "action" : "projectile", > "type" : "shrapnel", > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 100 53,55c89,91 < "fuzzAngle" : 0, < "inheritDamageFactor" : 0.25, < "angleAdjust" : 225 --- > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 260 60,62c96,98 < "fuzzAngle" : 0, < "inheritDamageFactor" : 0.25, < "angleAdjust" : 270 --- > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 120 67,69c103,141 < "fuzzAngle" : 0, < "inheritDamageFactor" : 0.25, < "angleAdjust" : 315 --- > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 240 > } > /* > { > "action" : "projectile", > "type" : "shrapnel", > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 140 > }, > { > "action" : "projectile", > "type" : "shrapnel", > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 220 > }, > { > "action" : "projectile", > "type" : "shrapnel", > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 160 > }, > { > "action" : "projectile", > "type" : "shrapnel", > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 200 > }, > { > "action" : "projectile", > "type" : "shrapnel", > "fuzzAngle" : 5, > "inheritDamageFactor" : 1.25, > "angleAdjust" : 180 70a143 > */ 74c147 < "damageKind" : "default", --- > "damageKind" : "default" 76c149 < "onlyHitTerrain" : true --- > //"onlyHitTerrain" : true projectiles\guns\plasmabullets\chainplasma\chainelectricplasma.projectile 9c9 < "speed" : 150, --- > "speed" : 100, projectiles\guns\plasmabullets\chainplasma\chainelectricplasma2.projectile 9c9 < "speed" : 150, --- > "speed" : 100, projectiles\guns\plasmabullets\chainplasma\chainfireplasma.projectile 9c9 < "speed" : 150, --- > "speed" : 100, projectiles\guns\plasmabullets\chainplasma\chainfireplasma2.projectile 9c9 < "speed" : 150, --- > "speed" : 100, projectiles\guns\plasmabullets\chainplasma\chainiceplasma.projectile 9c9 < "speed" : 150, --- > "speed" : 100, projectiles\guns\plasmabullets\chainplasma\chainiceplasma2.projectile 9c9 < "speed" : 150, --- > "speed" : 100, projectiles\guns\plasmabullets\chainplasma\chainpoisonplasma.projectile 9c9 < "speed" : 150, --- > "speed" : 100, projectiles\guns\plasmabullets\chainplasma\chainpoisonplasma2.projectile 9c9 < "speed" : 150, --- > "speed" : 100, quests\generated\subquests.config 604a605,606 > "chance" : 0.2, > quests\generated\subquests\collect_fine.questtemplate 28,30c28,30 < ", you are wanted for . Pay 1 " < //" pay 1 , do not pass GO, do not collect 200 pixels", < //"To clear your criminal record, please pay 1 " --- > ", you are wanted for . Pay 1 ", > " pay 1 , do not pass GO, do not collect 200 pixels", > "To clear your criminal record, please pay 1 " quests\generated\subquests\craft.questtemplate 3d2 < "title" : "^orange;Craft ^white;", 5,6c4,11 < "first" : "To start with, Floran needsss . Thisss can be crafted from . Can help?", < "next" : "Now has the crafting ingredientsss we need. Make Floran ." --- > "next" : { > "floran" : [ > "Now has the crafting ingredientsss we need. Make Floran ." > ], > "default" : [ > "Next, use your to craft ." > ] > } 9,10c14,21 < "first" : " will be very ussseful. Floran thanksss you.", < "next" : "Ssskillfully crafted, ! Now Floran has another requessst." --- > "next" : { > "floran" : [ > "Ssskillfully crafted, ! Now Floran has another requessst." > ], > "default" : [ > "Great, now let's use them!" > ] > } quests\generated\subquests\fetch.questtemplate 3d2 < "title" : "^orange;Run errand for ^white;", 5,6c4,19 < "first" : "Firssst, Floran needs you to find . Be hasssty!", < "next" : "Time to find . It'sss very important we do that next." --- > "first" : { > "floran" : [ > "Firssst, Floran needs you to find . Be hasssty!" > ], > "default" : [ > "To begin with, find ." > ] > }, > "next" : { > "floran" : [ > "Time to find . It'sss very important we do that next." > ], > "default" : [ > "Next, bring me ." > ] > } 9,10c22,37 < "first" : "Successs! Let's get to work with our .", < "next" : "Perfect, time to put or to ussse." --- > "first" : { > "floran" : [ > "Successs! Let's get to work with our ." > ], > "default" : [ > "Great, now let's use them for something!" > ] > }, > "next" : { > "floran" : [ > "Perfect, time to put or to ussse." > ], > "default" : [ > "Great job yet again, ! Now let's use these items..." > ] > } quests\generated\subquests\gift.questtemplate 3,4c3,14 < "title" : "^orange;A present for ^white;", < "goalText" : "^orange;Help me make a new friend! Let's give a !^white;\n\n", --- > "title" : [ > "A present for ", > " the gift giver" > ], > "goalText" : { > "floran" : [ > "Floran likess 's scent. Floran wantsss them around more often.\n\n" > ], > "default" : [ > "^orange;Help me make a new friend! Let's present with a gift!^white;\n\n" > ] > }, 6,9c16,31 < "default" : "Could you give a ^green;^white; to ^green;^white;? I think it would help me gain ^green;^white;'s ^orange;friendship^white;!", < "first" : "Firstly, could you give a ^green;^white; to ^green;^white;? I think it would help me gain ^green;^white;'s ^orange;friendship^white;!", < "last" : "Finally, could you give the ^green;^white; to ^green;^white;? I think it would help me gain ^green;^white;'s ^orange;friendship^white;!", < "next" : "Next, could you give the ^green;^white; to ^green;^white;? I think it would help me gain ^green;^white;'s ^orange;friendship^white;!" --- > "last" : { > "default" : [ > "Finally, could you give the ^green;^white; to ^green;^white;? I think it would help me gain ^green;^white;'s ^orange;friendship^white;!" > ], > "floran" : [ > "Floran thinks will like thisss last part! This is perfect, it remindss Floran of them so much. Floran isn't shy... But perhaps you give it to them?" > ] > }, > "next" : { > "default" : [ > "Next, could you give the ^green;^white; to ^green;^white;? I think it would help me gain ^green;^white;'s ^orange;friendship^white;!" > ], > "floran" : [ > "Next, Floran thinkss might appreciate a gift. Thiss will be perfect! Floran not afraid of anything! but... Perhapss you give it to them?" > ] > } 12,14c34,49 < "default" : "Hooray! You've earned me 's ^orange;friendship^white;!", < "first" : "Hooray! You've earned me 's ^orange;friendship^white;! I wonder if ^green;^white; will do something in return for us...", < "next" : "Hooray! You've earned me 's ^orange;friendship^white;! I wonder if ^green;^white; will do something in return for us..." --- > "last" : { > "default" : [ > "Hooray! You've earned me 's ^orange;friendship^white;!" > ], > "floran" : [ > " really liked the gift! Now they'll spend lotsss of time with Floran, and Floran can ssmell their pleasant ssmells all day! Thanksss a lot!" > ] > }, > "next" : { > "default" : [ > "Hooray! You've earned me 's ^orange;friendship^white;! I wonder if ^green;^white; will do something in return for us..." > ], > "floran" : [ > "Floran is very pleased! It turnss out the is one of 's favourite things! Sorry Floran lied about not being afraid earlier, just a little shy..." > ] > } 16c51,54 < "failureText" : "I was unable to give the ^green;^white; to ^green;^white; for ^green;^white;.", --- > "failureText" : [ > "Whoops! I didn't get the to . I'm sure will find another hunting partner.", > "Whoops, I failed to get the to . I hope I didn't ruin 's day." > ], quests\scripts\generated\protect.lua 5a6,11 > self.questClient:setEventHandler({"target", "death"}, onTargetDied) > end > > function onTargetDied() > -- Failed to protect target > quest.fail() scripts\relationships.lua 23c23,32 < return storage.relationships[relationName][converseKey] --- > > -- Remove relationships with non-existent npcs > local relationships = storage.relationships[relationName][converseKey] > for uniqueId,_ in pairs(relationships) do > if not world.findUniqueEntity(uniqueId) then > relationships[uniqueId] = nil > end > end > > return relationships 57a67,69 > stolen.items[itemName] = util.filter(stolen.items[itemName], function (uniqueId) > return world.findUniqueEntity(uniqueId) ~= nil > end) scripts\actions\builders.lua 38a39,72 > end > > -- param actions > parallelActions = BTComposite:new() > actions["parallelActions"] = parallelActions > function parallelActions.new(args) > local parallel = BTParallel.new({success = -1, fail = -1}) > parallel.children = {} > for _,action in pairs(args.actions) do > local actionModule = { > type = "module", > name = action.name, > parameters = action.parameters or {} > } > if action.cooldown then > local cooldown = { > type = "decorator", > name = "cooldown", > parameters = { > cooldown = action.cooldown > } > } > cooldown.child = actionModule > table.insert(parallel.children, cooldown) > else > table.insert(parallel.children, actionModule) > end > end > > return parallel > end > > function parallelActions.fromJson(node) > return parallelActions.new(node.parameters) scripts\actions\math.lua 32a33,48 > -- param first > -- param second > -- output result > function sub(args, output) > args = parseArgs(args, { > first = nil, > second = nil > }) > local first = BData:getNumber(first) > local second = BData:getNumber(second) > if first == nil or second == nil then return false end > > BData:setNumber(output.result, first - second) > return true > end > scripts\actions\movement.lua 276a277,295 > -- param angle > -- param velocity > -- param force > function controlApproachVelocityAlongAngle(args, output) > args = parseArgs(args, { > angle = 0, > velocity = 0, > force = 500 > }) > > local angle = BData:getNumber(args.angle) > local velocity = BData:getNumber(args.velocity) > local force = BData:getNumber(args.force) > if velocity == nil or force == nil then return false end > > mcontroller.controlApproachVelocityAlongAngle(angle, velocity, force) > return true > end > 347,348c366,371 < local position = BData:getPosition(args.position) < if not position then return false end --- > while true do > local position = BData:getPosition(args.position) > if not position then return false end > > local distance = world.magnitude(position, mcontroller.position()) > if distance <= args.tolerance then break end 350,351d372 < local distance = world.magnitude(position, mcontroller.position()) < while distance > args.tolerance do scripts\actions\sensor.lua 67a68,94 > end > > -- param dirVector > function boundsCollision(args, output) > args = parseArgs(args, { > dirVector = nil > }) > local dirVector = BData:getVec2(args.dirVector) > if dirVector == nil then return false end > > local bounds = mcontroller.boundBox() > local angle = math.atan(dirVector[2], dirVector[1]) > local boundsRegion = rect.translate(rect.rotate({bounds[3], bounds[2], bounds[3] + 0.25, bounds[4]}, angle), mcontroller.position()) > util.debugRect(boundsRegion, "yellow") > > return world.rectTileCollision(boundsRegion, {"Null","Block","Dynamic"}) > end > > -- param position > function pointTileCollision(args, output) > args = parseArgs(args, { > position = nil > }) > local position = BData:getPosition(args.position) > if position == nil then return false end > > return world.pointTileCollision(position, {"Null","Block","Dynamic"}) scripts\behavior\bdata.lua 367a368,383 > -- param vector > -- output x > -- output y > function breakVector(args, output) > args = parseArgs(args, { > vector = nil > }) > > local vector = BData:getVec2(args.vector) > if vector == nil then return false end > > BData:setNumber(output.x, vector[1]) > BData:setNumber(output.y, vector[2]) > return true > end > scripts\projectiles\chainbullet.lua 8a9,12 > if not self.triggered then > self.chainPower = config.configParameter("power") > projectile.setPower(0) > end 32a37 > power = self.chainPower, scripts\questgen\context.lua 269c269 < return self._objectDeeds[objectName] --- > return self._objectDeeds[objectName] or {} scripts\questgen\generator.lua 285c285 < parameters.questGiver = self:generateParameter({type = "entity"}, opSymbols.questGiver) --- > parameterDefs.questGiver = { type = "entity" } 287a288,305 > -- Set uniqueIds on any specific entities we're using that don't have one > for key, parameterDef in pairs(parameterDefs) do > local predicand = Predicand.value(opSymbols[key]) > match (predicand) { > [QuestPredicands.Entity] = function (entity) > local uniqueId = entity:uniqueId() > if not uniqueId then > uniqueId = sb.makeUuid() > entity:setUniqueId(uniqueId) > end > end, > default = function () end > } > end > > -- Wait one more tick so that any uniqueIds we've just set are ready for use. > coroutine.yield() > 322,325c340,341 < if not uniqueId then < uniqueId = sb.makeUuid() < entity:setUniqueId(uniqueId) < end --- > assert(uniqueId ~= nil) > local entityId = entity:entityId() 329,330c345,347 < name = world.entityName(entity:entityId()), < portrait = world.entityPortrait(entity:entityId(), "full") --- > species = world.entitySpecies(entityId), > name = world.entityName(entityId), > portrait = world.entityPortrait(entityId, "full") 432,434d448 < < -- Wait one more tick so that any uniqueIds we've just set are ready for use. < coroutine.yield() scripts\questgen\relations.lua 513c513 < if #(context:deedsOwningObject(objectItem.itemName) or {}) > 0 then --- > if #(context:deedsOwningObject(objectItem.itemName)) > 0 then vehicles\hoverbike\hoverbike.lua 19a20,21 > self.movementSettings = vehicle.configParameter("movementSettings") > self.occupiedMovementSettings = vehicle.configParameter("occupiedMovementSettings") 23a26,27 > > message.setHandler("consume", vehicle.destroy) 28a33 > movement.resetParameters(self.movementSettings) 29a35 > movement.applyParameters(self.occupiedMovementSettings) vehicles\hoverbike\hoverbike.vehicle 8c8 < "movement" : { --- > "movementSettings" : { 10c10 < "mass" : 5, --- > "mass" : 4, 57c57,62 < ] --- > ], > > "occupiedMovementSettings" : { > "collisionPoly" : [[-4.0, -1.5], [4.0, -1.5], [4.0, 2], [0.0, 3.0], [-4.0, 2]], > "mass" : 5 > }