FILES ----- versioning.config [NEW] animations\shards\hoverbikeshardkhaki.animation [NEW] animations\shards\hoverbikeshardkhaki.png behaviors\monsters\boss\spiderboss\acidspray.behavior behaviors\monsters\boss\spiderboss\slam.behavior behaviors\monsters\boss\spiderboss\sweep.behavior behaviors\monsters\modular\basemonster.behavior [NEW] behaviors\monsters\modular\monsterdeath.behavior behaviors\monsters\modular\actions\leap.behavior behaviors\monsters\modular\movement\walkapproach.behavior items\active\vehiclecontroller\boatcontrollergreen.activeitem [NEW] items\active\vehiclecontroller\hoverbikecontrollergreen.activeitem [NEW] items\active\vehiclecontroller\hoverbikecontrollergreen.png [NEW] items\active\vehiclecontroller\hoverbikecontrollerkhaki.activeitem [NEW] items\active\vehiclecontroller\hoverbikecontrollerkhaki.png [NEW] items\active\vehiclecontroller\hoverbikecontrollerred.activeitem [NEW] items\active\vehiclecontroller\hoverbikecontrollerred.png items\active\vehiclecontroller\vehiclecontroller.lua [NEW] items\active\vehiclecontroller\vehiclecursor.lua items\active\weapons\fist\stunglove.activeitem items\active\weapons\melee\altabilities\hammer\groundslam\groundslam.lua items\armors\apex\apex-tier1\apextier1.chest items\armors\apex\apex-tier1\apextier1.head items\armors\apex\apex-tier1\apextier1.legs items\armors\apex\apex-tier2\apextier2.chest items\armors\apex\apex-tier2\apextier2.head items\armors\apex\apex-tier2\apextier2.legs items\armors\apex\apex-tier3\apextier3.chest items\armors\apex\apex-tier3\apextier3.head items\armors\apex\apex-tier3\apextier3.legs items\armors\apex\apex-tier4\apextier4.chest items\armors\apex\apex-tier4\apextier4.head items\armors\apex\apex-tier4\apextier4.legs items\armors\apex\apex-tier5accelerator\apextier5accelerator.chest items\armors\apex\apex-tier5accelerator\apextier5accelerator.head items\armors\apex\apex-tier5accelerator\apextier5accelerator.legs items\armors\apex\apex-tier5manipulator\apextier5manipulator.chest items\armors\apex\apex-tier5manipulator\apextier5manipulator.head items\armors\apex\apex-tier5manipulator\apextier5manipulator.legs items\armors\apex\apex-tier5separator\apextier5separator.chest items\armors\apex\apex-tier5separator\apextier5separator.head items\armors\apex\apex-tier5separator\apextier5separator.legs items\armors\apex\apex-tier6accelerator\apextier6accelerator.chest items\armors\apex\apex-tier6accelerator\apextier6accelerator.head items\armors\apex\apex-tier6accelerator\apextier6accelerator.legs items\armors\apex\apex-tier6manipulator\apextier6manipulator.chest items\armors\apex\apex-tier6manipulator\apextier6manipulator.head items\armors\apex\apex-tier6manipulator\apextier6manipulator.legs items\armors\apex\apex-tier6separator\apextier6separator.chest items\armors\apex\apex-tier6separator\apextier6separator.head items\armors\apex\apex-tier6separator\apextier6separator.legs items\armors\apex\apexcommander\apexcommander.chest items\armors\apex\apexcommander\apexcommander.legs items\armors\apex\apexnavy\apexnavy.chest items\armors\apex\apexnavy\apexnavy.legs items\armors\apex\apexofficer\apexofficer.chest items\armors\apex\apexofficer\apexofficer.legs items\armors\apex\apexspecialist\apexspecialist.chest items\armors\apex\apexspecialist\apexspecialist.legs items\armors\avian\avian-adventurer\avianadventurer.chest items\armors\avian\avian-adventurer\avianadventurer.legs items\armors\avian\avian-commoner\aviancommoner.chest items\armors\avian\avian-commoner\aviancommoner.legs items\armors\avian\avian-fancy\avianfancy.chest items\armors\avian\avian-fancy\avianfancy.legs items\armors\avian\avian-tier1\aviantier1.chest items\armors\avian\avian-tier1\aviantier1.head items\armors\avian\avian-tier1\aviantier1.legs items\armors\avian\avian-tier2\aviantier2.chest items\armors\avian\avian-tier2\aviantier2.head items\armors\avian\avian-tier2\aviantier2.legs items\armors\avian\avian-tier3\aviantier3.chest items\armors\avian\avian-tier3\aviantier3.head items\armors\avian\avian-tier3\aviantier3.legs items\armors\avian\avian-tier4\aviantier4.chest items\armors\avian\avian-tier4\aviantier4.head items\armors\avian\avian-tier4\aviantier4.legs items\armors\avian\avian-tier5accelerator\aviantier5accelerator.chest items\armors\avian\avian-tier5accelerator\aviantier5accelerator.head items\armors\avian\avian-tier5accelerator\aviantier5accelerator.legs items\armors\avian\avian-tier5manipulator\aviantier5manipulator.chest items\armors\avian\avian-tier5manipulator\aviantier5manipulator.head items\armors\avian\avian-tier5manipulator\aviantier5manipulator.legs items\armors\avian\avian-tier5separator\aviantier5separator.chest items\armors\avian\avian-tier5separator\aviantier5separator.head items\armors\avian\avian-tier5separator\aviantier5separator.legs items\armors\avian\avian-tier6accelerator\aviantier6accelerator.chest items\armors\avian\avian-tier6accelerator\aviantier6accelerator.head items\armors\avian\avian-tier6accelerator\aviantier6accelerator.legs items\armors\avian\avian-tier6manipulator\aviantier6manipulator.chest items\armors\avian\avian-tier6manipulator\aviantier6manipulator.head items\armors\avian\avian-tier6manipulator\aviantier6manipulator.legs items\armors\avian\avian-tier6separator\aviantier6separator.chest items\armors\avian\avian-tier6separator\aviantier6separator.head items\armors\avian\avian-tier6separator\aviantier6separator.legs items\armors\avian\avian-worker\avianworker.chest items\armors\avian\avian-worker\avianworker.legs items\armors\backerhats\glitchplague\head.png items\armors\backerhats\glitchplague\icons.png items\armors\backerhats\glitchplague\plaguemaster.head items\armors\biome\swamp\froggmerchant\froggmerchant.chest items\armors\biome\swamp\froggmerchant\froggmerchant.head items\armors\biome\swamp\froggmerchant\froggmerchant.legs items\armors\biome\swamp\froggsuit\frogg.chest items\armors\biome\swamp\froggsuit\frogg.head items\armors\biome\swamp\froggsuit\frogg.legs items\armors\decorative\costumes\adventurerobot\adventurerobot.chest items\armors\decorative\costumes\adventurerobot\adventurerobot.head items\armors\decorative\costumes\adventurerobot\adventurerobot.legs items\armors\floran\floran-furnivour\floranfurnivor.chest items\armors\floran\floran-furnivour\floranfurnivor.legs items\armors\floran\floran-hunter\floranhunter.chest items\armors\floran\floran-hunter\floranhunter.legs items\armors\floran\floran-leaf\floranleaf.chest items\armors\floran\floran-leaf\floranleaf.legs items\armors\floran\floran-pelt\floranpelt.chest items\armors\floran\floran-pelt\floranpelt.legs items\armors\floran\floran-survivalist\floransurvivalist.chest items\armors\floran\floran-survivalist\floransurvivalist.legs items\armors\floran\floran-tier1\florantier1.chest items\armors\floran\floran-tier1\florantier1.head items\armors\floran\floran-tier1\florantier1.legs items\armors\floran\floran-tier2\florantier2.chest items\armors\floran\floran-tier2\florantier2.head items\armors\floran\floran-tier2\florantier2.legs items\armors\floran\floran-tier3\florantier3.chest items\armors\floran\floran-tier3\florantier3.head items\armors\floran\floran-tier3\florantier3.legs items\armors\floran\floran-tier4\florantier4.chest items\armors\floran\floran-tier4\florantier4.head items\armors\floran\floran-tier4\florantier4.legs items\armors\floran\floran-tier5accelerator\florantier5accelerator.chest items\armors\floran\floran-tier5accelerator\florantier5accelerator.head items\armors\floran\floran-tier5accelerator\florantier5accelerator.legs items\armors\floran\floran-tier5manipulator\florantier5manipulator.chest items\armors\floran\floran-tier5manipulator\florantier5manipulator.head items\armors\floran\floran-tier5manipulator\florantier5manipulator.legs items\armors\floran\floran-tier5separator\florantier5separator.chest items\armors\floran\floran-tier5separator\florantier5separator.head items\armors\floran\floran-tier5separator\florantier5separator.legs items\armors\floran\floran-tier6accelerator\florantier6accelerator.chest items\armors\floran\floran-tier6accelerator\florantier6accelerator.head items\armors\floran\floran-tier6accelerator\florantier6accelerator.legs items\armors\floran\floran-tier6manipulator\florantier6manipulator.chest items\armors\floran\floran-tier6manipulator\florantier6manipulator.head items\armors\floran\floran-tier6manipulator\florantier6manipulator.legs items\armors\floran\floran-tier6separator\florantier6separator.chest items\armors\floran\floran-tier6separator\florantier6separator.head items\armors\floran\floran-tier6separator\florantier6separator.legs items\armors\glitch\glitch-craftsmen\craftsmen.chest items\armors\glitch\glitch-craftsmen\craftsmen.legs items\armors\glitch\glitch-merchant\merchant.chest items\armors\glitch\glitch-merchant\merchant.legs items\armors\glitch\glitch-noble\noble.chest items\armors\glitch\glitch-noble\noble.legs items\armors\glitch\glitch-peasant\peasant.chest items\armors\glitch\glitch-peasant\peasant.legs items\armors\glitch\glitch-royal\glitchroyal.head items\armors\glitch\glitch-tier1\glitchtier1.chest items\armors\glitch\glitch-tier1\glitchtier1.head items\armors\glitch\glitch-tier1\glitchtier1.legs items\armors\glitch\glitch-tier2\glitchtier2.chest items\armors\glitch\glitch-tier2\glitchtier2.head items\armors\glitch\glitch-tier2\glitchtier2.legs items\armors\glitch\glitch-tier3\glitchtier3.chest items\armors\glitch\glitch-tier3\glitchtier3.head items\armors\glitch\glitch-tier3\glitchtier3.legs items\armors\glitch\glitch-tier4\glitchtier4.chest items\armors\glitch\glitch-tier4\glitchtier4.head items\armors\glitch\glitch-tier4\glitchtier4.legs items\armors\glitch\glitch-tier5accelerator\glitchtier5accelerator.chest items\armors\glitch\glitch-tier5accelerator\glitchtier5accelerator.head items\armors\glitch\glitch-tier5accelerator\glitchtier5accelerator.legs items\armors\glitch\glitch-tier5manipulator\glitchtier5manipulator.chest items\armors\glitch\glitch-tier5manipulator\glitchtier5manipulator.head items\armors\glitch\glitch-tier5manipulator\glitchtier5manipulator.legs items\armors\glitch\glitch-tier5separator\glitchtier5separator.chest items\armors\glitch\glitch-tier5separator\glitchtier5separator.head items\armors\glitch\glitch-tier5separator\glitchtier5separator.legs items\armors\glitch\glitch-tier6accelerator\glitchtier6accelerator.chest items\armors\glitch\glitch-tier6accelerator\glitchtier6accelerator.head items\armors\glitch\glitch-tier6accelerator\glitchtier6accelerator.legs items\armors\glitch\glitch-tier6manipulator\glitchtier6manipulator.chest items\armors\glitch\glitch-tier6manipulator\glitchtier6manipulator.head items\armors\glitch\glitch-tier6manipulator\glitchtier6manipulator.legs items\armors\glitch\glitch-tier6separator\glitchtier6separator.chest items\armors\glitch\glitch-tier6separator\glitchtier6separator.head items\armors\glitch\glitch-tier6separator\glitchtier6separator.legs items\armors\human\human-concept\concept.chest items\armors\human\human-concept\concept.legs items\armors\human\human-cool\cool.chest items\armors\human\human-cool\cool.legs items\armors\human\human-sweatervest\sweatervest.chest items\armors\human\human-sweatervest\sweatervest.legs items\armors\human\human-tier1\humantier1.chest items\armors\human\human-tier1\humantier1.head items\armors\human\human-tier1\humantier1.legs items\armors\human\human-tier1\icons.png items\armors\human\human-tier10old\humantier10old.chest items\armors\human\human-tier10old\humantier10old.head items\armors\human\human-tier10old\humantier10old.legs items\armors\human\human-tier2\bsleeve.png items\armors\human\human-tier2\chestf.png items\armors\human\human-tier2\chestm.png items\armors\human\human-tier2\fsleeve.png items\armors\human\human-tier2\head.png items\armors\human\human-tier2\humantier2.chest items\armors\human\human-tier2\humantier2.head items\armors\human\human-tier2\humantier2.legs items\armors\human\human-tier2\icons.png items\armors\human\human-tier2\pants.png items\armors\human\human-tier3\bsleeve.png items\armors\human\human-tier3\fsleeve.png items\armors\human\human-tier3\head.png items\armors\human\human-tier3\humantier3.chest items\armors\human\human-tier3\humantier3.head items\armors\human\human-tier3\humantier3.legs items\armors\human\human-tier3\icons.png items\armors\human\human-tier3\pants.png items\armors\human\human-tier4\bsleeve.png items\armors\human\human-tier4\fsleeve.png items\armors\human\human-tier4\head.png items\armors\human\human-tier4\humantier4.chest items\armors\human\human-tier4\humantier4.head items\armors\human\human-tier4\humantier4.legs items\armors\human\human-tier4\icons.png items\armors\human\human-tier4\pants.png items\armors\human\human-tier5accelerator\bsleeve.png items\armors\human\human-tier5accelerator\chestf.png items\armors\human\human-tier5accelerator\chestm.png items\armors\human\human-tier5accelerator\fsleeve.png items\armors\human\human-tier5accelerator\head.png items\armors\human\human-tier5accelerator\humantier5accelerator.chest items\armors\human\human-tier5accelerator\humantier5accelerator.head items\armors\human\human-tier5accelerator\humantier5accelerator.legs items\armors\human\human-tier5accelerator\icons.png items\armors\human\human-tier5accelerator\pants.png items\armors\human\human-tier5manipulator\head.png items\armors\human\human-tier5manipulator\humantier5manipulator.chest items\armors\human\human-tier5manipulator\humantier5manipulator.head items\armors\human\human-tier5manipulator\humantier5manipulator.legs items\armors\human\human-tier5manipulator\icons.png items\armors\human\human-tier5separator\bsleeve.png items\armors\human\human-tier5separator\chestf.png items\armors\human\human-tier5separator\chestm.png items\armors\human\human-tier5separator\fsleeve.png items\armors\human\human-tier5separator\head.png items\armors\human\human-tier5separator\humantier5separator.chest items\armors\human\human-tier5separator\humantier5separator.head items\armors\human\human-tier5separator\humantier5separator.legs items\armors\human\human-tier5separator\icons.png items\armors\human\human-tier5separator\pants.png items\armors\human\human-tier6accelerator\head.png items\armors\human\human-tier6accelerator\humantier6accelerator.chest items\armors\human\human-tier6accelerator\humantier6accelerator.head items\armors\human\human-tier6accelerator\humantier6accelerator.legs items\armors\human\human-tier6accelerator\icons.png items\armors\human\human-tier6manipulator\humantier6manipulator.chest items\armors\human\human-tier6manipulator\humantier6manipulator.head items\armors\human\human-tier6manipulator\humantier6manipulator.legs items\armors\human\human-tier6separator\bsleeve.png items\armors\human\human-tier6separator\chest.png items\armors\human\human-tier6separator\fsleeve.png items\armors\human\human-tier6separator\head.png items\armors\human\human-tier6separator\humantier6separator.chest items\armors\human\human-tier6separator\humantier6separator.head items\armors\human\human-tier6separator\humantier6separator.legs items\armors\human\human-tier6separator\icons.png items\armors\human\human-tier6separator\pants.png items\armors\human\human-workout\workout.chest items\armors\human\human-workout\workout.legs items\armors\hylotl\hylotl-kimono\kimono.chest items\armors\hylotl\hylotl-kimono\kimono.legs items\armors\hylotl\hylotl-monk\monk.chest items\armors\hylotl\hylotl-monk\monk.legs items\armors\hylotl\hylotl-tier1\hylotltier1.chest items\armors\hylotl\hylotl-tier1\hylotltier1.head items\armors\hylotl\hylotl-tier1\hylotltier1.legs items\armors\hylotl\hylotl-tier2\hylotltier2.chest items\armors\hylotl\hylotl-tier2\hylotltier2.head items\armors\hylotl\hylotl-tier2\hylotltier2.legs items\armors\hylotl\hylotl-tier3\hylotltier3.chest items\armors\hylotl\hylotl-tier3\hylotltier3.head items\armors\hylotl\hylotl-tier3\hylotltier3.legs items\armors\hylotl\hylotl-tier4\hylotltier4.chest items\armors\hylotl\hylotl-tier4\hylotltier4.head items\armors\hylotl\hylotl-tier4\hylotltier4.legs items\armors\hylotl\hylotl-tier5accelerator\hylotltier5accelerator.chest items\armors\hylotl\hylotl-tier5accelerator\hylotltier5accelerator.head items\armors\hylotl\hylotl-tier5accelerator\hylotltier5accelerator.legs items\armors\hylotl\hylotl-tier5manipulator\hylotltier5manipulator.chest items\armors\hylotl\hylotl-tier5manipulator\hylotltier5manipulator.head items\armors\hylotl\hylotl-tier5manipulator\hylotltier5manipulator.legs items\armors\hylotl\hylotl-tier5separator\hylotltier5separator.chest items\armors\hylotl\hylotl-tier5separator\hylotltier5separator.head items\armors\hylotl\hylotl-tier5separator\hylotltier5separator.legs items\armors\hylotl\hylotl-tier6accelerator\hylotltier6accelerator.chest items\armors\hylotl\hylotl-tier6accelerator\hylotltier6accelerator.head items\armors\hylotl\hylotl-tier6accelerator\hylotltier6accelerator.legs items\armors\hylotl\hylotl-tier6manipulator\hylotltier6manipulator.chest items\armors\hylotl\hylotl-tier6manipulator\hylotltier6manipulator.head items\armors\hylotl\hylotl-tier6manipulator\hylotltier6manipulator.legs items\armors\hylotl\hylotl-tier6separator\hylotltier6separator.chest items\armors\hylotl\hylotl-tier6separator\hylotltier6separator.head items\armors\hylotl\hylotl-tier6separator\hylotltier6separator.legs items\armors\hylotl\hylotl-traditional\traditional.chest items\armors\hylotl\hylotl-traditional\traditional.legs items\armors\hylotl\hylotl-trainee\trainee.chest items\armors\hylotl\hylotl-trainee\trainee.legs items\armors\novakid\nova-tier1\novatier1.chest items\armors\novakid\nova-tier1\novatier1.head items\armors\novakid\nova-tier1\novatier1.legs items\armors\novakid\nova-tier2\novatier2.chest items\armors\novakid\nova-tier2\novatier2.head items\armors\novakid\nova-tier2\novatier2.legs items\armors\novakid\nova-tier3\novatier3.chest items\armors\novakid\nova-tier3\novatier3.head items\armors\novakid\nova-tier3\novatier3.legs items\armors\novakid\nova-tier4\novatier4.chest items\armors\novakid\nova-tier4\novatier4.head items\armors\novakid\nova-tier4\novatier4.legs items\armors\novakid\nova-tier5accelerator\bsleeve.png items\armors\novakid\nova-tier5accelerator\chest.png items\armors\novakid\nova-tier5accelerator\fsleeve.png items\armors\novakid\nova-tier5accelerator\head.png items\armors\novakid\nova-tier5accelerator\icons.png items\armors\novakid\nova-tier5accelerator\novatier5accelerator.chest items\armors\novakid\nova-tier5accelerator\novatier5accelerator.head items\armors\novakid\nova-tier5accelerator\novatier5accelerator.legs items\armors\novakid\nova-tier5accelerator\pants.png items\armors\novakid\nova-tier5manipulator\novatier5manipulator.chest items\armors\novakid\nova-tier5manipulator\novatier5manipulator.head items\armors\novakid\nova-tier5manipulator\novatier5manipulator.legs items\armors\novakid\nova-tier5separator\chest.png items\armors\novakid\nova-tier5separator\novatier5separator.chest items\armors\novakid\nova-tier5separator\novatier5separator.head items\armors\novakid\nova-tier5separator\novatier5separator.legs items\armors\novakid\nova-tier6accelerator\novatier6accelerator.chest items\armors\novakid\nova-tier6accelerator\novatier6accelerator.head items\armors\novakid\nova-tier6accelerator\novatier6accelerator.legs items\armors\novakid\nova-tier6manipulator\novatier6manipulator.chest items\armors\novakid\nova-tier6manipulator\novatier6manipulator.head items\armors\novakid\nova-tier6manipulator\novatier6manipulator.legs items\armors\novakid\nova-tier6separator\chest.png items\armors\novakid\nova-tier6separator\novatier6separator.chest items\armors\novakid\nova-tier6separator\novatier6separator.head items\armors\novakid\nova-tier6separator\novatier6separator.legs items\armors\novakid\novakidfancy\novakidfancy.chest items\armors\novakid\novakidfancy\novakidfancy.legs items\armors\novakid\novakidjacket\novakidjacket.chest items\armors\novakid\novakidjacket\novakidjacket.legs items\armors\novakid\novakidsuspenders\novakidsuspenders.chest items\armors\novakid\novakidsuspenders\novakidsuspenders.legs items\armors\novakid\novakidwaistcoat\novakidwaistcoat.chest items\armors\novakid\novakidwaistcoat\novakidwaistcoat.legs items\armors\other\perfect\perfect.chest items\armors\other\perfect\perfect.head items\armors\other\perfect\perfect.legs items\armors\penguin\empty\empty.chest items\armors\penguin\empty\empty.legs items\armors\protectorate\baseuniform\baseuniform.chest items\armors\protectorate\baseuniform\baseuniform.legs items\generic\dyes\bluedye.item items\generic\dyes\dyeremover.png items\generic\dyes\reddye.item items\generic\dyes\whitedye.png items\generic\dyes\yellowdye.item items\generic\dyes\yellowdye.png items\materials\mud.matitem leveling\levelingmultipliers.functions monsters\monster.lua monsters\dungeon\ixoling\ixoling.animation monsters\dungeon\ixoling\ixoling.monstertype monsters\dungeon\ixoling\body\body.frames monsters\walkers\hemogoblin\hemogoblin.monstertype monsters\walkers\nutmidge\nutmidge.monstertype monsters\walkers\trictus\trictus.monstertype objects\apex\fantasyboardgame\fantasyboardgame.object objects\apex\flowerbasket1\flowerbasket1.object objects\apex\flowerbasket2\flowerbasket2.object objects\apex\flowerbed1\flowerbed1.object objects\apex\flowerbed2\flowerbed2.object objects\apex\grandfatherclock\grandfatherclock.object objects\apex\greenflask\greenflask.object objects\apex\microscope\microscope.object objects\apex\plasmadisc\plasmadisc.object objects\apex\reddangersign\reddangersign.object objects\apex\redflask\redflask.object objects\apex\securitycamera\securitycamera.object objects\apex\tesla\tesla.object objects\apex\teslaspike\teslaspike.object objects\apex\turret\turret.object objects\apex\vaseclassiclarge1\vaseclassiclarge1.object objects\apex\vaseclassiclarge2\vaseclassiclarge2.object objects\apex\vaseclassicmedium1\vaseclassicmedium1.object objects\apex\vaseclassicmedium2\vaseclassicmedium2.object objects\apex\vaseclassicsmall1\vaseclassicsmall1.object objects\apex\vaseclassicsmall2\vaseclassicsmall2.object objects\avian\goldenducky\goldenducky.object objects\avian\goldenjar1\goldenjar1.object objects\avian\goldenurn\goldenurn.object objects\avian\lamp\lamp.object objects\outpost\shipyardcaptain\shipyardcaptain.object objects\ship\brokenavianfuelhatch\brokenavianfuelhatch.object objects\wired\standingturret\standingturret.animation objects\wired\standingturret\standingturret.lua objects\wired\standingturret\standingturret.object objects\wired\standingturret\turretgun.frames objects\wired\standingturret\turretgun.png [NEW] particles\hoverbikewreck\hoverbikekhakiwreck1.particle [NEW] particles\hoverbikewreck\hoverbikekhakiwreck1.png [NEW] particles\hoverbikewreck\hoverbikekhakiwreck2.particle [NEW] particles\hoverbikewreck\hoverbikekhakiwreck2.png [NEW] particles\hoverbikewreck\hoverbikekhakiwreck4.particle [NEW] particles\hoverbikewreck\hoverbikekhakiwreck4.png [NEW] particles\hoverbikewreck\hoverbikekhakiwreck6.particle [NEW] particles\hoverbikewreck\hoverbikekhakiwreck6.png [NEW] particles\shards\hoverbikekhakishard.particle projectiles\boss\spiderboss\acidsweep.projectile projectiles\boss\spiderboss\spiderslam.projectile recipes\craftingtable\dyes\browndye.recipe scripts\util.lua sfx\objects\brokenfuelhatch.ogg stats\effects\bouncy\bouncy.lua stats\effects\nofalldamage\nofalldamage.lua stats\effects\rage\rage.lua stats\effects\vulnerability\vulnerability.lua stats\effects\vulnerability\vulnerability.statuseffect tech\bounce\bounce.lua vehicles\hoverbike\hoverbikegreen.vehicle [NEW] vehicles\hoverbike\hoverbikekhaki.vehicle vehicles\hoverbike\hoverbikered.vehicle [NEW] versioning\monsterentity_2_3.lua versioning\npcentity_5_6.lua [NEW] versioning\npcentity_7_8.lua [NEW] versioning\playerentity_10_11.lua [NEW] versioning\playerentity_9_10.lua DIFFS ----- versioning.config 8,9c8,9 < "PlayerEntity" : 9, < "MonsterEntity" : 2, --- > "PlayerEntity" : 11, > "MonsterEntity" : 3, 13c13 < "NpcEntity" : 7, --- > "NpcEntity" : 8, behaviors\monsters\boss\spiderboss\acidspray.behavior 13c13,17 < "parameters": {}, --- > "parameters": { > "acidSprayConfig": { > "power": 1.5 > } > }, 271c275,276 < "offset": "fireOffset" --- > "offset": "fireOffset", > "projectileConfig" : "" behaviors\monsters\boss\spiderboss\slam.behavior 12c12,16 < "parameters": {}, --- > "parameters": { > "slamConfig" : { > "power" : 10 > } > }, 284,285c288 < "trackSource": true, < "power": 50 --- > "trackSource": true behaviors\monsters\boss\spiderboss\sweep.behavior 13c13,17 < "parameters": {}, --- > "parameters": { > "acidSweepConfig" : { > "power" : 2.0 > } > }, 264c268,269 < ] --- > ], > "projectileConfig" : "" behaviors\monsters\modular\basemonster.behavior 8,9c8 < "/scripts/actions/builders.lua", < "/scripts/actions/status.lua" --- > "/scripts/actions/builders.lua" 43c42 < "title": "setDying", --- > "title": "setDamageOnTouch", 45c44 < "name": "setDying", --- > "name": "setDamageOnTouch", 47c46 < "shouldDie": false --- > "touchDamage": false 97c96 < "fail": 1, --- > "fail": -1, 116,128c115,125 < "title": "setDamageOnTouch", < "type": "action", < "name": "setDamageOnTouch", < "parameters": { < "touchDamage": false < } < }, < { < "title": "setAggressive", < "type": "action", < "name": "setAggressive", < "parameters": { < "aggressive": "" --- > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "concurrentActions", > "type": "action", > "name": "parallelActions", > "parameters": { > "actions": "" > } 132c129 < "title": "concurrentActions", --- > "title": "runner", 134,137c131,132 < "name": "parallelActions", < "parameters": { < "actions": "" < } --- > "name": "runner", > "parameters": {} 142c137 < "title": "parallel", --- > "title": "sequence", 144c139 < "name": "parallel", --- > "name": "sequence", 146,147c141,144 < "fail": 1, < "success": -1 --- > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" 175,191c172 < "title": "concurrentHostileActions", < "type": "action", < "name": "parallelActions", < "parameters": { < "actions": "" < } < } < ] < }, < { < "title": "dynamic", < "type": "composite", < "name": "dynamic", < "parameters": {}, < "children": [ < { < "title": "sequence", --- > "title": "selector", 193,199c174,175 < "name": "sequence", < "parameters": { < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" < }, --- > "name": "selector", > "parameters": {}, 202,212c178,212 < "title": "inverter", < "type": "decorator", < "name": "inverter", < "parameters": {}, < "child": { < "title": "resourcePercentage", < "type": "action", < "name": "resourcePercentage", < "parameters": { < "percentage": 0, < "resource": "health" --- > "title": "parallel", > "type": "composite", > "name": "parallel", > "parameters": { > "fail": 1, > "success": -1 > }, > "children": [ > { > "title": "entityExists", > "type": "action", > "name": "entityExists", > "parameters": { > "entity": "target" > } > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "concurrentHostileActions", > "type": "action", > "name": "parallelActions", > "parameters": { > "actions": "" > } > } > }, > { > "title": "runner", > "type": "action", > "name": "runner", > "parameters": {} 214c214 < } --- > ] 217c217 < "title": "succeeder", --- > "title": "failer", 219c219 < "name": "succeeder", --- > "name": "failer", 222,224c222,224 < "title": "sequenceActions", < "type": "action", < "name": "sequenceActions", --- > "title": "sequence", > "type": "composite", > "name": "sequence", 226,235c226,248 < "actions": "" < } < } < }, < { < "title": "setDying", < "type": "action", < "name": "setDying", < "parameters": { < "shouldDie": true --- > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "setDamageOnTouch", > "type": "action", > "name": "setDamageOnTouch", > "parameters": { > "touchDamage": false > } > }, > { > "title": "setAggressive", > "type": "action", > "name": "setAggressive", > "parameters": { > "aggressive": "" > } > } > ] 239c252,260 < }, --- > } > ] > }, > { > "title": "dynamic", > "type": "composite", > "name": "dynamic", > "parameters": {}, > "children": [ behaviors\monsters\modular\actions\leap.behavior 4a5 > "/monsters/monster.lua", 9d9 < "/monsters/monster.lua", 24c24,25 < "skillName": "" --- > "skillName": "", > "damageOnTouch": false 135a137,144 > "title": "setDamageOnTouch", > "type": "action", > "name": "setDamageOnTouch", > "parameters": { > "touchDamage": true > } > }, > { 408a418,425 > "title": "setDamageOnTouch", > "type": "action", > "name": "setDamageOnTouch", > "parameters": { > "touchDamage": "" > } > }, > { 425a443,450 > }, > { > "title": "setDamageOnTouch", > "type": "action", > "name": "setDamageOnTouch", > "parameters": { > "touchDamage": "" > } behaviors\monsters\modular\movement\walkapproach.behavior 161,172c161,163 < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "", < "type": "body" < } < }, < { < "title": "move", < "type": "action", < "name": "move", --- > "title": "parallel", > "type": "composite", > "name": "parallel", 174,176c165,187 < "direction": "targetDirection", < "run": "" < } --- > "fail": 1, > "success": -1 > }, > "children": [ > { > "title": "move", > "type": "action", > "name": "move", > "parameters": { > "direction": "targetDirection", > "run": "" > } > }, > { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "state": "", > "type": "body" > } > } > ] 212,229c223,231 < "title": "optional", < "type": "decorator", < "name": "optional", < "parameters": { < "shouldRun": "" < }, < "child": { < "title": "repeater", < "type": "decorator", < "name": "repeater", < "parameters": { < "maxLoops": "", < "untilSuccess": false < }, < "child": { < "title": "sequence", < "type": "composite", < "name": "sequence", --- > "title": "selector", > "type": "composite", > "name": "selector", > "parameters": {}, > "children": [ > { > "title": "optional", > "type": "decorator", > "name": "optional", 231,234c233 < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" --- > "shouldRun": "" 236,238c235,244 < "children": [ < { < "title": "dynamic", --- > "child": { > "title": "repeater", > "type": "decorator", > "name": "repeater", > "parameters": { > "maxLoops": "", > "untilSuccess": false > }, > "child": { > "title": "sequence", 240,241c246,252 < "name": "dynamic", < "parameters": {}, --- > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, 244,247c255,274 < "title": "onGround", < "type": "action", < "name": "onGround", < "parameters": {} --- > "title": "dynamic", > "type": "composite", > "name": "dynamic", > "parameters": {}, > "children": [ > { > "title": "onGround", > "type": "action", > "name": "onGround", > "parameters": {} > }, > { > "title": "timer", > "type": "action", > "name": "timer", > "parameters": { > "time": 1 > } > } > ] 250,252c277,279 < "title": "timer", < "type": "action", < "name": "timer", --- > "title": "jump", > "type": "module", > "name": "jump", 254c281,285 < "time": 1 --- > "fallState": "", > "jumpState": "", > "jumpXVelocity": "", > "jumpYVelocity": "", > "jumpXControlForce": "" 258,269d288 < }, < { < "title": "jump", < "type": "module", < "name": "jump", < "parameters": { < "fallState": "", < "jumpState": "", < "jumpXVelocity": "", < "jumpYVelocity": "", < "jumpXControlForce": "" < } 271c290,299 < ] --- > } > }, > { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "state": "", > "type": "body" > } 273c301 < } --- > ] items\active\vehiclecontroller\boatcontrollergreen.activeitem 3d2 < "price" : 25000, 4a4 > "price" : 25000, 9a10 > "itemTags" : ["vehiclecontroller"], 12,13d12 < "animationCustom" : { }, < 14a14 > "animationScripts" : ["vehiclecursor.lua"], 17c17 < //=============Item specifc bits. --- > "respawnTime" : 1.0, 18a19,22 > //=============Item specifc bits. > "vehicleType" : "boat", > "vehicleBoundingBox" : [-5, -3, 5, 5], > "vehicleImage" : "/vehicles/boat/boatwarp.png:warp.7", 25,26d28 < < 28,31c30 < "filledInventoryIcon" : "/items/active/vehiclecontroller/boatcontrollergreen.png:full", < < "vehicleType" : "boat", < "vehicleBoundingBox" : [-5, -3, 5, 5] --- > "filledInventoryIcon" : "/items/active/vehiclecontroller/boatcontrollergreen.png:full" items\active\vehiclecontroller\vehiclecontroller.lua 0a1,3 > require "/scripts/util.lua" > require "/scripts/vec2.lua" > 6a10,21 > blocked, placeable, empty =1,2,3 > > self.vehicleBoundingBox=item.instanceValue("vehicleBoundingBox") > > if ( item.instanceValue("filled")) then > self.vehicleState = blocked > else > self.vehicleState = empty > end > > self.respawnTimer=0.0 > 7a23,29 > > --Set the sprite to be drawn as a cursor > activeItem.setScriptedAnimationParameter("vehicleImage", item.instanceValue("vehicleImage")) > --set that the vehcile can't be instanciated here > activeItem.setScriptedAnimationParameter("vehicleState",self.vehicleState) > > util.setDebug(true) 14,23d35 < 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 25,29c37,38 < if (world.rectTileCollision(vehicleBounds, {"Null", "Block", "Dynamic"})) then < --Collision, make an "oh no" sound < animator.playSound("placeBad") < < else --- > if fireMode == "primary" then > if (self.vehicleState==placeable) then 33c42,43 < world.spawnVehicle(vehicleType, spawnPosition, { ownerKey = item.instanceValue("key"), startHealthFactor = item.instanceValue("vehicleStartHealthFactor"), fromItem = true} ) --- > -- what kind, and where do we put it ? > world.spawnVehicle(item.instanceValue("vehicleType"), activeItem.ownerAimPosition(), { ownerKey = item.instanceValue("key"), startHealthFactor = item.instanceValue("vehicleStartHealthFactor"), fromItem = true} ) 36a47,52 > > self.vehicleState = empty > activeItem.setScriptedAnimationParameter("vehicleState",self.vehicleState) > else > --Collision, make an "oh no" sound > animator.playSound("placeBad") 47d62 < 57,58c72 < if self.consumePromise then < if self.consumePromise:finished() then --- > local spawnPosition = activeItem.ownerAimPosition() 60c74 < local vehicleResult = self.consumePromise:result() --so this is a json returned from the vehicle we want to store. --- > if ( item.instanceValue("filled")) then 62,63c76,84 < if (vehicleResult) then < activeItem.setInstanceValue("filled", vehicleResult.storable) --- > if (self.respawnTimer>0) then > self.respawnTimer=self.respawnTimer-script.updateDt() > self.vehicleState=empty > else > local vehicleBounds = {} > vehicleBounds[1] = self.vehicleBoundingBox[1] + spawnPosition[1] --Left > vehicleBounds[2] = self.vehicleBoundingBox[2] + spawnPosition[2] --Bot > vehicleBounds[3] = self.vehicleBoundingBox[3] + spawnPosition[1] --Right > vehicleBounds[4] = self.vehicleBoundingBox[4] + spawnPosition[2] --Top 65,68c86,91 < if vehicleResult.storable then < --remember how healthy the vehicle was when we spawned < activeItem.setInstanceValue("vehicleStartHealthFactor", vehicleResult.healthFactor) < end --- > if (world.rectTileCollision(vehicleBounds, {"Null", "Block", "Dynamic"})) then > self.vehicleState = blocked > util.debugRect(vehicleBounds,"red") > else > self.vehicleState = placeable > util.debugRect(vehicleBounds,"green") 69a93,109 > end > > else > if self.consumePromise then > if self.consumePromise:finished() then > > local vehicleResult = self.consumePromise:result() --so this is a json returned from the vehicle we want to store. > > if (vehicleResult) then > activeItem.setInstanceValue("filled", vehicleResult.storable) > self.respawnTimer=item.instanceValue("respawnTime") > > if vehicleResult.storable then > --remember how healthy the vehicle was when we spawned > activeItem.setInstanceValue("vehicleStartHealthFactor", vehicleResult.healthFactor) > end > end 71c111 < updateIcon() --- > updateIcon() 73c113,114 < self.consumePromise = nil --- > self.consumePromise = nil > end 75a117,121 > > --set whether the vehicle can be instanciated here > --this is used to change the cursor from red to green. > activeItem.setScriptedAnimationParameter("vehicleState",self.vehicleState) > items\active\weapons\fist\stunglove.activeitem 32d31 < "transformationGroups" : ["swoosh"], 40,41c39,40 < } < }, --- > } > }, items\active\weapons\melee\altabilities\hammer\groundslam\groundslam.lua 44c44 < status.setPersistentEffects("groundSlam", { {stat = "fallDamageMultiplier", basePercentage = -1.0}, { stat = "invulnerable", amount = 1 } }) --- > status.setPersistentEffects("groundSlam", { {stat = "fallDamageMultiplier", effectiveMultiplier = 0}, { stat = "invulnerable", amount = 1 } }) items\armors\apex\apex-tier1\apextier1.chest 26c26 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\apex\apex-tier1\apextier1.head 18c18 < "basePercentage" : 0.3 --- > "baseMultiplier" : 1.3 items\armors\apex\apex-tier1\apextier1.legs 17c17 < "basePercentage" : 0.2 --- > "baseMultiplier" : 1.2 items\armors\apex\apex-tier2\apextier2.chest 26c26 < "basePercentage" : 0.75 --- > "baseMultiplier" : 1.75 items\armors\apex\apex-tier2\apextier2.head 18c18 < "basePercentage" : 0.45 --- > "baseMultiplier" : 1.45 items\armors\apex\apex-tier2\apextier2.legs 17c17 < "basePercentage" : 0.3 --- > "baseMultiplier" : 1.3 items\armors\apex\apex-tier3\apextier3.chest 26c26 < "basePercentage" : 1.0 --- > "baseMultiplier" : 2.0 items\armors\apex\apex-tier3\apextier3.head 18c18 < "basePercentage" : 0.6 --- > "baseMultiplier" : 1.6 items\armors\apex\apex-tier3\apextier3.legs 17c17 < "basePercentage" : 0.4 --- > "baseMultiplier" : 1.4 items\armors\apex\apex-tier4\apextier4.chest 26c26 < "basePercentage" : 1.25 --- > "baseMultiplier" : 2.25 items\armors\apex\apex-tier4\apextier4.head 18c18 < "basePercentage" : 0.75 --- > "baseMultiplier" : 1.75 items\armors\apex\apex-tier4\apextier4.legs 17c17 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\apex\apex-tier5accelerator\apextier5accelerator.chest 26c26 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 items\armors\apex\apex-tier5accelerator\apextier5accelerator.head 18c18 < "basePercentage" : 0.9 --- > "baseMultiplier" : 1.9 items\armors\apex\apex-tier5accelerator\apextier5accelerator.legs 17c17 < "basePercentage" : 0.6 --- > "baseMultiplier" : 1.6 items\armors\apex\apex-tier5manipulator\apextier5manipulator.chest 26c26 < "basePercentage" : 2.0 --- > "baseMultiplier" : 3.0 items\armors\apex\apex-tier5manipulator\apextier5manipulator.head 18c18 < "basePercentage" : 1.2 --- > "baseMultiplier" : 2.2 items\armors\apex\apex-tier5manipulator\apextier5manipulator.legs 17c17 < "basePercentage" : 0.8 --- > "baseMultiplier" : 1.8 items\armors\apex\apex-tier5separator\apextier5separator.chest 26c26 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\apex\apex-tier5separator\apextier5separator.head 18c18 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\apex\apex-tier5separator\apextier5separator.legs 17c17 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\apex\apex-tier6accelerator\apextier6accelerator.chest 26c26 < "basePercentage" : 1.75 --- > "baseMultiplier" : 2.75 items\armors\apex\apex-tier6accelerator\apextier6accelerator.head 18c18 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\apex\apex-tier6accelerator\apextier6accelerator.legs 17c17 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\apex\apex-tier6manipulator\apextier6manipulator.chest 26c26 < "basePercentage" : 2.25 --- > "baseMultiplier" : 3.25 items\armors\apex\apex-tier6manipulator\apextier6manipulator.head 18c18 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 items\armors\apex\apex-tier6manipulator\apextier6manipulator.legs 17c17 < "basePercentage" : 1 --- > "baseMultiplier" : 2.0 items\armors\apex\apex-tier6separator\apextier6separator.chest 26c26 < "basePercentage" : 1.35 --- > "baseMultiplier" : 2.35 items\armors\apex\apex-tier6separator\apextier6separator.head 18c18 < "basePercentage" : 0.85 --- > "baseMultiplier" : 1.85 items\armors\apex\apex-tier6separator\apextier6separator.legs 17c17 < "basePercentage" : 0.55 --- > "baseMultiplier" : 1.55 items\armors\apex\apexcommander\apexcommander.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\apex\apexcommander\apexcommander.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\apex\apexnavy\apexnavy.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\apex\apexnavy\apexnavy.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\apex\apexofficer\apexofficer.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\apex\apexofficer\apexofficer.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\apex\apexspecialist\apexspecialist.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\apex\apexspecialist\apexspecialist.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\avian\avian-adventurer\avianadventurer.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\avian\avian-adventurer\avianadventurer.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\avian\avian-commoner\aviancommoner.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\avian\avian-commoner\aviancommoner.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\avian\avian-fancy\avianfancy.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\avian\avian-fancy\avianfancy.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\avian\avian-tier1\aviantier1.chest 26c26 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\avian\avian-tier1\aviantier1.head 18c18 < "basePercentage" : 0.3 --- > "baseMultiplier" : 1.3 items\armors\avian\avian-tier1\aviantier1.legs 17c17 < "basePercentage" : 0.2 --- > "baseMultiplier" : 1.2 items\armors\avian\avian-tier2\aviantier2.chest 26c26 < "basePercentage" : 0.75 --- > "baseMultiplier" : 1.75 items\armors\avian\avian-tier2\aviantier2.head 18c18 < "basePercentage" : 0.45 --- > "baseMultiplier" : 1.45 items\armors\avian\avian-tier2\aviantier2.legs 17c17 < "basePercentage" : 0.3 --- > "baseMultiplier" : 1.3 items\armors\avian\avian-tier3\aviantier3.chest 26c26 < "basePercentage" : 1.0 --- > "baseMultiplier" : 2.0 items\armors\avian\avian-tier3\aviantier3.head 18c18 < "basePercentage" : 0.6 --- > "baseMultiplier" : 1.6 items\armors\avian\avian-tier3\aviantier3.legs 17c17 < "basePercentage" : 0.4 --- > "baseMultiplier" : 1.4 items\armors\avian\avian-tier4\aviantier4.chest 26c26 < "basePercentage" : 1.25 --- > "baseMultiplier" : 2.25 items\armors\avian\avian-tier4\aviantier4.head 18c18 < "basePercentage" : 0.75 --- > "baseMultiplier" : 1.75 items\armors\avian\avian-tier4\aviantier4.legs 17c17 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\avian\avian-tier5accelerator\aviantier5accelerator.chest 26c26 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 items\armors\avian\avian-tier5accelerator\aviantier5accelerator.head 18c18 < "basePercentage" : 0.9 --- > "baseMultiplier" : 1.9 items\armors\avian\avian-tier5accelerator\aviantier5accelerator.legs 17c17 < "basePercentage" : 0.6 --- > "baseMultiplier" : 1.6 items\armors\avian\avian-tier5manipulator\aviantier5manipulator.chest 26c26 < "basePercentage" : 2.0 --- > "baseMultiplier" : 3.0 items\armors\avian\avian-tier5manipulator\aviantier5manipulator.head 18c18 < "basePercentage" : 1.2 --- > "baseMultiplier" : 2.2 items\armors\avian\avian-tier5manipulator\aviantier5manipulator.legs 17c17 < "basePercentage" : 0.8 --- > "baseMultiplier" : 1.8 items\armors\avian\avian-tier5separator\aviantier5separator.chest 26c26 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\avian\avian-tier5separator\aviantier5separator.head 18c18 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\avian\avian-tier5separator\aviantier5separator.legs 17c17 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\avian\avian-tier6accelerator\aviantier6accelerator.chest 26c26 < "basePercentage" : 1.75 --- > "baseMultiplier" : 2.75 items\armors\avian\avian-tier6accelerator\aviantier6accelerator.head 18c18 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\avian\avian-tier6accelerator\aviantier6accelerator.legs 17c17 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\avian\avian-tier6manipulator\aviantier6manipulator.chest 26c26 < "basePercentage" : 2.25 --- > "baseMultiplier" : 3.25 items\armors\avian\avian-tier6manipulator\aviantier6manipulator.head 18c18 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 items\armors\avian\avian-tier6manipulator\aviantier6manipulator.legs 17c17 < "basePercentage" : 1 --- > "baseMultiplier" : 2.0 items\armors\avian\avian-tier6separator\aviantier6separator.chest 26c26 < "basePercentage" : 1.35 --- > "baseMultiplier" : 2.35 items\armors\avian\avian-tier6separator\aviantier6separator.head 18c18 < "basePercentage" : 0.85 --- > "baseMultiplier" : 1.85 items\armors\avian\avian-tier6separator\aviantier6separator.legs 17c17 < "basePercentage" : 0.55 --- > "baseMultiplier" : 1.55 items\armors\avian\avian-worker\avianworker.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\avian\avian-worker\avianworker.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\backerhats\glitchplague\plaguemaster.head 19,20c19,20 < /* Bone */ < { "ffca8a" : "eceacc", "e0975c" : "cbbd9d", "a85636" : "84795c", "6f2919" : "504b3d" }, --- > /* BLACK */ > { "ffca8a" : "838383", "e0975c" : "555555", "a85636" : "383838", "6f2919" : "151515" }, items\armors\biome\swamp\froggmerchant\froggmerchant.chest 26c26 < "basePercentage" : 2.25 --- > "baseMultiplier" : 3.25 items\armors\biome\swamp\froggmerchant\froggmerchant.head 18c18 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 items\armors\biome\swamp\froggmerchant\froggmerchant.legs 17c17 < "basePercentage" : 1 --- > "baseMultiplier" : 2.0 items\armors\biome\swamp\froggsuit\frogg.chest 26c26 < "basePercentage" : 2.25 --- > "baseMultiplier" : 3.25 items\armors\biome\swamp\froggsuit\frogg.head 18c18 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 items\armors\biome\swamp\froggsuit\frogg.legs 18c18 < "basePercentage" : 1 --- > "baseMultiplier" : 2.0 items\armors\decorative\costumes\adventurerobot\adventurerobot.chest 26c26 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\decorative\costumes\adventurerobot\adventurerobot.head 18c18 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\decorative\costumes\adventurerobot\adventurerobot.legs 17c17 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\floran\floran-furnivour\floranfurnivor.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\floran\floran-furnivour\floranfurnivor.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\floran\floran-hunter\floranhunter.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\floran\floran-hunter\floranhunter.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\floran\floran-leaf\floranleaf.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\floran\floran-leaf\floranleaf.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\floran\floran-pelt\floranpelt.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\floran\floran-pelt\floranpelt.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\floran\floran-survivalist\floransurvivalist.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\floran\floran-survivalist\floransurvivalist.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\floran\floran-tier1\florantier1.chest 26c26 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\floran\floran-tier1\florantier1.head 18c18 < "basePercentage" : 0.3 --- > "baseMultiplier" : 1.3 items\armors\floran\floran-tier1\florantier1.legs 17c17 < "basePercentage" : 0.2 --- > "baseMultiplier" : 1.2 items\armors\floran\floran-tier2\florantier2.chest 26c26 < "basePercentage" : 0.75 --- > "baseMultiplier" : 1.75 items\armors\floran\floran-tier2\florantier2.head 18c18 < "basePercentage" : 0.45 --- > "baseMultiplier" : 1.45 items\armors\floran\floran-tier2\florantier2.legs 17c17 < "basePercentage" : 0.3 --- > "baseMultiplier" : 1.3 items\armors\floran\floran-tier3\florantier3.chest 26c26 < "basePercentage" : 1.0 --- > "baseMultiplier" : 2.0 items\armors\floran\floran-tier3\florantier3.head 18c18 < "basePercentage" : 0.6 --- > "baseMultiplier" : 1.6 items\armors\floran\floran-tier3\florantier3.legs 17c17 < "basePercentage" : 0.4 --- > "baseMultiplier" : 1.4 items\armors\floran\floran-tier4\florantier4.chest 26c26 < "basePercentage" : 1.25 --- > "baseMultiplier" : 2.25 items\armors\floran\floran-tier4\florantier4.head 18c18 < "basePercentage" : 0.75 --- > "baseMultiplier" : 1.75 items\armors\floran\floran-tier4\florantier4.legs 17c17 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\floran\floran-tier5accelerator\florantier5accelerator.chest 26c26 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 items\armors\floran\floran-tier5accelerator\florantier5accelerator.head 18c18 < "basePercentage" : 0.9 --- > "baseMultiplier" : 1.9 items\armors\floran\floran-tier5accelerator\florantier5accelerator.legs 17c17 < "basePercentage" : 0.6 --- > "baseMultiplier" : 1.6 items\armors\floran\floran-tier5manipulator\florantier5manipulator.chest 26c26 < "basePercentage" : 2.0 --- > "baseMultiplier" : 3.0 items\armors\floran\floran-tier5manipulator\florantier5manipulator.head 18c18 < "basePercentage" : 1.2 --- > "baseMultiplier" : 2.2 items\armors\floran\floran-tier5manipulator\florantier5manipulator.legs 17c17 < "basePercentage" : 0.8 --- > "baseMultiplier" : 1.8 items\armors\floran\floran-tier5separator\florantier5separator.chest 26c26 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\floran\floran-tier5separator\florantier5separator.head 18c18 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\floran\floran-tier5separator\florantier5separator.legs 17c17 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\floran\floran-tier6accelerator\florantier6accelerator.chest 26c26 < "basePercentage" : 1.75 --- > "baseMultiplier" : 2.75 items\armors\floran\floran-tier6accelerator\florantier6accelerator.head 18c18 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\floran\floran-tier6accelerator\florantier6accelerator.legs 17c17 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\floran\floran-tier6manipulator\florantier6manipulator.chest 26c26 < "basePercentage" : 2.25 --- > "baseMultiplier" : 3.25 items\armors\floran\floran-tier6manipulator\florantier6manipulator.head 18c18 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 items\armors\floran\floran-tier6manipulator\florantier6manipulator.legs 17c17 < "basePercentage" : 1 --- > "baseMultiplier" : 2.0 items\armors\floran\floran-tier6separator\florantier6separator.chest 26c26 < "basePercentage" : 1.35 --- > "baseMultiplier" : 2.35 items\armors\floran\floran-tier6separator\florantier6separator.head 18c18 < "basePercentage" : 0.85 --- > "baseMultiplier" : 1.85 items\armors\floran\floran-tier6separator\florantier6separator.legs 17c17 < "basePercentage" : 0.55 --- > "baseMultiplier" : 1.55 items\armors\glitch\glitch-craftsmen\craftsmen.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\glitch\glitch-craftsmen\craftsmen.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\glitch\glitch-merchant\merchant.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\glitch\glitch-merchant\merchant.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\glitch\glitch-noble\noble.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\glitch\glitch-noble\noble.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\glitch\glitch-peasant\peasant.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\glitch\glitch-peasant\peasant.legs 18c18 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\glitch\glitch-royal\glitchroyal.head 16,17c16,17 < /* BLACK */ < { "ffca8a" : "838383", "e0975c" : "555555", "a85636" : "383838", "6f2919" : "151515" }, --- > /* YELLOW */ > { "ffca8a" : "ffffa7", "e0975c" : "e2c344", "a85636" : "a46e06", "6f2919" : "642f00" }, items\armors\glitch\glitch-tier1\glitchtier1.chest 26c26 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\glitch\glitch-tier1\glitchtier1.head 18c18 < "basePercentage" : 0.3 --- > "baseMultiplier" : 1.3 items\armors\glitch\glitch-tier1\glitchtier1.legs 17c17 < "basePercentage" : 0.2 --- > "baseMultiplier" : 1.2 items\armors\glitch\glitch-tier2\glitchtier2.chest 26c26 < "basePercentage" : 0.75 --- > "baseMultiplier" : 1.75 items\armors\glitch\glitch-tier2\glitchtier2.head 18c18 < "basePercentage" : 0.45 --- > "baseMultiplier" : 1.45 items\armors\glitch\glitch-tier2\glitchtier2.legs 17c17 < "basePercentage" : 0.3 --- > "baseMultiplier" : 1.3 items\armors\glitch\glitch-tier3\glitchtier3.chest 26c26 < "basePercentage" : 1.0 --- > "baseMultiplier" : 2.0 items\armors\glitch\glitch-tier3\glitchtier3.head 18c18 < "basePercentage" : 0.6 --- > "baseMultiplier" : 1.6 items\armors\glitch\glitch-tier3\glitchtier3.legs 17c17 < "basePercentage" : 0.4 --- > "baseMultiplier" : 1.4 items\armors\glitch\glitch-tier4\glitchtier4.chest 26c26 < "basePercentage" : 1.25 --- > "baseMultiplier" : 2.25 items\armors\glitch\glitch-tier4\glitchtier4.head 18c18 < "basePercentage" : 0.75 --- > "baseMultiplier" : 1.75 items\armors\glitch\glitch-tier4\glitchtier4.legs 17c17 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\glitch\glitch-tier5accelerator\glitchtier5accelerator.chest 26c26 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 items\armors\glitch\glitch-tier5accelerator\glitchtier5accelerator.head 18c18 < "basePercentage" : 0.9 --- > "baseMultiplier" : 1.9 items\armors\glitch\glitch-tier5accelerator\glitchtier5accelerator.legs 17c17 < "basePercentage" : 0.6 --- > "baseMultiplier" : 1.6 items\armors\glitch\glitch-tier5manipulator\glitchtier5manipulator.chest 26c26 < "basePercentage" : 2.0 --- > "baseMultiplier" : 3.0 items\armors\glitch\glitch-tier5manipulator\glitchtier5manipulator.head 18c18 < "basePercentage" : 1.2 --- > "baseMultiplier" : 2.2 items\armors\glitch\glitch-tier5manipulator\glitchtier5manipulator.legs 17c17 < "basePercentage" : 0.8 --- > "baseMultiplier" : 1.8 items\armors\glitch\glitch-tier5separator\glitchtier5separator.chest 26c26 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\glitch\glitch-tier5separator\glitchtier5separator.head 18c18 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\glitch\glitch-tier5separator\glitchtier5separator.legs 17c17 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\glitch\glitch-tier6accelerator\glitchtier6accelerator.chest 26c26 < "basePercentage" : 1.75 --- > "baseMultiplier" : 2.75 items\armors\glitch\glitch-tier6accelerator\glitchtier6accelerator.head 18c18 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\glitch\glitch-tier6accelerator\glitchtier6accelerator.legs 17c17 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\glitch\glitch-tier6manipulator\glitchtier6manipulator.chest 26c26 < "basePercentage" : 2.25 --- > "baseMultiplier" : 3.25 items\armors\glitch\glitch-tier6manipulator\glitchtier6manipulator.head 18c18 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 items\armors\glitch\glitch-tier6manipulator\glitchtier6manipulator.legs 17c17 < "basePercentage" : 1 --- > "baseMultiplier" : 2.0 items\armors\glitch\glitch-tier6separator\glitchtier6separator.chest 26c26 < "basePercentage" : 1.35 --- > "baseMultiplier" : 2.35 items\armors\glitch\glitch-tier6separator\glitchtier6separator.head 18c18 < "basePercentage" : 0.85 --- > "baseMultiplier" : 1.85 items\armors\glitch\glitch-tier6separator\glitchtier6separator.legs 17c17 < "basePercentage" : 0.55 --- > "baseMultiplier" : 1.55 items\armors\human\human-concept\concept.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\human\human-concept\concept.legs 18c18 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\human\human-cool\cool.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\human\human-cool\cool.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\human\human-sweatervest\sweatervest.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\human\human-sweatervest\sweatervest.legs 18c18 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\human\human-tier1\humantier1.chest 26c26 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\human\human-tier1\humantier1.head 18c18 < "basePercentage" : 0.3 --- > "baseMultiplier" : 1.3 items\armors\human\human-tier1\humantier1.legs 17c17 < "basePercentage" : 0.2 --- > "baseMultiplier" : 1.2 items\armors\human\human-tier10old\humantier10old.chest 26c26 < "basePercentage" : 1.35 --- > "baseMultiplier" : 2.35 items\armors\human\human-tier10old\humantier10old.head 18c18 < "basePercentage" : 0.85 --- > "baseMultiplier" : 1.85 items\armors\human\human-tier10old\humantier10old.legs 17c17 < "basePercentage" : 0.55 --- > "baseMultiplier" : 1.55 items\armors\human\human-tier2\humantier2.chest 26c26 < "basePercentage" : 0.75 --- > "baseMultiplier" : 1.75 48,49c48,49 < /* GREY */ < { "ffca8a" : "b5b5b5", "e0975c" : "808080", "a85636" : "555555", "6f2919" : "303030" }, --- > /* OLIVE */ > { "ffca8a" : "e6e6e6", "e0975c" : "91956c", "a85636" : "6b6f52", "6f2919" : "485035" }, items\armors\human\human-tier2\humantier2.head 18c18 < "basePercentage" : 0.45 --- > "baseMultiplier" : 1.45 40,41c40,41 < /* GREY */ < { "ffca8a" : "b5b5b5", "e0975c" : "808080", "a85636" : "555555", "6f2919" : "303030" }, --- > /* Olive-ish */ > { "ffca8a" : "b3b78f", "e0975c" : "91956c", "a85636" : "6b6f52", "6f2919" : "4f5143" }, items\armors\human\human-tier2\humantier2.legs 17c17 < "basePercentage" : 0.3 --- > "baseMultiplier" : 1.3 39,40c39,40 < /* GREY */ < { "ffca8a" : "b5b5b5", "e0975c" : "808080", "a85636" : "555555", "6f2919" : "303030" }, --- > /* DENIM */ > { "ffca8a" : "b5b5b5", "e0975c" : "40447d", "a85636" : "252853", "6f2919" : "17182e" }, items\armors\human\human-tier3\humantier3.chest 26c26 < "basePercentage" : 1.0 --- > "baseMultiplier" : 2.0 48,49c48,49 < /* WHITE */ < { "ffca8a" : "e6e6e6", "e0975c" : "b6b6b6", "a85636" : "7b7b7b", "6f2919" : "373737" }, --- > /* SCARLET */ > { "ffca8a" : "e6e6e6", "e0975c" : "a32c1c", "a85636" : "812519", "6f2919" : "571a13" }, items\armors\human\human-tier3\humantier3.head 18c18 < "basePercentage" : 0.6 --- > "baseMultiplier" : 1.6 40,41c40,41 < /* WHITE */ < { "ffca8a" : "e6e6e6", "e0975c" : "b6b6b6", "a85636" : "7b7b7b", "6f2919" : "373737" }, --- > /* METAL */ > { "ffca8a" : "bfbfbf", "e0975c" : "696971", "a85636" : "464445", "6f2919" : "24232f" }, items\armors\human\human-tier3\humantier3.legs 17c17 < "basePercentage" : 0.4 --- > "baseMultiplier" : 1.4 39,40c39,40 < /* WHITE */ < { "ffca8a" : "e6e6e6", "e0975c" : "b6b6b6", "a85636" : "7b7b7b", "6f2919" : "373737" }, --- > /* SCARLET */ > { "ffca8a" : "e6e6e6", "e0975c" : "a32c1c", "a85636" : "812519", "6f2919" : "571a13" }, items\armors\human\human-tier4\humantier4.chest 26c26 < "basePercentage" : 1.25 --- > "baseMultiplier" : 2.25 48,49c48,49 < /* GREY BLUE */ < { "ffca8a" : "9da8af", "e0975c" : "676f83", "a85636" : "3d3d51", "6f2919" : "24232f" }, --- > /* SCARLET */ > { "ffca8a" : "e6e6e6", "e0975c" : "a32c1c", "a85636" : "812519", "6f2919" : "571a13" }, items\armors\human\human-tier4\humantier4.head 18c18 < "basePercentage" : 0.75 --- > "baseMultiplier" : 1.75 38,39c38,39 < /* GREY BLUE */ < { "ffca8a" : "9da8af", "e0975c" : "676f83", "a85636" : "3d3d51", "6f2919" : "24232f" }, --- > /* SCARLET */ > { "ffca8a" : "e6e6e6", "e0975c" : "a32c1c", "a85636" : "812519", "6f2919" : "571a13" }, items\armors\human\human-tier4\humantier4.legs 17c17 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 37,38c37,38 < /* GREY BLUE */ < { "ffca8a" : "9da8af", "e0975c" : "676f83", "a85636" : "3d3d51", "6f2919" : "24232f" }, --- > /* SCARLET */ > { "ffca8a" : "e6e6e6", "e0975c" : "a32c1c", "a85636" : "812519", "6f2919" : "571a13" }, items\armors\human\human-tier5accelerator\humantier5accelerator.chest 26c26 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 48,49c48,49 < /* LIME GREEN */ < { "ffca8a" : "d1e160", "e0975c" : "9bba3d", "a85636" : "48832f", "6f2919" : "1b4c2a" }, --- > /* CAMO GREEN */ > { "ffca8a" : "d1e160", "e0975c" : "89a73a", "a85636" : "507244", "6f2919" : "244326" }, items\armors\human\human-tier5accelerator\humantier5accelerator.head 18c18 < "basePercentage" : 0.9 --- > "baseMultiplier" : 1.9 38,39c38,39 < /* LIME GREEN */ < { "ffca8a" : "d1e160", "e0975c" : "9bba3d", "a85636" : "48832f", "6f2919" : "1b4c2a" }, --- > /* CAMO GREEN */ > { "ffca8a" : "d1e160", "e0975c" : "89a73a", "a85636" : "507244", "6f2919" : "244326" }, items\armors\human\human-tier5accelerator\humantier5accelerator.legs 17c17 < "basePercentage" : 0.6 --- > "baseMultiplier" : 1.6 38,39c38,39 < /* LIME GREEN */ < { "ffca8a" : "d1e160", "e0975c" : "9bba3d", "a85636" : "48832f", "6f2919" : "1b4c2a" }, --- > /* CAMO GREEN */ > { "ffca8a" : "d1e160", "e0975c" : "89a73a", "a85636" : "507244", "6f2919" : "244326" }, items\armors\human\human-tier5manipulator\humantier5manipulator.chest 26c26 < "basePercentage" : 2.0 --- > "baseMultiplier" : 3.0 items\armors\human\human-tier5manipulator\humantier5manipulator.head 18c18 < "basePercentage" : 1.2 --- > "baseMultiplier" : 2.2 items\armors\human\human-tier5manipulator\humantier5manipulator.legs 17c17 < "basePercentage" : 0.8 --- > "baseMultiplier" : 1.8 items\armors\human\human-tier5separator\humantier5separator.chest 26c26 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\human\human-tier5separator\humantier5separator.head 18c18 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\human\human-tier5separator\humantier5separator.legs 17c17 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\human\human-tier6accelerator\humantier6accelerator.chest 26c26 < "basePercentage" : 1.75 --- > "baseMultiplier" : 2.75 items\armors\human\human-tier6accelerator\humantier6accelerator.head 18c18 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\human\human-tier6accelerator\humantier6accelerator.legs 17c17 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\human\human-tier6manipulator\humantier6manipulator.chest 26c26 < "basePercentage" : 2.25 --- > "baseMultiplier" : 3.25 items\armors\human\human-tier6manipulator\humantier6manipulator.head 18c18 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 items\armors\human\human-tier6manipulator\humantier6manipulator.legs 17c17 < "basePercentage" : 1 --- > "baseMultiplier" : 2.0 items\armors\human\human-tier6separator\humantier6separator.chest 26c26 < "basePercentage" : 1.35 --- > "baseMultiplier" : 2.35 items\armors\human\human-tier6separator\humantier6separator.head 18c18 < "basePercentage" : 0.85 --- > "baseMultiplier" : 1.85 items\armors\human\human-tier6separator\humantier6separator.legs 17c17 < "basePercentage" : 0.55 --- > "baseMultiplier" : 1.55 items\armors\human\human-workout\workout.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\human\human-workout\workout.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\hylotl\hylotl-kimono\kimono.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\hylotl\hylotl-kimono\kimono.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\hylotl\hylotl-monk\monk.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\hylotl\hylotl-monk\monk.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\hylotl\hylotl-tier1\hylotltier1.chest 26c26 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\hylotl\hylotl-tier1\hylotltier1.head 18c18 < "basePercentage" : 0.3 --- > "baseMultiplier" : 1.3 items\armors\hylotl\hylotl-tier1\hylotltier1.legs 17c17 < "basePercentage" : 0.2 --- > "baseMultiplier" : 1.2 items\armors\hylotl\hylotl-tier2\hylotltier2.chest 26c26 < "basePercentage" : 0.75 --- > "baseMultiplier" : 1.75 items\armors\hylotl\hylotl-tier2\hylotltier2.head 18c18 < "basePercentage" : 0.45 --- > "baseMultiplier" : 1.45 items\armors\hylotl\hylotl-tier2\hylotltier2.legs 17c17 < "basePercentage" : 0.3 --- > "baseMultiplier" : 1.3 items\armors\hylotl\hylotl-tier3\hylotltier3.chest 26c26 < "basePercentage" : 1.0 --- > "baseMultiplier" : 2.0 items\armors\hylotl\hylotl-tier3\hylotltier3.head 18c18 < "basePercentage" : 0.6 --- > "baseMultiplier" : 1.6 items\armors\hylotl\hylotl-tier3\hylotltier3.legs 17c17 < "basePercentage" : 0.4 --- > "baseMultiplier" : 1.4 items\armors\hylotl\hylotl-tier4\hylotltier4.chest 26c26 < "basePercentage" : 1.25 --- > "baseMultiplier" : 2.25 items\armors\hylotl\hylotl-tier4\hylotltier4.head 18c18 < "basePercentage" : 0.75 --- > "baseMultiplier" : 1.75 items\armors\hylotl\hylotl-tier4\hylotltier4.legs 17c17 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\hylotl\hylotl-tier5accelerator\hylotltier5accelerator.chest 26c26 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 items\armors\hylotl\hylotl-tier5accelerator\hylotltier5accelerator.head 18c18 < "basePercentage" : 0.9 --- > "baseMultiplier" : 1.9 items\armors\hylotl\hylotl-tier5accelerator\hylotltier5accelerator.legs 17c17 < "basePercentage" : 0.6 --- > "baseMultiplier" : 1.6 items\armors\hylotl\hylotl-tier5manipulator\hylotltier5manipulator.chest 26c26 < "basePercentage" : 2.0 --- > "baseMultiplier" : 3.0 items\armors\hylotl\hylotl-tier5manipulator\hylotltier5manipulator.head 18c18 < "basePercentage" : 1.2 --- > "baseMultiplier" : 2.2 items\armors\hylotl\hylotl-tier5manipulator\hylotltier5manipulator.legs 17c17 < "basePercentage" : 0.8 --- > "baseMultiplier" : 1.8 items\armors\hylotl\hylotl-tier5separator\hylotltier5separator.chest 26c26 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\hylotl\hylotl-tier5separator\hylotltier5separator.head 18c18 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\hylotl\hylotl-tier5separator\hylotltier5separator.legs 17c17 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\hylotl\hylotl-tier6accelerator\hylotltier6accelerator.chest 26c26 < "basePercentage" : 1.75 --- > "baseMultiplier" : 2.75 items\armors\hylotl\hylotl-tier6accelerator\hylotltier6accelerator.head 18c18 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\hylotl\hylotl-tier6accelerator\hylotltier6accelerator.legs 17c17 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\hylotl\hylotl-tier6manipulator\hylotltier6manipulator.chest 26c26 < "basePercentage" : 2.25 --- > "baseMultiplier" : 3.25 items\armors\hylotl\hylotl-tier6manipulator\hylotltier6manipulator.head 18c18 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 items\armors\hylotl\hylotl-tier6manipulator\hylotltier6manipulator.legs 17c17 < "basePercentage" : 1 --- > "baseMultiplier" : 2.0 items\armors\hylotl\hylotl-tier6separator\hylotltier6separator.chest 26c26 < "basePercentage" : 1.35 --- > "baseMultiplier" : 2.35 items\armors\hylotl\hylotl-tier6separator\hylotltier6separator.head 18c18 < "basePercentage" : 0.85 --- > "baseMultiplier" : 1.85 items\armors\hylotl\hylotl-tier6separator\hylotltier6separator.legs 17c17 < "basePercentage" : 0.55 --- > "baseMultiplier" : 1.55 items\armors\hylotl\hylotl-traditional\traditional.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\hylotl\hylotl-traditional\traditional.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\hylotl\hylotl-trainee\trainee.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\hylotl\hylotl-trainee\trainee.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\novakid\nova-tier1\novatier1.chest 26c26 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\novakid\nova-tier1\novatier1.head 18c18 < "basePercentage" : 0.3 --- > "baseMultiplier" : 1.3 items\armors\novakid\nova-tier1\novatier1.legs 17c17 < "basePercentage" : 0.2 --- > "baseMultiplier" : 1.2 items\armors\novakid\nova-tier2\novatier2.chest 26c26 < "basePercentage" : 0.75 --- > "baseMultiplier" : 1.75 items\armors\novakid\nova-tier2\novatier2.head 18c18 < "basePercentage" : 0.45 --- > "baseMultiplier" : 1.45 items\armors\novakid\nova-tier2\novatier2.legs 17c17 < "basePercentage" : 0.3 --- > "baseMultiplier" : 1.3 items\armors\novakid\nova-tier3\novatier3.chest 26c26 < "basePercentage" : 1.0 --- > "baseMultiplier" : 2.0 items\armors\novakid\nova-tier3\novatier3.head 18c18 < "basePercentage" : 0.6 --- > "baseMultiplier" : 1.6 items\armors\novakid\nova-tier3\novatier3.legs 17c17 < "basePercentage" : 0.4 --- > "baseMultiplier" : 1.4 items\armors\novakid\nova-tier4\novatier4.chest 26c26 < "basePercentage" : 1.25 --- > "baseMultiplier" : 2.25 items\armors\novakid\nova-tier4\novatier4.head 18c18 < "basePercentage" : 0.75 --- > "baseMultiplier" : 1.75 items\armors\novakid\nova-tier4\novatier4.legs 17c17 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\novakid\nova-tier5accelerator\novatier5accelerator.chest 26c26 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 items\armors\novakid\nova-tier5accelerator\novatier5accelerator.head 18c18 < "basePercentage" : 0.9 --- > "baseMultiplier" : 1.9 items\armors\novakid\nova-tier5accelerator\novatier5accelerator.legs 17c17 < "basePercentage" : 0.6 --- > "baseMultiplier" : 1.6 items\armors\novakid\nova-tier5manipulator\novatier5manipulator.chest 26c26 < "basePercentage" : 2.0 --- > "baseMultiplier" : 3.0 items\armors\novakid\nova-tier5manipulator\novatier5manipulator.head 18c18 < "basePercentage" : 1.2 --- > "baseMultiplier" : 2.2 items\armors\novakid\nova-tier5manipulator\novatier5manipulator.legs 17c17 < "basePercentage" : 0.8 --- > "baseMultiplier" : 1.8 items\armors\novakid\nova-tier5separator\novatier5separator.chest 26c26 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\novakid\nova-tier5separator\novatier5separator.head 18c18 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\novakid\nova-tier5separator\novatier5separator.legs 17c17 < "basePercentage" : 0.5 --- > "baseMultiplier" : 1.5 items\armors\novakid\nova-tier6accelerator\novatier6accelerator.chest 26c26 < "basePercentage" : 1.75 --- > "baseMultiplier" : 2.75 items\armors\novakid\nova-tier6accelerator\novatier6accelerator.head 18c18 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\novakid\nova-tier6accelerator\novatier6accelerator.legs 17c17 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\novakid\nova-tier6manipulator\novatier6manipulator.chest 26c26 < "basePercentage" : 2.25 --- > "baseMultiplier" : 3.25 items\armors\novakid\nova-tier6manipulator\novatier6manipulator.head 18c18 < "basePercentage" : 1.5 --- > "baseMultiplier" : 2.5 items\armors\novakid\nova-tier6manipulator\novatier6manipulator.legs 17c17 < "basePercentage" : 1 --- > "baseMultiplier" : 2.0 items\armors\novakid\nova-tier6separator\novatier6separator.chest 26c26 < "basePercentage" : 1.35 --- > "baseMultiplier" : 2.35 items\armors\novakid\nova-tier6separator\novatier6separator.head 18c18 < "basePercentage" : 0.85 --- > "baseMultiplier" : 1.85 items\armors\novakid\nova-tier6separator\novatier6separator.legs 17c17 < "basePercentage" : 0.55 --- > "baseMultiplier" : 1.55 items\armors\novakid\novakidfancy\novakidfancy.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\novakid\novakidfancy\novakidfancy.legs 18c18 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\novakid\novakidjacket\novakidjacket.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\novakid\novakidjacket\novakidjacket.legs 18c18 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\novakid\novakidsuspenders\novakidsuspenders.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\novakid\novakidsuspenders\novakidsuspenders.legs 18c18 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\novakid\novakidwaistcoat\novakidwaistcoat.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\novakid\novakidwaistcoat\novakidwaistcoat.legs 18c18 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\other\perfect\perfect.chest 26c26 < "basePercentage" : 1.75 --- > "baseMultiplier" : 2.75 items\armors\other\perfect\perfect.head 18c18 < "basePercentage" : 1.05 --- > "baseMultiplier" : 2.05 items\armors\other\perfect\perfect.legs 17c17 < "basePercentage" : 0.7 --- > "baseMultiplier" : 1.7 items\armors\penguin\empty\empty.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\penguin\empty\empty.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\armors\protectorate\baseuniform\baseuniform.chest 26c26 < "basePercentage" : 0.35 --- > "baseMultiplier" : 1.35 items\armors\protectorate\baseuniform\baseuniform.legs 17c17 < "basePercentage" : 0.15 --- > "baseMultiplier" : 1.15 items\generic\dyes\bluedye.item 10c10 < "learnBlueprintsOnPickup" : [ "greendye", "purpledye" ] --- > "learnBlueprintsOnPickup" : [ "greendye", "purpledye", "browndye" ] items\generic\dyes\reddye.item 10c10 < "learnBlueprintsOnPickup" : [ "purpledye", "orangedye", "pinkdye" ] --- > "learnBlueprintsOnPickup" : [ "purpledye", "orangedye", "pinkdye", "browndye" ] items\generic\dyes\yellowdye.item 10c10 < "learnBlueprintsOnPickup" : [ "greendye", "orangedye" ] --- > "learnBlueprintsOnPickup" : [ "greendye", "orangedye", "browndye" ] items\materials\mud.matitem 11,13c11 < "materialId" : 53, < < "learnBlueprintsOnPickup" : [ "browndye" ] --- > "materialId" : 53 leveling\levelingmultipliers.functions 1a2 > // Modifies weapon base damage (before owner power multiplier) based on item level 16,90c17 < // DEPRECATED < "gunDamageLevelMultiplier" : [ "linear", "clamp", < [0, 0.0], < [1, 1.5], < [2, 2.0], < [3, 2.5], < [4, 3.0], < [5, 3.5], < [6, 4.0], < [7, 4.5], < [8, 5.0], < [9, 5.5], < [10,6.0] < ], < < // DEPRECATED < "gunLevelEnergyCostPerDamage" : [ "linear", "clamp", < [0, 3], < [1, 2], < [2, 1.5], < [3, 1.2], < [4, 1], < [5, 0.85], < [6, 0.75], < [7, 0.67], < [8, 0.6], < [9, 0.55], < [10, 0.5] < ], < < // DEPRECATED < "staffDamageLevelMultiplier" : [ "linear", "clamp", < [0, 0.0], < [1, 1.5], < [2, 2.0], < [3, 2.5], < [4, 3.0], < [5, 3.5], < [6, 4.0], < [7, 4.5], < [8, 5.0], < [9, 5.5], < [10,6.0] < ], < < // DEPRECATED < "staffLevelEnergyCostPerDamage" : [ "linear", "clamp", < [0, 1], < [1, 1], < [2, 1], < [3, 1], < [4, 1], < [5, 1], < [6, 1], < [7, 1], < [8, 1], < [9, 1], < [10, 1] < ], < < // DEPRECATED < "swordDamageLevelMultiplier" : [ "linear", "clamp", < [0, 0.0], < [1, 1.5], < [2, 2.0], < [3, 2.5], < [4, 3.0], < [5, 3.5], < [6, 4.0], < [7, 4.5], < [8, 5.0], < [9, 5.5], < [10,6.0] < ], < --- > // Modifies shield base health based on item level 105,133c32,64 < "npcLevelHealthIncrease" : [ "linear", "clamp", < [0, -0.50], < [1, -0.10], < [2, 0.15], < [3, 0.30], < [4, 0.40], < [5, 0.50], < [6, 0.60], < [7, 0.70], < [8, 0.80], < [9, 0.90], < [10, 0.90] < ], < < "npcLevelEnergyIncrease" : [ "linear", "clamp", < [0, -0.05], < [1, 0.2], < [2, 0.6], < [3, 1.0], < [4, 1.4], < [5, 1.8], < [6, 2.2], < [7, 2.6], < [8, 3.0], < [9, 3.4], < [10, 3.8] < ], < < "npcLevelPowerMultiplier" : [ "linear", "clamp", --- > // Applies a StatBaseMultiplier to NPC health > "npcLevelHealthMultiplier" : [ "linear", "clamp", > [0, 0.50], > [1, 0.90], > [2, 1.15], > [3, 1.30], > [4, 1.40], > [5, 1.50], > [6, 1.60], > [7, 1.70], > [8, 1.80], > [9, 1.90], > [10, 1.90] > ], > > // Applies a StatBaseMultiplier to NPC energy > "npcLevelEnergyMultiplier" : [ "linear", "clamp", > [0, 0.95], > [1, 1.2], > [2, 1.6], > [3, 2.0], > [4, 2.4], > [5, 2.8], > [6, 3.2], > [7, 3.6], > [8, 4.0], > [9, 4.4], > [10, 4.8] > ], > > // this is goddamn ridiculous, but it translates to a stat value modifier > // on a stat which is then used as a multiplier, thus "multiplier modifier" > "npcLevelPowerMultiplierModifier" : [ "linear", "clamp", 147c78,81 < "npcLevelProtectionIncrease" : [ "linear", "clamp", --- > // Applies a StatBaseMultiplier to NPC energy, which should always be a base of 1.0. > // This is a little weird, but it's tough to effectively scale protection when 100 > // is 100% damage reduction > "npcLevelProtectionMultiplier" : [ "linear", "clamp", 161,172c95,107 < "monsterLevelHealthIncrease" : [ "linear", "clamp", < [0, -0.64], < [1, -0.28], < [2, 0.2], < [3, 0.8], < [4, 1.52], < [5, 2.36], < [6, 3.32], < [7, 4.4], < [8, 5.6], < [9, 6.92], < [10, 8.36] --- > // Applies a StatBaseMultiplier to monster health > "monsterLevelHealthMultiplier" : [ "linear", "clamp", > [0, 0.36], > [1, 0.72], > [2, 1.2], > [3, 1.8], > [4, 2.52], > [5, 3.36], > [6, 4.32], > [7, 5.4], > [8, 6.6], > [9, 7.92], > [10, 9.36] 175c110,111 < "monsterLevelTouchDamageMultiplier" : [ "linear", "clamp", --- > // Yes, there *is* another touchDamageMultiplier by which this multiplier is multiplied > "monsterLevelTouchDamageMultiplierMultiplier" : [ "linear", "clamp", 188a125,126 > // This is used as a straight multiplier of power, unlike some other powerMultiplier > // things which act as a value modifier to the powerMultiplier stat 202a141,142 > // Multiplies item base price by item level. Since the level defaults to > // 1.0, the price multiplier function should always intersect level at 1.0 214a155,229 > ], > > // DEPRECATED > "gunDamageLevelMultiplier" : [ "linear", "clamp", > [0, 0.0], > [1, 1.5], > [2, 2.0], > [3, 2.5], > [4, 3.0], > [5, 3.5], > [6, 4.0], > [7, 4.5], > [8, 5.0], > [9, 5.5], > [10,6.0] > ], > > // DEPRECATED > "gunLevelEnergyCostPerDamage" : [ "linear", "clamp", > [0, 3], > [1, 2], > [2, 1.5], > [3, 1.2], > [4, 1], > [5, 0.85], > [6, 0.75], > [7, 0.67], > [8, 0.6], > [9, 0.55], > [10, 0.5] > ], > > // DEPRECATED > "staffDamageLevelMultiplier" : [ "linear", "clamp", > [0, 0.0], > [1, 1.5], > [2, 2.0], > [3, 2.5], > [4, 3.0], > [5, 3.5], > [6, 4.0], > [7, 4.5], > [8, 5.0], > [9, 5.5], > [10,6.0] > ], > > // DEPRECATED > "staffLevelEnergyCostPerDamage" : [ "linear", "clamp", > [0, 1], > [1, 1], > [2, 1], > [3, 1], > [4, 1], > [5, 1], > [6, 1], > [7, 1], > [8, 1], > [9, 1], > [10, 1] > ], > > // DEPRECATED > "swordDamageLevelMultiplier" : [ "linear", "clamp", > [0, 0.0], > [1, 1.5], > [2, 2.0], > [3, 2.5], > [4, 3.0], > [5, 3.5], > [6, 4.0], > [7, 4.5], > [8, 5.0], > [9, 5.5], > [10,6.0] monsters\monster.lua 52a53,57 > > local deathBehavior = entity.configParameter("deathBehavior") > if deathBehavior then > self.deathBehavior = BTree:new(deathBehavior) > end 112a118,120 > if self.deathBehavior then > self.deathBehavior:run() > end monsters\dungeon\ixoling\ixoling.animation 26,28c26 < "cycle" : 0.5, < "mode" : "transition", < "transition" : "idle" --- > "cycle" : 0.6 77a76,82 > } > } > }, > "damage" : { > "stunned" : { > "properties" : { > "image" : ":fall." monsters\dungeon\ixoling\ixoling.monstertype 18c18,69 < "behavior" : "ixoling", --- > "behavior" : "monster", > > "behaviorConfig" : { > "damageOnTouch" : false, > > "queryTargets" : true, > "targetQueryRange" : 40, > "targetOnDamage" : true, > "targetEntityTypes" : [ "player" ], > "keepTargetInSight" : true, > "keepTargetInRange" : 60, > "targetOutOfSightTime" : 2.5, > > "hostileActions" : [ > { > "name" : "action-leap", > "cooldown" : 0.0, > "parameters" : { > "minimumRange" : 0, > "maximumRange" : 20, > "windupState" : "attack", > "windupTime" : 0.3, > > "leapVelocity" : 40, > "collisionCheck" : true, > "highArc" : false, > "leapState" : "attack", > "fallState" : "fall", > > "winddownTime" : 0.5, > "winddownState" : "idle" > } > } > ], > > "periodicActions" : [], > > "approachActions" : [ > { > "name" : "approach-walk", > "parameters" : { > "canJump" : true, > "maxJumps" : 2, > "jumpXVelocity" : 12, > "jumpYVelocity" : 30, > "jumpXControlForce" : 15, > "jumpState" : "attack", > "fallState" : "fall" > } > } > ] > }, 26,27c77,78 < "knockoutTime" : 0.0, < "knockoutEffect" : "blink", --- > "knockoutTime" : 0.3, > "knockoutEffect" : "", 29c80 < "body" : "idle" --- > "damage" : "stunned" 35c86 < "mass" : 0.6, --- > "mass" : 1.0, 37,41c88 < "runSpeed" : 12, < < "airJumpProfile" : { < "jumpSpeed" : 0.0 < } --- > "runSpeed" : 12 46,47c93,94 < "poly" : [ [-4, -3], [0, -3], [0, 0], [-4, 0] ], < "damage" : 37.5, --- > "poly" : [ [-1, -0.6], [-0.6, -1], [0.6, -1], [1, -0.6], [1, 0.6], [0.6, 1], [-0.6, 1], [-1, 0.6] ], > "damage" : 10, 106,110c153 < }, < "familyParameters" : [ < ], < "variantParameters" : [ < ] --- > } monsters\dungeon\ixoling\body\body.frames 12a13,15 > }, > "aliases" : { > "hurt.1" : "fall.1" monsters\walkers\hemogoblin\hemogoblin.monstertype 16a17 > "deathBehavior" : "monster-death", 130c131 < "knockoutTime" : 0.0, --- > "knockoutTime" : 0.3, monsters\walkers\nutmidge\nutmidge.monstertype 16a17 > "deathBehavior" : "monster-death", 79,86d79 < "name" : "action-animate", < "parameters" : { < "stateType" : "body", < "state" : "break", < "animationTimer" : 0.25 < } < }, < { 141,142c134,137 < "knockoutTime" : 0.0, < "knockoutAnimationStates" : {}, --- > "knockoutTime" : 0.3, > "knockoutAnimationStates" : { > "body" : "break" > }, monsters\walkers\trictus\trictus.monstertype 9c9 < "dropPools" : [ ], --- > "dropPools" : [ { "default" : "trictusTreasure", "bow" : "trictusHunting" } ], objects\apex\fantasyboardgame\fantasyboardgame.object 12,13c12,13 < "avianDescription" : "A blue potion?", < "floranDescription" : "Sssmells terrible.", --- > "avianDescription" : "A tiny castle for playing games with.", > "floranDescription" : "Even Floran enjoyss playing silly games from time to time.", 15,16c15,17 < "humanDescription" : "This smells like... something that shouldn't pass the lips.", < "hylotlDescription" : "I used to play games like this when I was younger... I miss Elves.", --- > "humanDescription" : "Let the merriment commence!", > "hylotlDescription" : "I have fond memories of playing games like this when I was younger.", > "novakidDescription" : "I'm gonna win this game and then the castle will be all mine!", objects\apex\flowerbasket1\flowerbasket1.object 12c12 < "avianDescription" : "What a delightful array.", --- > "avianDescription" : "What a delightful array of blooms.", 16c16,17 < "hylotlDescription" : "A basic, adequate hanging floral display.", --- > "hylotlDescription" : "An adequate hanging floral display. I've seen more impressive seaweed arrangements.", > "novakidDescription" : "A hanging basket. Nothin' makes a home more welcomin'.", objects\apex\flowerbasket2\flowerbasket2.object 12c12 < "avianDescription" : "What a delightful array.", --- > "avianDescription" : "What a delightful array of blooms.", 16c16,17 < "hylotlDescription" : "A basic, adequate hanging floral display.", --- > "hylotlDescription" : "An adequate hanging floral display. I've seen more impressive seaweed arrangements.", > "novakidDescription" : "A hanging basket. Nothin' makes a home more welcomin'.", objects\apex\flowerbed1\flowerbed1.object 13c13 < "floranDescription" : "Floran hide in flowers. Jump out, sssurprise monkey! Monkey not happy.", --- > "floranDescription" : "Floran once hid in flowers, then jumped out to sssurprise poptop! Poptop not happy.", 15,16c15,18 < "humanDescription" : "I've never had green fingers.", < "hylotlDescription" : "A crude, childish flowerbed.", --- > "humanDescription" : "A flower bed. Best left to those with green fingers.", > "hylotlDescription" : "A rather childish attempt at a floral display.", > "novakidDescription" : "A flower bed. Maximum quaintness.", > objects\apex\flowerbed2\flowerbed2.object 13c13 < "floranDescription" : "Floran hide in flowers. Jump out, sssurprise monkey! Monkey not happy.", --- > "floranDescription" : "Floran once hid in flowers, then jumped out to sssurprise poptop! Poptop not happy.", 15,16c15,17 < "humanDescription" : "I've never had green fingers.", < "hylotlDescription" : "A crude, childish flowerbed.", --- > "humanDescription" : "A flower bed. Best left to those with green fingers.", > "hylotlDescription" : "A rather childish attempt at a floral display.", > "novakidDescription" : "A flower bed. Maximum quaintness.", objects\apex\grandfatherclock\grandfatherclock.object 11c11 < "apexDescription" : "Apex clocks are set automatically.", --- > "apexDescription" : "All Apex clocks are set automatically via radio.", 13,14c13,14 < "floranDescription" : "Floran only time sunset and sunrise.", < "glitchDescription" : "Investigate. This time piece appears to be accurate to within 1 millisecond.", --- > "floranDescription" : "Floran still go by the sunset and sunrissse to tell time.", > "glitchDescription" : "Impressed. This time piece appears to be accurate to within 1 millisecond.", 16c16,17 < "hylotlDescription" : "The sound is perfect for meditation.", --- > "hylotlDescription" : "The sound of the metronome is perfect for meditation.", > "novakidDescription" : "Tick, tock, tick, tock. You can't ignore the sound of a clock.", objects\apex\greenflask\greenflask.object 12c12 < "avianDescription" : "Much of the mixture is congealed. Reminiscent of egg yoke.", --- > "avianDescription" : "Much of the mixture is congealed. Reminiscent of egg yolk.", 14c14 < "glitchDescription" : "Scanning. Unknown mixture.", --- > "glitchDescription" : "Suspicious. An unknown mixture.", 16a17,18 > "novakidDescription" : "I don't need to investigate any further to know this stuff is bad news.", > objects\apex\microscope\microscope.object 12,13c12,13 < "avianDescription" : "The Avian have a similar device for peering into the distance with eyes of a hawk.", < "floranDescription" : "Tassty ccells.", --- > "avianDescription" : "The Avian have a similar device for peering into the distance with accuracy of a hawk.", > "floranDescription" : "Tassty flesh cells.", 16a17 > "novakidDescription" : "A delicate device for seeing tiny things with more clarity.", objects\apex\plasmadisc\plasmadisc.object 7c7 < "description" : "Whoooaaaaa.", --- > "description" : "An electrically charged plasma field. It reacts to sound.", 22,24c22,25 < "glitchDescription" : "Measure. This device harnesses many millions of volts.", < "humanDescription" : "A plasma disc. I wonder what it's for?", < "hylotlDescription" : "Such a device likely has dark purpose.", --- > "glitchDescription" : "Anxious. This device harnesses many millions of volts.", > "humanDescription" : "One of those wacky plasma disc things.", > "hylotlDescription" : "Such a device likely has a sinister purpose.", > "novakidDescription" : "I can't look at that for too long.", objects\apex\reddangersign\reddangersign.object 8c8 < "description" : "It says 'Danger!' Couldn't really send a clearer message.", --- > "description" : "A sign that reads 'Danger!'. It couldn't really send a clearer message.", 13,15c13,15 < "avianDescription" : "Do the Apex mark danger so clearly?", < "floranDescription" : "The Floran are danger.", < "glitchDescription" : "Sarcasm. Clearly nothing to worry about.", --- > "avianDescription" : "Why do the Apex need to mark danger so clearly?", > "floranDescription" : "Floran livess and breathes danger.", > "glitchDescription" : "Pessimistic. Clearly nothing to worry about then.", 17a18 > "novakidDescription" : "I'm no stranger to danger.", objects\apex\redflask\redflask.object 11c11 < "apexDescription" : "This smells sweet.", --- > "apexDescription" : "This concoction smells sweet.", 13,14c13,14 < "floranDescription" : "Sssweet ssmelling liquid. Floran prefer sssavoury ssustenance.", < "glitchDescription" : "Investigating. No active ingredients. Perhaps a placebo.", --- > "floranDescription" : "Sssweet smelling liquid. Floran prefers sssavoury sustenance.", > "glitchDescription" : "Sceptical. I can detect no active ingredients. Perhaps this is a placebo.", 16c16,17 < "hylotlDescription" : "Such a sweet odour.", --- > "hylotlDescription" : "Such a sweet odour, it's intoxicating.", > "novakidDescription" : "Red flavour.", objects\apex\securitycamera\securitycamera.object 12,17c12,18 < "apexDescription" : "Always watchful.", < "avianDescription" : "Must move like the wind to remain unseen.", < "floranDescription" : "Sssuch bright lasersss.", < "glitchDescription" : "Care. Must not disrupt my brother in his vigilance.", < "humanDescription" : "An automated security camera.", < "hylotlDescription" : "A mere laser could not penetrate depths of the ocean.", --- > "apexDescription" : "Always watching.", > "avianDescription" : "I should be vigilant of security cameras like this one.", > "floranDescription" : "This camera movesss on its own.", > "glitchDescription" : "Cautious. This security camera is equipped with motion detection.", > "humanDescription" : "The Miniknog are watching my every move with this camera. So creepy.", > "hylotlDescription" : "Seeing this camera makes me want to hide under the ocean to avoid its gaze.", > "novakidDescription" : "Whatcha lookin' at, huh?", objects\apex\tesla\tesla.object 14c14 < "glitchDescription" : "Investigate. A wireless power source.", --- > "glitchDescription" : "Delighted. A wireless power source. I am a fan of this technology.", 16c16,18 < "hylotlDescription" : "Such devices are very useful beneath the ocean.", --- > "hylotlDescription" : "Such wireless power devices are very useful beneath the ocean.", > "novakidDescription" : "Electrical power generator.", > objects\apex\teslaspike\teslaspike.object 13,14c13,14 < "avianDescription" : "If only I could fly.", < "floranDescription" : "Hsss Floran not like lightning machine.", --- > "avianDescription" : "If only I could fly over these traps.", > "floranDescription" : "Floran dislikess lightning machines.", 17c17,18 < "hylotlDescription" : "Similar devices are used defensively beneath the ocean. The Hylotl build moats of electricity to keep out intruders.", --- > "hylotlDescription" : "Similar devices are used defensively beneath the ocean. The Hylotl build moats of electricity currents as intruder deterrents.", > "novakidDescription" : "I don't fancy getting a nasty jolt. Better steer clear.", objects\apex\turret\turret.object 12,17c12,18 < "apexDescription" : "Always watchful.", < "avianDescription" : "Must move like the wind to remain unseen.", < "floranDescription" : "Sssuch bright lasersss.", < "glitchDescription" : "Care. Must not disrupt my brother in his vigilance.", < "humanDescription" : "An automated security camera.", < "hylotlDescription" : "A mere laser could not penetrate depths of the ocean.", --- > "apexDescription" : "Always ready to fire.", > "avianDescription" : "I must move like the wind to remain unseen by this turret.", > "floranDescription" : "Such bright lasersss. Don't want to be in their ssssights.", > "glitchDescription" : "Determined. I must not become the target.", > "humanDescription" : "An automated security gun. Nasty piece of work.", > "hylotlDescription" : "A reminder of the extreme lengths the Miniknog have gone to.", > "novakidDescription" : "An automated gun has no soul to keep in it check.", objects\apex\vaseclassiclarge1\vaseclassiclarge1.object 14c14 < "floranDescription" : "SSsssmash it and tear out itsss inssidess!", --- > "floranDescription" : "SSsmash it and tear out its insides!", 17a18 > "novakidDescription" : "Pots are just pots to me, old or new.", objects\apex\vaseclassiclarge2\vaseclassiclarge2.object 14c14 < "floranDescription" : "SSsssmash it and tear out itsss inssidess!", --- > "floranDescription" : "SSsmash it and tear out its insides!", 17a18 > "novakidDescription" : "Pots are just pots to me, old or new.", objects\apex\vaseclassicmedium1\vaseclassicmedium1.object 14c14 < "floranDescription" : "SSsssmash it and tear out itsss inssidess!", --- > "floranDescription" : "SSsmash it and tear out its insides!", 17a18 > "novakidDescription" : "Pots are just pots to me, old or new.", objects\apex\vaseclassicmedium2\vaseclassicmedium2.object 14c14 < "floranDescription" : "SSsssmash it and tear out itsss inssidess!", --- > "floranDescription" : "SSsmash it and tear out its insides!", 17a18 > "novakidDescription" : "Pots are just pots to me, old or new.", objects\apex\vaseclassicsmall1\vaseclassicsmall1.object 14c14 < "floranDescription" : "SSsssmash it and tear out itsss inssidess!", --- > "floranDescription" : "SSsmash it and tear out its insides!", 17a18 > "novakidDescription" : "Pots are just pots to me, old or new.", objects\apex\vaseclassicsmall2\vaseclassicsmall2.object 14,15c14,15 < "floranDescription" : "SSsssmash it and tear out itss inssidesss!", < "glitchDescription" : "Curious. I believe there may be something inside.", --- > "floranDescription" : "SSsmash it and tear out its insides!", > "glitchDescription" : "Destructive. I believe there may be something inside.", 18c18 < "novakidDescription" : "This here vase looks shaped sorta like a spittoon.", --- > "novakidDescription" : "Pots are just pots to me, old or new.", objects\avian\goldenducky\goldenducky.object 12,14c12,14 < "avianDescription" : "These are very valuable.", < "floranDescription" : "Tassty little ducky.", < "glitchDescription" : "Cute. It's adorable.", --- > "avianDescription" : "These things are actually very valuable.", > "floranDescription" : "Shiny little ducky.", > "glitchDescription" : "Enamoured. It's adorable.", 16c16,17 < "hylotlDescription" : "Birds like this swim on the surface of lakes and streams.", --- > "hylotlDescription" : "A duckling, immortalised in gold.", > "novakidDescription" : "A solid gold duck.", objects\avian\goldenjar1\goldenjar1.object 12,16c12,17 < "avianDescription" : "This pot holds the organs of a Stargazer.", < "floranDescription" : "Fanccy bird pot. All gold and shiny. Nice smell from inside.", < "glitchDescription" : "Disgust. The pot appears to hold a heart, lungs and brain of Avian origin.", < "humanDescription" : "It smells like rotting flesh.", < "hylotlDescription" : "The smell suggests there are remains inside.", --- > "avianDescription" : "This pot holds the organs of a Stargazer after death.", > "floranDescription" : "Fancy bird pot, all gold and shiny. Nice sssmell from inside.", > "glitchDescription" : "Disgusted. This pot appears to hold a heart, lungs and brain of Avian origin.", > "humanDescription" : "It smells like rotted flesh.", > "hylotlDescription" : "The smell suggests there are bodily remains inside.", > "novakidDescription" : "A jar from an Avian tomb, probably has some Avian guts still in it.", objects\avian\goldenurn\goldenurn.object 5c5 < "description" : "The ashes of Avian stargazers are often stored in urns like this.", --- > "description" : "The ashes of Avian Stargazers are often stored in urns like this one.", 12,15c12,15 < "avianDescription" : "A stargazer's urn. Contains not only their ashes but every single one of their plucked feathers.", < "floranDescription" : "Tasssty bird dust inssside.", < "glitchDescription" : "Questioning. Why does the urn contain feathers as well as ashes?", < "humanDescription" : "A collection of feathers and ashes.", --- > "avianDescription" : "A Stargazer's urn. Contains not only their ashes but every single one of their plucked feathers.", > "floranDescription" : "Tassty bird dust inside.", > "glitchDescription" : "Thoughtful. Why does the urn contain feathers as well as ashes?", > "humanDescription" : "A collection of feathers and ashes, probably full of meaning to an Avian.", 16a17 > "novakidDescription" : "This jar contains the remains of some deceased Avian guy or gal.", objects\avian\lamp\lamp.object 11,12c11,12 < "apexDescription" : "The scent from this lamp is old and sickly.", < "avianDescription" : "Once used to fill a temple with the smell of fruit. Now it just smells dead.", --- > "apexDescription" : "The scent from this lamp is old and sickly-sweet.", > "avianDescription" : "Once used to fill a temple with the smell of fruit. Now it just smells fruity.", 14,16c14,17 < "glitchDescription" : "Identify. Rotting fruit within.", < "humanDescription" : "It smells of rotten fruit.", < "hylotlDescription" : "The smell of this lamp is unpleasant.", --- > "glitchDescription" : "Disgusted. The stench of old rotten fruit within is still quite apparent.", > "humanDescription" : "A lamp! It smells like it has rotten fruit inside.", > "hylotlDescription" : "The smell of this lamp offends all of my senses.", > "novakidDescription" : "An awesome golden lamp. Too bad it stinks.", objects\outpost\shipyardcaptain\shipyardcaptain.object 53,55c53,55 < { "item" : "vehiclecontroller" }, < { "item" : "vehiclecontrollerred" }, < { "item" : "vehiclecontrollergreen" }, --- > { "item" : "hoverbikecontrollerkhaki" }, > { "item" : "hoverbikecontrollerred" }, > { "item" : "hoverbikecontrollergreen" }, objects\ship\brokenavianfuelhatch\brokenavianfuelhatch.object 34a35,40 > > "animation" : "/objects/noisy/noisy.animation", > > "scripts" : [ > "/objects/noisy/noisy.lua" > ], objects\wired\standingturret\standingturret.animation 4c4 < "movement" : { --- > "attack" : { 22,39d21 < "orientation" : { < "priority" : 0, < "default" : "horizontal", < < "states" : { < "horizontal" : { < "frames" : 1 < }, < "vertical" : { < "frames" : 1 < }, < "attack" : { < "frames" : 4, < "cycle" : 0.25, < "mode" : "loop" < } < } < }, 64c46,47 < "offset" : [0.25, -0.75], --- > "offset" : [0.5, 0.0], > "projectileSource" : [2.0, 0.0], 71c54 < "movement" : { --- > "attack" : { 100,156c83 < "energybottom" : { < "properties" : { < "offset" : [0.375, -1.5], < "centered" : false, < "zLevel" : 2, < "scaleGroup" : "energy" < }, < < "partStates" : { < "energy" : { < "full" : { < "properties" : { "image" : ":full" } < }, < "high" : { < "properties" : { "image" : ":high" } < }, < "medium" : { < "properties" : { "image" : ":medium" } < }, < "low" : { < "properties" : { "image" : ":low" } < }, < "none" : { < "properties" : { "image" : ":none" } < } < } < } < }, < "energytop" : { < "properties" : { < "offset" : [0.375, 1.375], < "centered" : false, < "zLevel" : 2, < "scaleGroup" : "energy" < }, < < "partStates" : { < "energy" : { < "full" : { < "properties" : { "image" : ":full" } < }, < "high" : { < "properties" : { "image" : ":high" } < }, < "medium" : { < "properties" : { "image" : ":medium" } < }, < "low" : { < "properties" : { "image" : ":low" } < }, < "none" : { < "properties" : { "image" : ":none" } < } < } < } < }, < "energyside" : { --- > "energy" : { 158d84 < "offset" : [-1.5, -0.625], 161c87 < "scaleGroup" : "energyv" --- > "transformationGroups" : [ "energy" ] 194,200c120,121 < "scaleGroups" : { < "energy" : { < "scaleCenter" : [0, 0] < }, < "energyv" : { < "scaleCenter" : [0, 0] < } --- > "transformationGroups" : { > "energy" : { "interpolated" : false } objects\wired\standingturret\standingturret.lua 0a1,3 > require "/scripts/util.lua" > require "/scripts/interp.lua" > 2c5 < --Bunch of parameters --- > -- Positions and angles 3a7 > self.basePosition = vec2.add(entity.position(), self.baseOffset) 6,110c10,11 < self.targetRange = entity.configParameter("targetRange") < self.targetCooldown = entity.configParameter("targetCooldown") < self.targetAngleRange = entity.configParameter("targetAngleRange") < self.maxTrackingYVel = entity.configParameter("maxTrackingYVel") < self.targetOffset = entity.configParameter("targetOffset") < self.minTargetRange = entity.configParameter("minTargetRange") < < self.rotationRange = entity.configParameter("rotationRange") < self.rotationTime = entity.configParameter("rotationTime") < < self.letGoCooldown = entity.configParameter("letGoCooldown") < < self.energy = entity.configParameter("energy") < self.maxEnergy = self.energy.baseEnergy < < self.state = stateMachine.create({ < "deadState", < "attackState", < "scanState" < }) < self.active = true < < entity.setAnimationState("movement", "idle") < entity.setInteractive(true) < --entity.setAllOutboundNodes(false) < < self.gunStats = getGunStats(world.containerItemAt(entity.id(), 0)) < < if storage.energy == nil then setEnergy(self.maxEnergy) end < < --checkInboundNode() < end < < -------------------------------------------------------------------------------- < function update(dt) < self.state.update(dt) < end < < function containerCallback() < self.gunStats = getGunStats(world.containerItemAt(entity.id(), 0)) < end < < -------------------------------------------------------------------------------- < < function getGunStats(gun) < local gunStats = {} < if not gun or not gun.parameters.projectileType or not gun.parameters.projectile then return false end < < gunStats["projectileCount"] = gun.parameters.projectileCount or 1 < gunStats["projectileSeparation"] = gun.parameters.projectileSeparation or 0 < gunStats["inaccuracy"] = gun.parameters.inaccuracy or 0.015 < gunStats["projectileType"] = gun.parameters.projectileType or "bullet-1" < < local projectileConfig = root.projectileConfig(gunStats["projectileType"]) < < gunStats["speed"] = gun.parameters.projectile.speed or projectileConfig.speed or 50 < gunStats["power"] = gun.parameters.projectile.power or projectileConfig.power or 5 < gunStats["fireTime"] = gun.parameters.fireTime or 1 < gunStats["level"] = gun.parameters.level or 1 < gunStats["levelScale"] = gun.parameters.levelScale or 1 < gunStats["classMultiplier"] = gun.parameters.classMultiplier or 1 < gunStats["fireSound"] = getFireSound(gun) < < gunStats["damagePerShot"] = gunStats.levelScale * gunStats.power * gunStats.projectileCount < gunStats["energyPerShot"] = gunStats["damagePerShot"] * gunStats["classMultiplier"] * root.evalFunction("gunLevelEnergyCostPerDamage", gunStats.level) < < return gunStats < end < < function getFireSound(gun) < if not gun.parameters.muzzleEffect or not gun.parameters.muzzleEffect.fireSound then return false end < if gun.parameters.muzzleEffect.fireSound[1]["file"] then < return gun.parameters.muzzleEffect.fireSound[1]["file"] < end < return false < end < < -------------------------------------------------------------------------------- < function getBasePosition() < return entity.toAbsolutePosition(self.baseOffset) < end < < -------------------------------------------------------------------------------- < < function visibleTarget(targetId) < local targetPosition = targetPos(targetId) < local basePosition = getBasePosition() < local angleRange = self.targetAngleRange * math.pi / 180; < < --Check if target angle is in angle range < local targetVector = world.distance(targetPosition, basePosition) < local targetAngle = directionTransformAngle(math.atan(targetVector[2], targetVector[1])) < if targetAngle < -angleRange or targetAngle > angleRange then < return false < end < < --Check for blocks in the way < local blocks = world.collisionBlocksAlongLine(basePosition, targetPosition, {"Null", "Block", "Dynamic"}, 1) < if #blocks > 0 then < return false < end < < return true < end < --- > self.rotationSpeed = util.toRadians(entity.configParameter("rotationSpeed")) > self.offAngle = util.toRadians(entity.configParameter("offAngle", -30)) 112,135c13,28 < function validTarget(targetId) < local selfId = entity.id() < < --Does it exist? < if world.entityExists(targetId) == false then < return false < end < < --Is it dead yet < local targetHealth = world.entityHealth(targetId) < if targetHealth ~= nil and targetHealth[1] <= 0 then < return false < end < < --Is it in range and visible < local direction = entity.direction() < local distance = world.magnitude(targetPos(targetId), getBasePosition()) < < if distance < self.targetRange and distance > self.minTargetRange and visibleTarget(targetId) then < return true < else < return false < end < end --- > -- Targeting > self.targetQueryRange = entity.configParameter("targetQueryRange") > self.targetMinRange = entity.configParameter("targetMinRange") > self.targetMaxRange = entity.configParameter("targetMaxRange") > self.targetAngleRange = util.toRadians(entity.configParameter("targetAngleRange")) > > -- Energy > storage.energy = storage.energy or 0 > self.regenBlockTimer = 0 > self.energyRegen = entity.configParameter("energyRegen") > self.maxEnergy = entity.configParameter("maxEnergy") > self.energyRegenBlock = entity.configParameter("energyRegenBlock") > > self.energyBarOffset = entity.configParameter("energyBarOffset") > self.verticalScaling = entity.configParameter("verticalScaling") > entity.translateTransformationGroup("energy", self.energyBarOffset) 137c30,31 < -------------------------------------------------------------------------------- --- > -- Initialize turret > entity.setInteractive(false) 139,145c33,34 < function directionTransformAngle(angle) < local direction = 1 < if entity.direction() < 0 then < direction = -1 < end < local angleVec = {direction * math.cos(angle), math.sin(angle)} < return math.atan(angleVec[2], angleVec[1]) --- > self.state = FSM:new() > self.state:set(offState) 148c37,38 < -------------------------------------------------------------------------------- --- > function update(dt) > self.state:update(dt) 150,162c40 < function potentialTargets() < --Gets all valid npc targets + all monsters < local npcIds = world.entityQuery(getBasePosition(), self.targetRange, { includedTypes = {"npc"} }) < local monsterIds = world.entityQuery(getBasePosition(), self.targetRange, { includedTypes = {"monster"} }) < < for i,npcId in ipairs(npcIds) do < if entity.isValidTarget(npcId) then < monsterIds[#monsterIds+1] = npcId < end < end < < return monsterIds < end --- > world.debugPoint(firePosition(), "green") 164,180c42,45 < -------------------------------------------------------------------------------- < function findTarget() < local selfId = entity.id() < < local minDistance = self.targetRange < local winnerEntity = 0 < < local entityIds = potentialTargets() < < for i, entityId in ipairs(entityIds) do < < local distance = world.magnitude(getBasePosition(), targetPos(entityId)) < < if validTarget(entityId) then < winnerEntity = entityId < minDistance = distance < end --- > if storage.energy == 0 then > self.blockEnergyUsage = true > elseif storage.energy == self.maxEnergy then > self.blockEnergyUsage = false 182,190d46 < < return winnerEntity < end < < -------------------------------------------------------------------------------- < < function setActive(active) < self.active = active < end 192,194c48,49 < function isActive() < if entity.isInboundNodeConnected(0) and not entity.getInboundNodeLevel(0) then < return false --- > if self.regenBlockTimer > 0 then > self.regenBlockTimer = math.max(0, self.regenBlockTimer - script.updateDt()) 196c51 < return self.gunStats ~= false --- > storage.energy = math.min(self.maxEnergy, storage.energy + self.energyRegen * script.updateDt()) 198d52 < end 200,201c54,55 < function setEnergy(energy) < storage.energy = energy --- > local ratio = storage.energy / self.maxEnergy > local animationState = "full" 203,204c57,66 < local level = self.gunStats and self.gunStats.level or 1 < self.maxEnergy = self.energy.baseEnergy + root.evalFunction("npcLevelEnergyIncrease", level) * self.energy.baseEnergy --- > if ratio <= 0.75 then animationState = "high" end > if ratio <= 0.5 then animationState = "medium" end > if ratio <= 0.25 then animationState = "low" end > if ratio <= 0 then animationState = "none" end > > local scale = self.verticalScaling and {1, ratio * 11} or {ratio * 11, 1} > > entity.resetTransformationGroup("energy") > entity.scaleTransformationGroup("energy", scale) > entity.translateTransformationGroup("energy", self.energyBarOffset) 206,217d67 < if storage.energy > self.maxEnergy then storage.energy = self.maxEnergy end < < local animationState = "full" < < if energy / self.maxEnergy <= 0.75 then animationState = "high" end < if energy / self.maxEnergy <= 0.5 then animationState = "medium" end < if energy / self.maxEnergy <= 0.25 then animationState = "low" end < if energy / self.maxEnergy <= 0 then animationState = "none" end < < entity.scaleGroup("energy", {energy / self.maxEnergy * 11, 1}) < entity.scaleGroup("energyv", {1, energy / self.maxEnergy * 11}) < 221,228c71,72 < function consumeEnergy(amount) < if storage.energy - amount < 0 then < return false < end < < setEnergy(storage.energy - amount) < return true < end --- > ---------------------------------------------------------------------------------------------------------- > -- States 230,234c74,76 < function regenEnergy() < local energyRegenFactor = self.energy.energyRegen / self.energy.baseEnergy < local energy = storage.energy + energyRegenFactor * self.maxEnergy * script.updateDt() < setEnergy(energy) < end --- > function offState() > entity.setAnimationState("attack", "dead") > entity.playSound("powerDown") 236c78,79 < -------------------------------------------------------------------------------- --- > while true do > entity.rotateGroup("gun", self.offAngle) 238,244c81,83 < function targetPos(entityId) < local position = world.entityPosition(entityId) < --Until I can get the center of a target collision poly < position[1] = position[1] + self.targetOffset[1] < position[2] = position[2] + self.targetOffset[2] < return position < end --- > if active() then break end > coroutine.yield() > end 246,248c85 < function dotProduct(firstVector, secondVector) < return firstVector[1] * secondVector[1] + firstVector[2] * secondVector[2] < end --- > entity.playSound("powerUp") 250,273c87 < function predictedPosition(targetPosition, basePosition, targetVel, bulletSpeed) < local targetVector = world.distance(targetPosition, basePosition) < local bs = bulletSpeed < local dotVectorVel = dotProduct(targetVector, targetVel) < local vector2 = dotProduct(targetVector, targetVector) < local vel2 = dotProduct(targetVel, targetVel) < < --If the answer is a complex number, for the love of god don't continue < if ((2*dotVectorVel) * (2*dotVectorVel)) - (4 * (vel2 - bs * bs) * vector2) < 0 then < return targetPosition < end < < local timesToHit = {} --Gets two values from solving quadratic equation < --Quadratic formula up in dis < timesToHit[1] = (-2 * dotVectorVel + math.sqrt((2*dotVectorVel) * (2*dotVectorVel) - 4*(vel2 - bs * bs) * vector2)) / (2 * (vel2 - bs * bs)) < timesToHit[2] = (-2 * dotVectorVel - math.sqrt((2*dotVectorVel) * (2*dotVectorVel) - 4*(vel2 - bs * bs) * vector2)) / (2 * (vel2 - bs * bs)) < < --Find the nearest lowest positive solution < local timeToHit = 0 < if timesToHit[1] > 0 and (timesToHit[1] <= timesToHit[2] or timesToHit[2] < 0) then timeToHit = timesToHit[1] end < if timesToHit[2] > 0 and (timesToHit[2] <= timesToHit[1] or timesToHit[1] < 0) then timeToHit = timesToHit[2] end < < local predictedPos = vec2.add(targetPosition, vec2.mul(targetVel, timeToHit)) < return predictedPos --- > self.state:set(scanState) 276c90,93 < -------------------------------------------------------------------------------- --- > function scanState() > entity.setAnimationState("attack", "idle") > util.wait(0.5) > entity.playSound("scan") 278c95 < deadState = {} --- > local timer = 0 280,284c97,98 < function deadState.enter() < if not isActive() then < return {} < end < end --- > local scanInterval = entity.configParameter("scanInterval") > local scanAngle = util.toRadians(entity.configParameter("scanAngle")) 286,290c100,106 < function deadState.enteringState(stateData) < entity.setAnimationState("movement", "dead") < local rotationRange = self.rotationRange * math.pi / 180; < entity.rotateGroup("gun", -rotationRange) < entity.setAllOutboundNodes(false) --- > local scan = coroutine.wrap(function() > while true do > local target = findTarget() > if target then return self.state:set(fireState, target) end > util.wait(1.0) > end > end) 292,293c108,111 < setEnergy(0) < end --- > while true do > timer = timer + script.updateDt() / scanInterval > if timer > 1 then timer = 0 end > entity.rotateGroup("gun", scanAngle * math.sin(timer * math.pi*2)) 295,297c113 < function deadState.update(dt, stateData) < local rotationRange = self.rotationRange * math.pi / 180; < entity.rotateGroup("gun", -rotationRange) --- > scan() 299,300c115,116 < if isActive() then < return true --- > if not active() then break end > coroutine.yield() 303,308c119 < return false < end < < function deadState.leavingState(stateData) < entity.playSound("powerUp") < self.state.pickState() --- > self.state:set(offState) 311,312c122,124 < -------------------------------------------------------------------------------- < scanState = {} --- > function fireState(targetId) > entity.setAnimationState("attack", "attack") > entity.playSound("foundTarget") 314,322c126,127 < function scanState.enter() < if isActive() then < return { < timer = 0, < targetCooldown = self.targetCooldown, < targetId = nil < } < end < end --- > local maxFireAngle = util.toRadians(entity.configParameter("maxFireAngle")) > local fire = coroutine.wrap(autoFire) 324,327c129,130 < function scanState.enteringState(stateData) < entity.setAnimationState("movement", "idle") < entity.setAllOutboundNodes(false) < end --- > while true do > if not active() then return self.state:set(offState) end 329,334c132 < function scanState.update(dt, stateData) < if not isActive() then < return true < end < < regenEnergy() --- > if not world.entityExists(targetId) then break end 336,342c134,137 < scanState.rotateGun(stateData) < < local targetEntity = scanState.scanForTargets(stateData) < if targetEntity then < stateData.targetId = targetEntity < return true < end --- > local targetPosition = world.entityPosition(targetId) > local toTarget = world.distance(targetPosition, self.basePosition) > local targetDistance = world.magnitude(toTarget) > local targetAngle = math.atan(toTarget[2], entity.direction() * toTarget[1]) 344,345c139,140 < return false < end --- > if targetDistance > self.targetMaxRange or targetDistance < self.targetMinRange or world.lineTileCollision(self.basePosition, targetPosition) then break end > if math.abs(targetAngle) > self.targetAngleRange then break end 347,356c142 < function scanState.rotateGun(stateData) < local rotationRange = self.rotationRange * math.pi / 180; < local angle = rotationRange * math.sin(stateData.timer / self.rotationTime * math.pi * 2) < entity.rotateGroup("gun", angle) < < stateData.timer = stateData.timer + script.updateDt() < if stateData.timer > self.rotationTime then < stateData.timer = 0 < end < end --- > entity.rotateGroup("gun", targetAngle) 358,363c144,146 < function scanState.scanForTargets(stateData) < --Look for targets < if stateData.targetCooldown <= 0 then < local targetEntity = findTarget() < if targetEntity ~= 0 then < return targetEntity --- > local rotation = entity.currentRotationAngle("gun") > if math.abs(util.angleDiff(targetAngle, rotation)) < maxFireAngle then > fire() 365,370c148 < stateData.targetCooldown = self.targetCooldown < end < < stateData.targetCooldown = stateData.targetCooldown - script.updateDt() < if stateData.targetCooldown < 0 then < stateData.targetCooldown = 0 --- > coroutine.yield() 372,383d149 < return false < end < < function scanState.leavingState(stateData) < if storage.energy <= 0 or isActive() == false then < entity.playSound("powerDown") < end < self.state.pickState(stateData.targetId) < end < < -------------------------------------------------------------------------------- < attackState = {} 385,394c151 < function attackState.enterWith(targetId) < if targetId ~= nil and world.entityPosition(targetId) ~= nil then < return { < fireTimer = 0, < targetId = targetId, < lastPosition = targetPos(targetId), < letGoTimer = 0 < } < end < end --- > util.wait(1.0) 396,400c153 < function attackState.enteringState(stateData) < entity.playSound("foundTarget") < < entity.setAnimationState("movement", "attack") < entity.setAllOutboundNodes(true) --- > self.state:set(scanState) 403,431c156,157 < function attackState.update(dt, stateData) < if not isActive() then < return true < end < < regenEnergy() < < local haveTarget = attackState.haveValidTarget(stateData) < < if haveTarget then < < attackState.followTarget(stateData) < < if stateData.fireTimer >= self.gunStats.fireTime and consumeEnergy(self.gunStats.energyPerShot) then < < attackState.fire(stateData) < < if self.gunStats.fireSound then < entity.setSoundPool("fire", {self.gunStats.fireSound}) < end < entity.playSound("fire") < < stateData.fireTimer = stateData.fireTimer - self.gunStats.fireTime < end < < stateData.fireTimer = stateData.fireTimer + dt < elseif stateData.letGoTimer > self.letGoCooldown or world.entityPosition == nil then < return true < end --- > ---------------------------------------------------------------------------------------------------------- > -- Helping functions, not states 433c159,163 < return false --- > function consumeEnergy(amount) > if storage.energy <= 0 or self.blockEnergyUsage then return false end > storage.energy = storage.energy - amount > self.regenBlockTimer = self.energyRegenBlock > return true 436,454c166,168 < function attackState.fire(stateData) < local direction = entity.direction() < < local aimAngle = entity.currentRotationAngle("gun") < < local tipPosition = attackState.tipPosition(stateData, aimAngle) < local aimVector = {direction * math.cos(aimAngle), math.sin(aimAngle)} < < local count = self.gunStats.projectileCount or 1 < local separation = self.gunStats.projectileSeparation < local totalSpread = separation * (count - 1) < local inaccuracy = self.gunStats.inaccuracy < < for i = 0, count - 1 do < local angleOffset = (math.random() * inaccuracy * 2 - inaccuracy) < if count > 1 then < angleOffset = angleOffset + (totalSpread * (i / (count - 1))) - (totalSpread / 2) < end < world.spawnProjectile(self.gunStats.projectileType, tipPosition, entity.id(), vec2.rotate(aimVector, angleOffset), false, {power = self.gunStats.damagePerShot / count, speed = self.gunStats.speed}) --- > function active() > if entity.isInboundNodeConnected(0) then > return entity.getInboundNodeLevel(0) 456d169 < end 458,464c171,172 < function attackState.haveValidTarget(stateData) < if validTarget(stateData.targetId) then < stateData.letGoTimer = 0 < return true < end < stateData.letGoTimer = stateData.letGoTimer + script.updateDt() < return false --- > storage.active = storage.active ~= nil and storage.active or true > return storage.active 467,472c175,178 < function attackState.tipPosition(stateData, aimAngle) < local tipOffset = {self.tipOffset[1], self.tipOffset[2]} < tipOffset = vec2.rotate(tipOffset, aimAngle) < tipOffset[1] = entity.direction() * tipOffset[1] < < return vec2.add(getBasePosition(), tipOffset) --- > function firePosition() > local animationPosition = vec2.div(entity.configParameter("animationPosition"), 8) > local fireOffset = vec2.add(animationPosition, entity.partPoint("gun", "projectileSource")) > return vec2.add(entity.position(), fireOffset) 475,480c181,188 < function attackState.targetVelocity(stateData) < local targetPosition = targetPos(stateData.targetId) < local deltaPos = {targetPosition[1] - stateData.lastPosition[1], targetPosition[2] - stateData.lastPosition[2]} < stateData.lastPosition = targetPosition < return vec2.div(deltaPos, script.updateDt()) < end --- > -- Coroutine > function autoFire() > local level = math.max(1.0, world.threatLevel()) > local power = entity.configParameter("power", 2) > power = root.evalFunction("monsterLevelPowerMultiplier", level) * power > local fireTime = entity.configParameter("fireTime", 0.1) > local projectileParameters = entity.configParameter("projectileParameters", {}) > local energyUsage = entity.configParameter("energyUsage") 482,493c190,191 < function attackState.followTarget(stateData) < --Make it follow the target's predicted position < local targetVelocity = attackState.targetVelocity(stateData) < targetVelocity[2] = math.max(math.min(targetVelocity[2], self.maxTrackingYVel), -self.maxTrackingYVel) --Don't track the Y velocity too much because of jumping < local predictedPos = predictedPosition(targetPos(stateData.targetId), getBasePosition(), targetVelocity, self.gunStats.speed) < < local targetVector = world.distance(predictedPos, getBasePosition()) < angle = directionTransformAngle(math.atan(targetVector[2], targetVector[1])) < angle = math.max(math.min(angle, self.targetAngleRange), -self.targetAngleRange) < < entity.rotateGroup("gun", angle) < end --- > while true do > while not consumeEnergy(energyUsage) do coroutine.yield() end 495,499c193,197 < function attackState.leavingState(stateData) < if storage.energy <= 0 or isActive() == false then < entity.playSound("powerDown") < else < entity.playSound("scan") --- > local rotation = entity.currentRotationAngle("gun") > local aimVector = {entity.direction() * math.cos(rotation), math.sin(rotation)} > world.spawnProjectile("standardbullet", firePosition(), entity.id(), aimVector, false, projectileParameters) > entity.playSound("fire") > util.wait(fireTime) 501d198 < self.state.pickState() 502a200,212 > > -- Coroutine > function findTarget() > local nearEntities = world.entityQuery(self.basePosition, self.targetQueryRange, { includedTypes = { "monster", "npc", "player" } }) > return util.find(nearEntities, function(entityId) > local targetPosition = world.entityPosition(entityId) > if not entity.isValidTarget(entityId) or world.lineTileCollision(self.basePosition, targetPosition) then return false end > > local toTarget = world.distance(targetPosition, self.basePosition) > local targetAngle = math.atan(toTarget[2], entity.direction() * toTarget[1]) > return world.magnitude(toTarget) > self.targetMinRange and math.abs(targetAngle) < self.targetAngleRange > end) > end \ No newline at end of file objects\wired\standingturret\standingturret.object 9c9 < "slotCount" : 1, --- > "slotCount" : 0, 38c38 < "imageLayers" : [ { "image" : "turretstand.png:bottom" }, { "image" : "turretgun.png:dead" } ], --- > "imageLayers" : [ { "image" : "turretstand.png:bottom" }, { "image" : "turretgun.png:dead", "position": [4, 12] } ], 48,50c48 < "energybottom" : "energy.png", < "energytop" : "emptyenergy.png", < "energyside" : "emptyenergy.png" --- > "energy" : "energy.png" 52a51 > "animationCenterLine" : 0, 54c53,55 < "baseOffset" : [0, 2] --- > "baseOffset" : [0, 2], > "energyBarOffset" : [0.375, -1.5], > "verticalScaling" : false 60c61 < "imageLayers" : [ { "image" : "turretstand.png:top" }, { "image" : "turretgun.png:dead" } ], --- > "imageLayers" : [ { "image" : "turretstand.png:top" }, { "image" : "turretgun.png:dead", "position": [4, 12] } ], 70,72c71 < "energybottom" : "emptyenergy.png", < "energytop" : "energy.png", < "energyside" : "emptyenergy.png" --- > "energy" : "energy.png" 74a74 > "animationCenterLine" : 0, 76c76,78 < "baseOffset" : [0, -1] --- > "baseOffset" : [0, -1], > "energyBarOffset" : [0.375, 1.375], > "verticalScaling" : false 82c84 < "imageLayers" : [ { "image" : "turretstand.png:left" }, { "image" : "turretgun.png:dead" } ], --- > "imageLayers" : [ { "image" : "turretstand.png:left" }, { "image" : "turretgun.png:dead", "position": [4, 12] } ], 94,96c96 < "energybottom" : "emptyenergy.png", < "energytop" : "emptyenergy.png", < "energyside" : "energy.png" --- > "energy" : "energy.png" 100c100,102 < "baseOffset" : [2, 2] --- > "baseOffset" : [2, 2], > "energyBarOffset" : [-1.5, -0.625], > "verticalScaling" : true 114c116,117 < "imageLayers" : [ { "image" : "turretstand.png:left?flipx" }, { "image" : "turretgun.png:dead?flipx" } ], --- > "imageLayers" : [ { "image" : "turretstand.png:left" }, { "image" : "turretgun.png:dead", "position": [4, 12] } ], > "flipImages" : true, 119,121c122 < "energybottom" : "emptyenergy.png", < "energytop" : "emptyenergy.png", < "energyside" : "energy.png" --- > "energy" : "energy.png" 123c124 < "animationPosition" : [-8, 16], --- > "animationPosition" : [-10, 16], 125c126,128 < "baseOffset" : [-1, 2] --- > "baseOffset" : [-1, 2], > "energyBarOffset" : [-1.5, -0.625], > "verticalScaling" : true 150c153 < "tipOffset" : [2.5, 0], --- > "rotationSpeed" : 25, 152,153c155,156 < "rotationTime" : 5, < "rotationRange" : 30, --- > "tipOffset" : [2.5, 0], > "offAngle" : -30, 155,167c158,175 < "minTargetRange" : 2.5, < "targetRange" : 50, < "targetAngleRange" : 40, < "targetOffset" : [0, -0.5], < "letGoCooldown" : 0.5, < "targetCooldown" : 0.5, < < "maxTrackingYVel" : 2.5, < < "energy" : { < "baseEnergy" : 100, < "energyRegen" : 5 < }, --- > "scanInterval" : 6, > "scanAngle" : 30, > "scanRange" : 35, > > "targetQueryRange" : 35, > "targetMinRange" : 2.5, > "targetMaxRange" : 50, > "targetAngleRange" : 45, > > "maxFireAngle" : 5, > > "energyUsage" : 4, > "power" : 1, > "fireTime" : 0.1, > > "maxEnergy" : 100, > "energyRegen" : 25, > "energyRegenBlock" : 1.0, objects\wired\standingturret\turretgun.frames 3c3 < "size" : [36, 20], --- > "size" : [32, 7], projectiles\boss\spiderboss\acidsweep.projectile 14c14 < "power" : 5.0, --- > "power" : 2.0, projectiles\boss\spiderboss\spiderslam.projectile 5c5 < "power" : 40, --- > "power" : 12, recipes\craftingtable\dyes\browndye.recipe 3,4c3,5 < { "item" : "mud", "count" : 5 }, < { "item" : "bottle", "count" : 1 } --- > { "item" : "reddye", "count" : 1 }, > { "item" : "yellowdye", "count" : 1 }, > { "item" : "bluedye", "count" : 1 } 8c9 < "count" : 1 --- > "count" : 3 scripts\util.lua 288a289,314 > function util.predictedPosition(target, source, targetVelocity, projectileSpeed) > local targetVector = world.distance(target, source) > local bs = projectileSpeed > local dotVectorVel = vec2.dot(targetVector, targetVelocity) > local vector2 = vec2.dot(targetVector, targetVector) > local vel2 = vec2.dot(targetVelocity, targetVelocity) > > --If the answer is a complex number, for the love of god don't continue > if ((2*dotVectorVel) * (2*dotVectorVel)) - (4 * (vel2 - bs * bs) * vector2) < 0 then > return target > end > > local timesToHit = {} --Gets two values from solving quadratic equation > --Quadratic formula up in dis > timesToHit[1] = (-2 * dotVectorVel + math.sqrt((2*dotVectorVel) * (2*dotVectorVel) - 4*(vel2 - bs * bs) * vector2)) / (2 * (vel2 - bs * bs)) > timesToHit[2] = (-2 * dotVectorVel - math.sqrt((2*dotVectorVel) * (2*dotVectorVel) - 4*(vel2 - bs * bs) * vector2)) / (2 * (vel2 - bs * bs)) > > --Find the nearest lowest positive solution > local timeToHit = 0 > if timesToHit[1] > 0 and (timesToHit[1] <= timesToHit[2] or timesToHit[2] < 0) then timeToHit = timesToHit[1] end > if timesToHit[2] > 0 and (timesToHit[2] <= timesToHit[1] or timesToHit[1] < 0) then timeToHit = timesToHit[2] end > > local predictedPos = vec2.add(target, vec2.mul(targetVelocity, timeToHit)) > return predictedPos > end > 583a610,627 > > -- The very most basic state machine > -- Allows setting a single coroutine as an active state > FSM = {} > function FSM:new() > local instance = {} > setmetatable(instance, { __index = self }) > return instance > end > > function FSM:set(state, ...) > self.state = coroutine.wrap(state) > self.state(...) > end > > function FSM:update(dt) > return self.state and self.state() > end \ No newline at end of file stats\effects\bouncy\bouncy.lua 6c6 < effect.addStatModifierGroup({{stat = "fallDamageMultiplier", basePercentage = -1}}) --- > effect.addStatModifierGroup({{stat = "fallDamageMultiplier", effectiveMultiplier = 0}}) stats\effects\nofalldamage\nofalldamage.lua 2c2 < effect.addStatModifierGroup({{stat = "fallDamageMultiplier", basePercentage = -1}}) --- > effect.addStatModifierGroup({{stat = "fallDamageMultiplier", effectiveMultiplier = 0}}) stats\effects\rage\rage.lua 9c9 < effect.addStatModifierGroup({{stat = "powerMultiplier", basePercentage = self.powerModifier}}) --- > effect.addStatModifierGroup({{stat = "powerMultiplier", amount = self.powerModifier}}) stats\effects\vulnerability\vulnerability.lua 3c3 < {stat = "protection", basePercentage = effect.configParameter("protectionModifier", -0.99)} --- > {stat = "protection", effectiveMultiplier = effect.configParameter("protectionModifier", 0.01)} stats\effects\vulnerability\vulnerability.statuseffect 4c4 < "protectionModifier" : -0.99 --- > "protectionModifier" : 0.01 tech\bounce\bounce.lua 2c2 < self.active = false --- > deactivate() 25,28c25 < status.setPersistentEffects("bounceTech", {{stat = "fallDamageMultiplier", basePercentage = -1}}) < self.active = true < tech.setAnimationState("bouncing", "on") < tech.playSound("activate") --- > activate() 30,32c27 < status.clearPersistentEffects("bounceTech") < self.active = false < tech.setAnimationState("bouncing", "off") --- > deactivate() 45a41,53 > > function activate() > status.setPersistentEffects("bounceTech", {{stat = "fallDamageMultiplier", effectiveMultiplier = 0}}) > self.active = true > tech.setAnimationState("bouncing", "on") > tech.playSound("activate") > end > > function deactivate() > status.clearPersistentEffects("bounceTech") > self.active = false > tech.setAnimationState("bouncing", "off") > end \ No newline at end of file vehicles\hoverbike\hoverbikegreen.vehicle 68c68 < "maxAngle" : 40, --- > "maxAngle" : 60, 160c160 < "collisionPoly" : [[-4.0, -1.5], [4.0, -1.5], [4.0, 2], [-4.0, 2]], --- > "collisionPoly" : [[-4.0, 0.5], [-2.0, -1.5], [2.0, -1.5], [4.0, 0.5]], 163c163,165 < "ignorePlatformCollision" : true --- > "ignorePlatformCollision" : true, > "gravityEnabled" : true, > "collisionEnabled" : true 167,168c169,172 < "collisionPoly" : [[-4.0, -1.5], [4.0, -1.5], [4.0, 2], [0.0, 3.0], [-4.0, 2]], < "mass" : 5 --- > "collisionPoly" : [[-4.0, 0.5], [-2.0, -1.5], [2.0, -1.5], [4.0, 0.5]], > "mass" : 4, > "gravityEnabled" : true, > "collisionEnabled" : true 170,172d173 < < < vehicles\hoverbike\hoverbikered.vehicle 67c67 < "maxAngle" : 40, --- > "maxAngle" : 60, 80c80 < "maxHealth" : 100, --- > "maxHealth" : 1000, 160c160 < "collisionPoly" : [[-4.0, -1.5], [4.0, -1.5], [4.0, 2], [-4.0, 2]], --- > "collisionPoly" : [[-4.0, 0.5], [-2.0, -1.5], [2.0, -1.5], [4.0, 0.5]], 163c163,165 < "ignorePlatformCollision" : true --- > "ignorePlatformCollision" : true, > "gravityEnabled" : true, > "collisionEnabled" : true 167,168c169,172 < "collisionPoly" : [[-4.0, -1.5], [4.0, -1.5], [4.0, 2], [0.0, 3.0], [-4.0, 2]], < "mass" : 5 --- > "collisionPoly" : [[-4.0, 0.5], [-2.0, -1.5], [2.0, -1.5], [4.0, 0.5]], > "mass" : 4, > "gravityEnabled" : true, > "collisionEnabled" : true 170,172d173 < < < versioning\npcentity_5_6.lua 9c9 < amount = root.evalFunction("npcLevelPowerMultiplier", level) --- > amount = root.evalFunction("npcLevelPowerMultiplierModifier", level) 13c13 < basePercentage = root.evalFunction("npcLevelProtectionIncrease", level) --- > baseMultiplier = root.evalFunction("npcLevelProtectionMultiplier", level) 17c17 < basePercentage = root.evalFunction("npcLevelHealthIncrease", level) --- > baseMultiplier = root.evalFunction("npcLevelHealthMultiplier", level) 21c21 < basePercentage = root.evalFunction("npcLevelEnergyIncrease", level) --- > baseMultiplier = root.evalFunction("npcLevelEnergyMultiplier", level)