FILES ----- interface.config ai\upgradeship4.aicommand ai\upgradeship5.aicommand ai\upgradeship6.aicommand ai\upgradeship7.aicommand ai\upgradeship8.aicommand [NEW] animations\shards\boatgreenshard.animation [NEW] animations\shards\boatgreenshard.png behaviors\monsters\boss\spiderboss\hatch.behavior behaviors\npc\tenant.behavior behaviors\tenant\returnhome.behavior dungeons\avian\aviantower\5-objects.png dungeons\microdungeons\underground\underground1b\underground1b_tunnelweakbackslope1.json interface\inventory\dot.png [NEW] interface\objectcrafting\repairo.config [NEW] interface\objectcrafting\repairo_body.png interface\windowconfig\chatbubbles.config items\active\vehiclecontroller\vehiclecontroller.activeitem items\active\vehiclecontroller\vehiclecontroller.lua items\active\vehiclecontroller\vehiclecontrollergreen.activeitem items\active\vehiclecontroller\vehiclecontrollerred.activeitem monsters\boss\penguin\behavior.lua monsters\dungeon\apexbrainmutant\apexbrainmutant.monstertype monsters\generated\flying\bonebird\bonebird.animation monsters\generated\flying\largeflying\largeflying.animation monsters\generated\flying\minidrone\minidrone.animation monsters\generated\flying\smallflying\smallflying.animation monsters\walkers\snaunt\snaunt.monstertype npcs\apexslave.npctype npcs\guard.npctype npcs\merchant.npctype npcs\nakedvillager.npctype npcs\servant.npctype npcs\villageguard.npctype npcs\villager.npctype npcs\biome\colourfulvillager.npctype npcs\biome\forestvillager.npctype npcs\biome\hazmatscientist.npctype npcs\biome\snowscientist.npctype npcs\biome\snowvillager.npctype npcs\biome\undergroundvillager.npctype npcs\dungeon\aviantower\towerascendant.npctype npcs\furniture\astronaut.npctype npcs\furniture\cabin.npctype npcs\furniture\farm.npctype npcs\furniture\gothic.npctype npcs\furniture\island.npctype npcs\furniture\retroscifi.npctype npcs\furniture\saloon.npctype npcs\furniture\sea.npctype npcs\furniture\spooky.npctype npcs\furniture\steampunk.npctype npcs\outpost\outpostcivilian.npctype npcs\subbiometenants\flesh.npctype npcs\subbiometenants\tar.npctype npcs\tenants\avianairship.npctype npcs\tenants\aviantomb.npctype npcs\tenants\electrician.npctype npcs\tenants\glitchcastle.npctype npcs\tenants\glitchsewer.npctype npcs\tenants\hazmat.npctype npcs\tenants\humanbunker.npctype npcs\tenants\neon.npctype npcs\tenants\philanthropist.npctype npcs\tenants\scientist.npctype npcs\tenants\socialite.npctype objects\biome\cell\cellchair\cellchair.object objects\biome\cell\cellchest\cellchest.object objects\biome\cell\celldoor\celldoor.object objects\biome\cell\celllamp\celllamp.object objects\biome\cell\celltable\celltable.object objects\colony\colonydeed\scanning.lua objects\outpost\repairo\repairo.lua objects\outpost\repairo\repairo.object [NEW] particles\bowwavewater.particle [NEW] particles\shards\boatgreenshard.particle projectiles\activeitems\pillar\electricpillar.projectile projectiles\activeitems\pillar\firepillar.projectile projectiles\activeitems\pillar\icepillar.projectile projectiles\activeitems\pillar\pillarspawner.projectile projectiles\activeitems\pillar\poisonpillar.projectile [NEW] projectiles\boss\spiderboss\ixolingspawn.lua projectiles\boss\spiderboss\ixolingspawn.projectile [NEW] projectiles\staves\racialstaves\aqua\splashspawner1.frames projectiles\staves\racialstaves\aqua\splashspawner1.png quests\generated\normal.config [NEW] quests\generated\villager.config scripts\actions\entities.lua scripts\questgen\predicands.lua stats\effects\electrified\electrified.lua vehicles\boat\boat.animation vehicles\boat\boat.lua vehicles\boat\boat.vehicle [NEW] vehicles\boat\boatforeground.frames [NEW] vehicles\boat\boatforegroundtop.frames vehicles\boat\boatwarp.frames vehicles\hoverbike\hoverbike.lua DIFFS ----- interface.config 477,483c477,487 < "nametagOpacityRate" : 0.01, < "nametagOffset" : [0, 16], < "nametagFontSize" : 4, < "nametagStatusFontSize" : 4, < "nametagStatusOffset" : [0, -7], < "nametagStatusColor" : "white", < "nametagOpacityBoost" : 3 --- > "nametag" : { > "opacityRate" : 0.01, > "offset" : [0, 16], > "fontSize" : 4, > "statusFontSize" : 4, > "statusOffset" : [0, -7], > "statusColor" : "white", > "opacityBoost" : 3, > "tweenFactor" : 0.3, > "movementThreshold" : 2 > } ai\upgradeship4.aicommand 23c23 < "techName" : [ "rocketjump", "boatTech" ] --- > "techName" : [ "rocketjump", "morphballTech" ] ai\upgradeship5.aicommand 23c23 < "techName" : [ "morphballTech", "gravitybubbletech", "skyrailTech" ] --- > "techName" : [ "gravitybubbletech", "skyrailTech" ] ai\upgradeship6.aicommand 23c23 < "techName" : [ "targetblinktech", "ftlboostTech", "rocketbootsTech" ] --- > "techName" : [ "ftlboostTech", "rocketbootsTech" ] ai\upgradeship7.aicommand 23c23 < "techName" : [ "energyregen", "bubbleboost", "shieldTech" ] --- > "techName" : [ "bubbleboost" ] ai\upgradeship8.aicommand 23c23 < "techName" : [ "humanMechTech", "regeneration", "particlethrust" ] --- > "techName" : [ "targetblinktech", "particlethrust" ] behaviors\monsters\boss\spiderboss\hatch.behavior 2a3 > "description": "", 127,138d127 < "title": "random", < "type": "action", < "name": "random", < "parameters": { < "max": 30, < "min": 10 < }, < "output": { < "number": "spawnTime" < } < }, < { 156,159d144 < "projectileConfig": { < "timeToLive": "spawnTime", < "animationCycle": "spawnTime" < }, behaviors\npc\tenant.behavior 5a6,7 > "/npcs/bmain.lua", > "/scripts/tenant.lua", 8d9 < "/npcs/bmain.lua", 10d10 < "/scripts/tenant.lua", 49,115d48 < "title": "sequence", < "type": "composite", < "name": "sequence", < "parameters": {}, < "children": [ < { < "title": "receivedNotification", < "type": "action", < "name": "receivedNotification", < "parameters": { < "type": "tenant.returnHome.beacon" < } < }, < { < "title": "Tenant - Return Home", < "type": "module", < "name": "Tenant - Return Home", < "parameters": {} < }, < { < "title": "queryEntity", < "type": "action", < "name": "queryEntity", < "parameters": { < "entityTypes": [ < "player" < ], < "orderBy": "nearest", < "position": "self", < "range": 20, < "withoutEntity": "self" < }, < "output": { < "entity": "nearestPlayer" < } < }, < { < "title": "faceEntity", < "type": "action", < "name": "faceEntity", < "parameters": { < "entity": "nearestPlayer" < } < }, < { < "title": "sayToEntity", < "type": "action", < "name": "sayToEntity", < "parameters": { < "dialogType": "dialog.tenant.arrivedHome.beacon", < "entity": "nearestPlayer" < } < }, < { < "title": "timer", < "type": "action", < "name": "timer", < "parameters": { < "time": [ < 5, < 10 < ] < } < } < ] < }, < { 243,245c176,178 < "title": "timer", < "type": "action", < "name": "timer", --- > "title": "parallel", > "type": "composite", > "name": "parallel", 247,251c180,207 < "time": [ < 5, < 10 < ] < } --- > "fail": 1, > "success": 2 > }, > "children": [ > { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "wasInteracted", > "type": "action", > "name": "wasInteracted", > "parameters": {} > } > }, > { > "title": "timer", > "type": "action", > "name": "timer", > "parameters": { > "time": [ > 5, > 10 > ] > } > } > ] 295a252,341 > "type": "tenant.returnHome.beacon" > } > }, > { > "title": "Tenant - Return Home", > "type": "module", > "name": "Tenant - Return Home", > "parameters": {} > }, > { > "title": "queryEntity", > "type": "action", > "name": "queryEntity", > "parameters": { > "entityTypes": [ > "player" > ], > "orderBy": "nearest", > "position": "self", > "range": 20, > "withoutEntity": "self" > }, > "output": { > "entity": "nearestPlayer" > } > }, > { > "title": "faceEntity", > "type": "action", > "name": "faceEntity", > "parameters": { > "entity": "nearestPlayer" > } > }, > { > "title": "sayToEntity", > "type": "action", > "name": "sayToEntity", > "parameters": { > "dialogType": "dialog.tenant.arrivedHome.beacon", > "entity": "nearestPlayer" > } > }, > { > "title": "parallel", > "type": "composite", > "name": "parallel", > "parameters": { > "fail": 1, > "success": 2 > }, > "children": [ > { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "wasInteracted", > "type": "action", > "name": "wasInteracted", > "parameters": {} > } > }, > { > "title": "timer", > "type": "action", > "name": "timer", > "parameters": { > "time": [ > 5, > 10 > ] > } > } > ] > } > ] > }, > { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": {}, > "children": [ > { > "title": "receivedNotification", > "type": "action", > "name": "receivedNotification", > "parameters": { 359,361c405,407 < "title": "timer", < "type": "action", < "name": "timer", --- > "title": "parallel", > "type": "composite", > "name": "parallel", 363,367c409,436 < "time": [ < 2, < 2 < ] < } --- > "fail": 1, > "success": 2 > }, > "children": [ > { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "wasInteracted", > "type": "action", > "name": "wasInteracted", > "parameters": {} > } > }, > { > "title": "timer", > "type": "action", > "name": "timer", > "parameters": { > "time": [ > 2, > 2 > ] > } > } > ] behaviors\tenant\returnhome.behavior 38,61c38,102 < "title": "random", < "type": "action", < "name": "random", < "parameters": { < "max": 2, < "min": -2 < }, < "output": { < "number": "offsetX" < } < }, < { < "title": "offsetPosition", < "type": "action", < "name": "offsetPosition", < "parameters": { < "offset": null, < "position": "homePosition", < "x": "offsetX", < "y": 0 < }, < "output": { < "position": "homePosition" < } --- > "title": "selector", > "type": "composite", > "name": "selector", > "parameters": {}, > "children": [ > { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": {}, > "children": [ > { > "title": "random", > "type": "action", > "name": "random", > "parameters": { > "max": 2, > "min": -2 > }, > "output": { > "number": "offsetX" > } > }, > { > "title": "offsetPosition", > "type": "action", > "name": "offsetPosition", > "parameters": { > "offset": null, > "position": "homePosition", > "x": "offsetX", > "y": 0 > }, > "output": { > "position": "homePosition" > } > }, > { > "title": "groundPosition", > "type": "action", > "name": "groundPosition", > "parameters": { > "avoidLiquid": true, > "maxHeight": 5, > "minHeight": -5, > "position": "homePosition" > }, > "output": { > "position": "homePosition" > } > } > ] > }, > { > "title": "getStorage", > "type": "action", > "name": "getStorage", > "parameters": { > "key": "homePosition" > }, > "output": { > "position": "homePosition" > } > } > ] dungeons\microdungeons\underground\underground1b\underground1b_tunnelweakbackslope1.json [TMX file differences are left out for huge size.] interface\windowconfig\chatbubbles.config 10c10,11 < "tweenFactor" : 0.2, --- > "tweenFactor" : 0.3, > "movementThreshold" : 2, items\active\vehiclecontroller\vehiclecontroller.activeitem 9a10 > "itemTags" : ["vehiclecontroller"], 13,20d13 < < "scripts" : ["vehiclecontroller.lua"], < "filled" : true, < < //=============Item specifc bits. < < "inventoryIcon" : "vehiclecontroller.png:full", < 24a18,22 > "inventoryIcon" : "vehiclecontroller.png:full", > > "scripts" : ["vehiclecontroller.lua"], > > "filled" : true, items\active\vehiclecontroller\vehiclecontroller.lua 2d1 < 11a11 > 13a14,31 > if fireMode == "primary" then > -- what kind, and where do we put it ? > local vehicleType = item.instanceValue("vehicleType") > local spawnPosition = activeItem.ownerAimPosition() > > local vehicleBounds = item.instanceValue("vehicleBoundingBox") > vehicleBounds[1] = vehicleBounds[1] + spawnPosition[1] --Left > vehicleBounds[2] = vehicleBounds[2] + spawnPosition[2] --Bot > vehicleBounds[3] = vehicleBounds[3] + spawnPosition[1] --Right > vehicleBounds[4] = vehicleBounds[4] + spawnPosition[2] --Top > > if (world.rectTileCollision(vehicleBounds, {"Null", "Block", "Dynamic"})) then > --Collision, make an "oh no" sound > animator.playSound("placeBad") > > else > --make a spawn noise and perhaps some particles. > animator.playSound("placeOk") 15,31c33 < -- what kind, and where do we put it ? < local vehicleType = item.instanceValue("vehicleType") < local spawnPosition = activeItem.ownerAimPosition() < < local vehicleBounds = item.instanceValue("vehicleBoundingBox") < vehicleBounds[1] = vehicleBounds[1]+spawnPosition[1] --Left < vehicleBounds[2] = vehicleBounds[2]+spawnPosition[2] --Bot < vehicleBounds[3] = vehicleBounds[3]+spawnPosition[1] --Right < vehicleBounds[4] = vehicleBounds[4]+spawnPosition[2] --Top < < if (world.rectTileCollision(vehicleBounds, {"Null", "Block", "Dynamic"})) then < --Collision, make an "oh no" sound < animator.playSound("placeBad") < < else < --make a spawn noise and perhaps some particles. < animator.playSound("placeOk") --- > world.spawnVehicle(vehicleType, spawnPosition, { ownerKey = item.instanceValue("key"), startHealthFactor = item.instanceValue("vehicleStartHealthFactor"), fromItem = true} ) 33,36c35,37 < world.spawnVehicle(vehicleType, spawnPosition, { ownerKey = item.instanceValue("key"), startHealth = item.instanceValue("vehicleStartHealth"), fromItem =true} ) < < --not filled any more. < activeItem.setInstanceValue("filled", false) --- > --not filled any more. > activeItem.setInstanceValue("filled", false) > end 38c39 < --- > 43c44 < includedTypes = {"vehicle"}, order = "nearest",})[1] --only get one of them --- > includedTypes = {"vehicle"}, order = "nearest"})[1] --only get one of them 45a47 > 48,52d49 < else < if fireMode == "alt" then < activeItem.setInstanceValue("filled", true) < activeItem.setInstanceValue("vehicleStartHealth", nil) < end 63c60 < local vehicleResult=self.consumePromise:result() --so this is a json returned from the vehicle we want to store. --- > local vehicleResult = self.consumePromise:result() --so this is a json returned from the vehicle we want to store. 70c67 < activeItem.setInstanceValue("vehicleStartHealth", vehicleResult.health) --- > activeItem.setInstanceValue("vehicleStartHealthFactor", vehicleResult.healthFactor) 90,91d86 < < items\active\vehiclecontroller\vehiclecontrollergreen.activeitem 9a10 > "itemTags" : ["vehiclecontroller"], 13,20d13 < < "scripts" : ["vehiclecontroller.lua"], < "filled" : true, < < //=============Item specifc bits. < < "inventoryIcon" : "vehiclecontrollergreen.png:full", < 24a18,22 > "inventoryIcon" : "vehiclecontrollergreen.png:full", > > "scripts" : ["vehiclecontroller.lua"], > > "filled" : true, items\active\vehiclecontroller\vehiclecontrollerred.activeitem 9a10 > "itemTags" : ["vehiclecontroller"], 13,20d13 < < "scripts" : ["vehiclecontroller.lua"], < "filled" : true, < < //=============Item specifc bits. < < "inventoryIcon" : "vehiclecontrollerred.png:full", < 24a18,22 > "inventoryIcon" : "vehiclecontrollerred.png:full", > > "scripts" : ["vehiclecontroller.lua"], > > "filled" : true, monsters\boss\penguin\behavior.lua 0a1,2 > require "/scripts/status.lua" > 10a13,18 > > self.damageListener = damageListener("damageTaken", function(notifications) > if not self.targetId then > self.targetId = notifications[1].sourceEntityId > end > end) 17a26,27 > self.damageListener:update() > 35c45,48 < self.targetId = entity.closestValidTarget(25.0) --- > if not self.targetId or not world.entityExists(self.targetId) then > self.targetId = entity.closestValidTarget(25.0) > if self.targetId == 0 then self.targetId = nil end > end 37c50 < if self.targetId ~= 0 then --- > if self.targetId then 38a52,53 > else > self.targetPosition = nil monsters\dungeon\apexbrainmutant\apexbrainmutant.monstertype 86,88d85 < "baseSkills" : [ "meleeAttack"], < "specialSkills" : [ "shockingBoltAttack" ], < monsters\generated\flying\bonebird\bonebird.animation 6c6 < "default" : "standing", --- > "default" : "idle", monsters\generated\flying\largeflying\largeflying.animation 6c6 < "default" : "standing", --- > "default" : "idle", 257c257,258 < "deathPuff" : [ "/sfx/npc/enemydeathpuff.ogg" ] --- > "deathPuff" : [ "/sfx/npc/enemydeathpuff.ogg" ], > "fire" : [ ] monsters\generated\flying\minidrone\minidrone.animation 6c6 < "default" : "standing", --- > "default" : "idle", monsters\generated\flying\smallflying\smallflying.animation 6c6 < "default" : "standing", --- > "default" : "idle", monsters\walkers\snaunt\snaunt.monstertype 45c45 < "fireOffset" : [2, 0.6875], --- > "fireOffset" : [0.75, 0.6875], npcs\apexslave.npctype 5a6,9 > "questGenerator" : { > "pools" : ["normal"] > }, > npcs\guard.npctype 14d13 < "disableHatQuest" : true, npcs\merchant.npctype 18,21c18 < "enableParticipation" : true, < "flags" : { < "disableHatQuest" : true < } --- > "enableParticipation" : true npcs\nakedvillager.npctype 5a6,9 > "questGenerator" : { > "pools" : ["normal"] > }, > npcs\servant.npctype 5a6,9 > "questGenerator" : { > "pools" : ["normal"] > }, > npcs\villageguard.npctype 14,17c14 < "enableParticipation" : true, < "flags" : { < "disableHatQuest" : true < } --- > "enableParticipation" : true npcs\villager.npctype 11a12 > "pools" : ["normal", "villager"], npcs\biome\colourfulvillager.npctype 5a6,9 > "questGenerator" : { > "pools" : ["normal"] > }, > npcs\biome\forestvillager.npctype 7a8,11 > "questGenerator" : { > "pools" : ["normal"] > }, > npcs\biome\hazmatscientist.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > npcs\biome\snowscientist.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > npcs\biome\snowvillager.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > npcs\biome\undergroundvillager.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > npcs\dungeon\aviantower\towerascendant.npctype 5a6,9 > "questGenerator" : { > "pools" : ["normal"] > }, > npcs\furniture\astronaut.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 63c67 < } \ No newline at end of file --- > } npcs\furniture\cabin.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 63c67 < } \ No newline at end of file --- > } npcs\furniture\farm.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 64c68 < } \ No newline at end of file --- > } npcs\furniture\gothic.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 63c67 < } \ No newline at end of file --- > } npcs\furniture\island.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 63c67 < } \ No newline at end of file --- > } npcs\furniture\retroscifi.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 60c64 < } \ No newline at end of file --- > } npcs\furniture\saloon.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 60c64 < } \ No newline at end of file --- > } npcs\furniture\sea.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 64c68 < } \ No newline at end of file --- > } npcs\furniture\spooky.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 66c70 < } \ No newline at end of file --- > } npcs\furniture\steampunk.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 63c67 < } \ No newline at end of file --- > } npcs\outpost\outpostcivilian.npctype 7a8,11 > "questGenerator" : { > "pools" : ["normal"] > }, > npcs\subbiometenants\flesh.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > npcs\subbiometenants\tar.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > npcs\tenants\avianairship.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 48c52 < } \ No newline at end of file --- > } npcs\tenants\aviantomb.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 49c53 < } \ No newline at end of file --- > } npcs\tenants\electrician.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 72c76 < } \ No newline at end of file --- > } npcs\tenants\glitchcastle.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 49c53 < } \ No newline at end of file --- > } npcs\tenants\glitchsewer.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 46c50 < } \ No newline at end of file --- > } npcs\tenants\hazmat.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 47c51 < } \ No newline at end of file --- > } npcs\tenants\humanbunker.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 46c50 < } \ No newline at end of file --- > } npcs\tenants\neon.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 50c54 < } \ No newline at end of file --- > } npcs\tenants\philanthropist.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 40c44 < } \ No newline at end of file --- > } npcs\tenants\scientist.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 52c56 < } \ No newline at end of file --- > } npcs\tenants\socialite.npctype 6a7,10 > "questGenerator" : { > "pools" : ["normal"] > }, > 72c76 < } \ No newline at end of file --- > } objects\biome\cell\cellchair\cellchair.object 6c6 < "description" : "A clean, modern looking chair.", --- > "description" : "A bright, modern looking chair.", 12c12 < "apexDescription" : "A chair made up of enlarged cells.", --- > "apexDescription" : "A chair constructed from large cells... Pretty garish.", 14,15c14,15 < "floranDescription" : "Ugh! Too bright and clean!", < "glitchDescription" : "Statement. A clinical looking chair.", --- > "floranDescription" : "Floran prefers something more sssmiplistic.", > "glitchDescription" : "Unimpressed. Bright, basic and made of cells.", 17c17,18 < "hylotlDescription" : "True modern art. It isn't too comfy, but who cares about that?", --- > "hylotlDescription" : "How ostentatious, this chair lacks elegance.", > "novakidDescription" : "If I had a choice between sittin' on this, or sittin' on the ground, I'd pick the ground.", objects\biome\cell\cellchest\cellchest.object 16c16 < "avianDescription" : "This chest looks almost too clean and shiny.", --- > "avianDescription" : "The latch looks sort of like a berry, which is nice.", 18,20c18,21 < "glitchDescription" : "Nervous. This chest somewhat resembles a Glitch.", < "humanDescription" : "I could imagine this chest containing scientific instruments.", < "hylotlDescription" : "A simple, but very effective design.", --- > "glitchDescription" : "Unenthusiastic. What a nice chest...", > "humanDescription" : "I know it's made of cells, but it looks like it's made of candy.", > "hylotlDescription" : "Understatement was not a word familiar to this chest's designer.", > "novakidDescription" : "A little too conspicuous to keep anythin' important in.", objects\biome\cell\celldoor\celldoor.object 15,18c15,19 < "floranDescription" : "Ssspinny ssswirly ssstupid door.", < "glitchDescription" : "Critical. It looks wonderful, but it's so weak I could snap it in half if I tried.", < "humanDescription" : "Looking at this thing makes me kinda dizzy.", < "hylotlDescription" : "The door twists as it opens and closes. Very innovative.", --- > "floranDescription" : "Ssspinny, sswirly sstupid door.", > "glitchDescription" : "Exasperated. This door clearly favours form over function.", > "humanDescription" : "A twisted mess of a door.", > "hylotlDescription" : "Barely useful and certainly not beautiful.", > "novakidDescription" : "Lookin' at this door is like peerin' into a barrel o' snakes.", objects\biome\cell\celllamp\celllamp.object 13,18c13,19 < "apexDescription" : "A fancy design.", < "avianDescription" : "Looks like something a Hylotl would make and call 'art'.", < "floranDescription" : "Zig-zaggy blob lamp.", < "glitchDescription" : "Statement. Round, colourful and bright, like my optics.", < "humanDescription" : "It looks a little unsteady. One nudge and it would fall over.", < "hylotlDescription" : "Ah! It reminds me of bubbles, floating up to the surface.", --- > "apexDescription" : "No one could accuse this lamp of being utilitarian.", > "avianDescription" : "Even a magpie would find this too bright.", > "floranDescription" : "Cells like shiny bloomss.", > "glitchDescription" : "Reflective. Looks inorganic, but is made from organic cells. Alive but not alive.", > "humanDescription" : "Cheery but impractical. My favourite kind of thing.", > "hylotlDescription" : "My eyes are offended.", > "novakidDescription" : "Just goes to show cells aren't everythin' they're cracked up to be.", objects\biome\cell\celltable\celltable.object 12,15c12,15 < "apexDescription" : "A bright, clean table. A bit too colourful for the Miniknog.", < "avianDescription" : "I can see my face in it. It's a table, not a mirror!", < "floranDescription" : "I see pretty Floran on shiny surface! Boo!", < "glitchDescription" : "Revulsion. I could never eat on something as gaudy as this.", --- > "apexDescription" : "A bit too colourful for the Miniknog, which I suppose works in its favour.", > "avianDescription" : "Bright would be an understatement.", > "floranDescription" : "Shiny, ssmooth and soulless.", > "glitchDescription" : "Repulsed. I could never eat on something as gaudy as this.", 17c17,18 < "hylotlDescription" : "These colours go pretty well together.", --- > "hylotlDescription" : "This table is very... Flamboyant.", > "novakidDescription" : "This is a darn shiny table.", objects\colony\colonydeed\scanning.lua 176c176 < while not world.pointTileCollision(position) do --- > while not isHouseBoundaryTile(position) do objects\outpost\repairo\repairo.lua 6c6,17 < world.containerTakeAll(entity.id()) --- > local chips = world.containerItemAt(entity.id(), 0) > local controller = world.containerItemAt(entity.id(), 1) > if chips and chips.name == "autochip" and controller and root.itemHasTag(controller.name, "vehiclecontroller") then > local healthFactor = controller.parameters.vehicleStartHealthFactor > if controller.parameters.filled == false then healthFactor = 0 end > if healthFactor and healthFactor < 1.0 then > if consumeChip() then > healthFactor = math.min(healthFactor + entity.configParameter("chipRepairFactor", 1.0), 1.0) > setControllerHealthFactor(healthFactor) > end > end > end 7a19,32 > > function consumeChip() > local consumed = world.containerConsumeAt(entity.id(), 0, 1) > return consumed > end > > function setControllerHealthFactor(healthFactor) > local controller = world.containerItemAt(entity.id(), 1) > if controller and root.itemHasTag(controller.name, "vehiclecontroller") then > controller.parameters.filled = true > controller.parameters.vehicleStartHealthFactor = healthFactor > world.containerSwapItemsNoCombine(entity.id(), controller, 1) > end > end \ No newline at end of file objects\outpost\repairo\repairo.object 32c32,34 < "scriptDelta" : 10, --- > "scriptDelta" : 20, > > "chipRepairFactor" : 0.2, 35,36c37,38 < "slotCount" : 9, < "uiConfig" : "/interface/chests/chest%slots%.config", --- > "slotCount" : 2, > "uiConfig" : "/interface/objectcrafting/repairo.config", projectiles\activeitems\pillar\electricpillar.projectile 90,101c90,101 < "type" : "animated", < "animation" : "/animations/elementalaura/electricaura/electricaura.animation", < "initialVelocity" : [0, 1], < "finalVelocity" : [0, 3], < "approach" : [1, 1], < "timeToLive" : 1.0, < "size" : 0.7, < "layer" : "back", < "variance" : { < "initialVelocity" : [4, 1], < "rotation" : 180, < "angularVelocity" : 20 --- > "type" : "animated", > "animation" : "/animations/elementalaura/electricaura/electricaura.animation", > "initialVelocity" : [0, 1], > "finalVelocity" : [0, 3], > "approach" : [1, 1], > "timeToLive" : 1.0, > "size" : 0.7, > "layer" : "back", > "variance" : { > "initialVelocity" : [4, 1], > "rotation" : 180, > "angularVelocity" : 20 projectiles\activeitems\pillar\firepillar.projectile 164,175c164,175 < "type" : "animated", < "animation" : "/animations/elementalaura/fireaura/fireaura.animation", < "initialVelocity" : [0, 1], < "finalVelocity" : [0, 3], < "approach" : [1, 1], < "timeToLive" : 1.0, < "size" : 0.7, < "layer" : "back", < "variance" : { < "initialVelocity" : [4, 1], < "rotation" : 180, < "angularVelocity" : 20 --- > "type" : "animated", > "animation" : "/animations/elementalaura/fireaura/fireaura.animation", > "initialVelocity" : [0, 1], > "finalVelocity" : [0, 3], > "approach" : [1, 1], > "timeToLive" : 1.0, > "size" : 0.7, > "layer" : "back", > "variance" : { > "initialVelocity" : [4, 1], > "rotation" : 180, > "angularVelocity" : 20 projectiles\activeitems\pillar\icepillar.projectile 108,119c108,119 < "type" : "animated", < "animation" : "/animations/elementalaura/iceaura/iceaura.animation", < "initialVelocity" : [0, 1], < "finalVelocity" : [0, 3], < "approach" : [1, 1], < "timeToLive" : 1.0, < "size" : 0.7, < "layer" : "back", < "variance" : { < "initialVelocity" : [4, 1], < "rotation" : 180, < "angularVelocity" : 20 --- > "type" : "animated", > "animation" : "/animations/elementalaura/iceaura/iceaura.animation", > "initialVelocity" : [0, 1], > "finalVelocity" : [0, 3], > "approach" : [1, 1], > "timeToLive" : 1.0, > "size" : 0.7, > "layer" : "back", > "variance" : { > "initialVelocity" : [4, 1], > "rotation" : 180, > "angularVelocity" : 20 projectiles\activeitems\pillar\pillarspawner.projectile 11c11 < "damageTeamType" : "ghostly", --- > "onlyHitTerrain" : true, projectiles\activeitems\pillar\poisonpillar.projectile 86,97c86,97 < "type" : "animated", < "animation" : "/animations/elementalaura/poisonaura/poisonaura.animation", < "initialVelocity" : [0, 1], < "finalVelocity" : [0, 3], < "approach" : [1, 1], < "timeToLive" : 1.0, < "size" : 0.7, < "layer" : "back", < "variance" : { < "initialVelocity" : [4, 1], < "rotation" : 180, < "angularVelocity" : 20 --- > "type" : "animated", > "animation" : "/animations/elementalaura/poisonaura/poisonaura.animation", > "initialVelocity" : [0, 1], > "finalVelocity" : [0, 3], > "approach" : [1, 1], > "timeToLive" : 1.0, > "size" : 0.7, > "layer" : "back", > "variance" : { > "initialVelocity" : [4, 1], > "rotation" : 180, > "angularVelocity" : 20 projectiles\boss\spiderboss\ixolingspawn.projectile 4c4,5 < "animationCycle" : 10, --- > "animationCycle" : 2, > "animationLoops" : false, 9,16d9 < { < "action" : "spawnmonster", < "type" : "ixoling", < "offset" : [0, 0], < "arguments" : { < "aggressive" : true < } < } 21c14,16 < "onlyHitTerrain" : true --- > "onlyHitTerrain" : true, > > "scripts" : [ "ixolingspawn.lua" ] quests\generated\normal.config 8d7 < [1.0, "hat"], 43c42 < "templateid" : "kill_monster.generated", --- > "templateId" : "kill_monster.generated", 133c132 < "templateid" : "kill_monster.generated", --- > "templateId" : "kill_monster.generated", 541,576d539 < ] < }, < < "hat" : { < "templateId" : "hat.generated", < "difficulty" : 0.1, < "participants" : { < "friend" : { < "critical" : true, < "behaviorOverrides" : [{ < "type" : "notification", < "behavior" : { "name" : "quest-hat-friend-notification" } < }] < }, < "questGiver" : { < "behaviorOverrides" : [{ < "type" : "notification", < "behavior" : { "name" : "quest-hat-questGiver-notification" } < }] < } < }, < < "preconditions" : [ < ["species", "questGiver", "species"], < ["speciesHat", "species", "clothing"], < ["hatAdjective", "adjective", "clothing"], < ["hatRecipe", "clothing", "clothingIngredients"], < ["ownsItemList", "player", "clothingIngredients", "magic"], < ["likes", "friend", "questGiver"], < ["isNpc", "friend"], < ["!=", "friend", "questGiver"], < ["!itemSlotFilled", "questGiver", {"literal":"headSoc"}], < ["!npcQuestGenFlag", "questGiver", {"literal":"disableHatQuest"}] < ], < "postconditions" : [ < ["!ownsItemList", "player", "clothingIngredients", "magic"] scripts\actions\entities.lua 379a380,381 > if entity.level then projectileConfig.level = entity.level() end > scripts\questgen\predicands.lua 269c269 < local descriptors = {} --- > local descriptors = jarray() 304,305c304,307 < local descriptorList = self.itemsByName[newDescriptor.name] < descriptorList[#descriptorList+1] = newDescriptor --- > if newDescriptor.count > 0 then > local descriptorList = self.itemsByName[newDescriptor.name] > descriptorList[#descriptorList+1] = newDescriptor > end stats\effects\electrified\electrified.lua 32c32 < entity.id(), --- > effect.sourceEntity(), vehicles\boat\boat.animation 41c41,43 < "sinking" : {} --- > "sinking" : {}, > > "sunk" : {} 56,59c58 < "mode" : "loop", < "properties" : { < "persistentSound" : "/sfx/objects/propeller_small.ogg" < } --- > "mode" : "loop" 70,72c69,71 < "drivingSeatPosition" : [-2.875, 1.25], < "passengerSeatPosition" : [0, 0], < "titanicSeatPosition" : [4.0, 1.25] --- > "drivingSeatPosition" : [-3.375, 3.125], > "passengerSeatPosition" : [0, 2], > "titanicSeatPosition" : [3.75, 3.25] 82c81 < "offset" : [0, 2] --- > "offset" : [-0.5,4.75 ] 94c93 < "image" : "/vehicles/boat/boat.png:sail." --- > "image" : "/vehicles/boat/boatforegroundtop.png:sail." 100c99 < "image" : "/vehicles/boat/boat.png:sail." --- > "image" : "/vehicles/boat/boatforegroundtop.png:sail." 106c105 < "image" : "/vehicles/boat/boat.png:sail." --- > "image" : "/vehicles/boat/boatforegroundtop.png:sail." 120c119,125 < "image" : "/vehicles/boat/boat.png:sail." --- > "image" : "/vehicles/boat/boatforegroundtop.png:sail." > } > }, > > "sunk" : { > "properties" : { > "image" : "/vehicles/boat/boatforegroundtop.png:sail." 133,134c138 < "rotationGroup" : "rocking", < "offset" : [0, 2] --- > "rotationGroup" : "rocking" 146c150 < "image" : "/vehicles/boat/boat.png:hull." --- > "image" : "/vehicles/boat/boatforeground.png:hull." 152c156 < "image" : "/vehicles/boat/boat.png:hull." --- > "image" : "/vehicles/boat/boatforeground.png:hull." 158c162 < "image" : "/vehicles/boat/boat.png:hull." --- > "image" : "/vehicles/boat/boatforeground.png:hull." 173c177,183 < "image" : "/vehicles/boat/boat.png:hull." --- > "image" : "/vehicles/boat/boatforeground.png:hull." > } > }, > > "sunk" : { > "properties" : { > "image" : "/vehicles/boat/boatforeground.png:hull." 187c197 < "offset" : [0, 2] --- > "offset" : [0, 3] 236c246 < "offset" : [-4.5, -3] --- > "offset" : [-5.375, -1.5] 254,256d263 < < < 263c270 < "angularVelocity" : 0.5 --- > "angularVelocity" : 0.4 267a275,317 > "bowWaveWater" : { > "emissionRate" : 25.0, > "active" : false, > "offsetRegion" : [ 5, -1.5, 5.1, 1.5], > "particles" : [{ "particle" : "bowwavewater"}] > }, > "bowWaveLava" : { > "emissionRate" : 25.0, > "active" : false, > "offsetRegion" : [ 5, -1.5, 5.1, 1.5], > "particles" : [{ "particle" : "fireshard"}] > }, > "bowWavePoison" : { > "emissionRate" : 25.0, > "active" : false, > "offsetRegion" : [ 5, -1.5, 5.1, 1.5], > "particles" : [{ "particle" : "poisondust"}] > }, > > "splashWater" : { > "emissionRate" : 0, > "active" : false, > "burstCount" : 30, > "offsetRegion" : [ -5, -1.5, 5.0, -1.2], > "particles" : [{ "particle" : "bowwavewater"}] > }, > "splashLava" : { > "emissionRate" : 0, > "active" : false, > "burstCount" : 30, > "offsetRegion" : [ -5, -1.5, 5.1, -1.2], > "particles" : [{ "particle" : "fireshard"}] > }, > "splashPoison" : { > "emissionRate" : 0, > "active" : false, > "burstCount" : 30, > "offsetRegion" : [ -5, -1.5, 5.1, -1.2], > "particles" : [{ "particle" : "poisondust"}] > }, > > > vehicles\boat\boat.lua 13d12 < 15a15 > self.waterFactor=0 --how much water are we in right now 35d34 < 37a37,45 > self.minWaterFactorToFloat=vehicle.configParameter("minWaterFactorToFloat") > self.sinkingBuoyancy=vehicle.configParameter("sinkingBuoyancy") > self.sinkingFriction=vehicle.configParameter("sinkingFriction") > > self.bowWaveParticleNames=vehicle.configParameter("bowWaveParticles") > self.bowWaveMaxEmissionRate=vehicle.configParameter("bowWaveMaxEmissionRate") > > self.splashParticleNames=vehicle.configParameter("splashParticles") > self.splashEpsilon=vehicle.configParameter("splashEpsilon") 42a51,52 > > local animState=animator.animationState("base") 44,51c54,61 < if (self.ownerKey and self.ownerKey == ownerKey) then < self.spawnPosition = mcontroller.position() < animator.setAnimationState("base", "warpOutPart1") < < local localStorable = (self.driver ==nil) < < return {storable = localStorable, health = storage.health} < end --- > if (animState=="idle" or animState=="sinking" or animState=="sunk") then > if (self.ownerKey and self.ownerKey == ownerKey) then > self.spawnPosition = mcontroller.position() > animator.setAnimationState("base", "warpOutPart1") > local localStorable = (self.driver ==nil) > return {storable = localStorable, health = storage.health} > end > end 58c68 < local startHealth = vehicle.configParameter("startHealth") --- > local startHealthFactor = vehicle.configParameter("startHealthFactor") 61c71 < storage.health = self.maxHealth --- > storage.health = self.maxHealth 63c73 < storage.health = startHealth --- > storage.health = math.min(startHealthFactor * self.maxHealth, self.maxHealth) 79a90,93 > local sinkAngle= math.pi*0.5 > local actualAngle=animator.currentRotationAngle("rocking") > mcontroller.setRotation(actualAngle) > 85a100,101 > elseif (animator.animationState("base")=="sunk") then > -- not much here. 88,90d103 < if (not mcontroller.onGround()) then < local sinkAngle= math.pi*0.5 < local actualAngle=animator.currentRotationAngle("rocking") 91a105,113 > if (mcontroller.onGround()) then > --not floating any more. Must have touched bottom. > animator.rotateGroup("rocking",actualAngle) > animator.setAnimationState("base", "sunk") > > animator.setParticleEmitterActive("bubbles", false) > vehicle.setLoungeEnabled("drivingSeat",false) > > else 94,95c116,121 < local finalBuoyancy=self.maxBuoyancy * math.cos(actualAngle) < mcontroller.applyParameters({liquidBuoyancy=finalBuoyancy}) --- > > local lerpFactor=math.cos(actualAngle) > local finalBuoyancy=(self.maxBuoyancy * lerpFactor) + (self.sinkingBuoyancy* (1.0-lerpFactor)) > mcontroller.applyParameters({ liquidBuoyancy=finalBuoyancy, > liquidFriction=self.sinkingFriction, > frictionEnabled=true}) 99,103d124 < else < --not floating any more. Must have touched bottom. < animator.setParticleEmitterActive("bubbles", false) < < vehicle.setLoungeEnabled("driversSeat",false) 105d125 < 130,133d149 < < if storage.health<=0 then < vehicle.setLoungeEnabled("drivingSeat",false) < end 138,142d153 < if moving then < animator.setAnimationState("propeller", "turning") < else < animator.setAnimationState("propeller", "still") < end 144c155,156 < local floating = liquidLevel() --- > > 146,151c158,161 < if (floating) then < updateFloating(moving,facing) < else < animator.rotateGroup("rocking", 0) < animator.setParticleEmitterActive("bubbles", false) < end --- > local floating = updateFloating(moving,facing) > > updateMovingEffects(floating,moving) > updatePassengers(healthFactor) 155d164 < updatePassengers(healthFactor) 167,170c176,209 < function updateFloating(moving,facing) < self.rockingTimer = self.rockingTimer + script.updateDt() < if self.rockingTimer > self.rockingInterval then < self.rockingTImer = self.rockingTimer - self.rockingInterval --- > function updateFloating(moving, facing) > local waterFactor = mcontroller.liquidPercentage(); > local floating = waterFactor > self.minWaterFactorToFloat > > if (floating) then > self.rockingTimer = self.rockingTimer + script.updateDt() > if self.rockingTimer > self.rockingInterval then > self.rockingTImer = self.rockingTimer - self.rockingInterval > end > > local speedAngle = math.max(mcontroller.xVelocity() * facing * self.speedRotationMultiplier, 0) > > local windPosition = vec2.add(mcontroller.position(), self.windLevelOffset) > local windLevel = world.windLevel(windPosition) > local windMaxAngle = math.max(self.rockingWindAngleMultiplier * windLevel - speedAngle, self.minRockingAngle) > if facing < 0 then windMaxAngle = -windMaxAngle end > > local rockingAngle = math.sin(self.rockingTimer / self.rockingInterval * (math.pi * 2)) * windMaxAngle + speedAngle > > animator.rotateGroup("rocking", rockingAngle, self.lastFacing ~= facing) > > --Our own vertical friction to minimize bouncing > local yFrictionFactor = math.max(1.0 - self.boatVerticalFriction / mcontroller.mass() * script.updateDt(), 0) > mcontroller.setYVelocity(mcontroller.yVelocity() * yFrictionFactor) > > if moving then > animator.setParticleEmitterActive("bubbles", true) > else > animator.setParticleEmitterActive("bubbles", false) > end > > else > animator.rotateGroup("rocking", 0) > animator.setParticleEmitterActive("bubbles", false) 173d211 < local speedAngle = math.max(mcontroller.xVelocity() * facing * self.speedRotationMultiplier, 0) 175,178c213,224 < local windPosition = vec2.add(mcontroller.position(), self.windLevelOffset) < local windLevel = world.windLevel(windPosition) < local windMaxAngle = math.max(self.rockingWindAngleMultiplier * windLevel - speedAngle, self.minRockingAngle) < if facing < 0 then windMaxAngle = -windMaxAngle end --- > > if waterFactor > (self.waterFactor + self.splashEpsilon) then > local floatingLiquid=mcontroller.liquidId() > > if (floatingLiquid>0 and floatingLiquid<=#self.splashParticleNames) then > local splashEmitter=self.splashParticleNames[floatingLiquid] > > --work out water surface > local bounds=mcontroller.localBoundBox() > local waterSurface=(bounds[4] * waterFactor) + (bounds[2] * (1.0-waterFactor)) > bounds[2] = waterSurface +0.25 > bounds[4] = waterSurface +0.5 180c226 < local rockingAngle = math.sin(self.rockingTimer / self.rockingInterval * (math.pi * 2)) * windMaxAngle + speedAngle --- > animator.setParticleEmitterOffsetRegion(splashEmitter,bounds) 182c228,232 < animator.rotateGroup("rocking", rockingAngle, self.lastFacing ~= facing) --- > animator.burstParticleEmitter(splashEmitter) > end > end > > self.waterFactor=waterFactor --how deep are we in the water right now ? 184,186c234,235 < --Our own vertical friction to minimize bouncing < local yFrictionFactor = math.max(1.0 - self.boatVerticalFriction / mcontroller.mass() * script.updateDt(), 0) < mcontroller.setYVelocity(mcontroller.yVelocity() * yFrictionFactor) --- > return floating > end 187a237 > function updateMovingEffects(floating,moving) 189c239,254 < animator.setParticleEmitterActive("bubbles", true) --- > animator.setAnimationState("propeller", "turning") > > if floating then > local floatingLiquid=mcontroller.liquidId() > > if (floatingLiquid>0 and floatingLiquid<=#self.bowWaveParticleNames) then > local bowWaveEmitter=self.bowWaveParticleNames[floatingLiquid] > > local rateFactor=math.abs(mcontroller.xVelocity())/self.targetMoveSpeed > rateFactor=rateFactor * self.bowWaveMaxEmissionRate > > animator.setParticleEmitterEmissionRate(bowWaveEmitter, rateFactor) > animator.setParticleEmitterActive(bowWaveEmitter, true) > end > end > 191c256,259 < animator.setParticleEmitterActive("bubbles", false) --- > animator.setAnimationState("propeller", "still") > for i, emitter in ipairs(self.bowWaveParticleNames) do > animator.setParticleEmitterActive(emitter, false) > end 195a264 > 250,251c319,320 < local prevDamageStateIndex =util.clamp( maxDamageState - math.ceil(prevhealthFactor * (maxDamageState-1))+1, 1, maxDamageState) < self.damageStateIndex =util.clamp( maxDamageState - math.ceil(healthFactor * (maxDamageState-1))+1, 1, maxDamageState) --- > local prevDamageStateIndex =util.clamp( maxDamageState - math.ceil(prevhealthFactor * maxDamageState)+1, 1, maxDamageState) > self.damageStateIndex =util.clamp( maxDamageState - math.ceil(healthFactor * maxDamageState)+1, 1, maxDamageState) 260c329,330 < self.maxBuoyancy =mcontroller.liquidBuoyancy() --- > --self.maxBuoyancy =mcontroller.parameters.liquidBuoyancy() > self.maxBuoyancy = 1 275,279d344 < < function liquidLevel() < local liquidPosition = vec2.add(mcontroller.position(), vehicle.configParameter("liquidLevelOffset")) < return world.liquidAt(liquidPosition) < end vehicles\boat\boat.vehicle 19c19 < "particles" : [{ "particle" : "hoverbikeshard"}] --- > "particles" : [{ "particle" : "boatgreenshard"}] 25c25 < "collisionPoly" : [[-1.875, -4], [-5, -1.125], [-0.35, 1.22], [0.35, 1.22], [5, -1.125], [1.875, -4]], --- > "collisionPoly" : [[-2.5, -2],[-5.5, -1], [-5, 1.875], [1, 5.0], [5.0, 0], [2.5,-2]], 56c56 < "liquidLevelOffset" : [0, -3], --- > "minWaterFactorToFloat" : 0.1, 65,66d64 < "minRockingAngle": 0.05, < "maxRockingAngle" : 0.25, 68c66,69 < "speedRotationMultiplier": 0.01, --- > "minRockingAngle": 0.02, > "maxRockingAngle" : 0.1, > > "speedRotationMultiplier": 0.005, 74a76 > 79d80 < 80a82 > "frictionEnabled" : true, 82c84 < "liquidBuoyancy" : 4 --- > "liquidBuoyancy" : 6 84a87 > "frictionEnabled" : true, 86c89 < "liquidBuoyancy" : 3 --- > "liquidBuoyancy" : 4 88a92 > "frictionEnabled" : true, 90c94 < "liquidBuoyancy" : 2 --- > "liquidBuoyancy" : 3 92a97,99 > "sinkingBuoyancy" : 0.75, > "sinkingFriction" : 50, > 97c104 < "damageEmoteTime" : 2.0 --- > "damageEmoteTime" : 2.0, 98a106,110 > // particle effects. > "bowWaveParticles" : ["bowWaveWater","bowWaveLava","splashPoison"], > "bowWaveMaxEmissionRate" : 200, > "splashParticles" : ["splashWater","splashLava","splashPoison"], > "splashEpsilon" : 0.025 vehicles\boat\boatwarp.frames 3c3 < "size" : [90, 90], --- > "size" : [112, 112], vehicles\hoverbike\hoverbike.lua 100c100 < local startHealth = vehicle.configParameter("startHealth") --- > local startHealthFactor = vehicle.configParameter("startHealthFactor") 102c102 < if (startHealth == nil) then --- > if (startHealthFactor == nil) then 105c105 < storage.health = startHealth --- > storage.health = math.min(startHealthFactor * self.maxHealth, self.maxHealth) 110,115d109 < if (storage.health>self.maxHealth) then < storage.health=self.maxHealth < end < < < 120c114 < if (self.ownerKey and self.ownerKey == ownerKey and self.driver == nil) then --- > if (self.ownerKey and self.ownerKey == ownerKey and self.driver == nil and animator.animationState("movement")=="idle") then 123c117 < return {storable = true, health = storage.health} --- > return {storable = true, healthFactor = storage.health / self.maxHealth} 125c119 < return {storable = false, health = storage.health} --- > return {storable = false, healthFactor = storage.health / self.maxHealth}