FILES ----- [NEW] animations\elementalaura\fireaura\fireaura.animation [NEW] animations\elementalaura\fireaura\fireaura.frames [NEW] animations\elementalaura\fireaura\fireaura.png animations\elementalaura\poisonaura\poisonaura.animation animations\music\music.animation behaviors\monsters\boss\spiderboss\acidspray.behavior behaviors\monsters\boss\spiderboss\hurt.behavior behaviors\monsters\boss\spiderboss\main.behavior behaviors\monsters\boss\spiderboss\return.behavior behaviors\monsters\boss\spiderboss\slam.behavior behaviors\monsters\boss\spiderboss\sweep.behavior behaviors\monsters\modular\basemonster.behavior behaviors\monsters\modular\actions\aggrohop.behavior [NEW] behaviors\monsters\modular\actions\animate.behavior behaviors\monsters\modular\actions\charge.behavior behaviors\monsters\modular\actions\fire.behavior behaviors\monsters\modular\actions\invulnerable.behavior behaviors\monsters\modular\movement\crawlapproach.behavior behaviors\monsters\modular\movement\crawlidle.behavior behaviors\monsters\modular\movement\crawlwander.behavior behaviors\monsters\modular\movement\jump.behavior [NEW] behaviors\monsters\modular\movement\nudge.behavior [NEW] behaviors\monsters\modular\movement\spawnmonster.behavior behaviors\monsters\modular\movement\walkapproach.behavior behaviors\monsters\modular\movement\walkwander.behavior behaviors\npc\idle.behavior dialog\quest.config [NEW] dungeons\microdungeons\underground\underground1b\underground1a_tunnelweakbackslope2.json [NEW] dungeons\microdungeons\underground\underground1b\underground1a_tunnelweakforwardslope2.json dungeons\microdungeons\underground\underground1b\underground1bmicrodungeons.dungeon [NEW] dungeons\microdungeons\underground\underground1b\underground1b_open2.json [NEW] dungeons\microdungeons\underground\underground1b\underground1b_tunnel2.json [NEW] dungeons\microdungeons\underground\underground1b\underground1b_tunnelbackslope2.json [NEW] dungeons\microdungeons\underground\underground1b\underground1b_tunnelforwardslope2.json [NEW] dungeons\microdungeons\underground\underground1b\underground1b_tunnelweakbackslope2.json [NEW] dungeons\microdungeons\underground\underground1b\underground1b_tunnelweakforwardslope2.json [NEW] effects\icepillar.effectsource interface\quests\newquest\footer.png interface\quests\newquest\shine.png interface\quests\questcomplete2\shine.png [NEW] interface\quests\questfailed\shine.png interface\quests\questlog\entry_bg.png interface\quests\questlog\entry_selected.png interface\windowconfig\newquest.config interface\windowconfig\newquestshort.config interface\windowconfig\questcomplete.config interface\windowconfig\questfailed.config interface\windowconfig\questlog.config items\active\unsorted\translocator\translocator.png items\active\unsorted\translocator\translocatordisc.png [NEW] items\active\weapons\fist\fist.png [NEW] items\active\weapons\fist\fisticon.png items\active\weapons\fist\fistweapon.lua [NEW] items\active\weapons\fist\gauntlet.activeitem items\active\weapons\fist\punch.lua [NEW] items\active\weapons\fist\combofinishers\powerpunch.combofinisher [NEW] items\active\weapons\fist\combofinishers\powerpunch.lua items\active\weapons\melee\altabilities\broadsword\giantsword\electricblade.png items\active\weapons\melee\altabilities\broadsword\giantsword\fireblade.png items\active\weapons\melee\altabilities\broadsword\giantsword\giantsword.altability items\active\weapons\melee\altabilities\broadsword\giantsword\iceblade.png items\active\weapons\melee\altabilities\broadsword\giantsword\poisonblade.png items\active\weapons\melee\altabilities\broadsword\parry\parry.altability items\active\weapons\melee\altabilities\broadsword\parry\parry.lua items\active\weapons\melee\altabilities\broadsword\spinslash\spinslash.altability items\active\weapons\melee\altabilities\broadsword\spinslash\spinslash.lua items\active\weapons\melee\altabilities\broadsword\spinslash\spinswoosh.png items\active\weapons\melee\altabilities\broadsword\spinslash\superspinslash.altability [NEW] items\active\weapons\melee\altabilities\broadsword\spinslash\superspinslash.lua items\active\weapons\melee\altabilities\hammer\elementalaura\elementalaura.altability items\active\weapons\melee\altabilities\hammer\elementalpillar\elementalpillar.altability items\active\weapons\melee\altabilities\hammer\shockwave\shockwave.altability items\active\weapons\ranged\remotegrenadelauncher\remotegrenadelauncher.animation items\active\weapons\ranged\remotegrenadelauncher\remotegrenadelauncher.png [NEW] items\buildscripts\buildfist.lua monsters\bmonster.lua monsters\boss\spiderboss\spiderboss.animation monsters\crawlers\crustoise\crustoise.monstertype monsters\crawlers\triplod\triplod.monstertype monsters\flyers\monopus\monopus.animation monsters\flyers\monopus\monopus.monstertype monsters\flyers\monopus\monopus.png [NEW] monsters\flyers\pteropod\body.monsterpart [NEW] monsters\flyers\pteropod\pteropod.animation [NEW] monsters\flyers\pteropod\pteropod.frames [NEW] monsters\flyers\pteropod\pteropod.monstertype [NEW] monsters\flyers\pteropod\pteropod.png [NEW] monsters\walkers\adultpoptop\adultpoptop.animation [NEW] monsters\walkers\adultpoptop\adultpoptop.frames [NEW] monsters\walkers\adultpoptop\adultpoptop.monstertype [NEW] monsters\walkers\adultpoptop\adultpoptop.png [NEW] monsters\walkers\adultpoptop\body.monsterpart monsters\walkers\bulbop\bulbop.animation monsters\walkers\fennix\fennix.monstertype monsters\walkers\hypnare\hypnare.animation [NEW] monsters\walkers\kingnutmidgeling\body.monsterpart [NEW] monsters\walkers\kingnutmidgeling\kingnutmidgeling.animation [NEW] monsters\walkers\kingnutmidgeling\kingnutmidgeling.frames [NEW] monsters\walkers\kingnutmidgeling\kingnutmidgeling.monstertype [NEW] monsters\walkers\kingnutmidgeling\kingnutmidgeling.png monsters\walkers\nutmidge\nutmidge.animation monsters\walkers\nutmidge\nutmidge.monstertype [NEW] monsters\walkers\nutmidgeling\body.monsterpart [NEW] monsters\walkers\nutmidgeling\nutmidgeling.animation [NEW] monsters\walkers\nutmidgeling\nutmidgeling.frames [NEW] monsters\walkers\nutmidgeling\nutmidgeling.monstertype [NEW] monsters\walkers\nutmidgeling\nutmidgeling.png monsters\walkers\orbide\orbide.animation monsters\walkers\orbide\orbide.monstertype monsters\walkers\peblit\peblit.animation monsters\walkers\pipkin\pipkin.animation monsters\walkers\poptop\poptop.animation monsters\walkers\poptop\poptop.frames monsters\walkers\poptop\poptop.monstertype monsters\walkers\poptop\poptop.png npcs\default_reactions.config objects\colony\colonydeed\colonydeed.lua objects\colony\colonydeed\scanning.lua particles\music.particle [NEW] particles\elementalaura\fireaura\fireaura.particle projectiles\explosions\burstexplosion\electricburstexplosionfreeze.config projectiles\explosions\burstexplosion\fireburstexplosionfreeze.config projectiles\explosions\burstexplosion\iceburstexplosionfreeze.config projectiles\explosions\burstexplosion\poisonburstexplosionfreeze.config projectiles\explosions\regularexplosion2\electricexplosionfreeze.config projectiles\explosions\regularexplosion2\electricexplosionfreezestatus.config projectiles\explosions\regularexplosion2\electricexplosionfreezeuniversal.config projectiles\explosions\regularexplosion2\fireexplosionfreeze.config projectiles\explosions\regularexplosion2\fireexplosionfreezestatus.config projectiles\explosions\regularexplosion2\fireexplosionfreezeuniversal.config projectiles\explosions\regularexplosion2\iceexplosionfreeze.config projectiles\explosions\regularexplosion2\iceexplosionfreezestatus.config projectiles\explosions\regularexplosion2\iceexplosionfreezeuniversal.config projectiles\explosions\regularexplosion2\poisonexplosionfreeze.config projectiles\explosions\regularexplosion2\poisonexplosionfreezestatus.config projectiles\explosions\regularexplosion2\poisonexplosionfreezeuniversal.config projectiles\explosions\smallregularexplosion\smallregularexplosion.config projectiles\explosions\vsmallregularexplosion\vsmallregularexplosion.config projectiles\explosions\vsmallregularexplosion\vsmallregularexplosionfreeze.config projectiles\explosions\vsmallregularexplosion\vsmallregularexplosionnodamage.config projectiles\guns\unsorted\flamethrower\flamethrower.projectile projectiles\guns\unsorted\icethrower\icethrower.projectile projectiles\guns\unsorted\lightningthrower\lightningthrower.projectile projectiles\guns\unsorted\poisonthrower\poisonthrower.projectile projectiles\guns\unsorted\pollenpumpgas\pollenpumpgas.projectile projectiles\npcs\blueflame\blueflame.projectile projectiles\npcs\darkgas\darkgas.projectile projectiles\npcs\gas\gas.projectile projectiles\pillar\icepillar.png projectiles\pillar\icepillar.projectile projectiles\remotegrenade\remotestickygrenade.png projectiles\throwable\glowgas\glowgas.projectile projectiles\throwable\healinggas\healinggas.projectile projectiles\throwable\jumpgas\jumpgas.projectile projectiles\throwable\rungas\rungas.projectile projectiles\translocatordisc\translocatordisc.png projectiles\traps\jumpboostergas\jumpboostergas.projectile projectiles\traps\lowgravboostergas\lowgravboostergas.projectile projectiles\traps\powerboostergas\powerboostergas.projectile projectiles\traps\speedboostergas\speedboostergas.projectile quests\generated\normal.config quests\generated\subquests\add_object_to_house.questtemplate quests\generated\subquests\bribe.questtemplate quests\generated\subquests\collect_fine.questtemplate quests\generated\subquests\collect_for_safekeeping.questtemplate quests\generated\subquests\collect_gift.questtemplate quests\generated\subquests\extort.questtemplate quests\generated\subquests\farming.questtemplate quests\generated\subquests\fetch_dungeon.questtemplate quests\generated\subquests\gift.questtemplate quests\generated\subquests\kill_monster.questtemplate quests\generated\subquests\protect.questtemplate quests\generated\subquests\request_craft.questtemplate quests\generated\subquests\return_stolen.questtemplate quests\generated\subquests\share_secret.questtemplate quests\generated\subquests\spread_rumors.questtemplate quests\generated\subquests\steal.questtemplate scripts\util.lua scripts\actions\builders.lua scripts\actions\crawling.lua scripts\actions\math.lua scripts\actions\movement.lua scripts\actions\sensor.lua scripts\behavior\composite.lua scripts\quest\manager.lua scripts\quest\participant.lua scripts\questgen\predicands.lua scripts\questgen\relations.lua [NEW] sfx\gun\grenadeblast_electric1.ogg [NEW] sfx\gun\grenadeblast_electric2.ogg [NEW] sfx\gun\grenadeblast_electric3.ogg [NEW] sfx\gun\grenadeblast_fire1.ogg [NEW] sfx\gun\grenadeblast_fire2.ogg [NEW] sfx\gun\grenadeblast_fire3.ogg [NEW] sfx\gun\grenadeblast_ice1.ogg [NEW] sfx\gun\grenadeblast_ice2.ogg [NEW] sfx\gun\grenadeblast_ice3.ogg [NEW] sfx\gun\grenadeblast_poison1.ogg [NEW] sfx\gun\grenadeblast_poison2.ogg [NEW] sfx\gun\grenadeblast_poison3.ogg [NEW] sfx\gun\grenadeblast_small1.ogg [NEW] sfx\gun\grenadeblast_small2.ogg [NEW] sfx\gun\grenadeblast_small3.ogg [NEW] sfx\gun\grenadeblast_small_electric1.ogg [NEW] sfx\gun\grenadeblast_small_electric2.ogg [NEW] sfx\gun\grenadeblast_small_electric3.ogg [NEW] sfx\gun\grenadeblast_small_fire1.ogg [NEW] sfx\gun\grenadeblast_small_fire2.ogg [NEW] sfx\gun\grenadeblast_small_fire3.ogg [NEW] sfx\gun\grenadeblast_small_ice1.ogg [NEW] sfx\gun\grenadeblast_small_ice2.ogg [NEW] sfx\gun\grenadeblast_small_ice3.ogg [NEW] sfx\gun\grenadeblast_small_poison1.ogg [NEW] sfx\gun\grenadeblast_small_poison2.ogg [NEW] sfx\gun\grenadeblast_small_poison3.ogg sfx\instruments\accordion\a0.ogg sfx\instruments\accordion\a1.ogg sfx\instruments\accordion\a2.ogg sfx\instruments\accordion\a3.ogg sfx\instruments\accordion\a4.ogg sfx\instruments\accordion\a5.ogg sfx\instruments\accordion\a6.ogg sfx\instruments\accordion\a7.ogg sfx\instruments\acousticguitar\a0.ogg sfx\instruments\acousticguitar\a1.ogg sfx\instruments\acousticguitar\a2.ogg sfx\instruments\acousticguitar\a3.ogg sfx\instruments\acousticguitar\a4.ogg sfx\instruments\acousticguitar\a5.ogg sfx\instruments\acousticguitar\a6.ogg sfx\instruments\acousticguitar\a7.ogg sfx\instruments\banjo\a0.ogg sfx\instruments\banjo\a1.ogg sfx\instruments\banjo\a2.ogg sfx\instruments\banjo\a3.ogg sfx\instruments\banjo\a4.ogg sfx\instruments\banjo\a5.ogg sfx\instruments\banjo\a6.ogg sfx\instruments\banjo\a7.ogg sfx\instruments\bassguitar\a0.ogg sfx\instruments\bassguitar\a1.ogg sfx\instruments\bassguitar\a2.ogg sfx\instruments\bassguitar\a3.ogg sfx\instruments\bassguitar\a4.ogg sfx\instruments\bassguitar\a5.ogg sfx\instruments\bassguitar\a6.ogg sfx\instruments\bassguitar\a7.ogg sfx\instruments\bones\a0.ogg sfx\instruments\bones\a1.ogg sfx\instruments\bones\a2.ogg sfx\instruments\bones\a3.ogg sfx\instruments\bones\a4.ogg sfx\instruments\bones\a5.ogg sfx\instruments\bones\a6.ogg sfx\instruments\bones\a7.ogg sfx\instruments\brightpiano\a0.ogg sfx\instruments\brightpiano\a1.ogg sfx\instruments\brightpiano\a2.ogg sfx\instruments\brightpiano\a3.ogg sfx\instruments\brightpiano\a4.ogg sfx\instruments\brightpiano\a5.ogg sfx\instruments\brightpiano\a6.ogg sfx\instruments\brightpiano\a7.ogg sfx\instruments\clarinet\a0.ogg sfx\instruments\clarinet\a1.ogg sfx\instruments\clarinet\a2.ogg sfx\instruments\clarinet\a3.ogg sfx\instruments\clarinet\a4.ogg sfx\instruments\clarinet\a5.ogg sfx\instruments\clarinet\a6.ogg sfx\instruments\clarinet\a7.ogg sfx\instruments\drumkit\26.ogg sfx\instruments\drumkit\27.ogg sfx\instruments\drumkit\28.ogg sfx\instruments\drumkit\29.ogg sfx\instruments\drumkit\30.ogg sfx\instruments\drumkit\31.ogg sfx\instruments\drumkit\32.ogg sfx\instruments\drumkit\33a1.ogg sfx\instruments\drumkit\34.ogg sfx\instruments\drumkit\35.ogg sfx\instruments\drumkit\36.ogg sfx\instruments\drumkit\37.ogg sfx\instruments\drumkit\38.ogg sfx\instruments\drumkit\39.ogg sfx\instruments\drumkit\40.ogg sfx\instruments\drumkit\41.ogg sfx\instruments\drumkit\42.ogg sfx\instruments\drumkit\43.ogg sfx\instruments\drumkit\44.ogg sfx\instruments\drumkit\45a2.ogg sfx\instruments\drumkit\46.ogg sfx\instruments\drumkit\47.ogg sfx\instruments\drumkit\48.ogg sfx\instruments\drumkit\49.ogg sfx\instruments\drumkit\50.ogg sfx\instruments\drumkit\51.ogg sfx\instruments\drumkit\52.ogg sfx\instruments\drumkit\53.ogg sfx\instruments\drumkit\54.ogg sfx\instruments\drumkit\55.ogg sfx\instruments\drumkit\56.ogg sfx\instruments\drumkit\57a3.ogg sfx\instruments\drumkit\58.ogg sfx\instruments\drumkit\59.ogg sfx\instruments\drumkit\60.ogg sfx\instruments\drumkit\61.ogg sfx\instruments\drumkit\62.ogg sfx\instruments\drumkit\63.ogg sfx\instruments\drumkit\64.ogg sfx\instruments\drumkit\65.ogg sfx\instruments\drumkit\66.ogg sfx\instruments\drumkit\67.ogg sfx\instruments\drumkit\68.ogg sfx\instruments\drumkit\69a4.ogg sfx\instruments\drumkit\70.ogg sfx\instruments\drumkit\71.ogg sfx\instruments\drumkit\72.ogg sfx\instruments\drumkit\73.ogg sfx\instruments\drumkit\74.ogg sfx\instruments\drumkit\75.ogg sfx\instruments\drumkit\76.ogg sfx\instruments\drumkit\77.ogg sfx\instruments\drumkit\78.ogg sfx\instruments\drumkit\79.ogg sfx\instruments\drumkit\80.ogg sfx\instruments\drumkit\81a5.ogg sfx\instruments\drumkit\82.ogg sfx\instruments\drumkit\83.ogg sfx\instruments\drumkit\84.ogg sfx\instruments\drumkit\85.ogg sfx\instruments\drumkit\86.ogg sfx\instruments\drumkit\87.ogg sfx\instruments\drumkit\88.ogg sfx\instruments\drumkit\mute.ogg sfx\instruments\dulcimer\a0.ogg sfx\instruments\dulcimer\a1.ogg sfx\instruments\dulcimer\a2.ogg sfx\instruments\dulcimer\a3.ogg sfx\instruments\dulcimer\a4.ogg sfx\instruments\dulcimer\a5.ogg sfx\instruments\dulcimer\a6.ogg sfx\instruments\dulcimer\a7.ogg sfx\instruments\electricbass\a0.ogg sfx\instruments\electricbass\a1.ogg sfx\instruments\electricbass\a2.ogg sfx\instruments\electricbass\a3.ogg sfx\instruments\electricbass\a4.ogg sfx\instruments\electricbass\a5.ogg sfx\instruments\electricbass\a6.ogg sfx\instruments\electricbass\a7.ogg sfx\instruments\flute\a0.ogg sfx\instruments\flute\a1.ogg sfx\instruments\flute\a2.ogg sfx\instruments\flute\a3.ogg sfx\instruments\flute\a4.ogg sfx\instruments\flute\a5.ogg sfx\instruments\flute\a6.ogg sfx\instruments\flute\a7.ogg sfx\instruments\grandpiano\a0.ogg sfx\instruments\grandpiano\a1.ogg sfx\instruments\grandpiano\a2.ogg sfx\instruments\grandpiano\a3.ogg sfx\instruments\grandpiano\a4.ogg sfx\instruments\grandpiano\a5.ogg sfx\instruments\grandpiano\a6.ogg sfx\instruments\grandpiano\a7.ogg sfx\instruments\harmonica\a0.ogg sfx\instruments\harmonica\a1.ogg sfx\instruments\harmonica\a2.ogg sfx\instruments\harmonica\a3.ogg sfx\instruments\harmonica\a4.ogg sfx\instruments\harmonica\a5.ogg sfx\instruments\harmonica\a6.ogg sfx\instruments\harmonica\a7.ogg sfx\instruments\harp\a0.ogg sfx\instruments\harp\a1.ogg sfx\instruments\harp\a2.ogg sfx\instruments\harp\a3.ogg sfx\instruments\harp\a4.ogg sfx\instruments\harp\a5.ogg sfx\instruments\harp\a6.ogg sfx\instruments\harp\a7.ogg sfx\instruments\keyboard\a0-1.ogg sfx\instruments\keyboard\a0-2.ogg sfx\instruments\keyboard\a0-3.ogg sfx\instruments\keyboard\a0-4.ogg sfx\instruments\keyboard\a0-5.ogg sfx\instruments\keyboard\a0-6.ogg sfx\instruments\koto\a0.ogg sfx\instruments\koto\a1.ogg sfx\instruments\koto\a2.ogg sfx\instruments\koto\a3.ogg sfx\instruments\koto\a4.ogg sfx\instruments\koto\a5.ogg sfx\instruments\koto\a6.ogg sfx\instruments\koto\a7.ogg sfx\instruments\leadguitar\a0.ogg sfx\instruments\leadguitar\a1.ogg sfx\instruments\leadguitar\a2.ogg sfx\instruments\leadguitar\a3.ogg sfx\instruments\leadguitar\a4.ogg sfx\instruments\leadguitar\a5.ogg sfx\instruments\leadguitar\a6.ogg sfx\instruments\leadguitar\a7.ogg sfx\instruments\microphone\a1ba.ogg sfx\instruments\microphone\a1bo.ogg sfx\instruments\microphone\a1da.ogg sfx\instruments\microphone\a1do.ogg sfx\instruments\microphone\a1la.ogg sfx\instruments\microphone\a2ba.ogg sfx\instruments\microphone\a2bo.ogg sfx\instruments\microphone\a2da.ogg sfx\instruments\microphone\a2do.ogg sfx\instruments\microphone\a2la.ogg sfx\instruments\microphone\a3ba.ogg sfx\instruments\microphone\a3bo.ogg sfx\instruments\microphone\a3da.ogg sfx\instruments\microphone\a3do.ogg sfx\instruments\microphone\a3la.ogg sfx\instruments\microphone\a4ba.ogg sfx\instruments\microphone\a4bo.ogg sfx\instruments\microphone\a4da.ogg sfx\instruments\microphone\a4do.ogg sfx\instruments\microphone\a4la.ogg sfx\instruments\microphone\a5ba.ogg sfx\instruments\microphone\a5bo.ogg sfx\instruments\microphone\a5da.ogg sfx\instruments\microphone\a5do.ogg sfx\instruments\microphone\a5la.ogg sfx\instruments\microphone\a6ba.ogg sfx\instruments\microphone\a6bo.ogg sfx\instruments\microphone\a6da.ogg sfx\instruments\microphone\a6do.ogg sfx\instruments\microphone\a6la.ogg sfx\instruments\microphone\a7ba.ogg sfx\instruments\microphone\a7bo.ogg sfx\instruments\microphone\a7da.ogg sfx\instruments\microphone\a7do.ogg sfx\instruments\microphone\a7la.ogg sfx\instruments\microphone\mute.ogg sfx\instruments\microphonefem\a1ba.ogg sfx\instruments\microphonefem\a1da.ogg sfx\instruments\microphonefem\a1la.ogg sfx\instruments\microphonefem\a2ba.ogg sfx\instruments\microphonefem\a2da.ogg sfx\instruments\microphonefem\a2la.ogg sfx\instruments\microphonefem\a3ba.ogg sfx\instruments\microphonefem\a3da.ogg sfx\instruments\microphonefem\a3la.ogg sfx\instruments\microphonefem\a4ba.ogg sfx\instruments\microphonefem\a4da.ogg sfx\instruments\microphonefem\a4la.ogg sfx\instruments\microphonefem\a5ba.ogg sfx\instruments\microphonefem\a5da.ogg sfx\instruments\microphonefem\a5la.ogg sfx\instruments\microphonefem\a6ba.ogg sfx\instruments\microphonefem\a6da.ogg sfx\instruments\microphonefem\a6la.ogg sfx\instruments\microphonefem\a7ba.ogg sfx\instruments\microphonefem\a7da.ogg sfx\instruments\microphonefem\a7la.ogg sfx\instruments\microphonefem\e4ba.ogg sfx\instruments\microphonefem\e4da.ogg sfx\instruments\microphonefem\e4la.ogg sfx\instruments\microphonefem\mute.ogg sfx\instruments\musicbox\a0.ogg sfx\instruments\musicbox\a1.ogg sfx\instruments\musicbox\a2.ogg sfx\instruments\musicbox\a3.ogg sfx\instruments\musicbox\a4.ogg sfx\instruments\musicbox\a5.ogg sfx\instruments\musicbox\a6.ogg sfx\instruments\musicbox\a7.ogg sfx\instruments\nylonguitar\a0.ogg sfx\instruments\nylonguitar\a1.ogg sfx\instruments\nylonguitar\a2.ogg sfx\instruments\nylonguitar\a3.ogg sfx\instruments\nylonguitar\a4.ogg sfx\instruments\nylonguitar\a5.ogg sfx\instruments\nylonguitar\a6.ogg sfx\instruments\nylonguitar\a7.ogg sfx\instruments\oboe\a0.ogg sfx\instruments\oboe\a1.ogg sfx\instruments\oboe\a2.ogg sfx\instruments\oboe\a3.ogg sfx\instruments\oboe\a4.ogg sfx\instruments\oboe\a5.ogg sfx\instruments\oboe\a6.ogg sfx\instruments\oboe\a7.ogg sfx\instruments\ocarina\a0.ogg sfx\instruments\ocarina\a1.ogg sfx\instruments\ocarina\a2.ogg sfx\instruments\ocarina\a3.ogg sfx\instruments\ocarina\a4.ogg sfx\instruments\ocarina\a5.ogg sfx\instruments\ocarina\a6.ogg sfx\instruments\ocarina\a7.ogg sfx\instruments\overdriveguitar\a0.ogg sfx\instruments\overdriveguitar\a1.ogg sfx\instruments\overdriveguitar\a2.ogg sfx\instruments\overdriveguitar\a3.ogg sfx\instruments\overdriveguitar\a4.ogg sfx\instruments\overdriveguitar\a5.ogg sfx\instruments\overdriveguitar\a6.ogg sfx\instruments\overdriveguitar\a7.ogg sfx\instruments\reedorgan\a0.ogg sfx\instruments\reedorgan\a1.ogg sfx\instruments\reedorgan\a2.ogg sfx\instruments\reedorgan\a3.ogg sfx\instruments\reedorgan\a4.ogg sfx\instruments\reedorgan\a5.ogg sfx\instruments\reedorgan\a6.ogg sfx\instruments\reedorgan\a7.ogg sfx\instruments\rockorgan\a0.ogg sfx\instruments\rockorgan\a1.ogg sfx\instruments\rockorgan\a2.ogg sfx\instruments\rockorgan\a3.ogg sfx\instruments\rockorgan\a4.ogg sfx\instruments\rockorgan\a5.ogg sfx\instruments\rockorgan\a6.ogg sfx\instruments\rockorgan\a7.ogg sfx\instruments\saxophone\a0.ogg sfx\instruments\saxophone\a1.ogg sfx\instruments\saxophone\a2.ogg sfx\instruments\saxophone\a3.ogg sfx\instruments\saxophone\a4.ogg sfx\instruments\saxophone\a5.ogg sfx\instruments\saxophone\a6.ogg sfx\instruments\saxophone\a7.ogg sfx\instruments\steeldrum\a0.ogg sfx\instruments\steeldrum\a1.ogg sfx\instruments\steeldrum\a2.ogg sfx\instruments\steeldrum\a3.ogg sfx\instruments\steeldrum\a4.ogg sfx\instruments\steeldrum\a5.ogg sfx\instruments\steeldrum\a6.ogg sfx\instruments\steeldrum\a7.ogg sfx\instruments\trumpet\a0.ogg sfx\instruments\trumpet\a1.ogg sfx\instruments\trumpet\a2.ogg sfx\instruments\trumpet\a3.ogg sfx\instruments\trumpet\a4.ogg sfx\instruments\trumpet\a5.ogg sfx\instruments\trumpet\a6.ogg sfx\instruments\trumpet\a7.ogg sfx\instruments\violin\a0.ogg sfx\instruments\violin\a1.ogg sfx\instruments\violin\a2.ogg sfx\instruments\violin\a3.ogg sfx\instruments\violin\a4.ogg sfx\instruments\violin\a5.ogg sfx\instruments\violin\a6.ogg sfx\instruments\violin\a7.ogg sfx\melee\giantsword_charged_poison.ogg [NEW] sfx\melee\giantsword_charge_electric.ogg [NEW] sfx\melee\giantsword_charge_fire.ogg [NEW] sfx\melee\giantsword_charge_full.ogg [NEW] sfx\melee\giantsword_charge_ice.ogg [NEW] sfx\melee\giantsword_charge_poison.ogg sfx\melee\shockwave_charge_electric.ogg sfx\melee\shockwave_charge_fire.ogg sfx\melee\shockwave_charge_ice.ogg sfx\melee\shockwave_charge_poison.ogg sfx\melee\shockwave_full_electric.ogg [NEW] sfx\melee\spinslash.ogg [NEW] sfx\melee\superspinslash.ogg [NEW] sfx\melee\sword_guard.ogg sfx\npc\monsters\gleap_hop.ogg [NEW] sfx\npc\monsters\monster_hop.ogg sfx\projectiles\guidedrocket_poison_loop.ogg sfx\projectiles\ice_barrier_break1.ogg sfx\projectiles\ice_barrier_break10.ogg sfx\projectiles\ice_barrier_break2.ogg sfx\projectiles\ice_barrier_break3.ogg sfx\projectiles\ice_barrier_break4.ogg sfx\projectiles\ice_barrier_break5.ogg sfx\projectiles\ice_barrier_break6.ogg sfx\projectiles\ice_barrier_break7.ogg sfx\projectiles\ice_barrier_break8.ogg sfx\projectiles\ice_barrier_break9.ogg stats\effects\elementalaura\electricaura.animation stats\effects\elementalaura\electricaura.png stats\effects\elementalaura\fireaura.animation stats\effects\elementalaura\fireaura.png stats\effects\elementalaura\poisonaura.animation stats\effects\elementalaura\poisonaura.png [NEW] vehicles\boat\boat.animation [NEW] vehicles\boat\boat.frames [NEW] vehicles\boat\boat.lua [NEW] vehicles\boat\boat.png [NEW] vehicles\boat\boat.vehicle [NEW] vehicles\boat\propeller.frames [NEW] vehicles\boat\propeller.png vehicles\hoverbike\hoverbike.animation vehicles\hoverbike\hoverbike.lua vehicles\hoverbike\hoverbike.vehicle [NEW] vehicles\mech\bulletmuzzle1.frames [NEW] vehicles\mech\bulletmuzzle1.png [NEW] vehicles\mech\mech.animation [NEW] vehicles\mech\mech.lua [NEW] vehicles\mech\apexmech\apexmech.vehicle [NEW] vehicles\mech\apexmech\apexmechbackground.frames [NEW] vehicles\mech\apexmech\apexmechbackground.png [NEW] vehicles\mech\apexmech\apexmechbleg.frames [NEW] vehicles\mech\apexmech\apexmechbleg.png [NEW] vehicles\mech\apexmech\apexmechbody.frames [NEW] vehicles\mech\apexmech\apexmechbody.png [NEW] vehicles\mech\apexmech\apexmechfleg.frames [NEW] vehicles\mech\apexmech\apexmechfleg.png [NEW] vehicles\mech\apexmech\apexmechgun.frames [NEW] vehicles\mech\apexmech\apexmechgun.png [NEW] vehicles\mech\apexmech\flamemuzzle.frames [NEW] vehicles\mech\apexmech\flamemuzzle.png [NEW] vehicles\mech\glitchmech\flamemuzzle.frames [NEW] vehicles\mech\glitchmech\flamemuzzle.png [NEW] vehicles\mech\glitchmech\glitchmech.vehicle [NEW] vehicles\mech\glitchmech\glitchmechbackground.frames [NEW] vehicles\mech\glitchmech\glitchmechbackground.png [NEW] vehicles\mech\glitchmech\glitchmechbleg.frames [NEW] vehicles\mech\glitchmech\glitchmechbleg.png [NEW] vehicles\mech\glitchmech\glitchmechbody.frames [NEW] vehicles\mech\glitchmech\glitchmechbody.png [NEW] vehicles\mech\glitchmech\glitchmechfleg.frames [NEW] vehicles\mech\glitchmech\glitchmechfleg.png [NEW] vehicles\mech\glitchmech\glitchmechgun.frames [NEW] vehicles\mech\glitchmech\glitchmechgun.png [NEW] vehicles\mech\humanmech\flamemuzzle.frames [NEW] vehicles\mech\humanmech\flamemuzzle.png [NEW] vehicles\mech\humanmech\humanmech.vehicle [NEW] vehicles\mech\humanmech\humanmechbackground.frames [NEW] vehicles\mech\humanmech\humanmechbackground.png [NEW] vehicles\mech\humanmech\humanmechbleg.frames [NEW] vehicles\mech\humanmech\humanmechbleg.png [NEW] vehicles\mech\humanmech\humanmechbody.frames [NEW] vehicles\mech\humanmech\humanmechbody.png [NEW] vehicles\mech\humanmech\humanmechfleg.frames [NEW] vehicles\mech\humanmech\humanmechfleg.png [NEW] vehicles\mech\humanmech\humanmechgun.frames [NEW] vehicles\mech\humanmech\humanmechgun.png DIFFS ----- animations\elementalaura\poisonaura\poisonaura.animation 5c5 < "animationCycle" : 1.4, --- > "animationCycle" : 0.3, animations\music\music.animation 5c5,6 < "animationCycle" : 0.6, --- > "loops" : 20.0, > "animationCycle" : 0.85, behaviors\monsters\boss\spiderboss\acidspray.behavior 115c115 < "immediate": false --- > "rate": 3.0 173c173 < "immediate": false --- > "rate": 3.0 behaviors\monsters\boss\spiderboss\hurt.behavior 131c131,132 < "angle": 4.71 --- > "angle": 4.71, > "rate" : 3.0 behaviors\monsters\boss\spiderboss\main.behavior 4a5 > "/scripts/actions/movement.lua", 9d9 < "/scripts/actions/movement.lua", 16c16 < "title": "Spiderboss", --- > "title": "parallel", 18,19c18,22 < "name": "dynamic", < "parameters": {}, --- > "name": "parallel", > "parameters": { > "fail": -1, > "success": -1 > }, 22c25,33 < "title": "sequence", --- > "title": "faceDirection", > "type": "action", > "name": "faceDirection", > "parameters": { > "direction": 1 > } > }, > { > "title": "Spiderboss", 24c35 < "name": "sequence", --- > "name": "dynamic", 28c39 < "title": "parallel", --- > "title": "sequence", 30,33c41,42 < "name": "parallel", < "parameters": { < "fail": 1 < }, --- > "name": "sequence", > "parameters": {}, 36,46c45 < "title": "", < "type": "module", < "name": "tracking", < "parameters": { < "keepInSight": true, < "queryRange": 50, < "trackingRange": 100 < } < }, < { < "title": "sequence", --- > "title": "parallel", 48,49c47,50 < "name": "sequence", < "parameters": {}, --- > "name": "parallel", > "parameters": { > "fail": 1 > }, 51a53,62 > "title": "", > "type": "module", > "name": "tracking", > "parameters": { > "keepInSight": true, > "queryRange": 50, > "trackingRange": 100 > } > }, > { 58,82d68 < "title": "setDying", < "type": "action", < "name": "setDying", < "parameters": { < "shouldDie": false < } < }, < { < "title": "receivedNotification", < "type": "action", < "name": "receivedNotification", < "parameters": { < "type": "startboss" < } < }, < { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "type": "body", < "state": "breakout" < } < }, < { 86,91c72 < "parameters": { < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" < }, --- > "parameters": {}, 94c75 < "title": "playSound", --- > "title": "setDying", 96c77 < "name": "playSound", --- > "name": "setDying", 98c79 < "sound": "cocooncrack" --- > "shouldDie": false 102c83 < "title": "timer", --- > "title": "receivedNotification", 104c85 < "name": "timer", --- > "name": "receivedNotification", 106c87 < "time": 0.67 --- > "type": "startboss" 110c91 < "title": "playSound", --- > "title": "setAnimationState", 112c93 < "name": "playSound", --- > "name": "setAnimationState", 114c95,96 < "sound": "cocooncrack" --- > "type": "body", > "state": "breakout" 118,120c100,102 < "title": "timer", < "type": "action", < "name": "timer", --- > "title": "sequence", > "type": "composite", > "name": "sequence", 122,123c104,166 < "time": 0.67 < } --- > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "playSound", > "type": "action", > "name": "playSound", > "parameters": { > "sound": "cocooncrack" > } > }, > { > "title": "timer", > "type": "action", > "name": "timer", > "parameters": { > "time": 0.67 > } > }, > { > "title": "playSound", > "type": "action", > "name": "playSound", > "parameters": { > "sound": "cocooncrack" > } > }, > { > "title": "timer", > "type": "action", > "name": "timer", > "parameters": { > "time": 0.67 > } > }, > { > "title": "playSound", > "type": "action", > "name": "playSound", > "parameters": { > "sound": "cocooncrack" > } > }, > { > "title": "timer", > "type": "action", > "name": "timer", > "parameters": { > "time": 0.67 > } > }, > { > "title": "playSound", > "type": "action", > "name": "playSound", > "parameters": { > "sound": "cocoonburst" > } > } > ] 126c169 < "title": "playSound", --- > "title": "setAnimationState", 128c171 < "name": "playSound", --- > "name": "setAnimationState", 130c173,174 < "sound": "cocooncrack" --- > "type": "body", > "state": "idle" 134c178 < "title": "timer", --- > "title": "setAnimationState", 136c180 < "name": "timer", --- > "name": "setAnimationState", 138c182,183 < "time": 0.67 --- > "type": "legs", > "state": "idle" 142c187 < "title": "playSound", --- > "title": "burstParticleEmitter", 144c189 < "name": "playSound", --- > "name": "burstParticleEmitter", 146c191 < "sound": "cocoonburst" --- > "emitter": "cocoonburst" 152,163c197,199 < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "type": "body", < "state": "idle" < } < }, < { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", --- > "title": "sequence", > "type": "composite", > "name": "sequence", 165,167c201,248 < "type": "legs", < "state": "idle" < } --- > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "type": "shell", > "state": "stage1" > } > }, > { > "title": "parallel", > "type": "composite", > "name": "parallel", > "parameters": { > "fail": -1, > "success": 1 > }, > "children": [ > { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "resourcePercentage", > "type": "action", > "name": "resourcePercentage", > "parameters": { > "percentage": 0.95, > "resource": "health" > } > } > }, > { > "title": "Ixodoom Stage 1", > "type": "module", > "name": "spiderboss-stage1", > "parameters": {} > } > ] > } > ] 170,193c251,253 < "title": "burstParticleEmitter", < "type": "action", < "name": "burstParticleEmitter", < "parameters": { < "emitter": "cocoonburst" < } < } < ] < }, < { < "title": "sequence", < "type": "composite", < "name": "sequence", < "parameters": { < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" < }, < "children": [ < { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", --- > "title": "Hurt", > "type": "module", > "name": "spiderboss-hurt", 195,196c255,256 < "type": "shell", < "state": "stage1" --- > "minHealth": 0.65, > "maxHealth": 0.95 205c265 < "success": 1 --- > "success": 2 218c278 < "percentage": 0.95, --- > "percentage": 0.65, 223a284,292 > "title": "addEphemeralEffect", > "type": "action", > "name": "addEphemeralEffect", > "parameters": { > "name": "vulnerability", > "duration": 0.1 > } > }, > { 230,250c299 < } < ] < }, < { < "title": "Hurt", < "type": "module", < "name": "spiderboss-hurt", < "parameters": { < "minHealth": 0.65, < "maxHealth": 0.95 < } < }, < { < "title": "parallel", < "type": "composite", < "name": "parallel", < "parameters": { < "fail": -1, < "success": 2 < }, < "children": [ --- > }, 252,254c301,303 < "title": "inverter", < "type": "decorator", < "name": "inverter", --- > "title": "sequence", > "type": "composite", > "name": "sequence", 256,262c305,345 < "child": { < "title": "resourcePercentage", < "type": "action", < "name": "resourcePercentage", < "parameters": { < "percentage": 0.65, < "resource": "health" --- > "children": [ > { > "title": "Set stage", > "type": "module", > "name": "spiderboss-setstage", > "parameters": { > "setHealth": 0.65, > "shellState": "stage2" > } > }, > { > "title": "parallel", > "type": "composite", > "name": "parallel", > "parameters": { > "fail": -1, > "success": 1 > }, > "children": [ > { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "resourcePercentage", > "type": "action", > "name": "resourcePercentage", > "parameters": { > "percentage": 0.58, > "resource": "health" > } > } > }, > { > "title": "Ixodoom Stage 2", > "type": "module", > "name": "spiderboss-stage2", > "parameters": {} > } > ] 264,273c347 < } < }, < { < "title": "addEphemeralEffect", < "type": "action", < "name": "addEphemeralEffect", < "parameters": { < "name": "vulnerability", < "duration": 0.1 < } --- > ] 276c350 < "title": "Ixodoom Stage 1", --- > "title": "Hurt", 278,292c352 < "name": "spiderboss-stage1", < "parameters": {} < } < ] < }, < { < "title": "sequence", < "type": "composite", < "name": "sequence", < "parameters": {}, < "children": [ < { < "title": "Set stage", < "type": "module", < "name": "spiderboss-setstage", --- > "name": "spiderboss-hurt", 294,295c354,355 < "setHealth": 0.65, < "shellState": "stage2" --- > "minHealth": 0.25, > "maxHealth": 0.6 304c364 < "success": 1 --- > "success": 2 317c377 < "percentage": 0.58, --- > "percentage": 0.25, 322a383,391 > "title": "addEphemeralEffect", > "type": "action", > "name": "addEphemeralEffect", > "parameters": { > "name": "vulnerability", > "duration": 0.1 > } > }, > { 329,349c398 < } < ] < }, < { < "title": "Hurt", < "type": "module", < "name": "spiderboss-hurt", < "parameters": { < "minHealth": 0.25, < "maxHealth": 0.6 < } < }, < { < "title": "parallel", < "type": "composite", < "name": "parallel", < "parameters": { < "fail": -1, < "success": 2 < }, < "children": [ --- > }, 351,353c400,402 < "title": "inverter", < "type": "decorator", < "name": "inverter", --- > "title": "sequence", > "type": "composite", > "name": "sequence", 355,361c404,444 < "child": { < "title": "resourcePercentage", < "type": "action", < "name": "resourcePercentage", < "parameters": { < "percentage": 0.25, < "resource": "health" --- > "children": [ > { > "title": "Set stage", > "type": "module", > "name": "spiderboss-setstage", > "parameters": { > "setHealth": 0.25, > "shellState": "stage3" > } > }, > { > "title": "parallel", > "type": "composite", > "name": "parallel", > "parameters": { > "fail": -1, > "success": 1 > }, > "children": [ > { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "resourcePercentage", > "type": "action", > "name": "resourcePercentage", > "parameters": { > "percentage": 0.15, > "resource": "health" > } > } > }, > { > "title": "Ixodoom Stage 3", > "type": "module", > "name": "spiderboss-stage3", > "parameters": {} > } > ] 363,372c446 < } < }, < { < "title": "addEphemeralEffect", < "type": "action", < "name": "addEphemeralEffect", < "parameters": { < "name": "vulnerability", < "duration": 0.1 < } --- > ] 375,389c449 < "title": "Ixodoom Stage 2", < "type": "module", < "name": "spiderboss-stage2", < "parameters": {} < } < ] < }, < { < "title": "sequence", < "type": "composite", < "name": "sequence", < "parameters": {}, < "children": [ < { < "title": "Set stage", --- > "title": "Hurt", 391c451 < "name": "spiderboss-setstage", --- > "name": "spiderboss-hurt", 393,394c453,454 < "setHealth": 0.25, < "shellState": "stage3" --- > "minHealth": 0, > "maxHealth": 0.2 403c463 < "success": 1 --- > "success": 2 416c476 < "percentage": 0.15, --- > "percentage": 0, 421a482,490 > "title": "addEphemeralEffect", > "type": "action", > "name": "addEphemeralEffect", > "parameters": { > "name": "vulnerability", > "duration": 0.1 > } > }, > { 429a499,520 > } > ] > }, > { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "state": "hurt", > "type": "body" > } 432c523 < "title": "Hurt", --- > "title": "Return to spawn", 434c525,531 < "name": "spiderboss-hurt", --- > "name": "spiderboss-return", > "parameters": {} > }, > { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", 436,437c533,534 < "minHealth": 0, < "maxHealth": 0.2 --- > "state": "hurt", > "type": "legs" 446c543 < "success": 2 --- > "success": -1 450,461c547,554 < "title": "inverter", < "type": "decorator", < "name": "inverter", < "parameters": {}, < "child": { < "title": "resourcePercentage", < "type": "action", < "name": "resourcePercentage", < "parameters": { < "percentage": 0, < "resource": "health" < } --- > "title": "setVelocity", > "type": "action", > "name": "setVelocity", > "parameters": { > "velocity": [ > 0, > 0 > ] 465c558 < "title": "addEphemeralEffect", --- > "title": "timer", 467c560 < "name": "addEphemeralEffect", --- > "name": "timer", 469,470c562 < "name": "vulnerability", < "duration": 0.1 --- > "time": 2 472,477d563 < }, < { < "title": "Ixodoom Stage 3", < "type": "module", < "name": "spiderboss-stage3", < "parameters": {} 480,528c566 < } < ] < } < ] < }, < { < "title": "sequence", < "type": "composite", < "name": "sequence", < "parameters": { < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" < }, < "children": [ < { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "hurt", < "type": "body" < } < }, < { < "title": "Return to spawn", < "type": "module", < "name": "spiderboss-return", < "parameters": {} < }, < { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "hurt", < "type": "legs" < } < }, < { < "title": "parallel", < "type": "composite", < "name": "parallel", < "parameters": { < "fail": -1, < "success": -1 < }, < "children": [ --- > }, 530c568 < "title": "setVelocity", --- > "title": "setAnimationState", 532c570 < "name": "setVelocity", --- > "name": "setAnimationState", 534,537c572,573 < "velocity": [ < 0, < 0 < ] --- > "state": "dead", > "type": "body" 541c577 < "title": "timer", --- > "title": "setAnimationState", 543c579 < "name": "timer", --- > "name": "setAnimationState", 545c581,582 < "time": 2 --- > "state": "die", > "type": "legs" 547,584c584 < } < ] < }, < { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "dead", < "type": "body" < } < }, < { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "die", < "type": "legs" < } < }, < { < "title": "playSound", < "type": "action", < "name": "playSound", < "parameters": { < "sound": "death" < } < }, < { < "title": "parallel", < "type": "composite", < "name": "parallel", < "parameters": { < "fail": -1, < "success": -1 < }, < "children": [ --- > }, 586c586 < "title": "controlParameters", --- > "title": "playSound", 588c588 < "name": "controlParameters", --- > "name": "playSound", 590,592c590 < "config": { < "gravityEnabled": true < } --- > "sound": "death" 596c594 < "title": "sequence", --- > "title": "parallel", 598c596 < "name": "sequence", --- > "name": "parallel", 600,603c598,599 < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" --- > "fail": -1, > "success": -1 607c603 < "title": "timer", --- > "title": "controlParameters", 609c605 < "name": "timer", --- > "name": "controlParameters", 611c607,609 < "time": 2 --- > "config": { > "gravityEnabled": true > } 615,617c613,615 < "title": "setDying", < "type": "action", < "name": "setDying", --- > "title": "sequence", > "type": "composite", > "name": "sequence", 619,657c617,620 < "shouldDie": true < } < } < ] < }, < { < "title": "limiter", < "type": "decorator", < "name": "limiter", < "parameters": { < "limit": 1 < }, < "child": { < "title": "sequence", < "type": "composite", < "name": "sequence", < "parameters": { < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" < }, < "children": [ < { < "title": "lineTileCollision", < "type": "action", < "name": "lineTileCollision", < "parameters": { < "position": "self", < "offset": [ < 0, < -10 < ], < "collisionType": [ < "Null", < "Block", < "Dynamic" < ] < } --- > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" 659,667c622,629 < { < "title": "findObject", < "type": "action", < "name": "findObject", < "parameters": { < "position": "self", < "range": 30, < "orderBy": "nearest", < "name": "dirttrapdoor" --- > "children": [ > { > "title": "timer", > "type": "action", > "name": "timer", > "parameters": { > "time": 2 > } 669,670c631,637 < "output": { < "list": "trapdoors" --- > { > "title": "setDying", > "type": "action", > "name": "setDying", > "parameters": { > "shouldDie": true > } 671a639,646 > ] > }, > { > "title": "limiter", > "type": "decorator", > "name": "limiter", > "parameters": { > "limit": 1 673,676c648,651 < { < "title": "repeater", < "type": "decorator", < "name": "repeater", --- > "child": { > "title": "sequence", > "type": "composite", > "name": "sequence", 678,689c653,662 < "maxLoops": -1, < "untilSuccess": true < }, < "child": { < "title": "inverter", < "type": "decorator", < "name": "inverter", < "parameters": {}, < "child": { < "title": "sequence", < "type": "composite", < "name": "sequence", --- > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "lineTileCollision", > "type": "action", > "name": "lineTileCollision", 691,700c664,706 < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" < }, < "children": [ < { < "title": "listPop", < "type": "action", < "name": "listPop", --- > "position": "self", > "offset": [ > 0, > -10 > ], > "collisionType": [ > "Null", > "Block", > "Dynamic" > ] > } > }, > { > "title": "findObject", > "type": "action", > "name": "findObject", > "parameters": { > "position": "self", > "range": 30, > "orderBy": "nearest", > "name": "dirttrapdoor" > }, > "output": { > "list": "trapdoors" > } > }, > { > "title": "repeater", > "type": "decorator", > "name": "repeater", > "parameters": { > "maxLoops": -1, > "untilSuccess": true > }, > "child": { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "sequence", > "type": "composite", > "name": "sequence", 702c708,711 < "list": "trapdoors" --- > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" 704,719c713,738 < "output": { < "entity": "trapdoor" < } < }, < { < "title": "succeeder", < "type": "decorator", < "name": "succeeder", < "parameters": {}, < "child": { < "title": "callScriptedEntity", < "type": "action", < "name": "callScriptedEntity", < "parameters": { < "entity": "trapdoor", < "func": "openDoor" --- > "children": [ > { > "title": "listPop", > "type": "action", > "name": "listPop", > "parameters": { > "list": "trapdoors" > }, > "output": { > "entity": "trapdoor" > } > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "callScriptedEntity", > "type": "action", > "name": "callScriptedEntity", > "parameters": { > "entity": "trapdoor", > "func": "openDoor" > } > } 721c740 < } --- > ] 723c742 < ] --- > } 725c744 < } --- > ] 727,728c746,747 < ] < } --- > } > ] 733,773d751 < } < ] < }, < { < "title": "Reset", < "type": "composite", < "name": "sequence", < "parameters": {}, < "children": [ < { < "title": "Return to spawn", < "type": "module", < "name": "spiderboss-return", < "parameters": {} < }, < { < "title": "setResourcePercentage", < "type": "action", < "name": "setResourcePercentage", < "parameters": { < "resource": "health", < "percentage": 1 < } < }, < { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "type": "legs", < "state": "cocoon" < } < }, < { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "type": "body", < "state": "cocoon" < } 776,788c754,807 < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "type": "shell", < "state": "invisible" < } < }, < { < "title": "runner", < "type": "action", < "name": "runner", < "parameters": {} --- > "title": "Reset", > "type": "composite", > "name": "sequence", > "parameters": {}, > "children": [ > { > "title": "Return to spawn", > "type": "module", > "name": "spiderboss-return", > "parameters": {} > }, > { > "title": "setResourcePercentage", > "type": "action", > "name": "setResourcePercentage", > "parameters": { > "resource": "health", > "percentage": 1 > } > }, > { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "type": "legs", > "state": "cocoon" > } > }, > { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "type": "body", > "state": "cocoon" > } > }, > { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "type": "shell", > "state": "invisible" > } > }, > { > "title": "runner", > "type": "action", > "name": "runner", > "parameters": {} > } > ] behaviors\monsters\boss\spiderboss\return.behavior 74c74 < "immediate": false --- > "rate": 3.0 124c124 < "immediate": false --- > "rate": 3.0 behaviors\monsters\boss\spiderboss\slam.behavior 34c34 < "immediate": false --- > "rate": 3.0 behaviors\monsters\boss\spiderboss\sweep.behavior 114c114 < "immediate": false --- > "rate": 3.0 146c146 < "immediate": false --- > "rate": 3.0 behaviors\monsters\modular\basemonster.behavior 3d2 < "description": "", 6d4 < "/scripts/actions/entities.lua", 7a6,7 > "/scripts/actions/entities.lua", > "/scripts/actions/status.lua", 25c25,27 < "damageTakenActions": [] --- > "damageTakenActions": [], > "deathActions": [], > "spawnActions": [] 46a49,70 > "title": "setDying", > "type": "action", > "name": "setDying", > "parameters": { > "shouldDie": false > } > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "spawnActions", > "type": "action", > "name": "sequenceActions", > "parameters": { > "actions": "" > } > } > }, > { 138a163,220 > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "resourcePercentage", > "type": "action", > "name": "resourcePercentage", > "parameters": { > "percentage": 0, > "resource": "health" > } > } > }, > { > "title": "logInfo", > "type": "action", > "name": "logInfo", > "parameters": { > "text": "IM DYING" > } > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "sequenceActions", > "type": "action", > "name": "sequenceActions", > "parameters": { > "actions": "" > } > } > }, > { > "title": "setDying", > "type": "action", > "name": "setDying", > "parameters": { > "shouldDie": true > } > } > ] > }, > { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { 158c240 < "time": "" --- > "time": 1 behaviors\monsters\modular\actions\aggrohop.behavior 3d2 < "description": "", 12c11,12 < "aggroHopWait": 0.5 --- > "aggroHopWait": 0.5, > "aggroHopState": "idle" 26,37c26,37 < "title": "halt", < "type": "action", < "name": "halt", < "parameters": {} < }, < { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "idle", < "type": "body" --- > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "state": "", > "type": "body" > } behaviors\monsters\modular\actions\charge.behavior 7d6 < "/scripts/actions/math.lua", 9c8,9 < "/scripts/actions/time.lua" --- > "/scripts/actions/time.lua", > "/scripts/actions/math.lua" 27c27,32 < "aimDirection": [1, 0] --- > "aimDirection": [ > 1, > 0 > ], > "rotateToTarget": false, > "winddownStopForce": 0 30c35 < "title": "sequence", --- > "title": "cleanup", 32,38c37,38 < "name": "sequence", < "parameters": { < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" < }, --- > "name": "cleanup", > "parameters": {}, 41,51c41,43 < "title": "entityInSight", < "type": "action", < "name": "entityInSight", < "parameters": { < "entity": "target" < } < }, < { < "title": "entityInRange", < "type": "action", < "name": "entityInRange", --- > "title": "sequence", > "type": "composite", > "name": "sequence", 53,79c45,56 < "entity": "target", < "range": "", < "position": "self" < } < }, < { < "title": "inverter", < "type": "decorator", < "name": "inverter", < "parameters": {}, < "child": { < "title": "optional", < "type": "decorator", < "name": "optional", < "parameters": { < "shouldRun": "" < }, < "child": { < "title": "inverter", < "type": "decorator", < "name": "inverter", < "parameters": {}, < "child": { < "title": "groundCollision", < "type": "action", < "name": "groundCollision", < "parameters": {} --- > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "entityInSight", > "type": "action", > "name": "entityInSight", > "parameters": { > "entity": "target" 81,94d57 < } < } < }, < { < "title": "inverter", < "type": "decorator", < "name": "inverter", < "parameters": {}, < "child": { < "title": "optional", < "type": "decorator", < "name": "optional", < "parameters": { < "shouldRun": "" 96,97c59,60 < "child": { < "title": "wallCollision", --- > { > "title": "entityInRange", 99c62 < "name": "wallCollision", --- > "name": "entityInRange", 101c64,66 < "direction": "facingDirection" --- > "entity": "target", > "range": "", > "position": "self" 103,165c68 < } < } < }, < { < "title": "entityDirection", < "type": "action", < "name": "entityDirection", < "parameters": { < "entity": "self", < "target": "target" < }, < "output": { < "direction": "facingDirection", < "vector": "targetVector" < } < }, < { < "title": "faceDirection", < "type": "action", < "name": "faceDirection", < "parameters": { < "direction": "facingDirection" < } < }, < { < "title": "vecMultiply", < "type": "action", < "name": "vecMultiply", < "parameters": { < "first": "", < "second": [ < "facingDirection", < 1 < ] < }, < "output": { < "vector": "aimDirection" < } < }, < { < "title": "succeeder", < "type": "decorator", < "name": "succeeder", < "parameters": {}, < "child": { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "", < "type": "body" < } < } < }, < { < "title": "parallel", < "type": "composite", < "name": "parallel", < "parameters": { < "fail": -1, < "success": -1 < }, < "children": [ --- > }, 167c70 < "title": "succeeder", --- > "title": "inverter", 169c72 < "name": "succeeder", --- > "name": "inverter", 172,174c75,77 < "title": "controlApproachVelocity", < "type": "action", < "name": "controlApproachVelocity", --- > "title": "optional", > "type": "decorator", > "name": "optional", 176,180c79,91 < "velocity": [ < 0, < 0 < ], < "force": "" --- > "shouldRun": "" > }, > "child": { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "groundCollision", > "type": "action", > "name": "groundCollision", > "parameters": {} > } 185c96 < "title": "succeeder", --- > "title": "inverter", 187c98 < "name": "succeeder", --- > "name": "inverter", 194c105 < "shouldRun": "" --- > "shouldRun": "" 197c108 < "title": "entityDirection", --- > "title": "wallCollision", 199c110 < "name": "entityDirection", --- > "name": "wallCollision", 201,206c112 < "entity": "self", < "target": "target" < }, < "output": { < "direction": "direction", < "vector": "aimDirection" --- > "direction": "facingDirection" 212c118 < "title": "timer", --- > "title": "entityDirection", 214c120 < "name": "timer", --- > "name": "entityDirection", 216c122,127 < "time": "" --- > "entity": "self", > "target": "target" > }, > "output": { > "direction": "facingDirection", > "vector": "targetVector" 218,229c129,137 < } < ] < }, < { < "title": "parallel", < "type": "composite", < "name": "parallel", < "parameters": { < "fail": -1, < "success": 1 < }, < "children": [ --- > }, > { > "title": "faceDirection", > "type": "action", > "name": "faceDirection", > "parameters": { > "direction": "facingDirection" > } > }, 231c139,154 < "title": "sequence", --- > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "state": "", > "type": "body" > } > } > }, > { > "title": "parallel", 233c156 < "name": "sequence", --- > "name": "parallel", 235,238c158,159 < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" --- > "fail": -1, > "success": -1 247c168 < "title": "setAnimationState", --- > "title": "controlApproachVelocity", 249c170 < "name": "setAnimationState", --- > "name": "controlApproachVelocity", 251,252c172,176 < "state": "", < "type": "body" --- > "velocity": [ > 0, > 0 > ], > "force": "" 257c181 < "title": "parallel", --- > "title": "selector", 259,263c183,184 < "name": "parallel", < "parameters": { < "fail": -1, < "success": -1 < }, --- > "name": "selector", > "parameters": {}, 266,268c187,189 < "title": "vecAngle", < "type": "action", < "name": "vecAngle", --- > "title": "optional", > "type": "decorator", > "name": "optional", 270c191 < "vector": "aimDirection" --- > "shouldRun": "" 272,273c193,240 < "output": { < "angle": "aimAngle" --- > "child": { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "entityDirection", > "type": "action", > "name": "entityDirection", > "parameters": { > "entity": "self", > "target": "target" > }, > "output": { > "direction": "direction", > "vector": "aimDirection" > } > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "optional", > "type": "decorator", > "name": "optional", > "parameters": { > "shouldRun": "" > }, > "child": { > "title": "rotate", > "type": "action", > "name": "rotate", > "parameters": { > "angle": "aimAngle", > "rate": 0 > } > } > } > } > ] 277,279c244,246 < "title": "controlApproachVelocityAlongAngle", < "type": "action", < "name": "controlApproachVelocityAlongAngle", --- > "title": "sequence", > "type": "composite", > "name": "sequence", 281,290c248,275 < "angle": "aimAngle", < "velocity": "", < "force": "" < } < }, < { < "title": "runner", < "type": "action", < "name": "runner", < "parameters": {} --- > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "entityDirection", > "type": "action", > "name": "entityDirection", > "parameters": { > "entity": "self", > "target": "target" > }, > "output": { > "direction": "facingDirection", > "vector": "targetVector" > } > }, > { > "title": "faceDirection", > "type": "action", > "name": "faceDirection", > "parameters": { > "direction": "facingDirection" > } > } > ] 292a278,285 > }, > { > "title": "timer", > "type": "action", > "name": "timer", > "parameters": { > "time": "" > } 297c290 < "title": "dynamic", --- > "title": "selector", 299c292 < "name": "dynamic", --- > "name": "selector", 307c300 < "shouldRun": "" --- > "shouldRun": "" 310,312c303,305 < "title": "sequence", < "type": "composite", < "name": "sequence", --- > "title": "entityDirection", > "type": "action", > "name": "entityDirection", 314,317c307,308 < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" --- > "entity": "self", > "target": "target" 319,321c310,359 < "children": [ < { < "title": "wallCollision", --- > "output": { > "direction": "direction", > "vector": "aimDirection" > } > } > }, > { > "title": "vecMultiply", > "type": "action", > "name": "vecMultiply", > "parameters": { > "first": "", > "second": [ > "facingDirection", > 1 > ] > }, > "output": { > "vector": "aimDirection" > } > } > ] > }, > { > "title": "parallel", > "type": "composite", > "name": "parallel", > "parameters": { > "fail": -1, > "success": 1 > }, > "children": [ > { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "setAnimationState", 323c361 < "name": "wallCollision", --- > "name": "setAnimationState", 325c363,364 < "direction": "facingDirection" --- > "state": "", > "type": "body" 326a366,374 > } > }, > { > "title": "parallel", > "type": "composite", > "name": "parallel", > "parameters": { > "fail": -1, > "success": -1 328,334c376,378 < { < "title": "succeeder", < "type": "decorator", < "name": "succeeder", < "parameters": {}, < "child": { < "title": "playSound", --- > "children": [ > { > "title": "vecAngle", 336c380 < "name": "playSound", --- > "name": "vecAngle", 338c382,385 < "sound": "" --- > "vector": "aimDirection" > }, > "output": { > "angle": "aimAngle" 340,348c387,433 < } < }, < { < "title": "succeeder", < "type": "decorator", < "name": "succeeder", < "parameters": {}, < "child": { < "title": "burstParticleEmitter", --- > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "optional", > "type": "decorator", > "name": "optional", > "parameters": { > "shouldRun": "" > }, > "child": { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "faceDirection", > "type": "action", > "name": "faceDirection", > "parameters": { > "direction": 1 > } > }, > { > "title": "rotate", > "type": "action", > "name": "rotate", > "parameters": { > "angle": "aimAngle", > "rate": 0 > } > } > ] > } > } > }, > { > "title": "controlApproachVelocityAlongAngle", 350c435 < "name": "burstParticleEmitter", --- > "name": "controlApproachVelocityAlongAngle", 352c437,439 < "emitter": "" --- > "angle": "aimAngle", > "velocity": "", > "force": "" 353a441,446 > }, > { > "title": "runner", > "type": "action", > "name": "runner", > "parameters": {} 354a448,512 > ] > } > ] > }, > { > "title": "dynamic", > "type": "composite", > "name": "dynamic", > "parameters": {}, > "children": [ > { > "title": "optional", > "type": "decorator", > "name": "optional", > "parameters": { > "shouldRun": "" > }, > "child": { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "wallCollision", > "type": "action", > "name": "wallCollision", > "parameters": { > "direction": "facingDirection" > } > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "playSound", > "type": "action", > "name": "playSound", > "parameters": { > "sound": "" > } > } > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "burstParticleEmitter", > "type": "action", > "name": "burstParticleEmitter", > "parameters": { > "emitter": "" > } > } > } > ] 356c514,558 < ] --- > }, > { > "title": "timer", > "type": "action", > "name": "timer", > "parameters": { > "time": "" > } > } > ] > } > ] > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "state": "", > "type": "body" > } > } > }, > { > "title": "parallel", > "type": "composite", > "name": "parallel", > "parameters": { > "fail": -1, > "success": -1 > }, > "children": [ > { > "title": "controlApproachVelocityAlongAngle", > "type": "action", > "name": "controlApproachVelocityAlongAngle", > "parameters": { > "angle": "aimAngle", > "velocity": 0, > "force": "" 364c566 < "time": "" --- > "time": "" 372c574 < "title": "succeeder", --- > "title": "optional", 374,375c576,579 < "name": "succeeder", < "parameters": {}, --- > "name": "optional", > "parameters": { > "shouldRun": "" > }, 377c581 < "title": "setAnimationState", --- > "title": "rotate", 379c583 < "name": "setAnimationState", --- > "name": "rotate", 381,382c585,586 < "state": "", < "type": "body" --- > "angle": 0, > "rate": 0 384,391d587 < } < }, < { < "title": "timer", < "type": "action", < "name": "timer", < "parameters": { < "time": "" behaviors\monsters\modular\actions\fire.behavior 4a5 > "/scripts/actions/math.lua", 7,8c8 < "/scripts/actions/time.lua", < "/scripts/actions/math.lua" --- > "/scripts/actions/time.lua" 36c36,37 < "windupStopForce": 0 --- > "windupStopForce": 0, > "maxYRange": 0 76,78c77,79 < "title": "entityInRange", < "type": "action", < "name": "entityInRange", --- > "title": "sequence", > "type": "composite", > "name": "sequence", 80,83c81,186 < "entity": "target", < "range": "", < "position": "self" < } --- > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "selector", > "type": "composite", > "name": "selector", > "parameters": {}, > "children": [ > { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "greaterThan", > "type": "action", > "name": "greaterThan", > "parameters": { > "first": "", > "second": 0 > } > } > }, > { > "title": "entityInRange", > "type": "action", > "name": "entityInRange", > "parameters": { > "entity": "target", > "yRange": "", > "position": "self" > } > } > ] > }, > { > "title": "selector", > "type": "composite", > "name": "selector", > "parameters": {}, > "children": [ > { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "greaterThan", > "type": "action", > "name": "greaterThan", > "parameters": { > "first": "", > "second": 0 > } > } > }, > { > "title": "entityInRange", > "type": "action", > "name": "entityInRange", > "parameters": { > "entity": "target", > "yRange": "", > "position": "self" > } > } > ] > }, > { > "title": "selector", > "type": "composite", > "name": "selector", > "parameters": {}, > "children": [ > { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "greaterThan", > "type": "action", > "name": "greaterThan", > "parameters": { > "first": "", > "second": 0 > } > } > }, > { > "title": "entityInRange", > "type": "action", > "name": "entityInRange", > "parameters": { > "entity": "target", > "range": "", > "position": "self" > } > } > ] > } > ] behaviors\monsters\modular\actions\invulnerable.behavior 2a3 > "description": "", 16,17c17 < < "invulnerableActions" : [] --- > "invulnerableActions": [] 54c54 < "title": "parallel", --- > "title": "cleanup", 56,60c56,57 < "name": "parallel", < "parameters": { < "fail": -1, < "success": 1 < }, --- > "name": "cleanup", > "parameters": {}, 68c65 < "success": -1 --- > "success": 1 72,74c69,71 < "title": "addEphemeralEffect", < "type": "action", < "name": "addEphemeralEffect", --- > "title": "parallel", > "type": "composite", > "name": "parallel", 76,77c73,108 < "name": "maxprotection" < } --- > "fail": -1, > "success": -1 > }, > "children": [ > { > "title": "addEphemeralEffect", > "type": "action", > "name": "addEphemeralEffect", > "parameters": { > "name": "maxprotection" > } > }, > { > "title": "damageTakenActions", > "type": "action", > "name": "selectorActions", > "parameters": { > "actions": "" > } > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "state": "", > "type": "body" > } > } > } > ] 80c111 < "title": "damageTakenActions", --- > "title": "timer", 82c113 < "name": "selectorActions", --- > "name": "timer", 84,99c115 < "actions": "" < } < }, < { < "title": "succeeder", < "type": "decorator", < "name": "succeeder", < "parameters": {}, < "child": { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "", < "type": "body" < } --- > "time": "" 104a121,143 > "title": "removeEphemeralEffect", > "type": "action", > "name": "removeEphemeralEffect", > "parameters": { > "name": "maxprotection" > } > }, > { > "title": "succeeder", > "type": "decorator", > "name": "succeeder", > "parameters": {}, > "child": { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "state": "", > "type": "body" > } > } > }, > { 109c148 < "time": "" --- > "time": "" 113,143d151 < }, < { < "title": "removeEphemeralEffect", < "type": "action", < "name": "removeEphemeralEffect", < "parameters": { < "name": "maxprotection" < } < }, < { < "title": "succeeder", < "type": "decorator", < "name": "succeeder", < "parameters": {}, < "child": { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "", < "type": "body" < } < } < }, < { < "title": "timer", < "type": "action", < "name": "timer", < "parameters": { < "time": "" < } behaviors\monsters\modular\movement\crawlapproach.behavior 2a3 > "description": "", 6,7c7,8 < "/scripts/actions/crawling.lua", < "/scripts/actions/movement.lua" --- > "/scripts/actions/movement.lua", > "/scripts/actions/crawling.lua" 59c60 < "title": "crawlFaceDirection", --- > "title": "faceDirection", 61c62 < "name": "crawlFaceDirection", --- > "name": "faceDirection", 111,118d111 < "title": "faceDirection", < "type": "action", < "name": "faceDirection", < "parameters": { < "direction": "crawlDirection" < } < }, < { 124,131d116 < } < }, < { < "title": "resetTransformationGroup", < "type": "action", < "name": "resetTransformationGroup", < "parameters": { < "transformationGroup": "facing" behaviors\monsters\modular\movement\crawlidle.behavior 10,11c10 < "parameters": { < }, --- > "parameters": {}, 64c63 < "title": "crawlFaceDirection", --- > "title": "faceDirection", 66c65 < "name": "crawlFaceDirection", --- > "name": "faceDirection", 112,119d110 < } < }, < { < "title": "resetTransformationGroup", < "type": "action", < "name": "resetTransformationGroup", < "parameters": { < "transformationGroup": "facing" behaviors\monsters\modular\movement\crawlwander.behavior 6d5 < "/scripts/actions/crawling.lua", 7a7 > "/scripts/actions/crawling.lua", 17c17 < "title": "cleanup", --- > "title": "parallel", 19,20c19,23 < "name": "cleanup", < "parameters": {}, --- > "name": "parallel", > "parameters": { > "fail": 1, > "success": 2 > }, 23c26 < "title": "parallel", --- > "title": "sequence", 25c28 < "name": "parallel", --- > "name": "sequence", 27,28c30,33 < "fail": 1, < "success": 2 --- > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" 32c37,63 < "title": "sequence", --- > "title": "setDirection", > "type": "action", > "name": "setDirection", > "parameters": {}, > "output": { > "direction": "crawlDirection" > } > }, > { > "title": "faceDirection", > "type": "action", > "name": "faceDirection", > "parameters": { > "direction": "crawlDirection" > } > }, > { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "state": "walk", > "type": "body" > } > }, > { > "title": "parallel", 34c65 < "name": "sequence", --- > "name": "parallel", 36,39c67,68 < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" --- > "fail": 1, > "success": 1 43,52c72 < "title": "setDirection", < "type": "action", < "name": "setDirection", < "parameters": {}, < "output": { < "direction": "crawlDirection" < } < }, < { < "title": "crawlFaceDirection", --- > "title": "crawl", 54c74 < "name": "crawlFaceDirection", --- > "name": "crawl", 57,74d76 < } < }, < { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "walk", < "type": "body" < } < }, < { < "title": "parallel", < "type": "composite", < "name": "parallel", < "parameters": { < "fail": 1, < "success": 1 76,112c78,79 < "children": [ < { < "title": "crawl", < "type": "action", < "name": "crawl", < "parameters": { < "direction": "crawlDirection" < }, < "output": { < "headingAngle": "heading" < } < }, < { < "title": "timer", < "type": "action", < "name": "timer", < "parameters": { < "time": "" < } < } < ] < }, < { < "title": "halt", < "type": "action", < "name": "halt", < "parameters": {} < }, < { < "title": "setVelocity", < "type": "action", < "name": "setVelocity", < "parameters": { < "velocity": [ < 0, < 0 < ] --- > "output": { > "headingAngle": "heading" 116c83 < "title": "setAnimationState", --- > "title": "timer", 118c85 < "name": "setAnimationState", --- > "name": "timer", 120,121c87 < "state": "idle", < "type": "body" --- > "time": "" 127,129c93,95 < "title": "sequence", < "type": "composite", < "name": "sequence", --- > "title": "setVelocity", > "type": "action", > "name": "setVelocity", 131,154c97,110 < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" < }, < "children": [ < { < "title": "resetTransformationGroup", < "type": "action", < "name": "resetTransformationGroup", < "parameters": { < "transformationGroup": "body" < } < }, < { < "title": "rotateTransformationGroup", < "type": "action", < "name": "rotateTransformationGroup", < "parameters": { < "transformationGroup": "body", < "angle": "heading" < } < } < ] --- > "velocity": [ > 0, > 0 > ] > } > }, > { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "state": "idle", > "type": "body" > } 159,161c115,117 < "title": "resetTransformationGroup", < "type": "action", < "name": "resetTransformationGroup", --- > "title": "sequence", > "type": "composite", > "name": "sequence", 163,164c119,142 < "transformationGroup": "facing" < } --- > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "resetTransformationGroup", > "type": "action", > "name": "resetTransformationGroup", > "parameters": { > "transformationGroup": "body" > } > }, > { > "title": "rotateTransformationGroup", > "type": "action", > "name": "rotateTransformationGroup", > "parameters": { > "transformationGroup": "body", > "angle": "heading" > } > } > ] behaviors\monsters\modular\movement\jump.behavior 2a3 > "description": "", 17c18 < "title": "cleanup", --- > "title": "sequence", 19,20c20,26 < "name": "cleanup", < "parameters": {}, --- > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, 23,25c29,40 < "title": "sequence", < "type": "composite", < "name": "sequence", --- > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "state": "", > "type": "body" > } > }, > { > "title": "multiply", > "type": "action", > "name": "multiply", 27,30c42,43 < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" --- > "number": "", > "factor": "facingDirection" 31a45,70 > "output": { > "result": "xSpeed" > } > }, > { > "title": "setVelocity", > "type": "action", > "name": "setVelocity", > "parameters": { > "x": "xSpeed", > "y": "" > } > }, > { > "title": "timer", > "type": "action", > "name": "timer", > "parameters": { > "time": 0.1 > } > }, > { > "title": "dynamic", > "type": "composite", > "name": "dynamic", > "parameters": {}, 34,60c73,121 < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "", < "type": "body" < } < }, < { < "title": "multiply", < "type": "action", < "name": "multiply", < "parameters": { < "number": "", < "factor": "facingDirection" < }, < "output": { < "result": "xSpeed" < } < }, < { < "title": "setVelocity", < "type": "action", < "name": "setVelocity", < "parameters": { < "x": "xSpeed", < "y": "" --- > "title": "failer", > "type": "decorator", > "name": "failer", > "parameters": {}, > "child": { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "velocity", > "type": "action", > "name": "velocity", > "parameters": {}, > "output": { > "y": "currentYVel" > } > }, > { > "title": "inverter", > "type": "decorator", > "name": "inverter", > "parameters": {}, > "child": { > "title": "greaterThan", > "type": "action", > "name": "greaterThan", > "parameters": { > "first": "currentYVel", > "second": 0 > } > } > }, > { > "title": "setAnimationState", > "type": "action", > "name": "setAnimationState", > "parameters": { > "state": "", > "type": "body" > } > } > ] 64c125 < "title": "timer", --- > "title": "onGround", 66,69c127,128 < "name": "timer", < "parameters": { < "time": 0.1 < } --- > "name": "onGround", > "parameters": {} 72c131 < "title": "dynamic", --- > "title": "parallel", 74,75c133,137 < "name": "dynamic", < "parameters": {}, --- > "name": "parallel", > "parameters": { > "fail": -1, > "success": -1 > }, 78,126c140,145 < "title": "failer", < "type": "decorator", < "name": "failer", < "parameters": {}, < "child": { < "title": "sequence", < "type": "composite", < "name": "sequence", < "parameters": { < "type": "sliding", < "state": "off", < "fromEntity": "attackTarget", < "toEntity": "fleeTarget" < }, < "children": [ < { < "title": "velocity", < "type": "action", < "name": "velocity", < "parameters": {}, < "output": { < "y": "currentYVel" < } < }, < { < "title": "inverter", < "type": "decorator", < "name": "inverter", < "parameters": {}, < "child": { < "title": "greaterThan", < "type": "action", < "name": "greaterThan", < "parameters": { < "first": "currentYVel", < "second": 0 < } < } < }, < { < "title": "setAnimationState", < "type": "action", < "name": "setAnimationState", < "parameters": { < "state": "", < "type": "body" < } < } < ] --- > "title": "controlApproachXVelocity", > "type": "action", > "name": "controlApproachXVelocity", > "parameters": { > "velocity": "xSpeed", > "force": "" 130c149 < "title": "onGround", --- > "title": "runner", 132c151 < "name": "onGround", --- > "name": "runner", 134,159d152 < }, < { < "title": "parallel", < "type": "composite", < "name": "parallel", < "parameters": { < "fail": -1, < "success": -1 < }, < "children": [ < { < "title": "controlApproachXVelocity", < "type": "action", < "name": "controlApproachXVelocity", < "parameters": { < "velocity": "xSpeed", < "force": "" < } < }, < { < "title": "runner", < "type": "action", < "name": "runner", < "parameters": {} < } < ] behaviors\monsters\modular\movement\walkapproach.behavior 19c19,20 < "minXRange": 2 --- > "minXRange": 2, > "run": false 114c115 < "state": "walk", --- > "state": "", 124c125 < "run": false --- > "run": "" behaviors\monsters\modular\movement\walkwander.behavior 3d2 < "description": "", 10c9,10 < "wanderTime": 3 --- > "wanderTime": 3, > "moveState": "walk" 54c54 < "state": "walk", --- > "state": "", behaviors\npc\idle.behavior 6d5 < "/scripts/actions/quests.lua", 9a9 > "/scripts/actions/quests.lua", 10a11 > "/scripts/actions/movement.lua", 221a223,345 > { > "type": "composite", > "name": "selector", > "parameters": {}, > "children": [ > { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "receivedNotification", > "type": "action", > "name": "receivedNotification", > "parameters": { > "type": "questOfferAccepted" > }, > "output": { > "source": "reactTarget" > } > }, > { > "title": "faceEntity", > "type": "action", > "name": "faceEntity", > "parameters": { > "entity": "reactTarget" > } > }, > { > "title": "setInfluence", > "type": "action", > "name": "setInfluence", > "parameters": { > "influence": "questaccepted" > }, > "output": { > "influence": "influence" > } > }, > { > "title": "react", > "type": "module", > "name": "react", > "parameters": { > "sendInfluence": false, > "faceReactTarget": true > } > }, > { > "title": "finalreact", > "type": "module", > "name": "finalreact", > "parameters": {} > } > ] > }, > { > "title": "sequence", > "type": "composite", > "name": "sequence", > "parameters": { > "type": "sliding", > "state": "off", > "fromEntity": "attackTarget", > "toEntity": "fleeTarget" > }, > "children": [ > { > "title": "receivedNotification", > "type": "action", > "name": "receivedNotification", > "parameters": { > "type": "questOfferDeclined" > }, > "output": { > "source": "reactTarget" > } > }, > { > "title": "faceEntity", > "type": "action", > "name": "faceEntity", > "parameters": { > "entity": "reactTarget" > } > }, > { > "title": "setInfluence", > "type": "action", > "name": "setInfluence", > "parameters": { > "influence": "questdeclined" > }, > "output": { > "influence": "influence" > } > }, > { > "title": "react", > "type": "module", > "name": "react", > "parameters": { > "sendInfluence": false, > "faceReactTarget": true > } > }, > { > "title": "finalreact", > "type": "module", > "name": "finalreact", > "parameters": {} > } > ] > } > ] > }, dialog\quest.config 396a397,432 > }, > "human" : { > "default" : [ > "Here you go! One , just for !", > "Here's the you need!" > ] > }, > "apex" : { > "default" : [ > "Here is the you need. I hope it serves you well.", > "Here is the that needs!" > ] > }, > "avian" : { > "default" : [ > "Here is the ! I hope it serves well.", > "This is what needed, correct?" > ] > }, > "floran" : { > "default" : [ > "Here isss the , give it to for me!", > "Here isss the for !" > ] > }, > "glitch" : { > "default" : [ > "Welcoming. I hope likes their new !", > "Friendly. Please take this to - I hope they like it!" > ] > }, > "hylotl" : { > "default" : [ > "Here is the - I hope it brings happiness.", > "I hope this brings you and peace." > ] 406a443,478 > }, > "human" : { > "default" : [ > "Here's the you needed me to make!", > "Here's one I made earlier!" > ] > }, > "apex" : { > "default" : [ > "You need me to make something? One , coming right up.", > "Here's the you needed me to make for you." > ] > }, > "avian" : { > "default" : [ > "Here's the you needed me to make!", > "? Here, I made one already. Feel free to take it." > ] > }, > "floran" : { > "default" : [ > "Floran made thisss for you, asss requested!", > "Here isss the you wanted Floran to make!" > ] > }, > "glitch" : { > "default" : [ > "Generous. You're in luck - I made this earlier. Take it.", > "Efficient. I've already made the - Please take it." > ] > }, > "hylotl" : { > "default" : [ > "I've made you the you need - Crafted with true Hylotl skill.", > "? I can make one of those for you. Here you go." > ] 416a489,524 > }, > "human" : { > "default" : [ > "Fine, can borrow my item. Will you bring it back eventually?", > "Sure, I can lend my . " > ] > }, > "apex" : { > "default" : [ > "Here is the wants to borrow. I suspect I won't be getting it back.", > " can borrow my , I just hope they give it back..." > ] > }, > "avian" : { > "default" : [ > "I don't mind borrowing my as long as they bring it back eventually!", > " can borrow my ! As long as they give it back to me when they're done." > ] > }, > "floran" : { > "default" : [ > "Floran can lend , asss long as Floran gets it back ssssoon.", > "Here's the for , Floran doesssn't mind." > ] > }, > "glitch" : { > "default" : [ > "Generous. Here is my - Just tell to give it back soon!", > "Friendly. can borrow my if they need it!" > ] > }, > "hylotl" : { > "default" : [ > "I will gladly lend my .", > " can lend my if they have need of it!" > ] 425a534,569 > ] > }, > "human" : { > "default" : [ > "H-here, take my . Just d-don't hurt me!", > " can have my , just don't h-hurt me!" > ] > }, > "apex" : { > "default" : [ > "I know this is extortion, but I value my safety. Take my ...", > "Just take the - I value my safety, okay!" > ] > }, > "avian" : { > "default" : [ > "Don't ruffle my feathers any more - Just take my !", > "Don't hurt me! J-just take my !" > ] > }, > "floran" : { > "default" : [ > "Floran doesn't want to ssstart fight! Take !", > "Floran will help ! T-take Floran's !" > ] > }, > "glitch" : { > "default" : [ > "Petrified. I don't want to get hurt! Take my if that's what you need!", > "Terrified. I don't want to be mad with me - Take my if that's what you want!" > ] > }, > "hylotl" : { > "default" : [ > "Take my , and leave me in peace, I beg of you!", > "Don't upset my zen any further - Take my if you need it!" dungeons\microdungeons\underground\underground1b\underground1bmicrodungeons.dungeon 8c8 < "anchor" : [ "underground1b_open1", "underground1b_tunnelBackSlope1", "underground1b_tunnelForwardSlope1", "underground1b_tunnel1", "underground1b_tunnelWeakBackSlope1", "underground1b_tunnelWeakForwardSlope1" ], --- > "anchor" : [ "underground1b_open1","underground1b_open2", "underground1b_tunnelBackSlope1", "underground1b_tunnelBackSlope2", "underground1b_tunnelForwardSlope1", "underground1b_tunnelForwardSlope2", "underground1b_tunnel1", "underground1b_tunnel2", "underground1b_tunnelWeakBackSlope1", "underground1b_tunnelWeakBackSlope2", "underground1b_tunnelWeakForwardSlope1", "underground1b_tunnelWeakForwardSlope2" ], 24a25,31 > "name" : "underground1b_open2", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "underground1b_open2.json" ] > }, > { 31a39,45 > "name" : "underground1b_tunnelBackSlope2", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "underground1b_tunnelBackSlope2.json" ] > }, > { 38a53,59 > "name" : "underground1b_tunnelForwardSlope2", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "underground1b_tunnelForwardSlope2.json" ] > }, > { 45a67,73 > "name" : "underground1b_tunnel2", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "underground1b_tunnel2.json" ] > }, > { 52a81,87 > "name" : "underground1b_tunnelWeakBackSlope2", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "underground1b_tunnelWeakBackSlope2.json" ] > }, > { 57a93,99 > }, > { > "name" : "underground1b_tunnelWeakForwardSlope2", > "rules" : [ > [ "maxSpawnCount", [1] ] > ], > "def" : [ "tmx", "underground1b_tunnelWeakForwardSlope2.json" ] interface\windowconfig\newquest.config 43c43 < "position" : [0, 0], --- > "position" : [0, 10], 50c50 < "zlevel" : -10 --- > "zlevel" : -20 89c89,91 < "scale" : 1.5, --- > "maxSize" : [75, 75], > "minSize" : [75, 75], > "scale" : 1.5 104c106 < "position" : [104, 32], --- > "position" : [64, 32], 105a108,114 > }, > "btnDecline" : { > "type" : "button", > "base" : "/interface/quests/newquest/acceptUp.png", > "hover" : "/interface/quests/newquest/acceptOver.png", > "position" : [144, 32], > "caption" : "DECLINE" interface\windowconfig\newquestshort.config 71c71 < "position" : [104, 32], --- > "position" : [64, 32], 72a73,79 > }, > "btnDecline" : { > "type" : "button", > "base" : "/interface/quests/newquest/acceptUp.png", > "hover" : "/interface/quests/newquest/acceptOver.png", > "position" : [144, 32], > "caption" : "DECLINE" interface\windowconfig\questcomplete.config 17c17 < "file" : "/interface/quests/questcomplete/shine.png", --- > "file" : "/interface/quests/questcomplete2/shine.png", interface\windowconfig\questfailed.config 17,18c17,18 < "file" : "/interface/quests/questcomplete/shine.png", < "position" : [0, 0], --- > "file" : "/interface/quests/questfailed/shine.png", > "position" : [0, 12], 25c25 < "zlevel" : -10 --- > "zlevel" : -20 interface\windowconfig\questlog.config 64c64 < "labelMoney" : { --- > "labelRewards" : { 76c76 < "labelMoneyAmount" : { --- > "labelMoneyAmount" : { 93c93,95 < "offset" : [35, 10] --- > "offset" : [25, 10], > "maxSize" : [75, 75], > "minSize" : [75, 75] 98c100,101 < "fontSize" : 8, --- > "fontSize" : 4, > "charLimit" : 12, 123c126 < "wrapWidth" : 111, --- > "wrapWidth" : 150, 126c129 < "color" : [155, 227, 214] --- > "color" : "white" 163c166 < "position" : [80, 9], --- > "position" : [82, 9], items\active\weapons\fist\fistweapon.lua 14,15c14,22 < local primaryAttack = Punch:new(item.instanceValue("primaryAttack"), item.instanceValue("stances")) < self.weapon:addAbility(primaryAttack) --- > self.primaryAttack = Punch:new(item.instanceValue("primaryAttack"), item.instanceValue("stances")) > self.weapon:addAbility(self.primaryAttack) > > local comboFinisherConfig = item.instanceValue("comboFinisher") > for _, script in ipairs(comboFinisherConfig.scripts) do > require(script) > end > self.comboFinisher = setupComboFinisher(comboFinisherConfig) > self.weapon:addAbility(self.comboFinisher) 17a25,29 > > self.comboStep = 0 > self.comboSteps = item.instanceValue("comboSteps") > self.comboTiming = item.instanceValue("comboTiming") > self.comboCooldown = item.instanceValue("comboCooldown") 22a35,74 > if self.comboStep > 0 then > if self.comboStep > 1 and item.instanceValue("comboHoldPosition") then > mcontroller.controlApproachVelocity({0,0}, 500) > end > > self.comboTimer = self.comboTimer + dt > if self.comboTimer > self.comboTiming[2] then > resetFistCombo() > end > end > > if fireMode == "primary" and (self.lastFireMode ~= "primary" or not item.instanceValue("needsEdgeTrigger")) then > if self.comboStep > 0 and self.comboTimer >= self.comboTiming[1] then > if self.comboStep % 2 == 0 then > if self.primaryAttack:canStartAttack() then > if self.comboStep == self.comboSteps then > -- sb.logInfo("%s fist starting a combo finisher", activeItem.hand()) > self.comboFinisher:startAttack() > else > self.primaryAttack:startAttack() > -- sb.logInfo("%s fist continued the combo", activeItem.hand()) > advanceFistCombo() > end > end > elseif activeItem.callOtherHandScript("triggerComboAttack", self.comboStep) then > -- sb.logInfo("%s fist triggered opposing attack", activeItem.hand()) > advanceFistCombo() > end > else > if self.primaryAttack:canStartAttack() then > self.primaryAttack:startAttack() > if activeItem.callOtherHandScript("resetFistCombo") then > -- sb.logInfo("%s fist started a combo", activeItem.hand()) > advanceFistCombo() > end > end > end > end > self.lastFireMode = fireMode > 28a81,83 > if unloaded then > activeItem.callOtherHandScript("resetFistCombo") > end 30,31d84 < < activeItem.callOtherHandScript("fistBump", nil) 33a87 > -- update which image we're using and keep the weapon visually in front of the hand 37c91,129 < end \ No newline at end of file --- > end > > -- called remotely to attempt to perform a combo-continuing attack > function triggerComboAttack(comboStep) > if self.primaryAttack:canStartAttack() then > -- sb.logInfo("%s fist received combo trigger for combostep %s", activeItem.hand(), comboStep) > if comboStep == self.comboSteps then > self.comboFinisher:startAttack() > else > self.primaryAttack:startAttack() > end > return true > else > return false > end > end > > -- advance to the next step of the combo > function advanceFistCombo() > self.comboTimer = 0 > if self.comboStep < self.comboSteps then > -- sb.logInfo("%s fist advancing combo from step %s to %s", activeItem.hand(), self.comboStep, self.comboStep + 1) > self.comboStep = self.comboStep + 1 > end > end > > -- interrupt the combo for various reasons > function resetFistCombo() > -- sb.logInfo("%s fist resetting combo from step %s to 0", activeItem.hand(), self.comboStep) > self.comboStep = 0 > self.comboTimer = nil > return true > end > > -- complete the combo, reset and trigger cooldown > function finishFistCombo() > resetFistCombo() > self.primaryAttack.cooldownTimer = self.comboCooldown > end items\active\weapons\fist\punch.lua 9c9 < --- > 17,20d16 < < self.weapon.comboStep = 1 < self.weapon.comboTimer = 0 < self.weapon.comboTimeout = self.comboTimeout 28,32c24 < self.weapon.comboTimer = math.max(0, self.weapon.comboTimer - self.dt) < if self.weapon.comboTimer == 0 and self.weapon.comboStep > 1 then < -- sb.logInfo("Combo with %s fist timed out", activeItem.hand()) < self.weapon.comboStep = 1 < end --- > end 34,36c26,32 < if not self.weapon.currentAbility and self.fireMode == "primary" and self.cooldownTimer == 0 then < self:setState(self.windup) < end --- > function Punch:canStartAttack() > return not self.weapon.currentAbility and self.cooldownTimer == 0 > end > > -- used by fist weapon combo system > function Punch:startAttack() > self:setState(self.windup) 62,66c58 < if self.weapon.comboStep == self.comboSteps then < self:setState(self.special) < else < self:setState(self.fire) < end --- > self:setState(self.fire) 77,93c69 < status.addEphemeralEffect("invulnerable", self.stances.fire.duration) < < self.damageConfig.knockback = self.knockback[self.weapon.comboStep] < < -- sb.logInfo("Attacking with %s fist on combo step %s", activeItem.hand(), self.weapon.comboStep) < < local comboStep = self.weapon.comboStep < local hitListener = damageListener("inflictedHits", function(notifications) < -- sb.logInfo("Received notifications: %s", notifications) < for _,notification in pairs(notifications) do < if notification.damageSourceKind == "fist" then < -- sb.logInfo("Hit with %s fist, setting other fist combo to %s", activeItem.hand(), comboStep + 1) < activeItem.callOtherHandScript("fistBump", comboStep + 1) < break < end < end < end) --- > status.addEphemeralEffect("invulnerable", self.stances.fire.duration + 0.05) 101,136c77 < if math.abs(mcontroller.xVelocity()) < self.stances.fire.xVelocity then < mcontroller.setXVelocity(self.stances.fire.xVelocity * self.weapon.aimDirection) < mcontroller.controlMove(self.weapon.aimDirection, false) < end < end < < hitListener:update() < end) < < self.cooldownTimer = self:cooldownTime() < end < < -- State: special < function Punch:special() < self.weapon:setStance(self.stances.special) < self.weapon:updateAim() < < animator.setAnimationState("attack", "special") < animator.playSound("special") < < status.addEphemeralEffect("invulnerable", self.stances.special.duration) < < self.damageConfig.knockback = self.knockback[self.weapon.comboStep] < < -- sb.logInfo("Finishing combo with %s fist", activeItem.hand()) < < util.wait(self.stances.special.duration, function() < local damageArea = partDamageArea("specialswoosh") < < self.weapon:setDamage(self.damageConfig, damageArea, self.fireTime) < < if self.movePlayer and not mcontroller.crouching() then < if math.abs(mcontroller.xVelocity()) < self.stances.special.xVelocity then < mcontroller.setXVelocity(self.stances.special.xVelocity * self.weapon.aimDirection) < mcontroller.controlMove(self.weapon.aimDirection, false) < end --- > mcontroller.controlMove(self.weapon.aimDirection, false) 140d80 < self.weapon.comboStep = 1 148c88 < function Punch:uninit() --- > function Punch:uninit(unloaded) 150,161d89 < end < < -- receive combo notification from other fist < function fistBump(comboStep) < if comboStep then < -- sb.logInfo("%s fist received message setting comboStep to %s", activeItem.hand(), comboStep) < self.weapon.comboStep = comboStep < self.weapon.comboTimer = self.weapon.comboTimeout < else < sb.logInfo("%s received invalid notification with comboStep %s", activeItem.hand(), comboStep) < end < return true items\active\weapons\melee\altabilities\broadsword\giantsword\giantsword.altability 154,155c154,155 < "firecharge" : [ "/sfx/melee/charge_combo3.ogg" ], < "firefullwindup" : [ "/sfx/melee/charge_full3.ogg" ], --- > "firecharge" : [ "/sfx/melee/giantsword_charge_fire.ogg" ], > "firefullwindup" : [ "/sfx/melee/giantsword_charge_full.ogg" ], 157,158c157,158 < "electriccharge" : [ "/sfx/melee/charge_combo3.ogg" ], < "electricfullwindup" : [ "/sfx/melee/charge_full3.ogg" ], --- > "electriccharge" : [ "/sfx/melee/giantsword_charge_electric.ogg" ], > "electricfullwindup" : [ "/sfx/melee/giantsword_charge_full.ogg" ], 160,161c160,161 < "icecharge" : [ "/sfx/melee/charge_combo3.ogg" ], < "icefullwindup" : [ "/sfx/melee/charge_full3.ogg" ], --- > "icecharge" : [ "/sfx/melee/giantsword_charge_ice.ogg" ], > "icefullwindup" : [ "/sfx/melee/giantsword_charge_full.ogg" ], 163,164c163,164 < "poisoncharge" : [ "/sfx/melee/charge_combo3.ogg" ], < "poisonfullwindup" : [ "/sfx/melee/charge_full3.ogg" ], --- > "poisoncharge" : [ "/sfx/melee/giantsword_charge_poison.ogg" ], > "poisonfullwindup" : [ "/sfx/melee/giantsword_charge_full.ogg" ], items\active\weapons\melee\altabilities\broadsword\parry\parry.altability 52a53 > "guard" : [ "/sfx/melee/sword_guard.ogg" ], items\active\weapons\melee\altabilities\broadsword\parry\parry.lua 35a36 > animator.playSound("guard") items\active\weapons\melee\altabilities\broadsword\spinslash\spinslash.altability 45a46,48 > }, > "sounds" : { > "flail" : [ "/sfx/melee/spinslash.ogg" ] items\active\weapons\melee\altabilities\broadsword\spinslash\spinslash.lua 59c59 < animator.playSound("fire") --- > animator.playSound("flail") items\active\weapons\melee\altabilities\broadsword\spinslash\superspinslash.altability 15c15,18 < "transition" : "idle" --- > "transition" : "idle", > "properties" : { > "persistentSound" : "/sfx/melee/superspinslash.ogg" > } 52c55 < "scripts" : ["/items/active/weapons/melee/altabilities/broadsword/spinslash/spinslash.lua"], --- > "scripts" : ["/items/active/weapons/melee/altabilities/broadsword/spinslash/superspinslash.lua"], items\active\weapons\melee\altabilities\hammer\elementalaura\elementalaura.altability 27c27,28 < { "particle" : "electricswoosh2"} --- > { "particle" : "electricswoosh2"}, > { "particle" : "fastrisingelectric"} 41c42,43 < { "particle" : "fireswoosh2"} --- > { "particle" : "fireswoosh2"}, > { "particle" : "poisonaura"} items\active\weapons\melee\altabilities\hammer\elementalpillar\elementalpillar.altability 53c53 < "fireimpact" : [ "/sfx/gun/grenadeblastfire2.ogg" ], --- > "fireimpact" : [ "/sfx/gun/grenadeblast_fire2.ogg" ], 56c56 < "electricimpact" : [ "/sfx/gun/grenadeblastelectric2.ogg" ], --- > "electricimpact" : [ "/sfx/gun/grenadeblast_electric2.ogg" ], 59c59 < "iceimpact" : [ "/sfx/gun/grenadeblastice2.ogg" ], --- > "iceimpact" : [ "/sfx/gun/grenadeblast_ice2.ogg" ], 62c62 < "poisonimpact" : [ "/sfx/gun/grenadeblastpoison2.ogg" ] --- > "poisonimpact" : [ "/sfx/gun/grenadeblast_poison2.ogg" ] items\active\weapons\melee\altabilities\hammer\shockwave\shockwave.altability 53c53 < "fireimpact" : [ "/sfx/gun/grenadeblastfire2.ogg" ], --- > "fireimpact" : [ "/sfx/gun/grenadeblast_fire2.ogg" ], 56c56 < "electricimpact" : [ "/sfx/gun/grenadeblastelectric2.ogg" ], --- > "electricimpact" : [ "/sfx/gun/grenadeblast_electric2.ogg" ], 59c59 < "iceimpact" : [ "/sfx/gun/grenadeblastice2.ogg" ], --- > "iceimpact" : [ "/sfx/gun/grenadeblast_ice2.ogg" ], 62c62 < "poisonimpact" : [ "/sfx/gun/grenadeblastpoison2.ogg" ] --- > "poisonimpact" : [ "/sfx/gun/grenadeblast_poison2.ogg" ] items\active\weapons\ranged\remotegrenadelauncher\remotegrenadelauncher.animation 20c20 < "offset" : [3.25, 0.5] --- > "offset" : [3, 0.5] 24c24 < "offset" : [3.25, 0.5] --- > "offset" : [3, 0.5] 28c28 < "offset" : [3.25, 0.5] --- > "offset" : [3, 0.5] monsters\bmonster.lua 146,154d145 < function rotatePoly(angle) < local basePoly = mcontroller.baseParameters().standingPoly < local newPoly = {} < for i,point in pairs(basePoly) do < table.insert(newPoly, vec2.rotate(point, angle)) < end < self.collisionPoly = newPoly < end < 162c153 < immediate = true --- > a = 0 165,166c156,158 < local angle < while true do --- > local goalAngle = 0 > local angle = mcontroller.rotation() > repeat 170c162 < angle = math.atan(vector[2], vector[1]) --- > goalAngle = math.atan(vector[2], vector[1]) 172c164 < angle = BData:getNumber(args.angle) --- > goalAngle = BData:getNumber(args.angle) 174c166,172 < angle = angle + entity.configParameter("rotationOffset", 0) --- > goalAngle = (goalAngle + entity.configParameter("rotationOffset", 0)) % (math.pi*2) > if args.rate == 0 then break end > > local diff = util.angleDiff(angle, goalAngle) > local angleStep = args.rate * args.dt * util.toDirection(diff) > -- break if the angle went past the goal angle > if util.angleDiff(angle + angleStep, goalAngle) * diff < 0 then break end 176,177c174,177 < entity.rotateGroup("all", angle, args.immediate) < rotatePoly(entity.currentRotationAngle("all") or 0) --- > angle = angle + angleStep > entity.resetTransformationGroup("body") > entity.rotateTransformationGroup("body", angle) > mcontroller.setRotation(angle) 179,180d178 < diff = ((entity.currentRotationAngle("all") - angle) + 3.14) % 6.28 - 3.14 < if math.abs(diff) < 0.02 or args.immediate then break end 182c180 < end --- > until math.abs(util.angleDiff(angle, goalAngle)) < 0.02 184c182,184 < rotatePoly(angle) --- > entity.resetTransformationGroup("body") > entity.rotateTransformationGroup("body", goalAngle) > mcontroller.setRotation(goalAngle) monsters\boss\spiderboss\spiderboss.animation 139c139 < "rotationGroup" : "all" --- > "transformationGroups" : [ "body" ] 194c194 < "rotationGroup" : "all" --- > "transformationGroups" : [ "body" ] 252c252 < "rotationGroup" : "all" --- > "transformationGroups" : [ "body" ] 283,289c283,284 < "rotationGroups" : { < "all" : { < "angularVelocity" : 3 < }, < "projectileAim" : { < "angularVelocity" : 0.75 < } --- > "transformationGroups" : { > "body" : {"interpolated" : true} monsters\crawlers\crustoise\crustoise.monstertype 17a18,19 > "facingMode" : "transformation", > 76a79,84 > }, > { > "name" : "action-stop", > "parameters" : { > "stopForce" : 400 > } monsters\crawlers\triplod\triplod.monstertype 17a18,19 > "facingMode" : "transformation", > monsters\flyers\monopus\monopus.animation 7a8,15 > "idle" : { > "frames" : 8, > "cycle" : 0.75, > "mode" : "loop", > "frameProperties" : { > "immediateSound" : [ "/sfx/npc/monsters/batong_flap1.ogg", "", "", "", "/sfx/npc/monsters/batong_flap2.ogg", "", "", "" ] > } > }, 26c34 < "cycle" : 0.05, --- > "cycle" : 0.075, 51a60,64 > "idle" : { > "properties" : { > "image" : ":fly." > } > }, 64,65c77 < "image" : ":windup.", < "fullbright" : true --- > "image" : ":windup." 70,71c82 < "image" : ":charge.", < "fullbright" : true --- > "image" : ":charge." monsters\flyers\monopus\monopus.monstertype 15a16,17 > "rotationOffset" : 1.57, > 42a45 > "rotateToTarget" : true, 46a50 > "winddownStopForce" : 200, monsters\walkers\bulbop\bulbop.animation 19c19 < "immediateSound" : [ "", "/sfx/npc/monsters/gleap_hop.ogg" ] --- > "immediateSound" : [ "", "/sfx/npc/monsters/monster_hop.ogg" ] monsters\walkers\fennix\fennix.monstertype 44a45 > "maxYRange" : 2, 46c47 < "minimumRange" : 5, --- > "minimumRange" : 2, monsters\walkers\hypnare\hypnare.animation 28c28 < "immediateSound" : "/sfx/npc/monsters/hypnare_hop.ogg" --- > "immediateSound" : "/sfx/npc/monsters/monster_hop.ogg" monsters\walkers\nutmidge\nutmidge.animation 37a38,40 > }, > "break" : { > "frames" : 1 89a93,97 > }, > "break" : { > "properties" : { > "image" : ":break." > } 111,129c119 < "particles" : [ < { "particle" : "monstersplosion" }, < { "particle" : "deathember" }, < { "particle" : "deathember" }, < { "particle" : "deathember" }, < { "particle" : "deathember" }, < { "particle" : "deathember" }, < { "particle" : "deathember" }, < { "particle" : "deathember" }, < { "particle" : "deathember" }, < { "particle" : "deathfizz1left" }, < { "particle" : "deathfizz1right" }, < { "particle" : "deathfizz2left" }, < { "particle" : "deathfizz2right" }, < { "particle" : "deathfizz3left" }, < { "particle" : "deathfizz3right" }, < { "particle" : "deathfizz4left" }, < { "particle" : "deathfizz4right" } < ] --- > "particles" : [ ] monsters\walkers\nutmidge\nutmidge.monstertype 75a76,107 > ], > > "deathActions" : [ > { > "name" : "action-animate", > "parameters" : { > "stateType" : "body", > "state" : "break", > "animationTimer" : 0.25 > } > }, > { > "name" : "action-spawnmonster", > "parameters" : { > "offset" : [0,1], > "monsterType" : "kingnutmidgeling" > } > }, > { > "name" : "action-spawnmonster", > "parameters" : { > "offset" : [0,0], > "monsterType" : "nutmidgeling" > } > }, > { > "name" : "action-spawnmonster", > "parameters" : { > "offset" : [0,-1], > "monsterType" : "nutmidgeling" > } > } 110,113c142,143 < "knockoutTime" : 0.3, < "knockoutAnimationStates" : { < "body" : "hurt" < }, --- > "knockoutTime" : 0.0, > "knockoutAnimationStates" : {}, monsters\walkers\orbide\orbide.animation 27c27 < "immediateSound" : "/sfx/npc/monsters/gleap_hop.ogg", --- > "immediateSound" : "/sfx/npc/monsters/monster_hop.ogg", monsters\walkers\orbide\orbide.monstertype 29c29,38 < "foundTargetActions" : [ { "name" : "action-aggrohop" } ], --- > "foundTargetActions" : [ > { > "name" : "action-aggrohop", > "parameters" : { > "aggroHopSpeed" : 0, > "aggroHopWait" : 1.2, > "aggroHopState" : "" > } > } > ], 38,41c47,49 < "aimAtTarget" : true, < "chargeTime" : 0.5, < "chargeSpeed" : 75, < "chargeControlForce" : 450, --- > "chargeTime" : 0.35, > "chargeSpeed" : 100, > "chargeControlForce" : 900, 44a53 > "winddownStopForce" : 1000, 96c105 < "poly" : [ [1.0125, 2.25], [1.5125, 1.75], [1.5125, -2.8], [1.0125, -3.2], [-1.0125, -3.2], [-1.5125, -2.8], [-1.5125, 1.75], [-1.0125, 2.25] ], --- > "poly" : [ [0.3075, 1.5], [0.75, 1.06], [0.75, -2.93], [0.3075, -3.375], [-0.3075, -3.375], [-0.75, -2.93], [-0.75, 1.06], [-0.3075, 1.5] ], 109c118 < "collisionPoly" : [ [1.0125, 2.25], [1.5125, 1.75], [1.5125, -2.8], [1.0125, -3.2], [-1.0125, -3.2], [-1.5125, -2.8], [-1.5125, 1.75], [-1.0125, 2.25] ], --- > "collisionPoly" : [ [0.3075, 1.5], [0.75, 1.06], [0.75, -2.93], [0.3075, -3.375], [-0.3075, -3.375], [-0.75, -2.93], [-0.75, 1.06], [-0.3075, 1.5] ], monsters\walkers\peblit\peblit.animation 21c21 < "immediateSound" : "/sfx/npc/monsters/gleap_hop.ogg" --- > "immediateSound" : "/sfx/npc/monsters/monster_hop.ogg" monsters\walkers\pipkin\pipkin.animation 21c21 < "immediateSound" : "/sfx/npc/monsters/gleap_hop.ogg" --- > "immediateSound" : "/sfx/npc/monsters/monster_hop.ogg" monsters\walkers\poptop\poptop.animation 10c10,13 < "cycle" : 1 --- > "cycle" : 1, > "properties" : { > "particleEmittersOff" : [ "music" ] > } 12a16,23 > "frames" : 6, > "cycle" : 0.6, > "mode" : "loop", > "properties" : { > "particleEmittersOff" : [ "music" ] > } > }, > "run" : { 14,15c25,29 < "cycle" : 1, < "mode" : "loop" --- > "cycle" : 0.6, > "mode" : "loop", > "properties" : { > "particleEmittersOff" : [ "music" ] > } 19,20c33,37 < "cycle" : 0.5, < "mode" : "loop" --- > "cycle" : 0.6, > "mode" : "loop", > "properties" : { > "particleEmittersOn" : [ "music" ] > } 23,24c40,44 < "frames" : 1, < "cycle" : 0.5 --- > "frames" : 2, > "cycle" : 0.5, > "properties" : { > "particleEmittersOff" : [ "music" ] > } 27,28c47,51 < "frames" : 1, < "cycle" : 0.5 --- > "frames" : 2, > "cycle" : 0.5, > "properties" : { > "particleEmittersOff" : [ "music" ] > } 31,33c54,59 < "frames" : 1, < "cycle" : 1, < "mode" : "loop" --- > "frames" : 2, > "cycle" : 0.4, > "mode" : "loop", > "properties" : { > "particleEmittersOff" : [ "music" ] > } 37c63,66 < "cycle" : 0.1 --- > "cycle" : 0.1, > "properties" : { > "particleEmittersOff" : [ "music" ] > } 41c70,73 < "cycle" : 0.4 --- > "cycle" : 0.3, > "properties" : { > "particleEmittersOff" : [ "music" ] > } 44c76,79 < "frames" : 1 --- > "frames" : 1, > "properties" : { > "particleEmittersOff" : [ "music" ] > } 67a103,107 > "run" : { > "properties" : { > "image" : ":run." > } > }, 121a162,168 > "music" : { > "emissionRate" : 1, > "offsetRegion" : [ -0.0, 1.25, 0.0, 1.25 ], > "particles" : [ > { "particle" : "music" } > ] > }, monsters\walkers\poptop\poptop.frames 3,4c3,4 < "size" : [40, 40], < "dimensions" : [8, 5], --- > "size" : [48, 24], > "dimensions" : [11, 4], 7,11c7,10 < [ "idle.1" ], < [ "stroll.1", "stroll.2", "stroll.3", "stroll.4", "stroll.5", "stroll.6", "stroll.7", "stroll.8" ], < [ "run.1", "run.2", "run.3", "run.4", "run.5", "run.6", "run.7", "run.8" ], < [ "walk.1", "walk.2", "walk.3", "walk.4", "walk.5", "walk.6", "walk.7", "walk.8" ], < [ "charge.1", "charge.2", "charge.3", "charge.4" ] --- > [ null, "idle.1", null, "hurt.1", null, "walk.1", "walk.2", "walk.3", "walk.4", "walk.5", "walk.6" ], > [ null, "stroll.1", "stroll.2", "stroll.3", "stroll.4", "stroll.5", "stroll.6", "stroll.7", "stroll.8", null, "run.1" ], > [ "run.2", "run.3", "run.4", "run.5", "run.6", "run.7", "run.8", null, "jump.1", "jump.2", null ], > [ "fall.1", "fall.2", null, "windup.1", "windup.2", null, "charge.1", "charge.2", "charge.3", "charge.4" ] 15,18c14 < "winddown.1" : "idle.1", < "windup.1" : "idle.1", < "jump.1" : "run.3", < "fall.1" : "charge.4" --- > "winddown.1" : "idle.1" monsters\walkers\poptop\poptop.monstertype 40,42c40,42 < "aimDirection" : [1, 0.3], < "chargeTime" : [0.4, 0.4], < "chargeSpeed" : 60, --- > "aimDirection" : [1, 0.5], > "chargeTime" : [0.3, 0.3], > "chargeSpeed" : 25, 45c45 < "windupTime" : 1, --- > "windupTime" : 0.4, 61a62 > "moveState" : "run", 65c66,67 < "minXRange" : 10 --- > "minXRange" : 10, > "run" : true 73c75 < "cooldown" : 6.0, --- > "cooldown" : 3.0, 74a77 > "moveState" : "stroll", 76a80,87 > }, > { > "name" : "wander-walk", > "cooldown" : 6.0, > "parameters" : { > "moveState" : "walk", > "wanderTime" : [5, 5] > } 95c106 < "collisionPoly" : [ [0.8125, 1.25], [1.3125, 0.75], [1.3125, -1.05], [0.8125, -1.55], [-0.8125, -1.55], [-1.3125, -1.05], [-1.3125, 0.75], [-0.8125, 1.25] ], --- > "collisionPoly" : [ [0.8125, 1.25], [1.3125, 0.75], [1.3125, 0.10], [0.8125, -0.40], [-0.8125, -0.40], [-1.3125, 0.10], [-1.3125, 0.75], [-0.8125, 1.25] ], 98,99c109,110 < "walkSpeed" : 5, < "runSpeed" : 7, --- > "walkSpeed" : 2, > "runSpeed" : 5, npcs\default_reactions.config 135c135 < // hasquest reactions --- > // Quest reactions 138a139,148 > ], > > // Happens when a player accepts an NPC's quest > "questaccepted" : [ > [1.0, "smile"] > ], > > // Happens when a player declines an NPC's offered quest > "questdeclined" : [ > [1.0, "annoyed"] objects\colony\colonydeed\colonydeed.lua 108a109,123 > function isSubmultiset(multiset, sub) > for element, count in pairs(sub) do > if not multiset[element] or multiset[element] < count then > return false > end > end > return true > end > > function multisetSubtract(multiset, elements) > for element, count in pairs(elements) do > multiset[element] = math.max(0, (multiset[element] or 0) - count) > end > end > 110c125,127 < -- Used by the quest generator to determine what objects can be stolen: --- > -- Used by the quest generator to determine what objects can be stolen. > -- Objects are only stealable if removing them wouldn't cause the tenant's > -- tag criteria not to be met. 111a129 > local house = findHouseBoundary(self.position, self.maxPerimeter) 112a131,134 > > local spareTags = countTags(scanResults.objects, house.doors or {}) > multisetSubtract(spareTags, getTagCriteria()) > 115c137,141 < objects[#objects+1] = objectId --- > local objectTags = countObjectTags(objectId) > if isSubmultiset(spareTags, objectTags) then > multisetSubtract(spareTags, objectTags) > objects[#objects+1] = objectId > end objects\colony\colonydeed\scanning.lua 92a93,102 > function countObjectTags(objectId) > local tags = {} > local objectTags = world.objectConfigParameter(objectId, "tags", {}) > local spaces = #(world.objectSpaces(objectId)) > for _,tag in ipairs(objectTags) do > tags[tag] = (tags[tag] or 0) + spaces > end > return tags > end > 101,104c111,113 < local objectTags = world.objectConfigParameter(objectId, "tags", {}) < < for _,tag in ipairs(objectTags) do < tags[tag] = (tags[tag] or 0) + #(world.objectSpaces(objectId)) --- > local objectTags = countObjectTags(objectId) > for tag,count in pairs(objectTags) do > tags[tag] = (tags[tag] or 0) + count particles\music.particle 4a5 > "looping" : true, 7c8 < "finalVelocity" : [0, 10], --- > "finalVelocity" : [0, 2], 12,13c13,14 < "destructionTime" : 1, < "size" : 1.0, --- > "destructionTime" : 0.85, > "size" : 0.6, 16c17 < "initialVelocity" : [6.0, 3.0] --- > "initialVelocity" : [3.0, 1.0] projectiles\explosions\burstexplosion\electricburstexplosionfreeze.config 90c90 < "options" : [ "/sfx/gun/grenadeblastelectric1.ogg", "/sfx/gun/grenadeblastelectric2.ogg", "/sfx/gun/grenadeblastelectric3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_small_electric1.ogg", "/sfx/gun/grenadeblast_small_electric2.ogg", "/sfx/gun/grenadeblast_small_electric3.ogg" ] projectiles\explosions\burstexplosion\fireburstexplosionfreeze.config 137c137 < "options" : [ "/sfx/gun/grenadeblastfire1.ogg", "/sfx/gun/grenadeblastfire2.ogg", "/sfx/gun/grenadeblastfire3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_small_fire1.ogg", "/sfx/gun/grenadeblast_small_fire2.ogg", "/sfx/gun/grenadeblast_small_fire3.ogg" ] projectiles\explosions\burstexplosion\iceburstexplosionfreeze.config 137c137 < "options" : [ "/sfx/gun/grenadeblastice1.ogg", "/sfx/gun/grenadeblastice2.ogg", "/sfx/gun/grenadeblastice3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_small_ice1.ogg", "/sfx/gun/grenadeblast_small_ice2.ogg", "/sfx/gun/grenadeblast_small_ice3.ogg" ] projectiles\explosions\burstexplosion\poisonburstexplosionfreeze.config 122c122 < "options" : [ "/sfx/gun/grenadeblastpoison1.ogg", "/sfx/gun/grenadeblastpoison2.ogg", "/sfx/gun/grenadeblastpoison3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_small_poison1.ogg", "/sfx/gun/grenadeblast_small_poison2.ogg", "/sfx/gun/grenadeblast_small_poison3.ogg" ] projectiles\explosions\regularexplosion2\electricexplosionfreeze.config 90c90 < "options" : [ "/sfx/gun/grenadeblastelectric1.ogg", "/sfx/gun/grenadeblastelectric2.ogg", "/sfx/gun/grenadeblastelectric3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_electric1.ogg", "/sfx/gun/grenadeblast_electric2.ogg", "/sfx/gun/grenadeblast_electric3.ogg" ] projectiles\explosions\regularexplosion2\electricexplosionfreezestatus.config 93c93 < "options" : [ "/sfx/gun/grenadeblastelectric1.ogg", "/sfx/gun/grenadeblastelectric2.ogg", "/sfx/gun/grenadeblastelectric3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_electric1.ogg", "/sfx/gun/grenadeblast_electric2.ogg", "/sfx/gun/grenadeblast_electric3.ogg" ] projectiles\explosions\regularexplosion2\electricexplosionfreezeuniversal.config 90c90 < "options" : [ "/sfx/gun/grenadeblastelectric1.ogg", "/sfx/gun/grenadeblastelectric2.ogg", "/sfx/gun/grenadeblastelectric3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_electric1.ogg", "/sfx/gun/grenadeblast_electric2.ogg", "/sfx/gun/grenadeblast_electric3.ogg" ] projectiles\explosions\regularexplosion2\fireexplosionfreeze.config 92c92 < "options" : [ "/sfx/gun/grenadeblastfire1.ogg", "/sfx/gun/grenadeblastfire2.ogg", "/sfx/gun/grenadeblastfire3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_fire1.ogg", "/sfx/gun/grenadeblast_fire2.ogg", "/sfx/gun/grenadeblast_fire3.ogg" ] projectiles\explosions\regularexplosion2\fireexplosionfreezestatus.config 95c95 < "options" : [ "/sfx/gun/grenadeblastfire1.ogg", "/sfx/gun/grenadeblastfire2.ogg", "/sfx/gun/grenadeblastfire3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_fire1.ogg", "/sfx/gun/grenadeblast_fire2.ogg", "/sfx/gun/grenadeblast_fire3.ogg" ] projectiles\explosions\regularexplosion2\fireexplosionfreezeuniversal.config 92c92 < "options" : [ "/sfx/gun/grenadeblastfire1.ogg", "/sfx/gun/grenadeblastfire2.ogg", "/sfx/gun/grenadeblastfire3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_fire1.ogg", "/sfx/gun/grenadeblast_fire2.ogg", "/sfx/gun/grenadeblast_fire3.ogg" ] projectiles\explosions\regularexplosion2\iceexplosionfreeze.config 92c92 < "options" : [ "/sfx/gun/grenadeblastice1.ogg", "/sfx/gun/grenadeblastice2.ogg", "/sfx/gun/grenadeblastice3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_ice1.ogg", "/sfx/gun/grenadeblast_ice2.ogg", "/sfx/gun/grenadeblast_ice3.ogg" ] projectiles\explosions\regularexplosion2\iceexplosionfreezestatus.config 95c95 < "options" : [ "/sfx/gun/grenadeblastice1.ogg", "/sfx/gun/grenadeblastice2.ogg", "/sfx/gun/grenadeblastice3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_ice1.ogg", "/sfx/gun/grenadeblast_ice2.ogg", "/sfx/gun/grenadeblast_ice3.ogg" ] projectiles\explosions\regularexplosion2\iceexplosionfreezeuniversal.config 92c92 < "options" : [ "/sfx/gun/grenadeblastice1.ogg", "/sfx/gun/grenadeblastice2.ogg", "/sfx/gun/grenadeblastice3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_ice1.ogg", "/sfx/gun/grenadeblast_ice2.ogg", "/sfx/gun/grenadeblast_ice3.ogg" ] projectiles\explosions\regularexplosion2\poisonexplosionfreeze.config 93c93 < "options" : [ "/sfx/gun/grenadeblastpoison1.ogg", "/sfx/gun/grenadeblastpoison2.ogg", "/sfx/gun/grenadeblastpoison3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_poison1.ogg", "/sfx/gun/grenadeblast_poison2.ogg", "/sfx/gun/grenadeblast_poison3.ogg" ] projectiles\explosions\regularexplosion2\poisonexplosionfreezestatus.config 96c96 < "options" : [ "/sfx/gun/grenadeblastpoison1.ogg", "/sfx/gun/grenadeblastpoison2.ogg", "/sfx/gun/grenadeblastpoison3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_poison1.ogg", "/sfx/gun/grenadeblast_poison2.ogg", "/sfx/gun/grenadeblast_poison3.ogg" ] projectiles\explosions\regularexplosion2\poisonexplosionfreezeuniversal.config 93c93 < "options" : [ "/sfx/gun/grenadeblastpoison1.ogg", "/sfx/gun/grenadeblastpoison2.ogg", "/sfx/gun/grenadeblastpoison3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_poison1.ogg", "/sfx/gun/grenadeblast_poison2.ogg", "/sfx/gun/grenadeblast_poison3.ogg" ] projectiles\explosions\smallregularexplosion\smallregularexplosion.config 39c39 < "options" : [ "/sfx/gun/grenadeblast1.ogg", "/sfx/gun/grenadeblast2.ogg", "/sfx/gun/grenadeblast3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_small1.ogg", "/sfx/gun/grenadeblast_small2.ogg", "/sfx/gun/grenadeblast_small3.ogg" ] projectiles\explosions\vsmallregularexplosion\vsmallregularexplosion.config 20c20 < "options" : [ "/sfx/gun/grenadeblast1.ogg", "/sfx/gun/grenadeblast2.ogg", "/sfx/gun/grenadeblast3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_small1.ogg", "/sfx/gun/grenadeblast_small2.ogg", "/sfx/gun/grenadeblast_small3.ogg" ] projectiles\explosions\vsmallregularexplosion\vsmallregularexplosionfreeze.config 20c20 < "options" : [ "/sfx/gun/grenadeblast1.ogg", "/sfx/gun/grenadeblast2.ogg", "/sfx/gun/grenadeblast3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_small1.ogg", "/sfx/gun/grenadeblast_small2.ogg", "/sfx/gun/grenadeblast_small3.ogg" ] projectiles\explosions\vsmallregularexplosion\vsmallregularexplosionnodamage.config 20c20 < "options" : [ "/sfx/gun/grenadeblast1.ogg", "/sfx/gun/grenadeblast2.ogg", "/sfx/gun/grenadeblast3.ogg" ] --- > "options" : [ "/sfx/gun/grenadeblast_small1.ogg", "/sfx/gun/grenadeblast_small2.ogg", "/sfx/gun/grenadeblast_small3.ogg" ] projectiles\guns\unsorted\flamethrower\flamethrower.projectile 5a6 > "animationLoops" : false, 19c20,22 < "hydrophobic" : true --- > "hydrophobic" : true, > > "clientEntityMode" : "ClientSlaveOnly" projectiles\guns\unsorted\icethrower\icethrower.projectile 5a6 > "animationLoops" : false, projectiles\guns\unsorted\lightningthrower\lightningthrower.projectile 5a6 > "animationLoops" : false, projectiles\guns\unsorted\poisonthrower\poisonthrower.projectile 5a6 > "animationLoops" : false, projectiles\guns\unsorted\pollenpumpgas\pollenpumpgas.projectile 5a6 > "animationLoops" : false, projectiles\npcs\blueflame\blueflame.projectile 5a6 > "animationLoops" : false, projectiles\npcs\darkgas\darkgas.projectile 5a6 > "animationLoops" : false, projectiles\npcs\gas\gas.projectile 5a6 > "animationLoops" : false, projectiles\pillar\icepillar.projectile 19c19 < "emitters" : [ "barrierice" ], --- > "emitters" : [ "icepillar" ], 63a64,119 > } > } > }, > { > "action" : "particle", > "specification" : { > "type" : "animated", > "looping" : true, > "animation" : "/animations/shards/iceshard.animation", > "size" : 1, > "approach" : [30, 30], > "timeToLive" : 1, > "destructionAction" : "shrink", > "destructionTime" : 1, > "layer" : "middle", > "variance" : { > "position" : [0, 1.0], > "finalVelocity" : [5, 5], > "timeToLive" : 1 > } > } > }, > { > "action" : "particle", > "specification" : { > "type" : "animated", > "looping" : true, > "animation" : "/animations/shards/iceshard.animation", > "size" : 1, > "approach" : [30, 30], > "timeToLive" : 1, > "destructionAction" : "shrink", > "destructionTime" : 1, > "layer" : "middle", > "variance" : { > "position" : [0, 1.0], > "finalVelocity" : [5, 5], > "timeToLive" : 1 > } > } > }, > { > "action" : "particle", > "specification" : { > "type" : "animated", > "animation" : "/animations/elementalaura/iceaura/iceaura.animation", > "initialVelocity" : [0, 1], > "finalVelocity" : [0, 3], > "approach" : [1, 1], > "timeToLive" : 1.0, > "size" : 0.7, > "layer" : "back", > "variance" : { > "initialVelocity" : [4, 1], > "rotation" : 180, > "angularVelocity" : 20 projectiles\throwable\glowgas\glowgas.projectile 5a6 > "animationLoops" : false, projectiles\throwable\healinggas\healinggas.projectile 5a6 > "animationLoops" : false, projectiles\throwable\jumpgas\jumpgas.projectile 5a6 > "animationLoops" : false, projectiles\throwable\rungas\rungas.projectile 5a6 > "animationLoops" : false, projectiles\traps\jumpboostergas\jumpboostergas.projectile 5a6 > "animationLoops" : false, projectiles\traps\lowgravboostergas\lowgravboostergas.projectile 5a6 > "animationLoops" : false, projectiles\traps\powerboostergas\powerboostergas.projectile 5a6 > "animationLoops" : false, projectiles\traps\speedboostergas\speedboostergas.projectile 5a6 > "animationLoops" : false, quests\generated\normal.config 363a364 > ["!isDoor", "object"], quests\generated\subquests\add_object_to_house.questtemplate 45c45 < "Excited. Finally,^green; could you place the ^orange;^green; somewhere in my home? You should ^green;make some room^white; if necessary.", --- > "Excited. Finally, could you ^green; place the ^orange;^green; somewhere in my home? ^white;You should ^green;make some more room^white; if necessary.", quests\generated\subquests\bribe.questtemplate 24a25 > " attempts a bribe", 48,49c49,50 < "Manipulative. The next thing I'd like you to do is ^green;give ^orange; ^white;a very special something. I need them to receive ^green;the ^orange;^white; in order for the plan to work.", < "Nervous. Next I need the favour of ^orange;^green; - Try bribing them with the ^orange;^white; that should hopefully work..." --- > "Manipulative. The next thing I?ÇÖd like you to do is give ^orange; ^white;a very special something. ^green;I need them to receive the ^orange;^white; in order for the plan to work.", > "Nervous. Next I need the favour of ^orange;^green; - Try bribing them with the ^orange;^white;. That should hopefully work..." 63c64 < "Tense. It all comes down to this, . ^green;Present ^orange; ^green;with the ^orange;. ^white;In case they ask, it's definitely not some sort of bribe..." --- > "Tense. It all comes down to this. ^green;Present ^orange; ^green;with the ^orange;. ^white;In case they ask, it's definitely not some sort of bribe..." quests\generated\subquests\collect_fine.questtemplate 114c114 < "Grateful. Thank you for collecting 's fine! I certainly couldn't make time for it, but you seem to have plenty of time on your hands. Speaking of which... Do you think you could do something else for me?", --- > "Grateful. Thank you for collecting 's fine! I certainly couldn't make time for it, but you seem to have plenty of time on your hands.", 142c142 < "Pleased. Well done collecting the fine from ! That's one more thing I can cross off my to-do list. Hurrah!", --- > "Pleased. Well done collecting the fine from ! That's one more thing I can cross off my to-do list. Hooray!", 153a154 > "I failed to collect the fine from . Maybe should stop asking passers-by to do their job for them.,", quests\generated\subquests\collect_for_safekeeping.questtemplate 24c24 < "Eager. First things first, you'll need to ^green;speak to ^orange ^white;and ^green;borrow their ^orange. ^white;Just tell them I sent you, and they'll be happy to lend it to you.", --- > "Eager. First things first, you?ÇÖll need to ^green;speak to ^orange; ^white;and ^green;borrow their ^orange;. ^white;Just tell them I sent you, and they?ÇÖll be happy to lend it to you.", 38,39c38,39 < "Spontaneous. We'll need to ^green;borrow sylabus 's ^white;next. They'll not have a problem handing it over if you tell them I sent you over there.", < "Observant. A while back I saw ^orange;^white; showing off their new ^orange;. ^white;Pretty lucky for us, because we need one for our next task. ^green;Go and ask them if we can borrow it. " --- > "Spontaneous. We?ÇÖll need to ^green;borrow^orange; ?ÇÖs ^white;next. They?ÇÖll not have a problem handing it over if you ^green;tell them I sent you over there.", > "Observant. A while back I saw ^orange;^white; showing off their new ^orange;. ^white;Pretty lucky for us, because we need one for our next task. Go and ^green;ask them if we can borrow it. " quests\generated\subquests\collect_gift.questtemplate 34c34 < "Next, Floran heard that ^orange; ^green;hass a nice . ^white;Could you ^green;collect it for Floran^white;, pleassse?", --- > "Next, Floran heard that ^orange; ^white;hass a nice ^orange;. ^white;Could you ^green;collect it for Floran^white;, pleassse?", quests\generated\subquests\extort.questtemplate 39c39 < "Antagonistic. Now we can have a bit of fun! Go find ^orange; ^white;and ^green;pressure them into handing over their ^orange.^white; It shouldn't be too difficult, just mention that ^orange^white; sent you personally." --- > "Antagonistic. Now we can have a bit of fun! Go find ^orange; ^white;and ^green;pressure them into handing over their ^orange;.^white; It shouldn?ÇÖt be too difficult, just mention that ^orange^white; sent you personally." quests\generated\subquests\farming.questtemplate 44c44 < "Timid. I hope it's not too much to ask, but ^green;I need you to plant these ^orange;.^white; Once fully grown, please ^green;deliver the produce to me^white; while it's still fresh!", --- > "Timid. I hope it's not too much to ask, but ^green;I need you to plant ^orange;.^white; Once fully grown, please ^green;deliver the produce to me^white; while it's still fresh!", quests\generated\subquests\fetch_dungeon.questtemplate 31c31 < "Scheming. For my plan, ^green;I'll need ^orange;.^white; You'll probably find these in some ^orange;. ^green;Can you find these for me?" --- > "Scheming. For my plan, ^green;I'll need ^orange;.^white; You'll probably find these in some ^orange;. Can you ^green;find these for me?" 45c45 < "Confident. ^green;Can you travel to some ^orange; ^green;and gather ^orange;?^white; I assume you shall have no problem performing this task." --- > "Confident. ^green;Can you travel to some ^orange; ^green;and gather ^orange;?^white; I assume you shall have no problem performing this task." 60c60 < "Overjoyed. You managed to find some ^orange;?^white; Thank you for your help!", --- > "Overjoyed. You managed to find some ? Thank you for your help!", quests\generated\subquests\gift.questtemplate 49c49 < "Focused. Next, ^green;I need to win the favour of ^white;, and know that they would like this ^orange;. ^green;Could you deliver it to them for me?" --- > "Focused. Next, I need to ^green;win the favour of ^orange;.^white; I know that they would like this ^orange;, ^white;could you ^green;deliver it to them ^white;for me?" quests\generated\subquests\kill_monster.questtemplate 34,35c34,35 < "Bewildered. I had just finished gathering ^orange;^white; when a lone ^orange;^white; swallowed them all! Could you go ^green;hunt the beast and retrieve my belongings^white; for me?", < "Nervous. A lone ^orange; ambushed me and took ^orange;! ^green;Can you hunt the creature and retrieve my possessions for me?" --- > "Bewildered. ^green;I had just finished gathering ^orange; when a lone ^orange; swallowed them whole! ^white;Could you go ^green;hunt the beast and retrieve my belongings^white; for me?", > "Nervous. A lone ^orange; ^white;ambushed me and took ^orange;! Can you ^green;hunt the creature and retrieve my possessions for me?" 48,49c48,49 < "Shocked. I was recently attacked by a fierce ^orange;, which made off with my ^orange;. ^green;Could you hunt the creature down for me?^white; It couldn't have gotten far.", < "Ashamed. I was attacked by a fierce ^orange;, and it swallowed my possessions in the struggle. It took ^orange;, ^white;could you ^green;hunt it down and retrieve my things^white; for me?" --- > "Shocked. I was recently attacked by a fierce ^orange;, ^whitel;which made off with my ^orange;. Could you ^green;hunt the creature down for me?^white; It couldn't have gotten far.", > "Ashamed. I was attacked by a fierce ^orange;, ^white;and it swallowed my possessions in the struggle. It took ^orange;, ^white;could you ^green;hunt it down and retrieve my things^white; for me?" 53c53 < "Next ^green;you'll need to hunt down a ^orange;. I was out walking earlier and it ambushed me and took ^orange;. Would you ^green;locate the creature and return what it's taken?" --- > "Next you'll need to hunt down a ^orange;.^white; I was out walking earlier and it ambushed me and took ^orange;. Would you ^green;locate the creature and return what it's taken?" quests\generated\subquests\protect.questtemplate 72c72 < "Floran knowss ^orange; ^white; got on the wrong side of ^orange; ^white;, and they'll be here sshortly! if Floran helpss then they'll have to owe Floran a favour. ^green;Will you help protect them?" --- > "Floran knowss ^orange; ^white; got on the wrong side of ^orange;^white;, and they'll be here sshortly! if Floran helpss then they'll have to owe Floran a favour. ^green;Will you help protect them?" quests\generated\subquests\request_craft.questtemplate 39c39 < "Jealous. ^orange;^white; knows how to make ^orange;s^white;. better than I do. ^green;Please ask them to make one for me." --- > "Jealous. ^orange;^white; knows how to make ^orange;s^white; better than I do. ^green;Please ask them to make one for me." quests\generated\subquests\return_stolen.questtemplate 42,43c42,43 < "Return the stolen ", < "Retrieve the stolen " --- > " the vigilante", > "Help out " 66,67c66,67 < "Perturbed. A thief who goes by the name of ^orange;^white; has stolen ^orange;'s^white; prized ^orange;! ^green;Will you retrieve it and put it back in ^orange;'s^green; house?^white; I'm sure they would appreciate it.", < "Devious. ^orange;^white; could trust me more, and I know how to change that. ^orange;^white; stole an ^orange;^white; from them the other day. ^green;Will you retrieve it from ^orange;'s^green; home^white; and ^green;put it back in ^orange;'s^green; house?" --- > "Perturbed. A thief who goes by the name of ^orange;^white; has stolen ?ÇÖs prized ^orange;! Will you^green; retrieve it and put it back in ^orange;?ÇÖs^green; house?^white; I'm sure they would appreciate it.", > "Devious. could trust me more, and I know how to change that. stole an ^orange;^white; from them the other day. ^green;Will you retrieve it from ^orange;'s^green; home^white; and ^green;put it back in ^orange;'s^green; house?" 80c80 < "Frustrated. That swindler, ^orange;^white; has had the nerve to steal poor ^orange;'s^white; favourite ^orange;.^white; We must do something about it! Would you be so kind as to ^green;retrieve it from ^orange;'s^green; home^white; and ^green;return it to ^orange;'s^green; house?", --- > "Frustrated. That swindler, has had the nerve to steal poor 's favourite ^orange;.^white; We must do something about it! Would you be so kind as to ^green;retrieve it from ^orange;'s^green; home^white; and ^green;return it to ^orange;'s^green; house?", 94,95c94,95 < "Agitated. We have one last problem - that pesky ^orange;^white; has stolen ^orange;'s ^white;! They'll be devastated unless we - I mean... You, ^green;retrieve it and put it back in ^orange;'s^green; house.", < "Scheming. Finally, I know that ^orange;^white; recently stole ^orange;'s .^white; I bet if you ^green;retrieved it and put it back in ^orange;'s^green; house,^white; they would be very grateful." --- > "Agitated. We have one last problem - that pesky ^orange;^white; has stolen 's ^orange;^white;! They'll be devastated unless we - I mean... You, ^green;retrieve it and put it back in ^orange;'s^green; house.", > "Scheming. Finally, I know that ^orange;^white; recently stole 's ^orange;.^white; I bet if you ^green;retrieved it and put it back in ^orange;'s^green; house,^white; they would be very grateful." 108,109c108,109 < "Concerned. In a moment of desperation, ^orange;^white; robbed ^orange;^white; of their ^orange;^white;! If you ^green;retrieve it and put it back in ^orange;'s^green; house,^white; they may never even realise it was gone! I would be grateful.", < "Clever. ^orange;^white; recently stole ^orange;'s^white; favourite ^orange;.^white; I bet ^orange;^white; would be very grateful to whomever ^green;retrieved the ^orange; ^green;and put it back in their house.^white; Will you do this?" --- > "Concerned. In a moment of desperation, ^orange;^white; robbed of their ^orange;^white;! If you ^green;retrieve it and put it back in ^orange;?ÇÖs^green; house,^white; they may never even realise it was gone! I would be grateful.", > "Clever. ^orange;^white; recently stole 's favourite . I bet ^orange;^white; would be very grateful to whomever ^green;retrieved the ^orange; ^green;and put it back in their house.^white; Will you do this?" 124c124 < "Pleased. Nice work, ! has their and all is right with the universe... Almost.", --- > "Pleased. Nice work! has their and all is right with the universe... Almost.", 138c138 < "Satisfied. You've done well, ! will be so pleased to have the back. Would you be willing to do something else for me?", --- > "Satisfied. You've done well! will be so pleased to have the back. Would you be willing to do something else for me?", 166c166 < "Relieved. Many thanks, ! has their and knows better than to steal from them again!", --- > "Relieved. Many thanks! has their and knows better than to steal from them again!", 176a177 > "I failed to retrieve 's . should have just done it themselves.", quests\generated\subquests\share_secret.questtemplate 78c78 < "Hesitant. This ^orange;note^white; contains my one and only secret. By ^green;sharing it with ^orange;,^white; a friendship is sure to blossom. Will you do the honours of ^green;delivering this ^orange;note^green; to them for me? ", --- > "Hesitant. This note contains my one and only secret. By ^green;sharing it with ^orange;,^white; a friendship is sure to blossom. Will you do the honours of ^green;delivering this ^orange;note^green; to them for me?", 136,137c136,137 < "Elated. responded to my note - And wants to be friends! Thank you so much for you assistance.", < "Overjoyed. 's reply indicates that we are now friends! I knew this was a good idea. Thank you for your help!" --- > "Elated. 's and mine friendship has now begun! Thank you so much for you assistance.", > "Overjoyed. and I are now friends! I knew this was a good idea. Thank you for your help!" quests\generated\subquests\spread_rumors.questtemplate 18c18 < "Help spread rumours", --- > "Help spread rumours", 42,43c42,43 < "Envious. I want to be friends with ^orange;^white;, but they spend all their time with ^orange;.^white; But what if they had a horrible secret? ^green;Give this ^orange;note^green; to ^orange;^white;... they'll surely stop spending time with ^orange;^white; when they read this.", < "Spiteful. First, let's find a blabbermouth. ^orange; ^white;will do nicely. Once they ^green;receive this ^orange;note ^green;from you ^white;I can guarantee won't be so popular around here anymore." --- > "Envious. I want to be friends with , but they spend all their time with . But what if ^orange; had a horrible secret? ^green;Give this ^orange;note^green; to ^orange;^white;... they'll surely reconsider their friend after reading this...", > "Spiteful. First, let's find a blabbermouth. ^orange; ^white;will do nicely. Once they ^green;receive this ^orange;note ^green;from you ^white;I can guarantee ^orange; won't be so popular around here anymore." 70c70 < "Dishonest. Lastly, I will need you to ^green;give this ^orange;note^green; to ^orange;. They definitely won't want to speak to ^orange; anymore after reading this...", --- > "Dishonest. Lastly, I will need you to ^green;give this ^orange;note^green; to ^orange;. ^white;They definitely won't want to speak to ^orange; ^white;anymore after reading this...", 84c84 < "Devious. I want to get closer to ^orange;^white;, but they only have eyes for ^orange;^white;. I bet that will change once you ^green;give ^orange;^green; this ^orange;note^white; about ^orange;^white;... I will definitely sound cooler by comparison.", --- > "Devious. I want to get closer to , but they only have eyes for . I bet that will change once you ^green;give ^orange;^green; this ^orange;note^white; ^green;about ^orange;^white;... I will definitely sound cooler by comparison.", 152a153 > "I failed to spread rumours about to . Maybe should learn to make friends by being friendly?", 181,184c182,183 < "eats", < "licks", < "collects", < "likes touching", --- > "admires", > "adores", 186c185,194 < "covets" --- > "dreams about", > "wants to draw", > "draws pictures of", > "likes poking", > "smells", > "daydreams about", > "sings to", > "writes stories about", > "loves", > "forgets about" 189,194c197,209 < "power outlets", < "poop", < "your photos", < "paper", < "hair", < "metal" --- > "their own face", > "themselves", > "Poptops", > "snails", > "Gleaps", > "Pearlpeas", > "vegetables", > "computers", > "Crasberries", > "their toes", > "sleeping people", > "spaceships", > "rocks" 200,201c215,222 < "infectious", < "a murderer" --- > "bad friend material", > "a bit weird", > "creepy", > "close-minded", > "a gossip", > "making fun of you", > "covered in bugs", > "afraid of space" 208c229 < "Eww that's gross... Let's hang out sometime!", --- > "That's disappointing... Let's hang out sometime!", 209a231 > "I guess I never really knew them after all. Let's hang out!", quests\generated\subquests\steal.questtemplate 70c70 < "Paranoid. This is the I required. Am I correct to assume nobody saw you take it? better not hand it to me immediately. Let's wait for a moment." --- > "Paranoid. This is the I required. Am I correct to assume nobody saw you take it? Better not hand it to me immediately. Let?ÇÖs wait for a moment." 83c83 < "Frowning. This looks like 's alright. It's not in the best condition, but it'll have to do for now. Hang onto it for me? I don't want to get caught if comes looking for it.", --- > "Unappreciative. This looks like ?ÇÖs alright. It?ÇÖs not in the best condition, but it?ÇÖll have to do for now.", scripts\util.lua 47a48,52 > function util.angleDiff(from, to) > return ((((to - from) % (2*math.pi)) + (3*math.pi)) % (2*math.pi)) - math.pi > end > > -------------------------------------------------------------------------------- scripts\actions\builders.lua 8c8,42 < selectorActions = BTComposite:new() --- > sequenceActions = BTComposite.new() > actions["sequenceActions"] = sequenceActions > function sequenceActions.new(args) > local selector = BTSequence.new() > selector.children = {} > for _,action in pairs(args.actions) do > local actionModule = { > type = "module", > name = action.name, > parameters = action.parameters or {} > } > if action.cooldown then > local cooldown = { > type = "decorator", > name = "cooldown", > parameters = { > cooldown = action.cooldown > } > } > cooldown.child = actionModule > table.insert(selector.children, cooldown) > else > table.insert(selector.children, actionModule) > end > end > > return selector > end > > function sequenceActions.fromJson(node) > return sequenceActions.new(node.parameters) > end > > -- param actions > selectorActions = BTComposite.new() 42c76 < parallelActions = BTComposite:new() --- > parallelActions = BTComposite.new() scripts\actions\crawling.lua 138,156d137 < end < < -- param direction < function crawlFaceDirection(args, output) < args = parseArgs(args, { < direction = "direction" < }) < local direction = BData:getNumber(args.direction) < if direction == nil then return false end < < mcontroller.controlFace(1) < entity.resetTransformationGroup("facing") < if direction > 0 then < entity.scaleTransformationGroup("facing", {1, 1}) < else < entity.scaleTransformationGroup("facing", {-1, 1}) < end < self.setFacingDirection = true < return true scripts\actions\math.lua 90a91,107 > -- param first > -- param second > -- output vector > function vecAdd(args, output) > args = parseArgs(args, { > first = nil, > second = nil > }) > > local first = BData:getVec2(args.first) > local second = BData:getVec2(args.second) > if first == nil or second == nil then return false end > > BData:setVec2(output.vector, vec2.add(first, second)) > return true > end > scripts\actions\movement.lua 12,14c12,21 < mcontroller.controlFace(direction) < if entity.setAimPosition then < entity.setAimPosition(vec2.add(mcontroller.position(), {direction, -1})) --- > local facingMode = entity.configParameter("facingMode", "control") > if facingMode == "control" then > mcontroller.controlFace(direction) > if entity.setAimPosition then > entity.setAimPosition(vec2.add(mcontroller.position(), {direction, -1})) > end > elseif facingMode == "transformation" then > mcontroller.controlFace(1) > entity.resetTransformationGroup("facing") > entity.scaleTransformationGroup("facing", {util.toDirection(direction), 1}) scripts\actions\sensor.lua 67c67 < return world.rectTileCollision(groundRect, {"Null","Block","Dynamic"}) --- > return world.rectTileCollision(groundRect, {"Null","Block","Dynamic","Platform"}) scripts\behavior\composite.lua 89a90 > self.children[self.current]:reset() scripts\quest\manager.lua 23a24,26 > message.setHandler("playerConsideringOffer", function (_, _, ...) self:playerConsideringOfferHandler(...) end) > message.setHandler("playerDeclinedOffer", function (_, _, ...) self:playerDeclinedOfferHandler(...) end) > message.setHandler("playerAcceptedOffer", function (_, _, ...) self:playerAcceptedOfferHandler(...) end) 154a158,166 > > for player, questId in pairs(self.data.playerProgress) do > if self.data.playerStarted[player] ~= questId then > if not world.findUniqueEntity(player) then > -- Player disconnected without telling us they've declined the quest > self.data.playerProgress[player] = nil > end > end > end 271a284,315 > end > > -- "playerConsideringOffer" is sent when the 'New Quest' dialog opens on > -- the client. Here on the stagehand, we update the playerProgress table > -- to make sure the quest doesn't expire and get canceled while the dialog > -- is open. > function QuestManager:playerConsideringOfferHandler(player, questId) > self.outbox.contactList:registerPlayerEntity(player) > self.data.playerProgress[player] = questId > self:resetExpiration() > end > > function QuestManager:playerDeclinedOfferHandler(player, questId) > self.data.playerProgress[player] = nil > self:resetExpiration() > > for uniqueId, role in pairs(self.data.participants) do > if role.offerQuest then > self.outbox:sendMessage(uniqueId, "playerDeclinedOffer", self.uniqueId, player, questId) > end > end > end > > function QuestManager:playerAcceptedOfferHandler(player, questId) > -- Send a message so that the quest giver can react to the player accepting > -- the quest, but otherwise wait for the playerStarted message before doing > -- anything serious. > for uniqueId, role in pairs(self.data.participants) do > if role.offerQuest then > self.outbox:sendMessage(uniqueId, "playerAcceptedOffer", self.uniqueId, player, questId) > end > end scripts\quest\participant.lua 93a94,97 > -- playerAcceptedOffer: sent when a player accepts a quest via the new quest dialog (before the quest has started) > -- playerDeclinedOffer: sent when a player declines a quest via the new quest dialog > message.setHandler("playerAcceptedOffer", function(_, _, ...) self:playerAcceptedOfferHandler(...) end) > message.setHandler("playerDeclinedOffer", function(_, _, ...) self:playerDeclinedOfferHandler(...) end) 219a224,243 > end > > function QuestParticipant:playerAcceptedOfferHandler(stagehand, player, questId) > if notify then > local entityId = world.loadUniqueEntity(player) > notify({ > type = "questOfferAccepted", > sourceId = entityId > }) > end > end > > function QuestParticipant:playerDeclinedOfferHandler(stagehand, player, questId) > if notify then > local entityId = world.loadUniqueEntity(player) > notify({ > type = "questOfferDeclined", > sourceId = entityId > }) > end scripts\questgen\predicands.lua 124a125,129 > function QuestPredicands.Item:objectTags() > local itemConfig = root.itemConfig(self.itemName) > return itemConfig.config.tags or {} > end > scripts\questgen\relations.lua 773a774,783 > QuestRelations.isDoor = defineQueryRelation("isDoor", true) { > [case(1, Item)] = function (self, item) > if xor(self.negated, contains(item:objectTags(), "door")) then > return {{item}} > end > return Relation.empty > end, > default = Relation.some > } > stats\effects\elementalaura\electricaura.animation 16c16 < "cycle" : 1.5, --- > "cycle" : 0.9, 52c52,53 < { "particle" : "electricswoosh2"} --- > { "particle" : "electricswoosh2"}, > { "particle" : "fastrisingelectric"} stats\effects\elementalaura\fireaura.animation 16c16 < "cycle" : 1.5, --- > "cycle" : 0.9, 55c55,56 < { "particle" : "fireswoosh3"} --- > { "particle" : "fireswoosh3"}, > { "particle" : "fireaura"} stats\effects\elementalaura\poisonaura.animation 16c16 < "cycle" : 1.5, --- > "cycle" : 0.9, vehicles\hoverbike\hoverbike.animation 133a134,135 > "collisionNotification" : ["/sfx/melee/blunt_hit_robotic.ogg"], > "collisionDamage" : ["/sfx/melee/bite_robotic1.ogg"] vehicles\hoverbike\hoverbike.lua 22,30c22,30 < < self.protection = 50 < self.maxHealth = 100 < self.maxSmokeRate = 20 < self.minDamageCollisionAccel = 40 < self.terrainCollisionDamage = 10 < self.materialKind = "robotic" < self.terrainCollisionDamageSourceKind = "falling" < self.accelerationTrackingCount = 3 --- > self.protection = vehicle.configParameter("protection") > self.maxHealth = vehicle.configParameter("maxHealth") > self.maxSmokeRate = vehicle.configParameter("maxSmokeRate") > self.minDamageCollisionAccel = vehicle.configParameter("minDamageCollisionAccel") > self.minNotificationCollisionAccel = vehicle.configParameter("minNotificationCollisionAccel") > self.terrainCollisionDamage = vehicle.configParameter("terrainCollisionDamage") > self.materialKind = vehicle.configParameter("materialKind") > self.terrainCollisionDamageSourceKind = vehicle.configParameter("terrainCollisionDamageSourceKind") > self.accelerationTrackingCount = vehicle.configParameter("accelerationTrackingCount") 46c46,47 < self.collisionTrackingVelocities = {} --- > self.collisionDamageTrackingVelocities = {} > self.collisionNotificationTrackingVelocities = {} 88d88 < local entityInSeat = vehicle.entityLoungingIn("seat") 91c91 < if entityInSeat then --- > if vehicle.entityLoungingIn("seat") then 109,112c109,110 < animator.resetTransformationGroup("flip") < if self.facingDirection < 0 then < animator.scaleTransformationGroup("flip", {-1, 1}) < end --- > vehicle.setLoungePosition("seat", vec2.rotate(self.seatPosition, self.angle)) > vehicle.setLoungeAngle("seat", self.angle) 148a147,151 > animator.resetTransformationGroup("flip") > if self.facingDirection < 0 then > animator.scaleTransformationGroup("flip", {-1, 1}) > end > 151,152d153 < vehicle.setLoungePosition("seat", vec2.rotate(self.seatPosition, self.angle)) < vehicle.setLoungeAngle("seat", self.angle) 162a164 > local entityInSeat = vehicle.entityLoungingIn("seat") 178,182c180,186 < local maxAccel = 0 < for _, v in ipairs(self.collisionTrackingVelocities) do < local accel = vec2.mag(vec2.sub(newVelocity, v)) < if accel > maxAccel then < maxAccel = accel --- > function findMaxAccel(trackedVelocities) > local maxAccel = 0 > for _, v in ipairs(trackedVelocities) do > local accel = vec2.mag(vec2.sub(newVelocity, v)) > if accel > maxAccel then > maxAccel = accel > end 183a188 > return maxAccel 186c191,192 < if maxAccel >= self.minDamageCollisionAccel then --- > if findMaxAccel(self.collisionDamageTrackingVelocities) >= self.minDamageCollisionAccel then > animator.playSound("collisionDamage") 188c194,195 < self.collisionTrackingVelocities = {} --- > self.collisionDamageTrackingVelocities = {} > self.collisionNotificationTrackingVelocities = {} 199a207,211 > > if findMaxAccel(self.collisionNotificationTrackingVelocities) >= self.minNotificationCollisionAccel then > animator.playSound("collisionNotification") > self.collisionNotificationTrackingVelocities = {} > end 202,204c214,218 < table.insert(self.collisionTrackingVelocities, newVelocity) < while #self.collisionTrackingVelocities > self.accelerationTrackingCount do < table.remove(self.collisionTrackingVelocities, 1) --- > function appendTrackingVelocity(trackedVelocities, newVelocity) > table.insert(trackedVelocities, newVelocity) > while #trackedVelocities > self.accelerationTrackingCount do > table.remove(trackedVelocities, 1) > end 205a220,222 > > appendTrackingVelocity(self.collisionDamageTrackingVelocities, newVelocity) > appendTrackingVelocity(self.collisionNotificationTrackingVelocities, newVelocity) vehicles\hoverbike\hoverbike.vehicle 4c4 < "boundBox" : [-10, -10, 10, 10], --- > "boundBox" : [-5, -5, 5, 5], 35a36,45 > > "protection" : 50, > "maxHealth" : 100, > "maxSmokeRate" : 20, > "minDamageCollisionAccel" : 40, > "minNotificationCollisionAccel" : 20, > "terrainCollisionDamage" : 10, > "materialKind" : "robotic", > "terrainCollisionDamageSourceKind" : "falling", > "accelerationTrackingCount" : 3,