FILES ----- behaviors\monsters\modular\basemonster.behavior behaviors\monsters\modular\actions\aggrohop.behavior biomes\underground\underground0c.biome biomes\underground\underground0d.biome [NEW] dungeons\microdungeons\underground\underground0c\underground0cmicrodungeons.dungeon [NEW] dungeons\microdungeons\underground\underground0c\underground0c_open1.json [NEW] dungeons\microdungeons\underground\underground0c\underground0c_open2.json [NEW] dungeons\microdungeons\underground\underground0c\underground0c_tunnel1.json [NEW] dungeons\microdungeons\underground\underground0c\underground0c_tunnel2.json [NEW] dungeons\microdungeons\underground\underground0c\underground0c_tunnelbackslope1.json [NEW] dungeons\microdungeons\underground\underground0c\underground0c_tunnelbackslope2.json [NEW] dungeons\microdungeons\underground\underground0c\underground0c_tunnelforwardslope1.json [NEW] dungeons\microdungeons\underground\underground0c\underground0c_tunnelforwardslope2.json [NEW] dungeons\microdungeons\underground\underground0c\underground0c_tunnelweakbackslope1.json [NEW] dungeons\microdungeons\underground\underground0c\underground0c_tunnelweakbackslope2.json [NEW] dungeons\microdungeons\underground\underground0c\underground0c_tunnelweakforwardslope1.json [NEW] dungeons\microdungeons\underground\underground0c\underground0c_tunnelweakforwardslope2.json [NEW] dungeons\microdungeons\underground\underground0d\underground0dmicrodungeons.dungeon [NEW] dungeons\microdungeons\underground\underground0d\underground0d_open1.json [NEW] dungeons\microdungeons\underground\underground0d\underground0d_tunnel1.json [NEW] dungeons\microdungeons\underground\underground0d\underground0d_tunnelbackslope1.json [NEW] dungeons\microdungeons\underground\underground0d\underground0d_tunnelforwardslope1.json [NEW] dungeons\microdungeons\underground\underground0d\underground0d_tunnelweakbackslope1.json [NEW] dungeons\microdungeons\underground\underground0d\underground0d_tunnelweakforwardslope1.json [NEW] effects\pipkinflames.effectsource [NEW] interface\elements\electric.png [NEW] interface\elements\fire.png [NEW] interface\elements\ice.png [NEW] interface\elements\poison.png interface\tooltips\gun.tooltip interface\tooltips\sword.tooltip interface\windowconfig\newquest.config interface\windowconfig\questcomplete.config interface\windowconfig\questfailed.config interface\windowconfig\questlog.config items\active\weapons\weapon.lua items\active\weapons\melee\meleeslash.lua items\active\weapons\melee\meleeweapon.lua items\active\weapons\melee\altabilities\broadsword\bladecharge\bladecharge.altability items\active\weapons\melee\altabilities\broadsword\bladecharge\bladecharge.lua items\active\weapons\melee\altabilities\broadsword\downstab\downstab.altability items\active\weapons\melee\altabilities\broadsword\downstab\downstab.lua items\active\weapons\melee\altabilities\broadsword\giantsword\giantsword.altability items\active\weapons\melee\altabilities\broadsword\giantsword\giantsword.lua items\active\weapons\melee\altabilities\broadsword\parry\parry.altability items\active\weapons\melee\altabilities\broadsword\parry\parry.lua items\active\weapons\melee\altabilities\broadsword\risingslash\risingslash.altability items\active\weapons\melee\altabilities\broadsword\risingslash\risingslash.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\superspinslash.altability items\active\weapons\melee\altabilities\broadsword\traildash\traildash.altability items\active\weapons\melee\altabilities\broadsword\traildash\traildash.lua items\active\weapons\melee\altabilities\broadsword\travelingslash\travelingslash.altability items\active\weapons\melee\altabilities\broadsword\travelingslash\travelingslash.lua items\active\weapons\melee\altabilities\generic\blinkexplosion\blinkexplosion.altability items\active\weapons\melee\altabilities\generic\blinkexplosion\blinkexplosion.lua items\active\weapons\melee\altabilities\generic\blinkslash\blinkslash.altability items\active\weapons\melee\altabilities\generic\blinkslash\blinkslash.lua items\active\weapons\melee\altabilities\hammer\elementalaura\elementalaura.altability items\active\weapons\melee\altabilities\hammer\elementalaura\elementalaura.lua items\active\weapons\melee\altabilities\hammer\elementalpillar\elementalpillar.altability items\active\weapons\melee\altabilities\hammer\elementalpillar\elementalpillar.lua items\active\weapons\melee\altabilities\hammer\groundslam\groundslam.altability items\active\weapons\melee\altabilities\hammer\groundslam\groundslam.lua items\active\weapons\melee\altabilities\hammer\shockwave\physicalshockwave.altability items\active\weapons\melee\altabilities\hammer\shockwave\shockwave.altability items\active\weapons\melee\altabilities\hammer\shockwave\shockwave.lua items\active\weapons\melee\altabilities\hammer\uppercut\uppercut.altability items\active\weapons\melee\altabilities\hammer\uppercut\uppercut.lua items\active\weapons\melee\altabilities\spear\barrier\barrier.altability items\active\weapons\melee\altabilities\spear\barrier\barrier.lua items\active\weapons\melee\altabilities\spear\elementalspin\elementalspin.altability items\active\weapons\melee\altabilities\spear\elementalspin\elementalspin.lua items\active\weapons\melee\altabilities\spear\flurry\flurry.altability items\active\weapons\melee\altabilities\spear\flurry\flurry.lua items\active\weapons\melee\altabilities\spear\rocketspear\rocketspear.altability items\active\weapons\melee\altabilities\spear\rocketspear\rocketspear.lua items\active\weapons\melee\altabilities\spear\spin\spin.altability items\active\weapons\melee\altabilities\spear\spin\spin.lua items\active\weapons\melee\axe\commonaxe.activeitem items\active\weapons\melee\axe\rareaxe.activeitem items\active\weapons\melee\axe\uncommonaxe.activeitem items\active\weapons\melee\broadsword\commonbroadsword.activeitem items\active\weapons\melee\broadsword\rarebroadsword.activeitem items\active\weapons\melee\broadsword\uncommonbroadsword.activeitem items\active\weapons\melee\dagger\commondagger.activeitem items\active\weapons\melee\dagger\raredagger.activeitem items\active\weapons\melee\dagger\uncommondagger.activeitem items\active\weapons\melee\hammer\commonhammer.activeitem items\active\weapons\melee\hammer\hammer.lua items\active\weapons\melee\hammer\rarehammer.activeitem items\active\weapons\melee\hammer\uncommonhammer.activeitem items\active\weapons\melee\shortsword\commonshortsword.activeitem items\active\weapons\melee\shortsword\rareshortsword.activeitem items\active\weapons\melee\shortsword\uncommonshortsword.activeitem items\active\weapons\melee\spear\commonspear.activeitem items\active\weapons\melee\spear\rarespear.activeitem items\active\weapons\melee\spear\spear.lua items\active\weapons\melee\spear\uncommonspear.activeitem items\active\weapons\ranged\gun.lua items\active\weapons\ranged\gunfire.lua items\active\weapons\ranged\altabilities\altfire.lua items\active\weapons\ranged\altabilities\bouncingshot\bouncingshot.altability items\active\weapons\ranged\altabilities\burstshot\burstshot.altability items\active\weapons\ranged\altabilities\burstshot\burstshot.lua items\active\weapons\ranged\altabilities\deathbomb\deathbomb.altability items\active\weapons\ranged\altabilities\explosiveburst\explosiveburst.altability items\active\weapons\ranged\altabilities\explosiveburst\explosiveburst.lua items\active\weapons\ranged\altabilities\explosiveshot\explosiveshot.altability items\active\weapons\ranged\altabilities\flashlight\flashlight.altability items\active\weapons\ranged\altabilities\grenadelauncher\grenadelauncher.altability items\active\weapons\ranged\altabilities\guidedrocket\guidedrocket.altability items\active\weapons\ranged\altabilities\guidedrocket\guidedrocket.lua items\active\weapons\ranged\altabilities\homingrocket\homingrocket.altability items\active\weapons\ranged\altabilities\homingrocket\homingrocket.lua items\active\weapons\ranged\altabilities\lance\lance.altability items\active\weapons\ranged\altabilities\lance\lance.lua items\active\weapons\ranged\altabilities\markedshot\markedshot.altability items\active\weapons\ranged\altabilities\markedshot\markedshot.lua items\active\weapons\ranged\altabilities\piercingshot\piercingshot.altability items\active\weapons\ranged\altabilities\rocketburst\rocketburst.altability items\active\weapons\ranged\altabilities\rocketburst\rocketburst.lua items\active\weapons\ranged\altabilities\shrapnelbomb\shrapnelbomb.altability items\active\weapons\ranged\altabilities\spray\spray.altability items\active\weapons\ranged\altabilities\stickyshot\stickyshot.altability items\active\weapons\ranged\assaultrifle\commonassaultrifle.activeitem items\active\weapons\ranged\assaultrifle\rareassaultrifle.activeitem items\active\weapons\ranged\assaultrifle\uncommonassaultrifle.activeitem items\active\weapons\ranged\boomerang\boomerang.activeitem items\active\weapons\ranged\boomerang\boomerang.animation items\active\weapons\ranged\boomerang\boomerang.lua items\active\weapons\ranged\grenadelauncher\commongrenadelauncher.activeitem items\active\weapons\ranged\grenadelauncher\raregrenadelauncher.activeitem items\active\weapons\ranged\grenadelauncher\uncommongrenadelauncher.activeitem items\active\weapons\ranged\machinepistol\commonmachinepistol.activeitem items\active\weapons\ranged\machinepistol\raremachinepistol.activeitem items\active\weapons\ranged\machinepistol\uncommonmachinepistol.activeitem items\active\weapons\ranged\pistol\commonpistol.activeitem items\active\weapons\ranged\pistol\rarepistol.activeitem items\active\weapons\ranged\pistol\uncommonpistol.activeitem items\active\weapons\ranged\rocketlauncher\commonrocketlauncher.activeitem items\active\weapons\ranged\rocketlauncher\rarerocketlauncher.activeitem items\active\weapons\ranged\rocketlauncher\uncommonrocketlauncher.activeitem items\active\weapons\ranged\shotgun\commonshotgun.activeitem items\active\weapons\ranged\shotgun\rareshotgun.activeitem items\active\weapons\ranged\shotgun\uncommonshotgun.activeitem items\active\weapons\ranged\sniperrifle\commonsniperrifle.activeitem items\active\weapons\ranged\sniperrifle\raresniperrifle.activeitem items\active\weapons\ranged\sniperrifle\uncommonsniperrifle.activeitem items\active\weapons\ranged\translocator\translocator.activeitem items\active\weapons\ranged\translocator\translocator.lua items\buildscripts\buildweapon.lua leveling\levelingmultipliers.functions monsters\bmonster.lua monsters\crawlers\triplod\triplod.monstertype monsters\flyers\batong\batong.animation monsters\flyers\batong\batong.monstertype monsters\ghosts\spookit\spookit.animation monsters\ghosts\spookit\spookit.frames monsters\ghosts\spookit\spookit.png monsters\walkers\crabcano\crabcano.animation monsters\walkers\crabcano\crabcano.monstertype monsters\walkers\gleap\gleap.monstertype [NEW] monsters\walkers\hypnare\body.monsterpart [NEW] monsters\walkers\hypnare\hypnare.animation [NEW] monsters\walkers\hypnare\hypnare.frames [NEW] monsters\walkers\hypnare\hypnare.monstertype [NEW] monsters\walkers\hypnare\hypnare.png [NEW] monsters\walkers\mandraflora\body.monsterpart [NEW] monsters\walkers\mandraflora\mandraflora.animation [NEW] monsters\walkers\mandraflora\mandraflora.frames [NEW] monsters\walkers\mandraflora\mandraflora.monstertype [NEW] monsters\walkers\mandraflora\mandraflora.png monsters\walkers\nutmidge\nutmidge.animation monsters\walkers\nutmidge\nutmidge.frames monsters\walkers\nutmidge\nutmidge.monstertype [NEW] monsters\walkers\oogler\body.monsterpart [NEW] monsters\walkers\oogler\oogler.animation [NEW] monsters\walkers\oogler\oogler.frames [NEW] monsters\walkers\oogler\oogler.monstertype [NEW] monsters\walkers\oogler\oogler.png [NEW] monsters\walkers\peblit\body.monsterpart [NEW] monsters\walkers\peblit\peblit.animation [NEW] monsters\walkers\peblit\peblit.frames [NEW] monsters\walkers\peblit\peblit.monstertype [NEW] monsters\walkers\peblit\peblit.png [NEW] monsters\walkers\pipkin\body.monsterpart [NEW] monsters\walkers\pipkin\pipkin.animation [NEW] monsters\walkers\pipkin\pipkin.frames [NEW] monsters\walkers\pipkin\pipkin.monstertype [NEW] monsters\walkers\pipkin\pipkin.png [NEW] monsters\walkers\ringram\body.monsterpart [NEW] monsters\walkers\ringram\ringram.animation [NEW] monsters\walkers\ringram\ringram.frames [NEW] monsters\walkers\ringram\ringram.monstertype [NEW] monsters\walkers\ringram\ringram.png [NEW] monsters\walkers\scaveran\body.monsterpart [NEW] monsters\walkers\scaveran\scaveran.animation [NEW] monsters\walkers\scaveran\scaveran.frames [NEW] monsters\walkers\scaveran\scaveran.monstertype [NEW] monsters\walkers\scaveran\scaveran.png monsters\walkers\snaunt\snaunt.monstertype npcs\bmain.lua [NEW] particles\defaultdarkgreen.particle [NEW] particles\mandrafloradust.particle [NEW] particles\waterdrip.particle projectiles\boomerang\boomerang.projectile projectiles\boomerang\boomerangflip.projectile projectiles\boomerang\boomerangprojectile.lua projectiles\delaybullet\delaybullet.lua projectiles\drone\drone.lua [NEW] projectiles\explosions\regularexplosion2\electricexplosionfreezestatus.config [NEW] projectiles\explosions\regularexplosion2\fireexplosionfreezestatus.config [NEW] projectiles\explosions\regularexplosion2\iceexplosionfreezestatus.config [NEW] projectiles\explosions\regularexplosion2\poisonexplosionfreezestatus.config [NEW] projectiles\explosions\weakexplosion\weakexplosion.config projectiles\guidedrocket\guidedrocket.lua projectiles\guns\grenades\grenade\electricplasmagrenade.projectile projectiles\guns\grenades\grenade\fireplasmagrenade.projectile projectiles\guns\grenades\grenade\iceplasmagrenade.projectile projectiles\guns\grenades\grenade\poisonplasmagrenade.projectile projectiles\guns\grenades\impactgrenade\electricplasmaimpactgrenade.projectile projectiles\guns\grenades\impactgrenade\fireplasmaimpactgrenade.projectile projectiles\guns\grenades\impactgrenade\iceplasmaimpactgrenade.projectile projectiles\guns\grenades\impactgrenade\poisonplasmaimpactgrenade.projectile projectiles\guns\grenades\proximitymines\proximitymine.lua projectiles\guns\grenades\shrapnelbomb\shrapnelbomb.projectile projectiles\guns\grenades\stickygrenade\electricstickygrenade.projectile projectiles\guns\grenades\stickygrenade\firestickygrenade.projectile projectiles\guns\grenades\stickygrenade\poisonstickygrenade.projectile projectiles\guns\rockets\homingrocket\homingrocket.lua projectiles\guns\rockets\minirocket\minirocket.lua projectiles\homingarrow\homingarrow.lua projectiles\npcs\acidspit\acidspit.projectile projectiles\npcs\bloodvomit\bloodvomit.png projectiles\npcs\bloodvomit\bloodvomit.projectile projectiles\npcs\crabcanoball\crabcanoball.projectile [NEW] projectiles\npcs\pipkindust\icon.png [NEW] projectiles\npcs\pipkindust\pipkindust.frames [NEW] projectiles\npcs\pipkindust\pipkindust.png [NEW] projectiles\npcs\pipkindust\pipkindust.projectile projectiles\translocatordisc\translocatordisc.lua quests\quests.config quests\generated\subquests.config quests\generated\comfort\add_object_to_house.questtemplate [NEW] quests\generated\pools\dungeonitems.config [NEW] quests\generated\pools\monsters.config [NEW] quests\generated\pools\npcthreats.config quests\generated\pools\pools.config quests\generated\subquests\bribe.questtemplate quests\generated\subquests\build_home.questtemplate quests\generated\subquests\collect_fine.questtemplate quests\generated\subquests\collect_for_safekeeping.questtemplate quests\generated\subquests\collect_gift.questtemplate quests\generated\subquests\cooking.questtemplate quests\generated\subquests\craft.questtemplate quests\generated\subquests\extort.questtemplate quests\generated\subquests\farming.questtemplate quests\generated\subquests\fetch.questtemplate [NEW] quests\generated\subquests\fetch_dungeon.questtemplate quests\generated\subquests\gift.questtemplate quests\generated\subquests\intimidate.questtemplate [NEW] quests\generated\subquests\kill_monster.questtemplate quests\generated\subquests\protect.questtemplate quests\generated\subquests\return_stolen.questtemplate quests\generated\subquests\share_secret.questtemplate quests\generated\subquests\spread_rumors.questtemplate quests\generated\subquests\steal.questtemplate [NEW] quests\scripts\generated\kill_monster.lua quests\scripts\generated\protect.lua quests\tutorial\tutorial1.questtemplate [NEW] scripts\drops.lua scripts\util.lua scripts\projectiles\chainbullet.lua scripts\quest\manager\spawn_entities.lua scripts\questgen\context.lua scripts\questgen\generator.lua scripts\questgen\predicands.lua scripts\questgen\relations.lua [NEW] sfx\npc\monsters\batong_flap1.ogg [NEW] sfx\npc\monsters\batong_flap2.ogg [NEW] sfx\npc\monsters\batong_flap3.ogg [NEW] sfx\npc\monsters\batong_flap4.ogg [NEW] sfx\npc\monsters\batong_flap5.ogg [NEW] sfx\npc\monsters\crabcano_fire.ogg [NEW] sfx\npc\monsters\crabcano_windup1.ogg [NEW] sfx\npc\monsters\crabcano_windup2.ogg sfx\npc\monsters\gleap_hop.ogg [NEW] sfx\npc\monsters\mandraflora_spinning.ogg [NEW] sfx\npc\monsters\mandraflora_winddown.ogg [NEW] sfx\npc\monsters\mandraflora_windup.ogg sfx\npc\monsters\spookit_fly_loop.ogg sfx\npc\monsters\spookit_invulnerable.ogg [NEW] sfx\npc\monsters\spookit_invulnerable_combined.ogg [NEW] sfx\npc\monsters\spookit_invulnerable_loop.ogg [NEW] sfx\projectiles\blast_small1.ogg [NEW] sfx\projectiles\blast_small2.ogg [NEW] sfx\projectiles\blast_small3.ogg vehicles\hoverbike\default.frames vehicles\hoverbike\hoverbike.animation vehicles\hoverbike\hoverbike.lua vehicles\hoverbike\hoverbike.vehicle vehicles\hoverbike\hoverbikebackground.png vehicles\hoverbike\hoverbikeforeground.png DIFFS ----- behaviors\monsters\modular\basemonster.behavior 235a236,243 > "title": "entityExists", > "type": "action", > "name": "entityExists", > "parameters": { > "entity": "target" > } > }, > { behaviors\monsters\modular\actions\aggrohop.behavior 25a26,31 > "title": "halt", > "type": "action", > "name": "halt", > "parameters": {} > }, > { biomes\underground\underground0c.biome 144c144 < "microdungeons" : [ "undergroundmicrodungeons" ] --- > "microdungeons" : [ "underground0cmicrodungeons" ] biomes\underground\underground0d.biome 149c149 < "microdungeons" : [ "undergroundmicrodungeons" ] --- > "microdungeons" : [ "underground0dmicrodungeons" ] interface\tooltips\gun.tooltip 19c19 < "dpsTitleLabel" : { --- > "altAbilityTitleLabel" : { 21c21 < "position" : [9, 68], --- > "position" : [9, 41], 23c23,30 < "value" : "Base DPS:" --- > "value" : "Special:" > }, > "altAbilityLabel" : { > "type" : "label", > "position" : [130, 41], > "hAnchor" : "right", > "centered" : true, > "wrapWidth" : 126 39c46 < "position" : [9, 50], --- > "position" : [9, 68], 45c52 < "position" : [130, 50], --- > "position" : [130, 68], 51c58 < "position" : [9, 41], --- > "position" : [9, 50], 57c64 < "position" : [130, 41], --- > "position" : [130, 50], 64,70d70 < "hAnchor" : "right", < "centered" : true, < "wrapWidth" : 126 < }, < "dpsLabel" : { < "type" : "label", < "position" : [130, 68], interface\tooltips\sword.tooltip 19c19 < "dpsTitleLabel" : { --- > "altAbilityTitleLabel" : { 21c21 < "position" : [9, 62], --- > "position" : [9, 43], 23c23,30 < "value" : "Base DPS:" --- > "value" : "Special:" > }, > "altAbilityLabel" : { > "type" : "label", > "position" : [130, 43], > "hAnchor" : "right", > "centered" : true, > "wrapWidth" : 126 27c34 < "position" : [9, 53], --- > "position" : [9, 52], 29c36 < "value" : "Swing Speed:" --- > "value" : "Rate of Fire:" 33c40 < "position" : [130, 53], --- > "position" : [130, 52], 39c46 < "position" : [9, 44], --- > "position" : [9, 61], 45c52 < "position" : [130, 44], --- > "position" : [130, 61], 52,58d58 < "hAnchor" : "right", < "centered" : true, < "wrapWidth" : 126 < }, < "dpsLabel" : { < "type" : "label", < "position" : [130, 62], interface\windowconfig\newquest.config 68c68 < "offset" : [25, 10], --- > "offset" : [15, 10], interface\windowconfig\questcomplete.config 43c43 < "offset" : [25, 10], --- > "offset" : [15, 10], interface\windowconfig\questfailed.config 43c43 < "offset" : [25, 10], --- > "offset" : [15, 10], interface\windowconfig\questlog.config 79c79 < "position" : [155, 88], --- > "position" : [160, 88], 81c81 < "offset" : [30, 10] --- > "offset" : [20, 10] items\active\weapons\weapon.lua 7c7,10 < local newWeapon = copy(config) or {} --- > local newWeapon = config or {} > newWeapon.elementalType = item.instanceValue("elementalType") > newWeapon.aimOffset = item.instanceValue("aimOffset") or 0 > newWeapon.muzzleOffset = item.instanceValue("muzzleOffset") or {0,0} 121c124 < local damage = damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() --- > local damage = damageConfig.baseDamage * item.instanceValue("damageLevelMultiplier") * activeItem.ownerPowerMultiplier() 166,198d168 < -- Helpers < function meleeWeaponConfig() < local config = {} < math.randomseed(item.instanceValue("seed")) < config.elementalType = item.instanceValue("elementalType") < < config.aimOffset = item.instanceValue("aimOffset") or 0 < < return config < end < < function meleeAttackConfig(config, elementalType) < local parsed = copy(config) < math.randomseed(item.instanceValue("seed")) < < -- fire rate < parsed.fireTime = util.randomInRange(config.fireTime) < < -- damage < parsed.damageConfig = config.damageConfig or {} < parsed.damageConfig = sb.jsonMerge(parsed.damageConfig, item.instanceValue("damageConfig", {})) < local dps = util.randomInRange(config.baseDps) < parsed.damageConfig.baseDamage = dps * parsed.fireTime < < -- status effects < local elementalEffects = config.elementalStatusEffects and config.elementalStatusEffects[elementalType] < if elementalEffects then < parsed.damageConfig.statusEffects = util.mergeLists(parsed.damageConfig.statusEffects or {}, elementalEffects) < end < < return parsed < end < 234,267d203 < < -- Helpers < function rangedWeaponConfig() < local config = {} < math.randomseed(item.instanceValue("seed")) < config.elementalType = item.instanceValue("elementalType") < < config.aimOffset = item.instanceValue("aimOffset") or 0 < config.muzzleOffset = item.instanceValue("muzzleOffset") or {0,0} < < return config < end < < function rangedAttackConfig(config, elementalType) < local parsed = copy(config) < math.randomseed(item.instanceValue("seed")) < < parsed.fireTime = util.randomInRange(config.fireTime) < < parsed.projectileCount = util.randomIntInRange(config.projectileCount or 1) < < parsed.projectileParameters = config.projectileParameters or {} < parsed.projectileParameters.power = ((util.randomInRange(config.baseDps) * parsed.fireTime) / parsed.projectileCount) * root.evalFunction("gunDamageLevelMultiplier", item.instanceValue("level", 1)) < < -- Fire mode < parsed.fireType = util.randomFromList(config.fireType or "auto") < parsed.burstCount = util.randomIntInRange(config.burstCount or 3) < parsed.burstTime = util.randomInRange(config.burstTime or 0.075) < < local elementalTypes = config.elementalProjectiles or {} < parsed.projectileType = util.randomFromList(elementalTypes[elementalType] or config.projectileType) < < return parsed < end \ No newline at end of file items\active\weapons\melee\meleeslash.lua 4a5,6 > self.damageConfig.baseDamage = self.baseDps * self.fireTime > items\active\weapons\melee\meleeweapon.lua 10c10 < self.weapon = Weapon:new(meleeWeaponConfig()) --- > self.weapon = Weapon:new() 15c15 < local primaryAttack = MeleeSlash:new(meleeAttackConfig(item.instanceValue("primaryAttack"), self.weapon.elementalType), item.instanceValue("stances")) --- > local primaryAttack = MeleeSlash:new(item.instanceValue("primaryAttack"), item.instanceValue("stances")) items\active\weapons\melee\altabilities\broadsword\bladecharge\bladecharge.altability 48a49 > "name" : "Blade Charge", 51c52,54 < "energyUsageMultiplier" : 1.0, --- > > "energyUsage" : 40.0, > items\active\weapons\melee\altabilities\broadsword\bladecharge\bladecharge.lua 11,13d10 < < local damageAmount = self.damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < self.energyUsage = self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * damageAmount items\active\weapons\melee\altabilities\broadsword\downstab\downstab.altability 5a6 > "name" : "Pogo Sword", 18c19 < "energyUsageMultiplier" : 1.0, --- > "energyUsage" : 30.0, items\active\weapons\melee\altabilities\broadsword\downstab\downstab.lua 20c20,22 < and not mcontroller.onGround() then --- > and not mcontroller.onGround() > and status.overConsumeResource("energy", self.energyUsage) then > 46a49 > local energyDepleted = false 49c52,56 < self:setState(self.hold) --- > if status.overConsumeResource("energy", self.energyUsage) then > self:setState(self.hold) > else > energyDepleted = true > end 59a67 > if energyDepleted then return end 66,73d73 < end < < function downstab:damageAmount() < return self.damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function downstab:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() items\active\weapons\melee\altabilities\broadsword\giantsword\giantsword.altability 169a170 > "name" : "Giant Sword", 172c173 < "energyUsageMultiplier" : 1.0, --- > "energyUsage" : 50.0, items\active\weapons\melee\altabilities\broadsword\giantsword\giantsword.lua 49c49 < if chargeTimer == 0 and status.overConsumeResource("energy", self:energyUsage()) then --- > if chargeTimer == 0 and status.overConsumeResource("energy", self.energyUsage) then 68,75d67 < end < < function giantBladeAttack:damageAmount() < return self.damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function giantBladeAttack:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() items\active\weapons\melee\altabilities\broadsword\parry\parry.altability 57a58 > "name" : "Parry", 59a61 > "energyUsage" : 30.0, items\active\weapons\melee\altabilities\broadsword\parry\parry.lua 17c17,21 < if self.weapon.currentAbility == nil and fireMode == "alt" and self.cooldownTimer == 0 then --- > if self.weapon.currentAbility == nil > and fireMode == "alt" > and self.cooldownTimer == 0 > and status.overConsumeResource("energy", self.energyUsage) then > items\active\weapons\melee\altabilities\broadsword\risingslash\risingslash.altability 50a51 > "name" : "Rising Slash", 53c54,55 < "energyUsageMultiplier" : 1.0, --- > > "energyUsage" : 50.0, items\active\weapons\melee\altabilities\broadsword\risingslash\risingslash.lua 18c18,22 < if self.weapon.currentAbility == nil and self.cooldownTimer == 0 and not status.resourceLocked("energy") and self.fireMode == "alt" then --- > if self.weapon.currentAbility == nil > and self.cooldownTimer == 0 > and self.fireMode == "alt" > and status.overConsumeResource("energy", self.energyUsage) then > 33,35c37 < if status.overConsumeResource("energy", self:energyUsage()) then < self:setState(self.slash) < end --- > self:setState(self.slash) 64,72c66 < < function risingSlash:damageAmount() < return self.damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function risingSlash:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() < end < --- > items\active\weapons\melee\altabilities\broadsword\spinslash\spinslash.altability 49a50 > "name" : "Spin Slash", 52c53 < "energyUsageMultiplier" : 1.0, --- > "energyUsage" : 50.0, items\active\weapons\melee\altabilities\broadsword\spinslash\spinslash.lua 39c39 < if not status.overConsumeResource("energy", self:energyUsage()) then return end --- > if not status.overConsumeResource("energy", self.energyUsage * (self.stances.windup.duration + self.stances.slash.duration)) then return end 66,74d65 < end < < < function spinSlash:damageAmount() < return self.damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function spinSlash:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() items\active\weapons\melee\altabilities\broadsword\spinslash\superspinslash.altability 49a50 > "name" : "Super Spin Slash", 52c53 < "energyUsageMultiplier" : 1.0, --- > "energyUsage" : 60.0, items\active\weapons\melee\altabilities\broadsword\traildash\traildash.altability 63a64 > "name" : "Trail Dash", 67c68 < "energyUsageMultiplier" : 2.0, --- > "energyUsage" : 50, 71d71 < "baseDamageRange" : [5, 12], // overrides baseDamage in damageConfig 74a75 > "power" : 1.5, 78,82c79,91 < "elementalProjectiles" : { < "fire" : "firetrail", < "ice" : "icetrail", < "electric" : "electrictrail", < "poison" : "poisontrail" --- > "elementalConfig" : { > "fire" : { > "projectileType" : "firetrail" > }, > "ice" : { > "projectileType" : "icetrail" > }, > "poison" : { > "projectileType" : "poisontrail" > }, > "electric" : { > "projectileType" : "electrictrail" > } 86c95 < "damageSourceKind" : "broadsword", --- > "damageSourceKind" : "broadsword", items\active\weapons\melee\altabilities\broadsword\traildash\traildash.lua 20c20,21 < and status.overConsumeResource("energy", self:energyUsage()) then --- > and status.overConsumeResource("energy", self.energyUsage) then > 47c48,51 < local projectileType = self.elementalProjectiles[self.weapon.elementalType] --- > local params = copy(self.projectileParameters) > params.powerMultiplier = activeItem.ownerPowerMultiplier() > params.power = params.power * item.instanceValue("damageLevelMultiplier") > 60c64 < world.spawnProjectile(projectileType, vec2.add(position, self.projectileOffset), activeItem.ownerEntityId(), {-mcontroller.facingDirection(),0}, false, self.projectileParameters) --- > world.spawnProjectile(self.projectileType, vec2.add(position, self.projectileOffset), activeItem.ownerEntityId(), {-mcontroller.facingDirection(),0}, false, params) 69,76d72 < end < < function trailDash:damageAmount() < return self.damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function trailDash:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() items\active\weapons\melee\altabilities\broadsword\travelingslash\travelingslash.altability 13a14 > "name" : "Flying Slash", 18,22c19,31 < "elementalProjectiles" : { < "fire" : "firetravelingswoosh", < "ice" : "icetravelingswoosh", < "electric" : "electrictravelingswoosh", < "poison" : "poisontravelingswoosh" --- > "elementalConfig" : { > "fire" : { > "projectileType" : "firetravelingswoosh" > }, > "ice" : { > "projectileType" : "icetravelingswoosh" > }, > "poison" : { > "projectileType" : "poisontravelingswoosh" > }, > "electric" : { > "projectileType" : "electrictravelingswoosh" > } 25,28c34,35 < "damageConfig" : { < "baseDamage" : 10 < }, < "energyUsageMultiplier" : 1.5, --- > "baseDamage" : 10, > "energyUsage" : 50, items\active\weapons\melee\altabilities\broadsword\travelingslash\travelingslash.lua 16c16 < if self.weapon.currentAbility == nil and self.fireMode == "alt" and self.cooldownTimer == 0 and status.overConsumeResource("energy", self:energyUsage()) then --- > if self.weapon.currentAbility == nil and self.fireMode == "alt" and self.cooldownTimer == 0 and status.overConsumeResource("energy", self.energyUsage) then 34d33 < local projectile = self.elementalProjectiles[self.weapon.elementalType] 37a37 > powerMultiplier = activeItem.ownerPowerMultiplier(), 40c40 < world.spawnProjectile(projectile, position, activeItem.ownerEntityId(), aimVector, false, params) --- > world.spawnProjectile(self.projectileType, position, activeItem.ownerEntityId(), aimVector, false, params) 49,53c49 < return self.damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function travelingSlash:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() --- > return self.baseDamage * item.instanceValue("damageLevelMultiplier") items\active\weapons\melee\altabilities\generic\blinkexplosion\blinkexplosion.altability 37a38 > "name" : "Blink Explosion", 40c41 < "energyUsageMultiplier" : 1.0, --- > "energyUsage" : 60.0, 44,51c45,58 < "damageConfig" : { < "baseDamage" : 10 < }, < "elementalProjectiles" : { < "fire" : "fireplasmaexplosion", < "electric" : "electricplasmaexplosion", < "ice" : "iceplasmaexplosion", < "poison" : "poisonplasmaexplosion" --- > "baseDamage" : 12, > "elementalConfig" : { > "fire" : { > "projectileType" : "fireplasmaexplosion" > }, > "ice" : { > "projectileType" : "iceplasmaexplosion" > }, > "poison" : { > "projectileType" : "poisonplasmaexplosion" > }, > "electric" : { > "projectileType" : "electricplasmaexplosion" > } items\active\weapons\melee\altabilities\generic\blinkexplosion\blinkexplosion.lua 37c37 < if status.overConsumeResource("energy", self:energyUsage()) then --- > if status.overConsumeResource("energy", self.energyUsage) then 52,53c52,56 < local projectileType = self.elementalProjectiles[self.weapon.elementalType] < world.spawnProjectile(projectileType, mcontroller.position(), activeItem.ownerEntityId(), {0,0}, false, {power = self:damageAmount()}) --- > local params = { > powerMultiplier = activeItem.ownerPowerMultiplier(), > power = self.baseDamage * item.instanceValue("damageLevelMultiplier") > } > world.spawnProjectile(self.projectileType, mcontroller.position(), activeItem.ownerEntityId(), {0,0}, false, params) 60,67d62 < end < < function blinkExplosion:damageAmount() < return self.damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function blinkExplosion:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() items\active\weapons\melee\altabilities\generic\blinkslash\blinkslash.altability 39c39 < "damageArea" : [ [-3.5, 0.875], [0.25, 0.875], [1.625, 0.5], [2.5, 0], [2.5, -0.5], [2.125, -0.875], [1, -1.375], [-3.5, -1.375] ] --- > "damageArea" : [ [-3.5, 0.875], [0.25, 0.875], [1.625, 0.5], [2.5, 0], [2.5, -0.5], [2.125, -0.875], [1, -1.375], [-3.5, -1.375] ] 49a50 > "name" : "Blink Slash", 52c53,54 < "energyUsageMultiplier" : 1.4, --- > > "energyUsage" : 40, 67,71c69,73 < "elementalStatusEffects" : { < "fire" : [ "burning" ], < "ice" : [ "frostslow" ], < "poison" : [ "weakpoison" ], < "electric" : [ "paralysis" ] --- > "elementalConfig" : { > "fire" : { "damageConfig" : { "statusEffects" : [ "burning" ] } }, > "ice" : { "damageConfig" : { "statusEffects" : [ "frostslow" ] } }, > "poison" : { "damageConfig" : { "statusEffects" : [ "weakpoison" ] } }, > "electric" : { "damageConfig" : { "statusEffects" : [ "paralysis" ] } } items\active\weapons\melee\altabilities\generic\blinkslash\blinkslash.lua 13,16d12 < < -- status effects < local elementalEffects = self.elementalStatusEffects[self.weapon.elementalType] < self.damageConfig.statusEffects = util.mergeLists(self.damageConfig.statusEffects or {}, elementalEffects) 28c24 < and status.overConsumeResource("energy", self:energyUsage()) then --- > and status.overConsumeResource("energy", self.energyUsage) then 92,99d87 < end < < function blinkSlash:damageAmount() < return self.damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function blinkSlash:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() items\active\weapons\melee\altabilities\hammer\elementalaura\elementalaura.altability 83a84 > "name" : "Energy Aura", 86c87,88 < "energyUsageMultiplier" : 1.0, --- > > "energyUsage" : 60.0, 95a98 > "damageSourceKind" : "plasma", 101,106d103 < }, < "elementalSourceKinds" : { < "fire" : "fireplasma", < "ice" : "iceplasma", < "electric" : "electricplasma", < "poison" : "poisonplasma" items\active\weapons\melee\altabilities\hammer\elementalaura\elementalaura.lua 13,14d12 < < self.damageConfig.damageSourceKind = self.elementalSourceKinds[self.weapon.elementalType] 26c24 < and status.resource("energy") >= self:energyUsage() * (self.minChargeTime / self.chargeTime) then --- > and status.resource("energy") >= self.energyUsage * (self.minChargeTime / self.chargeTime) then 51c49 < while self.fireMode == "alt" and (chargeTimer == self.chargeTime or status.overConsumeResource("energy", self:energyUsage() * (1 / self.chargeTime) * self.dt)) do --- > while self.fireMode == "alt" and (chargeTimer == self.chargeTime or status.overConsumeResource("energy", (self.energyUsage / self.chargeTime) * self.dt)) do 102,109d99 < end < < function elementalAura:damageAmount() < return self.damageConfig.baseDamage / self.damageConfig.timeout * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function elementalAura:energyUsage() < return self.duration * self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() items\active\weapons\melee\altabilities\hammer\elementalpillar\elementalpillar.altability 66a67 > "name" : "Energy Pillar", 69c70,71 < "energyUsageMultiplier" : 1.0, --- > > "energyUsage" : 60.0, 75,79c77,89 < "elementalProjectiles" : { < "fire" : "firepillar", < "electric" : "electricpillar", < "ice" : "icepillar", < "poison" : "poisonpillar" --- > "elementalConfig" : { > "fire" : { > "projectileType" : "firepillar" > }, > "ice" : { > "projectileType" : "icepillar" > }, > "poison" : { > "projectileType" : "poisonpillar" > }, > "electric" : { > "projectileType" : "electricpillar" > } items\active\weapons\melee\altabilities\hammer\elementalpillar\elementalpillar.lua 29c29 < while self.fireMode == "alt" and (chargeTimer == self.chargeTime or status.overConsumeResource("energy", (self:energyUsage() * self.pillarMaxHeight) * self.dt)) do --- > while self.fireMode == "alt" and (chargeTimer == self.chargeTime or status.overConsumeResource("energy", (self.energyUsage / self.chargeTime) * self.dt)) do 78,85d77 < function elementalPillar:damageAmount() < return self.projectileParameters.power * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function elementalPillar:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() < end < 92c84,85 < projectileParameters.power = self:damageAmount() --- > projectileParameters.powerMultiplier = activeItem.ownerPowerMultiplier() > projectileParameters.power = projectileParameters.power * item.instanceValue("damageLevelMultiplier") 97c90 < type = self.elementalProjectiles[self.weapon.elementalType], --- > type = self.projectileType, 109,111c102 < world.spawnProjectile("pillarspawner", position, activeItem.ownerEntityId(), {dir, 0}, false, < projectileParameters < ) --- > world.spawnProjectile("pillarspawner", position, activeItem.ownerEntityId(), {dir, 0}, false, projectileParameters) items\active\weapons\melee\altabilities\hammer\groundslam\groundslam.altability 19a20 > "name" : "Ground Slam", 22c23 < "energyUsageMultiplier" : 2.0, --- > "energyUsage" : 40.0, 27c28 < "baseDamage" : 4, --- > "baseDamage" : 3, 35,37c36,38 < "slamProjectile" : "physicalexplosion", < "projectileParams" : { < "power" : 10 --- > "projectileType" : "physicalexplosion", > "projectileParameters" : { > "power" : 7 items\active\weapons\melee\altabilities\hammer\groundslam\groundslam.lua 11d10 < self.projectileParams.ownerPowerMultiplier = activeItem.ownerPowerMultiplier() 23c22 < and status.overConsumeResource("energy", self:energyUsage()) then --- > and status.overConsumeResource("energy", self.energyUsage) then 52c51,55 < world.spawnProjectile(self.slamProjectile, lastSlamPosition, activeItem.ownerEntityId(), {0,0}, false, self.projectileParams) --- > local params = copy(self.projectileParameters) > params.powerMultiplier = activeItem.ownerPowerMultiplier() > params.power = params.power * item.instanceValue("damageLevelMultiplier") > > world.spawnProjectile(self.projectileType, lastSlamPosition, activeItem.ownerEntityId(), {0,0}, false, params) 68,75d70 < end < < function groundSlam:damageAmount() < return self.damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function groundSlam:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() items\active\weapons\melee\altabilities\hammer\shockwave\physicalshockwave.altability 18a19 > "name" : "Shockwave", 21c22,23 < "energyUsageMultiplier" : 1.0, --- > > "energyUsage" : 60.0, 27,29c29 < "elementalProjectiles" : { < "physical" : "physicalshockwave" < }, --- > "projectileType" : "physicalshockwave", items\active\weapons\melee\altabilities\hammer\shockwave\shockwave.altability 66a67 > "name" : "Energy Wave", 69c70,72 < "energyUsageMultiplier" : 1.0, --- > > "energyUsage" : 60.0, > 75,79c78,90 < "elementalProjectiles" : { < "fire" : "fireshockwave", < "electric" : "electricshockwave", < "ice" : "iceshockwave", < "poison" : "poisonshockwave" --- > "elementalConfig" : { > "fire" : { > "projectileType" : "fireshockwave" > }, > "ice" : { > "projectileType" : "iceshockwave" > }, > "poison" : { > "projectileType" : "poisonshockwave" > }, > "electric" : { > "projectileType" : "electricshockwave" > } items\active\weapons\melee\altabilities\hammer\shockwave\shockwave.lua 29c29 < while self.fireMode == "alt" and (chargeTimer == self.chargeTime or status.overConsumeResource("energy", (self:energyUsage() * self.maxDistance) * self.dt)) do --- > while self.fireMode == "alt" and (chargeTimer == self.chargeTime or status.overConsumeResource("energy", (self.energyUsage / self.chargeTime) * self.dt)) do 78,85d77 < function shockWave:damageAmount() < return self.projectileParameters.power * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function shockWave:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() < end < 99c91,94 < self.projectileParameters.actionOnReap = { --- > local params = copy(self.projectileParameters) > params.powerMultiplier = activeItem.ownerPowerMultiplier() > params.power = params.power * item.instanceValue("damageLevelMultiplier") > params.actionOnReap = { 103c98 < type = self.elementalProjectiles[self.weapon.elementalType] --- > type = self.projectileType 109,112c104,105 < self.projectileParameters.timeToLive = (math.floor(math.abs(xDistance))) * 0.025 < world.spawnProjectile("shockwavespawner", position, activeItem.ownerEntityId(), {dir,0}, false, < self.projectileParameters < ) --- > params.timeToLive = (math.floor(math.abs(xDistance))) * 0.025 > world.spawnProjectile("shockwavespawner", position, activeItem.ownerEntityId(), {dir,0}, false, params) items\active\weapons\melee\altabilities\hammer\uppercut\uppercut.altability 50a51 > "name" : "Uppercut", 53c54 < "energyUsageMultiplier" : 1.0, --- > "energyUsage" : 40.0, items\active\weapons\melee\altabilities\hammer\uppercut\uppercut.lua 22c22 < and status.resource("energy") >= self:energyUsage() * (self.minChargeTime / self.chargeTime) then --- > and status.resource("energy") >= self.energyUsage * (self.minChargeTime / self.chargeTime) then 35c35 < while self.fireMode == "alt" and (chargeTimer == self.chargeTime or status.overConsumeResource("energy", self:energyUsage() * (1 / self.chargeTime) * self.dt)) do --- > while self.fireMode == "alt" and (chargeTimer == self.chargeTime or status.overConsumeResource("energy", (self.energyUsage / self.chargeTime) * self.dt)) do 75,82d74 < end < < function uppercut:damageAmount() < return self.damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function uppercut:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() items\active\weapons\melee\altabilities\spear\barrier\barrier.altability 72a73 > "name" : "Barrier", 75,76c76,77 < "baseDamage" : 1, < "energyUsageMultiplier" : 0.8, --- > > "energyUsage" : 3.0, 77a79,81 > "projectileParameters" : { > "power" : 2.0 > }, 79,83c83,95 < "elementalProjectiles" : { < "fire" : "firebarrier", < "electric" : "electricbarrier", < "ice" : "icebarrier", < "poison" : "poisonbarrier" --- > "elementalConfig" : { > "fire" : { > "projectileType" : "firebarrier" > }, > "ice" : { > "projectileType" : "icebarrier" > }, > "poison" : { > "projectileType" : "poisonbarrier" > }, > "electric" : { > "projectileType" : "electricbarrier" > } items\active\weapons\melee\altabilities\spear\barrier\barrier.lua 30a31,34 > local params = copy(self.projectileParameters) > params.powerMultiplier = activeItem.ownerPowerMultiplier() > params.power = params.power * item.instanceValue("damageLevelMultiplier") > 38c42 < if not status.overConsumeResource("energy", self:energyUsage()) then break end --- > if not status.overConsumeResource("energy", self.energyUsage) then break end 40c44 < world.spawnProjectile(self.elementalProjectiles[self.weapon.elementalType], position, activeItem.ownerEntityId(), aimVector, false, {power = self:damageAmount()}) --- > world.spawnProjectile(self.projectileType, position, activeItem.ownerEntityId(), aimVector, false, params) 49,56d52 < end < < function barrier:damageAmount() < return self.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function barrier:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() items\active\weapons\melee\altabilities\spear\elementalspin\elementalspin.altability 107a108 > "name" : "Energy Whirl", 111,126c112,113 < "energyUsageMultiplier" : 1.0, < "damageConfig" : { < "damageSourceKind" : "spear", < "baseDamage" : 3.5, < "knockbackMode" : "none", < "knockback" : 30, < "timeout" : 0.5, < "timeoutGroup" : "alt" < }, < "elementalSourceKind" : { < "fire" : "firespear", < "ice" : "icespear", < "electric" : "electricspear", < "poison" : "poisonspear" < }, < --- > "energyUsage" : 40, > "projectileEnergyCost" : 20, 131,135c118,139 < "elementalProjectiles" : { < "fire" : "firespinswoosh", < "electric" : "electricspinswoosh", < "ice" : "icespinswoosh", < "poison" : "poisonspinswoosh" --- > "elementalConfig" : { > "fire" : { > "projectileType" : "firespinswoosh" > }, > "ice" : { > "projectileType" : "icespinswoosh" > }, > "poison" : { > "projectileType" : "poisonspinswoosh" > }, > "electric" : { > "projectileType" : "electricspinswoosh" > } > }, > > "damageConfig" : { > "damageSourceKind" : "spear", > "baseDamage" : 3.5, > "knockbackMode" : "none", > "knockback" : 30, > "timeout" : 0.5, > "timeoutGroup" : "alt" items\active\weapons\melee\altabilities\spear\elementalspin\elementalspin.lua 11,12d10 < < self.damageConfig.damageSourceKind = self.elementalSourceKind[self.weapon.elementalType] 39c37 < if status.overConsumeResource("energy", self:energyUsage() * self.dt / self.damageConfig.timeout) then --- > if status.overConsumeResource("energy", self.energyUsage * self.dt) then 49c47 < if status.overConsumeResource("energy", self:projectileEnergyCost()) then --- > if status.overConsumeResource("energy", self.projectileEnergyCost) then 66,68c64,66 < params.power = self:damageAmount() < local projectileType = self.elementalProjectiles[self.weapon.elementalType] < world.spawnProjectile(projectileType, position, activeItem.ownerEntityId(), {self.weapon.aimDirection, 0}, false, params) --- > params.powerMultiplier = activeItem.ownerPowerMultiplier() > params.power = params.power * item.instanceValue("damageLevelMultiplier") > world.spawnProjectile(self.projectileType, position, activeItem.ownerEntityId(), {self.weapon.aimDirection, 0}, false, params) 71,86d68 < end < < function elementalSpin:projectileDamage() < return self.projectileParameters.power * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function elementalSpin:damageAmount() < return self.damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function elementalSpin:projectileEnergyCost() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:projectileDamage() < end < < function elementalSpin:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() items\active\weapons\melee\altabilities\spear\flurry\flurry.altability 5a6 > "name" : "Flurry", 8c9 < "energyUsageMultiplier" : 1.0, --- > 13a15,16 > "energyUsage" : 7.0, > 16c19 < "baseDamage" : 0.75, --- > "baseDamage" : 1.0, items\active\weapons\melee\altabilities\spear\flurry\flurry.lua 23c23 < if not status.overConsumeResource("energy", self:energyUsage()) then break end --- > if not status.overConsumeResource("energy", self.energyUsage) then break end 50,57d49 < end < < function flurry:damageAmount() < return self.damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function flurry:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() items\active\weapons\melee\altabilities\spear\rocketspear\rocketspear.altability 75a76 > "name" : "Rocket Spear", 79c80 < "energyUsageMultiplier" : 1.0, --- > "energyUsage" : 40.0, 85,89c86,98 < "elementalProjectiles" : { < "fire" : "flamethrower", < "ice" : "icethrower", < "electric" : "lightningthrower", < "poison" : "poisonthrower" --- > "elementalConfig" : { > "fire" : { > "projectileType" : "flamethrower" > }, > "ice" : { > "projectileType" : "icethrower" > }, > "poison" : { > "projectileType" : "poisonthrower" > }, > "electric" : { > "projectileType" : "lightningthrower" > } items\active\weapons\melee\altabilities\spear\rocketspear\rocketspear.lua 43d42 < local projectile = self.elementalProjectiles[self.weapon.elementalType] 45c44,45 < params.power = self:damageAmount() * self.fireTime --- > params.power = self.baseDps * self.fireTime * item.instanceValue("damageLevelMultiplier") > params.powerMultiplier = activeItem.ownerPowerMultiplier() 48c48 < while self.fireMode == "alt" and status.overConsumeResource("energy", self:energyUsage() * self.dt) do --- > while self.fireMode == "alt" and status.overConsumeResource("energy", self.energyUsage * self.dt) do 60c60 < world.spawnProjectile(projectile, position, activeItem.ownerEntityId(), {mcontroller.facingDirection() * math.cos(aim), math.sin(aim)}, false, params) --- > world.spawnProjectile(self.projectileType, position, activeItem.ownerEntityId(), {mcontroller.facingDirection() * math.cos(aim), math.sin(aim)}, false, params) 70,77d69 < end < < function rocketSpear:damageAmount() < return self.baseDps * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function rocketSpear:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() items\active\weapons\melee\altabilities\spear\spin\spin.altability 51a52 > "name" : "Blade Whirl", 54a56,57 > "energyUsage" : 40, > 63,64c66 < "energyCost" : 50, < --- > items\active\weapons\melee\altabilities\spear\spin\spin.lua 27c27 < while self.fireMode == "alt" and status.overConsumeResource("energy", self.energyCost * self.dt) do --- > while self.fireMode == "alt" and status.overConsumeResource("energy", self.energyUsage * self.dt) do items\active\weapons\melee\axe\commonaxe.activeitem 2a3 > "price" : 150, 36c37 < --- > "fireSounds" : [ "/sfx/melee/swing_axe.ogg" ], 84,90d84 < }, < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_axe.ogg" ], < "fire" : [ [ "/sfx/melee/swing_axe_fire1.ogg", "/sfx/melee/swing_axe_fire2.ogg", "/sfx/melee/swing_axe_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_axe_electric1.ogg", "/sfx/melee/swing_axe_electric2.ogg", "/sfx/melee/swing_axe_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_axe_ice1.ogg", "/sfx/melee/swing_axe_ice2.ogg", "/sfx/melee/swing_axe_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_axe_poison1.ogg", "/sfx/melee/swing_axe_poison2.ogg", "/sfx/melee/swing_axe_poison3.ogg" ] ] items\active\weapons\melee\axe\rareaxe.activeitem 2a3 > "price" : 190, 7c8 < "shortdescription" : "Uncommon Axe", --- > "shortdescription" : "Rare Axe", 29,30c30 < "damageSourceKind" : "axe", < "statusEffects" : [ "damagefreeze" ], --- > "damageSourceKind" : "axe", 34,39d33 < }, < "elementalStatusEffects" : { < "fire" : [ "burning" ], < "ice" : [ "frostslow" ], < "poison" : [ "weakpoison" ], < "electric" : [ "paralysis" ] 43d36 < 84a78,95 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "burning" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_axe_fire1.ogg", "/sfx/melee/swing_axe_fire2.ogg", "/sfx/melee/swing_axe_fire3.ogg" ] ] > }, > "ice" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "frostslow" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_axe_ice1.ogg", "/sfx/melee/swing_axe_ice2.ogg", "/sfx/melee/swing_axe_ice3.ogg" ] ] > }, > "poison" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "weakpoison" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_axe_poison1.ogg", "/sfx/melee/swing_axe_poison2.ogg", "/sfx/melee/swing_axe_poison3.ogg" ] ] > }, > "electric" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "paralysis" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_axe_electric1.ogg", "/sfx/melee/swing_axe_electric2.ogg", "/sfx/melee/swing_axe_electric3.ogg" ] ] > } > }, 97,103d107 < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_axe.ogg" ], < "fire" : [ [ "/sfx/melee/swing_axe_fire1.ogg", "/sfx/melee/swing_axe_fire2.ogg", "/sfx/melee/swing_axe_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_axe_electric1.ogg", "/sfx/melee/swing_axe_electric2.ogg", "/sfx/melee/swing_axe_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_axe_ice1.ogg", "/sfx/melee/swing_axe_ice2.ogg", "/sfx/melee/swing_axe_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_axe_poison1.ogg", "/sfx/melee/swing_axe_poison2.ogg", "/sfx/melee/swing_axe_poison3.ogg" ] ] < }, 105,107d108 < "damageConfig" : { < "damageSourceKind" : "axe" < }, items\active\weapons\melee\axe\uncommonaxe.activeitem 2a3 > "price" : 170, 29a31 > "damageSourceKind" : "axe", 77a80,93 > "elementalConfig" : { > "fire" : { > "fireSounds" : [ [ "/sfx/melee/swing_axe_fire1.ogg", "/sfx/melee/swing_axe_fire2.ogg", "/sfx/melee/swing_axe_fire3.ogg" ] ] > }, > "ice" : { > "fireSounds" : [ [ "/sfx/melee/swing_axe_ice1.ogg", "/sfx/melee/swing_axe_ice2.ogg", "/sfx/melee/swing_axe_ice3.ogg" ] ] > }, > "poison" : { > "fireSounds" : [ [ "/sfx/melee/swing_axe_poison1.ogg", "/sfx/melee/swing_axe_poison2.ogg", "/sfx/melee/swing_axe_poison3.ogg" ] ] > }, > "electric" : { > "fireSounds" : [ [ "/sfx/melee/swing_axe_electric1.ogg", "/sfx/melee/swing_axe_electric2.ogg", "/sfx/melee/swing_axe_electric3.ogg" ] ] > } > }, 90,96d105 < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_axe.ogg" ], < "fire" : [ [ "/sfx/melee/swing_axe_fire1.ogg", "/sfx/melee/swing_axe_fire2.ogg", "/sfx/melee/swing_axe_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_axe_electric1.ogg", "/sfx/melee/swing_axe_electric2.ogg", "/sfx/melee/swing_axe_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_axe_ice1.ogg", "/sfx/melee/swing_axe_ice2.ogg", "/sfx/melee/swing_axe_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_axe_poison1.ogg", "/sfx/melee/swing_axe_poison2.ogg", "/sfx/melee/swing_axe_poison3.ogg" ] ] < }, 98,100d106 < "damageConfig" : { < "damageSourceKind" : "axe" < }, items\active\weapons\melee\broadsword\commonbroadsword.activeitem 8c8 < "tooltipKind" : "sword", // FIXME: tooltips : ( --- > "tooltipKind" : "sword", 19c19 < --- > 30a31 > "fireSounds" : [ "/sfx/melee/swing_broadsword.ogg" ], 82,88d82 < }, < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_broadsword.ogg" ], < "fire" : [ [ "/sfx/melee/swing_broadsword_fire1.ogg", "/sfx/melee/swing_broadsword_fire2.ogg", "/sfx/melee/swing_broadsword_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_broadsword_electric1.ogg", "/sfx/melee/swing_broadsword_electric2.ogg", "/sfx/melee/swing_broadsword_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_broadsword_ice1.ogg", "/sfx/melee/swing_broadsword_ice2.ogg", "/sfx/melee/swing_broadsword_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_broadsword_poison1.ogg", "/sfx/melee/swing_broadsword_poison2.ogg", "/sfx/melee/swing_broadsword_poison3.ogg" ] ] items\active\weapons\melee\broadsword\rarebroadsword.activeitem 2a3 > "price" : 190, 7,8c8,9 < "shortdescription" : "Uncommon Broadsword", < "tooltipKind" : "sword", // FIXME: tooltips : ( --- > "shortdescription" : "Rare Broadsword", > "tooltipKind" : "sword", 26c27 < "statusEffects" : [ "damagefreeze" ], --- > "damageSourceKind" : "broadsword", 30,35d30 < }, < "elementalStatusEffects" : { < "fire" : [ "burning" ], < "ice" : [ "frostslow" ], < "poison" : [ "weakpoison" ], < "electric" : [ "paralysis" ] 83a79,96 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "burning" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_broadsword_fire1.ogg", "/sfx/melee/swing_broadsword_fire2.ogg", "/sfx/melee/swing_broadsword_fire3.ogg" ] ] > }, > "ice" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "frostslow" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_broadsword_ice1.ogg", "/sfx/melee/swing_broadsword_ice2.ogg", "/sfx/melee/swing_broadsword_ice3.ogg" ] ] > }, > "poison" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "weakpoison" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_broadsword_poison1.ogg", "/sfx/melee/swing_broadsword_poison2.ogg", "/sfx/melee/swing_broadsword_poison3.ogg" ] ] > }, > "electric" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "paralysis" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_broadsword_electric1.ogg", "/sfx/melee/swing_broadsword_electric2.ogg", "/sfx/melee/swing_broadsword_electric3.ogg" ] ] > } > }, 96,102d108 < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_broadsword.ogg" ], < "fire" : [ [ "/sfx/melee/swing_broadsword_fire1.ogg", "/sfx/melee/swing_broadsword_fire2.ogg", "/sfx/melee/swing_broadsword_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_broadsword_electric1.ogg", "/sfx/melee/swing_broadsword_electric2.ogg", "/sfx/melee/swing_broadsword_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_broadsword_ice1.ogg", "/sfx/melee/swing_broadsword_ice2.ogg", "/sfx/melee/swing_broadsword_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_broadsword_poison1.ogg", "/sfx/melee/swing_broadsword_poison2.ogg", "/sfx/melee/swing_broadsword_poison3.ogg" ] ] < }, 110,112d115 < "damageConfig" : { < "damageSourceKind" : "broadsword" < }, items\active\weapons\melee\broadsword\uncommonbroadsword.activeitem 2a3 > "price" : 170, 8c9 < "tooltipKind" : "sword", // FIXME: tooltips : ( --- > "tooltipKind" : "sword", 25a27 > "damageSourceKind" : "broadsword", 77a80,93 > "elementalConfig" : { > "fire" : { > "fireSounds" : [ [ "/sfx/melee/swing_broadsword_fire1.ogg", "/sfx/melee/swing_broadsword_fire2.ogg", "/sfx/melee/swing_broadsword_fire3.ogg" ] ] > }, > "ice" : { > "fireSounds" : [ [ "/sfx/melee/swing_broadsword_ice1.ogg", "/sfx/melee/swing_broadsword_ice2.ogg", "/sfx/melee/swing_broadsword_ice3.ogg" ] ] > }, > "poison" : { > "fireSounds" : [ [ "/sfx/melee/swing_broadsword_poison1.ogg", "/sfx/melee/swing_broadsword_poison2.ogg", "/sfx/melee/swing_broadsword_poison3.ogg" ] ] > }, > "electric" : { > "fireSounds" : [ [ "/sfx/melee/swing_broadsword_electric1.ogg", "/sfx/melee/swing_broadsword_electric2.ogg", "/sfx/melee/swing_broadsword_electric3.ogg" ] ] > } > }, 90,96d105 < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_broadsword.ogg" ], < "fire" : [ [ "/sfx/melee/swing_broadsword_fire1.ogg", "/sfx/melee/swing_broadsword_fire2.ogg", "/sfx/melee/swing_broadsword_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_broadsword_electric1.ogg", "/sfx/melee/swing_broadsword_electric2.ogg", "/sfx/melee/swing_broadsword_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_broadsword_ice1.ogg", "/sfx/melee/swing_broadsword_ice2.ogg", "/sfx/melee/swing_broadsword_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_broadsword_poison1.ogg", "/sfx/melee/swing_broadsword_poison2.ogg", "/sfx/melee/swing_broadsword_poison3.ogg" ] ] < }, 104,106d112 < "damageConfig" : { < "damageSourceKind" : "broadsword" < }, items\active\weapons\melee\dagger\commondagger.activeitem 2a3 > "price" : 80, 6c7 < "description" : "You're a lumberjack, and that's OK.", --- > "description" : "Razor sharp and lightning quick.", 13,14d13 < "inventoryIcon" : "icon.png", < 34a34 > "fireSounds" : [ "/sfx/melee/swing_dagger.ogg" ], 79,85d78 < }, < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_dagger.ogg" ], < "fire" : [ [ "/sfx/melee/swing_dagger_fire1.ogg", "/sfx/melee/swing_dagger_fire2.ogg", "/sfx/melee/swing_dagger_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_dagger_electric1.ogg", "/sfx/melee/swing_dagger_electric2.ogg", "/sfx/melee/swing_dagger_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_dagger_ice1.ogg", "/sfx/melee/swing_dagger_ice2.ogg", "/sfx/melee/swing_dagger_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_dagger_poison1.ogg", "/sfx/melee/swing_dagger_poison2.ogg", "/sfx/melee/swing_dagger_poison3.ogg" ] ] items\active\weapons\melee\dagger\raredagger.activeitem 2a3 > "price" : 100, 6,7c7,8 < "description" : "You're a lumberjack, and that's OK.", < "shortdescription" : "Uncommon Dagger", --- > "description" : "Razor sharp and lightning quick.", > "shortdescription" : "Rare Dagger", 12,14c13 < < "inventoryIcon" : "icon.png", < --- > 29c28 < "statusEffects" : [ "shortdamagefreeze" ], --- > "damageSourceKind" : "dagger", 33,38d31 < }, < "elementalStatusEffects" : { < "fire" : [ "burning" ], < "ice" : [ "frostslow" ], < "poison" : [ "weakpoison" ], < "electric" : [ "paralysis" ] 79a73,90 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "shortdamagefreeze", "burning" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_dagger_fire1.ogg", "/sfx/melee/swing_dagger_fire2.ogg", "/sfx/melee/swing_dagger_fire3.ogg" ] ] > }, > "ice" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "shortdamagefreeze", "frostslow" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_dagger_ice1.ogg", "/sfx/melee/swing_dagger_ice2.ogg", "/sfx/melee/swing_dagger_ice3.ogg" ] ] > }, > "poison" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "shortdamagefreeze", "weakpoison" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_dagger_poison1.ogg", "/sfx/melee/swing_dagger_poison2.ogg", "/sfx/melee/swing_dagger_poison3.ogg" ] ] > }, > "electric" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "shortdamagefreeze", "paralysis" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_dagger_electric1.ogg", "/sfx/melee/swing_dagger_electric2.ogg", "/sfx/melee/swing_dagger_electric3.ogg" ] ] > } > }, 92,98d102 < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_dagger.ogg" ], < "fire" : [ [ "/sfx/melee/swing_dagger_fire1.ogg", "/sfx/melee/swing_dagger_fire2.ogg", "/sfx/melee/swing_dagger_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_dagger_electric1.ogg", "/sfx/melee/swing_dagger_electric2.ogg", "/sfx/melee/swing_dagger_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_dagger_ice1.ogg", "/sfx/melee/swing_dagger_ice2.ogg", "/sfx/melee/swing_dagger_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_dagger_poison1.ogg", "/sfx/melee/swing_dagger_poison2.ogg", "/sfx/melee/swing_dagger_poison3.ogg" ] ] < }, 100,102d103 < "damageConfig" : { < "damageSourceKind" : "dagger" < }, items\active\weapons\melee\dagger\uncommondagger.activeitem 2a3 > "price" : 90, 6c7 < "description" : "You're a lumberjack, and that's OK.", --- > "description" : "Razor sharp and lightning quick.", 13,14d13 < "inventoryIcon" : "icon.png", < 28a28 > "damageSourceKind" : "dagger", 73a74,87 > "elementalConfig" : { > "fire" : { > "fireSounds" : [ [ "/sfx/melee/swing_dagger_fire1.ogg", "/sfx/melee/swing_dagger_fire2.ogg", "/sfx/melee/swing_dagger_fire3.ogg" ] ] > }, > "ice" : { > "fireSounds" : [ [ "/sfx/melee/swing_dagger_ice1.ogg", "/sfx/melee/swing_dagger_ice2.ogg", "/sfx/melee/swing_dagger_ice3.ogg" ] ] > }, > "poison" : { > "fireSounds" : [ [ "/sfx/melee/swing_dagger_poison1.ogg", "/sfx/melee/swing_dagger_poison2.ogg", "/sfx/melee/swing_dagger_poison3.ogg" ] ] > }, > "electric" : { > "fireSounds" : [ [ "/sfx/melee/swing_dagger_electric1.ogg", "/sfx/melee/swing_dagger_electric2.ogg", "/sfx/melee/swing_dagger_electric3.ogg" ] ] > } > }, 86,92d99 < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_dagger.ogg" ], < "fire" : [ [ "/sfx/melee/swing_dagger_fire1.ogg", "/sfx/melee/swing_dagger_fire2.ogg", "/sfx/melee/swing_dagger_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_dagger_electric1.ogg", "/sfx/melee/swing_dagger_electric2.ogg", "/sfx/melee/swing_dagger_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_dagger_ice1.ogg", "/sfx/melee/swing_dagger_ice2.ogg", "/sfx/melee/swing_dagger_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_dagger_poison1.ogg", "/sfx/melee/swing_dagger_poison2.ogg", "/sfx/melee/swing_dagger_poison3.ogg" ] ] < }, 94,96d100 < "damageConfig" : { < "damageSourceKind" : "dagger" < }, items\active\weapons\melee\hammer\commonhammer.activeitem 2a3 > "price" : 150, 7,9c8,10 < "shortdescription" : "Common hammer", < "tooltipKind" : "sword", // FIXME: tooltips : ( < "weaponType" : "hammer", --- > "shortdescription" : "Common Hammer", > "tooltipKind" : "sword", > "weaponType" : "Hammer", 31,32c32 < "smashMomentum" : [0, -45], < "bladeDamageMultiplier" : 0.5 --- > "smashMomentum" : [0, -45] 33a34 > "fireSounds" : [ "/sfx/melee/swing_hammer.ogg" ], 101,107d101 < }, < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_hammer.ogg" ], < "fire" : [ [ "/sfx/melee/swing_hammer_fire1.ogg", "/sfx/melee/swing_hammer_fire2.ogg", "/sfx/melee/swing_hammer_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_hammer_electric1.ogg", "/sfx/melee/swing_hammer_electric2.ogg", "/sfx/melee/swing_hammer_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_hammer_ice1.ogg", "/sfx/melee/swing_hammer_ice2.ogg", "/sfx/melee/swing_hammer_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_hammer_poison1.ogg", "/sfx/melee/swing_hammer_poison2.ogg", "/sfx/melee/swing_hammer_poison3.ogg" ] ] items\active\weapons\melee\hammer\hammer.lua 12c12 < self.weapon = Weapon:new(meleeWeaponConfig()) --- > self.weapon = Weapon:new() 17c17 < local primaryAttack = HammerSmash:new(meleeAttackConfig(item.instanceValue("primaryAttack"), self.weapon.elementalType), item.instanceValue("stances")) --- > local primaryAttack = HammerSmash:new(item.instanceValue("primaryAttack"), item.instanceValue("stances")) items\active\weapons\melee\hammer\rarehammer.activeitem 2a3 > "price" : 190, 7,9c8,10 < "shortdescription" : "Common hammer", < "tooltipKind" : "sword", // FIXME: tooltips : ( < "weaponType" : "hammer", --- > "shortdescription" : "Rare Hammer", > "tooltipKind" : "sword", > "weaponType" : "Hammer", 28c29 < "statusEffects" : [ "damagefreeze" ], --- > "damageSourceKind" : "hammer", 32,39c33 < "elementalStatusEffects" : { < "fire" : [ "burning" ], < "ice" : [ "frostslow" ], < "poison" : [ "weakpoison" ], < "electric" : [ "paralysis" ] < }, < "smashMomentum" : [0, -45], < "bladeDamageMultiplier" : 0.5 --- > "smashMomentum" : [0, -45] 102a97,114 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "burning" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_hammer_fire1.ogg", "/sfx/melee/swing_hammer_fire2.ogg", "/sfx/melee/swing_hammer_fire3.ogg" ] ] > }, > "ice" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "frostslow" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_hammer_ice1.ogg", "/sfx/melee/swing_hammer_ice2.ogg", "/sfx/melee/swing_hammer_ice3.ogg" ] ] > }, > "poison" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "weakpoison" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_hammer_poison1.ogg", "/sfx/melee/swing_hammer_poison2.ogg", "/sfx/melee/swing_hammer_poison3.ogg" ] ] > }, > "electric" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "paralysis" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_hammer_electric1.ogg", "/sfx/melee/swing_hammer_electric2.ogg", "/sfx/melee/swing_hammer_electric3.ogg" ] ] > } > }, 108c120 < }, --- > }, 114,123d125 < }, < "damageConfig" : { < "damageSourceKind" : "hammer" < }, < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_hammer.ogg" ], < "fire" : [ [ "/sfx/melee/swing_hammer_fire1.ogg", "/sfx/melee/swing_hammer_fire2.ogg", "/sfx/melee/swing_hammer_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_hammer_electric1.ogg", "/sfx/melee/swing_hammer_electric2.ogg", "/sfx/melee/swing_hammer_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_hammer_ice1.ogg", "/sfx/melee/swing_hammer_ice2.ogg", "/sfx/melee/swing_hammer_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_hammer_poison1.ogg", "/sfx/melee/swing_hammer_poison2.ogg", "/sfx/melee/swing_hammer_poison3.ogg" ] ] items\active\weapons\melee\hammer\uncommonhammer.activeitem 2a3 > "price" : 170, 7,9c8,10 < "shortdescription" : "Common hammer", < "tooltipKind" : "sword", // FIXME: tooltips : ( < "weaponType" : "hammer", --- > "shortdescription" : "Uncommon Hammer", > "tooltipKind" : "sword", > "weaponType" : "Hammer", 27a29 > "damageSourceKind" : "hammer", 32,33c34 < "smashMomentum" : [0, -45], < "bladeDamageMultiplier" : 0.5 --- > "smashMomentum" : [0, -45] 96a98,111 > "elementalConfig" : { > "fire" : { > "fireSounds" : [ [ "/sfx/melee/swing_hammer_fire1.ogg", "/sfx/melee/swing_hammer_fire2.ogg", "/sfx/melee/swing_hammer_fire3.ogg" ] ] > }, > "ice" : { > "fireSounds" : [ [ "/sfx/melee/swing_hammer_ice1.ogg", "/sfx/melee/swing_hammer_ice2.ogg", "/sfx/melee/swing_hammer_ice3.ogg" ] ] > }, > "poison" : { > "fireSounds" : [ [ "/sfx/melee/swing_hammer_poison1.ogg", "/sfx/melee/swing_hammer_poison2.ogg", "/sfx/melee/swing_hammer_poison3.ogg" ] ] > }, > "electric" : { > "fireSounds" : [ [ "/sfx/melee/swing_hammer_electric1.ogg", "/sfx/melee/swing_hammer_electric2.ogg", "/sfx/melee/swing_hammer_electric3.ogg" ] ] > } > }, 108,117d122 < }, < "damageConfig" : { < "damageSourceKind" : "hammer" < }, < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_hammer.ogg" ], < "fire" : [ [ "/sfx/melee/swing_hammer_fire1.ogg", "/sfx/melee/swing_hammer_fire2.ogg", "/sfx/melee/swing_hammer_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_hammer_electric1.ogg", "/sfx/melee/swing_hammer_electric2.ogg", "/sfx/melee/swing_hammer_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_hammer_ice1.ogg", "/sfx/melee/swing_hammer_ice2.ogg", "/sfx/melee/swing_hammer_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_hammer_poison1.ogg", "/sfx/melee/swing_hammer_poison2.ogg", "/sfx/melee/swing_hammer_poison3.ogg" ] ] items\active\weapons\melee\shortsword\commonshortsword.activeitem 2a3 > "price" : 120, 6,7c7,8 < "description" : "You're a lumberjack, and that's OK.", < "shortdescription" : "Common shortsword", --- > "description" : "Doesn't feel so short when it's buried in your guts.", > "shortdescription" : "Common Shortsword", 9c10 < "weaponType" : "shortsword", --- > "weaponType" : "Shortsword", 13,14d13 < "inventoryIcon" : "icon.png", < 34a34 > "fireSounds" : [ "/sfx/melee/swing_shortsword.ogg" ], 79,85d78 < }, < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_shortsword.ogg" ], < "fire" : [ [ "/sfx/melee/swing_shortsword_fire1.ogg", "/sfx/melee/swing_shortsword_fire2.ogg", "/sfx/melee/swing_shortsword_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_shortsword_electric1.ogg", "/sfx/melee/swing_shortsword_electric2.ogg", "/sfx/melee/swing_shortsword_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_shortsword_ice1.ogg", "/sfx/melee/swing_shortsword_ice2.ogg", "/sfx/melee/swing_shortsword_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_shortsword_poison1.ogg", "/sfx/melee/swing_shortsword_poison2.ogg", "/sfx/melee/swing_shortsword_poison3.ogg" ] ] items\active\weapons\melee\shortsword\rareshortsword.activeitem 2a3 > "price" : 140, 6,7c7,8 < "description" : "You're a lumberjack, and that's OK.", < "shortdescription" : "Uncommon shortsword", --- > "description" : "Doesn't feel so short when it's buried in your guts.", > "shortdescription" : "Rare Shortsword", 9c10 < "weaponType" : "shortsword", --- > "weaponType" : "Shortsword", 13,14d13 < "inventoryIcon" : "icon.png", < 29c28 < "statusEffects" : [ "shortdamagefreeze" ], --- > "damageSourceKind" : "shortsword", 33,38d31 < }, < "elementalStatusEffects" : { < "fire" : [ "burning" ], < "ice" : [ "frostslow" ], < "poison" : [ "weakpoison" ], < "electric" : [ "paralysis" ] 79a73,90 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "shortdamagefreeze", "burning" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_shortsword_fire1.ogg", "/sfx/melee/swing_shortsword_fire2.ogg", "/sfx/melee/swing_shortsword_fire3.ogg" ] ] > }, > "ice" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "shortdamagefreeze", "frostslow" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_shortsword_ice1.ogg", "/sfx/melee/swing_shortsword_ice2.ogg", "/sfx/melee/swing_shortsword_ice3.ogg" ] ] > }, > "poison" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "shortdamagefreeze", "weakpoison" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_shortsword_poison1.ogg", "/sfx/melee/swing_shortsword_poison2.ogg", "/sfx/melee/swing_shortsword_poison3.ogg" ] ] > }, > "electric" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "shortdamagefreeze", "paralysis" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_shortsword_electric1.ogg", "/sfx/melee/swing_shortsword_electric2.ogg", "/sfx/melee/swing_shortsword_electric3.ogg" ] ] > } > }, 92,98d102 < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_shortsword.ogg" ], < "fire" : [ [ "/sfx/melee/swing_shortsword_fire1.ogg", "/sfx/melee/swing_shortsword_fire2.ogg", "/sfx/melee/swing_shortsword_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_shortsword_electric1.ogg", "/sfx/melee/swing_shortsword_electric2.ogg", "/sfx/melee/swing_shortsword_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_shortsword_ice1.ogg", "/sfx/melee/swing_shortsword_ice2.ogg", "/sfx/melee/swing_shortsword_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_shortsword_poison1.ogg", "/sfx/melee/swing_shortsword_poison2.ogg", "/sfx/melee/swing_shortsword_poison3.ogg" ] ] < }, 100,102d103 < "damageConfig" : { < "damageSourceKind" : "shortsword" < }, items\active\weapons\melee\shortsword\uncommonshortsword.activeitem 2a3 > "price" : 130, 6,7c7,8 < "description" : "You're a lumberjack, and that's OK.", < "shortdescription" : "Uncommon shortsword", --- > "description" : "Doesn't feel so short when it's buried in your guts.", > "shortdescription" : "Uncommon Shortsword", 9c10 < "weaponType" : "shortsword", --- > "weaponType" : "Shortsword", 13,14d13 < "inventoryIcon" : "icon.png", < 28a28 > "damageSourceKind" : "shortsword", 73a74,87 > "elementalConfig" : { > "fire" : { > "fireSounds" : [ [ "/sfx/melee/swing_shortsword_fire1.ogg", "/sfx/melee/swing_shortsword_fire2.ogg", "/sfx/melee/swing_shortsword_fire3.ogg" ] ] > }, > "ice" : { > "fireSounds" : [ [ "/sfx/melee/swing_shortsword_ice1.ogg", "/sfx/melee/swing_shortsword_ice2.ogg", "/sfx/melee/swing_shortsword_ice3.ogg" ] ] > }, > "poison" : { > "fireSounds" : [ [ "/sfx/melee/swing_shortsword_poison1.ogg", "/sfx/melee/swing_shortsword_poison2.ogg", "/sfx/melee/swing_shortsword_poison3.ogg" ] ] > }, > "electric" : { > "fireSounds" : [ [ "/sfx/melee/swing_shortsword_electric1.ogg", "/sfx/melee/swing_shortsword_electric2.ogg", "/sfx/melee/swing_shortsword_electric3.ogg" ] ] > } > }, 86,92d99 < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_shortsword.ogg" ], < "fire" : [ [ "/sfx/melee/swing_shortsword_fire1.ogg", "/sfx/melee/swing_shortsword_fire2.ogg", "/sfx/melee/swing_shortsword_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_shortsword_electric1.ogg", "/sfx/melee/swing_shortsword_electric2.ogg", "/sfx/melee/swing_shortsword_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_shortsword_ice1.ogg", "/sfx/melee/swing_shortsword_ice2.ogg", "/sfx/melee/swing_shortsword_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_shortsword_poison1.ogg", "/sfx/melee/swing_shortsword_poison2.ogg", "/sfx/melee/swing_shortsword_poison3.ogg" ] ] < }, 94,96d100 < "damageConfig" : { < "damageSourceKind" : "shortsword" < }, items\active\weapons\melee\spear\commonspear.activeitem 2a3 > "price" : 150, 39a41 > "fireSounds" : [ "/sfx/melee/swing_spear.ogg" ], 96,102d97 < }, < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_spear.ogg" ], < "fire" : [ [ "/sfx/melee/swing_spear_fire1.ogg", "/sfx/melee/swing_spear_fire2.ogg", "/sfx/melee/swing_spear_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_spear_electric1.ogg", "/sfx/melee/swing_spear_electric2.ogg", "/sfx/melee/swing_spear_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_spear_ice1.ogg", "/sfx/melee/swing_spear_ice2.ogg", "/sfx/melee/swing_spear_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_spear_poison1.ogg", "/sfx/melee/swing_spear_poison2.ogg", "/sfx/melee/swing_spear_poison3.ogg" ] ] items\active\weapons\melee\spear\rarespear.activeitem 2a3 > "price" : 190, 28a30 > "damageSourceKind" : "spear", 38,43d39 < }, < "elementalStatusEffects" : { < "fire" : [ "burning" ], < "ice" : [ "frostslow" ], < "poison" : [ "weakpoison" ], < "electric" : [ "paralysis" ] 96a93,110 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "burning" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_spear_fire1.ogg", "/sfx/melee/swing_spear_fire2.ogg", "/sfx/melee/swing_spear_fire3.ogg" ] ] > }, > "ice" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "frostslow" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_spear_ice1.ogg", "/sfx/melee/swing_spear_ice2.ogg", "/sfx/melee/swing_spear_ice3.ogg" ] ] > }, > "poison" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "weakpoison" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_spear_poison1.ogg", "/sfx/melee/swing_spear_poison2.ogg", "/sfx/melee/swing_spear_poison3.ogg" ] ] > }, > "electric" : { > "primaryAttack" : { "damageConfig" : { "statusEffects" : [ "damagefreeze", "paralysis" ] } }, > "fireSounds" : [ [ "/sfx/melee/swing_spear_electric1.ogg", "/sfx/melee/swing_spear_electric2.ogg", "/sfx/melee/swing_spear_electric3.ogg" ] ] > } > }, 109,115d122 < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_spear.ogg" ], < "fire" : [ [ "/sfx/melee/swing_spear_fire1.ogg", "/sfx/melee/swing_spear_fire2.ogg", "/sfx/melee/swing_spear_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_spear_electric1.ogg", "/sfx/melee/swing_spear_electric2.ogg", "/sfx/melee/swing_spear_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_spear_ice1.ogg", "/sfx/melee/swing_spear_ice2.ogg", "/sfx/melee/swing_spear_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_spear_poison1.ogg", "/sfx/melee/swing_spear_poison2.ogg", "/sfx/melee/swing_spear_poison3.ogg" ] ] < }, 122,124d128 < "damageConfig" : { < "damageSourceKind" : "spear" < }, items\active\weapons\melee\spear\spear.lua 10c10 < self.weapon = Weapon:new(meleeWeaponConfig()) --- > self.weapon = Weapon:new() 15c15 < local primaryAttack = SpearStab:new(meleeAttackConfig(item.instanceValue("primaryAttack"), self.weapon.elementalType), item.instanceValue("stances")) --- > local primaryAttack = SpearStab:new(item.instanceValue("primaryAttack"), item.instanceValue("stances")) items\active\weapons\melee\spear\uncommonspear.activeitem 2a3 > "price" : 170, 28a30 > "damageSourceKind" : "spear", 90a93,106 > "elementalConfig" : { > "fire" : { > "fireSounds" : [ [ "/sfx/melee/swing_spear_fire1.ogg", "/sfx/melee/swing_spear_fire2.ogg", "/sfx/melee/swing_spear_fire3.ogg" ] ] > }, > "ice" : { > "fireSounds" : [ [ "/sfx/melee/swing_spear_ice1.ogg", "/sfx/melee/swing_spear_ice2.ogg", "/sfx/melee/swing_spear_ice3.ogg" ] ] > }, > "poison" : { > "fireSounds" : [ [ "/sfx/melee/swing_spear_poison1.ogg", "/sfx/melee/swing_spear_poison2.ogg", "/sfx/melee/swing_spear_poison3.ogg" ] ] > }, > "electric" : { > "fireSounds" : [ [ "/sfx/melee/swing_spear_electric1.ogg", "/sfx/melee/swing_spear_electric2.ogg", "/sfx/melee/swing_spear_electric3.ogg" ] ] > } > }, 103,109d118 < "elementalFireSounds" : { < "physical" : [ "/sfx/melee/swing_spear.ogg" ], < "fire" : [ [ "/sfx/melee/swing_spear_fire1.ogg", "/sfx/melee/swing_spear_fire2.ogg", "/sfx/melee/swing_spear_fire3.ogg" ] ], < "electric" : [ [ "/sfx/melee/swing_spear_electric1.ogg", "/sfx/melee/swing_spear_electric2.ogg", "/sfx/melee/swing_spear_electric3.ogg" ] ], < "ice" : [ [ "/sfx/melee/swing_spear_ice1.ogg", "/sfx/melee/swing_spear_ice2.ogg", "/sfx/melee/swing_spear_ice3.ogg" ] ], < "poison" : [ [ "/sfx/melee/swing_spear_poison1.ogg", "/sfx/melee/swing_spear_poison2.ogg", "/sfx/melee/swing_spear_poison3.ogg" ] ] < }, 116,118d124 < "damageConfig" : { < "damageSourceKind" : "spear" < }, items\active\weapons\ranged\gun.lua 8c8 < self.weapon = Weapon:new(rangedWeaponConfig()) --- > self.weapon = Weapon:new() 13c13 < local primaryAttack = GunFire:new(rangedAttackConfig(item.instanceValue("primaryAttack"), self.weapon.elementalType), item.instanceValue("stances")) --- > local primaryAttack = GunFire:new(item.instanceValue("primaryAttack"), item.instanceValue("stances")) items\active\weapons\ranged\gunfire.lua 23a24 > 87a89 > params.powerMultiplier = activeItem.ownerPowerMultiplier() 118,119c120 < local energyUsageMultiplier = self.energyUsageMultiplier or 1.0 < return root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damagePerShot() * self.projectileCount * energyUsageMultiplier --- > return self.energyUsage * self.fireTime * (self.energyUsageMultiplier or 1.0) 123,124c124 < local damageMultiplier = self.damageMultiplier or 1.0 < return self.projectileParameters.power * root.evalFunction("gunDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() * damageMultiplier --- > return (self.baseDamage or (self.baseDps * self.fireTime)) * item.instanceValue("damageLevelMultiplier") / self.projectileCount items\active\weapons\ranged\altabilities\altfire.lua 6c6 < local altFireAttack = GunFire:new(rangedAttackConfig(sb.jsonMerge(primary, altAbilityConfig), elementalType), altAbilityConfig.stances) --- > local altFireAttack = GunFire:new(sb.jsonMerge(primary, altAbilityConfig), altAbilityConfig.stances) 17c17,22 < if self.fireMode == "alt" and not self.weapon.currentAbility and self.cooldownTimer == 0 and not status.resourceLocked("energy") then --- > if self.fireMode == "alt" > and not self.weapon.currentAbility > and self.cooldownTimer == 0 > and not status.resourceLocked("energy") > and not world.lineTileCollision(mcontroller.position(), self:firePosition()) then > items\active\weapons\ranged\altabilities\bouncingshot\bouncingshot.altability 25a26 > "name" : "Bouncing Shot", 34,36c35,38 < "baseDps" : 6, < "energyUsageMultiplier" : 1.0, < "fireTime" : 0.5, --- > > // use baseDps and fireTime from primary fire > > "energyUsage" : 25.0, items\active\weapons\ranged\altabilities\burstshot\burstshot.altability 53a54 > "name" : "Burst Shot", 57c58 < "energyUsageMultiplier" : 1.25, --- > "energyUsage" : 60.0, 60c61 < "baseDamage" : 10, --- > "baseDamage" : 13, items\active\weapons\ranged\altabilities\burstshot\burstshot.lua 18c18,23 < if self.weapon.currentAbility == nil and self.fireMode == "alt" and self.cooldownTimer == 0 and status.overConsumeResource("energy", self:energyUsage()) then --- > if self.weapon.currentAbility == nil > and self.fireMode == "alt" > and self.cooldownTimer == 0 > and not world.lineTileCollision(mcontroller.position(), self:firePosition()) > and status.overConsumeResource("energy", self.energyUsage) then > 39,45c44,45 < < function burstShot:damageAmount() < return self.damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() < end < < function burstShot:energyUsage() < return self.energyUsageMultiplier * root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damageAmount() --- > function burstShot:firePosition() > return vec2.add(mcontroller.position(), activeItem.handPosition(self.weapon.muzzleOffset)) items\active\weapons\ranged\altabilities\deathbomb\deathbomb.altability 17a18 > "name" : "Enemy Bomb", 21,26c22,27 < "elementalProjectiles" : { < "physical" : "deathbombdart", < "fire" : "deathbombdartfire", < "electric" : "deathbombdartelectric", < "ice" : "deathbombdartice", < "poison" : "deathbombdartpoison" --- > "elementalConfig" : { > "physical" : { "projectileType" : "deathbombdart" }, > "fire" : { "projectileType" : "deathbombdartfire" }, > "electric" : { "projectileType" : "deathbombdartelectric" }, > "ice" : { "projectileType" : "deathbombdartice" }, > "poison" : { "projectileType" : "deathbombdartpoison" } 31,32c32,33 < "baseDps" : 1, < "energyUsageMultiplier" : 1.5, --- > "baseDps" : 3.0, > "energyUsage" : 25.0, items\active\weapons\ranged\altabilities\explosiveburst\explosiveburst.altability 23a24 > "name" : "Explosive Burst", 27d27 < "energyUsageMultiplier" : 1.0, 35c35 < "baseDps" : 6, --- > "baseDps" : 10.0, 37a38,39 > > "energyUsage" : 40.0, items\active\weapons\ranged\altabilities\explosiveburst\explosiveburst.lua 7c7 < local explosiveBurst = GunFire:new(rangedAttackConfig(sb.jsonMerge(primary, altAbilityConfig)), altAbilityConfig.stances) --- > local explosiveBurst = GunFire:new(sb.jsonMerge(primary, altAbilityConfig), altAbilityConfig.stances) 18c18,23 < if self.fireMode == "alt" and not self.weapon.currentAbility and self.cooldownTimer == 0 and not status.resourceLocked("energy") then --- > if self.fireMode == "alt" > and not self.weapon.currentAbility > and self.cooldownTimer == 0 > and not status.resourceLocked("energy") > and not world.lineTileCollision(mcontroller.position(), self:firePosition()) then > items\active\weapons\ranged\altabilities\explosiveshot\explosiveshot.altability 25a26 > "name" : "Explosive Shot", 31,34c32,34 < "baseDps" : 4, < "energyUsageMultiplier" : 1.0, < "fireTime" : 1.0, < "inaccuracy" : 0, --- > > // use baseDps and fireTime from primary fire > 35a36,37 > > "energyUsage" : 25.0, items\active\weapons\ranged\altabilities\flashlight\flashlight.altability 36a37 > "name" : "Flashlight", items\active\weapons\ranged\altabilities\grenadelauncher\grenadelauncher.altability 33a34 > "name" : "Grenade Launcher", 37,42c38,43 < "elementalProjectiles" : { < "physical" : "impactgrenade", < "fire" : "firecloudgrenade", < "electric" : "electriccloudgrenade", < "ice" : "icecloudgrenade", < "poison" : "poisoncloudgrenade" --- > "elementalConfig" : { > "physical" : { "projectileType" : "impactgrenade" }, > "fire" : { "projectileType" : "firecloudgrenade" }, > "electric" : { "projectileType" : "electriccloudgrenade" }, > "ice" : { "projectileType" : "icecloudgrenade" }, > "poison" : { "projectileType" : "poisoncloudgrenade" } 47,48c48,49 < "baseDps" : 4, < "energyUsageMultiplier" : 1.25, --- > "baseDamage" : 6, > "energyUsage" : 30, items\active\weapons\ranged\altabilities\guidedrocket\guidedrocket.altability 28c28,29 < "type" : "explosiveshot", --- > "name" : "Guided Rocket", > "type" : "guidedrocket", 31,36c32,37 < "elementalProjectiles" : { < "physical" : "guidedrocket", < "fire" : "fireguidedrocket", < "electric" : "electricguidedrocket", < "ice" : "iceguidedrocket", < "poison" : "poisonguidedrocket" --- > "elementalConfig" : { > "physical" : { "projectileType" : "guidedrocket" }, > "fire" : { "projectileType" : "fireguidedrocket" }, > "electric" : { "projectileType" : "electricguidedrocket" }, > "ice" : { "projectileType" : "iceguidedrocket" }, > "poison" : { "projectileType" : "poisonguidedrocket" } 40c41 < "energyUsageMultiplier" : 1.25, --- > "energyUsage" : 50, items\active\weapons\ranged\altabilities\guidedrocket\guidedrocket.lua 6c6 < local guidedRocket = GunFire:new(rangedAttackConfig(sb.jsonMerge(primary, altAbilityConfig), elementalType), altAbilityConfig.stances) --- > local guidedRocket = GunFire:new(sb.jsonMerge(primary, altAbilityConfig), altAbilityConfig.stances) 27d26 < and not world.lineTileCollision(mcontroller.position(), self:firePosition()) 28a28 > and not world.lineTileCollision(mcontroller.position(), self:firePosition()) items\active\weapons\ranged\altabilities\homingrocket\homingrocket.altability 28c28,29 < "type" : "explosiveshot", --- > "name" : "Homing Rocket", > "type" : "homingrocket", 34c35 < "energyUsageMultiplier" : 1.5, --- > "energyUsage" : 30, items\active\weapons\ranged\altabilities\homingrocket\homingrocket.lua 6c6 < local homingRocketAttack = GunFire:new(rangedAttackConfig(sb.jsonMerge(primary, altAbilityConfig)), altAbilityConfig.stances) --- > local homingRocketAttack = GunFire:new(sb.jsonMerge(primary, altAbilityConfig), altAbilityConfig.stances) 23d22 < and not world.lineTileCollision(mcontroller.position(), self:firePosition()) 25c24,26 < and status.overConsumeResource("energy", self:energyPerShot()) then --- > and not world.lineTileCollision(mcontroller.position(), self:firePosition()) > and status.overConsumeResource("energy", self:energyPerShot()) then > items\active\weapons\ranged\altabilities\lance\lance.altability 55a56 > "name" : "Energy Lance", 60c61 < "energyUsageMultiplier" : 0.7, --- > "energyUsage" : 40.0, 67a69,74 > }, > "elementalConfig" : { > "fire" : { "damageConfig" : { "statusEffects" : [ "burning" ] } }, > "ice" : { "damageConfig" : { "statusEffects" : [ "frostslow" ] } }, > "poison" : { "damageConfig" : { "statusEffects" : [ "weakpoison" ] } }, > "electric" : { "damageConfig" : { "statusEffects" : [ "paralysis" ] } } items\active\weapons\ranged\altabilities\lance\lance.lua 6c6 < local lanceAttack = WeaponAbility:new(rangedAttackConfig(sb.jsonMerge(primary, altAbilityConfig), elementalType), altAbilityConfig.stances) --- > local lanceAttack = WeaponAbility:new(sb.jsonMerge(primary, altAbilityConfig), altAbilityConfig.stances) 20c20,21 < and status.overConsumeResource("energy", self:energyPerShot()) then --- > and not world.lineTileCollision(mcontroller.position(), self:firePosition()) > and status.overConsumeResource("energy", self.energyUsage) then 39,40c40,41 < function lanceAttack:reset() < --- > function lanceAttack:firePosition() > return vec2.add(mcontroller.position(), activeItem.handPosition(self.weapon.muzzleOffset)) 45,53d45 < end < < function lanceAttack:energyPerShot() < local energyUsageMultiplier = self.energyUsageMultiplier or 1.0 < return root.evalFunction("gunLevelEnergyCostPerDamage", item.instanceValue("level", 1)) * self:damagePerShot() * self.projectileCount * energyUsageMultiplier < end < < function lanceAttack:damagePerShot() < return self.damageConfig.baseDamage * root.evalFunction("swordDamageLevelMultiplier", item.instanceValue("level", 1)) * activeItem.ownerPowerMultiplier() items\active\weapons\ranged\altabilities\markedshot\markedshot.altability 16a17 > "name" : "Marked Shot", 20,25c21,26 < "elementalProjectiles" : { < "physical" : "chainbullet", < "fire" : "chainfireplasma", < "electric" : "chainelectricplasma", < "ice" : "chainiceplasma", < "poison" : "chainpoisonplasma" --- > "elementalConfig" : { > "physical" : { "projectileType" : "chainbullet" }, > "fire" : { "projectileType" : "chainfireplasma" }, > "electric" : { "projectileType" : "chainelectricplasma" }, > "ice" : { "projectileType" : "chainiceplasma" }, > "poison" : { "projectileType" : "chainpoisonplasma" } 28,29c29,30 < "baseDps" : 4, < "energyUsageMultiplier" : 1.0, --- > "baseDamage" : 4, > "energyUsage" : 25.0, // cost per target marked items\active\weapons\ranged\altabilities\markedshot\markedshot.lua 6c6 < local markedShot = GunFire:new(rangedAttackConfig(sb.jsonMerge(primary, altAbilityConfig)), altAbilityConfig.stances) --- > local markedShot = GunFire:new(sb.jsonMerge(primary, altAbilityConfig), altAbilityConfig.stances) 35c35 < if newTarget and status.overConsumeResource("energy", self:energyPerShot()) then --- > if newTarget and status.overConsumeResource("energy", self.energyUsage) then 54c54 < local projectileId = self:fireProjectile(self.elementalProjectiles[self.weapon.elementalType], {targets = self.targets}) --- > local projectileId = self:fireProjectile(self.projectileType, {targets = self.targets}) items\active\weapons\ranged\altabilities\piercingshot\piercingshot.altability 25a26 > "name" : "Piercing Shot", 33,34c34,37 < "baseDps" : 6, < "fireTime" : 1.0, --- > > // use baseDps and fireTime from primary fire > > "energyUsage" : 25.0, items\active\weapons\ranged\altabilities\rocketburst\rocketburst.altability 22c22,23 < "type" : "explosiveshot", --- > "name" : "Rocket Burst", > "type" : "rocketburst", 27,28c28,29 < "baseDps" : 3.5, < "energyUsageMultiplier" : 1.5, --- > "baseDps" : 7, > "energyUsage" : 30, items\active\weapons\ranged\altabilities\rocketburst\rocketburst.lua 6c6 < local rocketBurst = GunFire:new(rangedAttackConfig(sb.jsonMerge(primary, altAbilityConfig), elementalType), altAbilityConfig.stances) --- > local rocketBurst = GunFire:new(sb.jsonMerge(primary, altAbilityConfig), altAbilityConfig.stances) 17c17,22 < if self.fireMode == "alt" and not self.weapon.currentAbility and self.cooldownTimer == 0 and not status.resourceLocked("energy") then --- > if self.fireMode == "alt" > and not self.weapon.currentAbility > and self.cooldownTimer == 0 > and not status.resourceLocked("energy") > and not world.lineTileCollision(mcontroller.position(), self:firePosition()) then > items\active\weapons\ranged\altabilities\shrapnelbomb\shrapnelbomb.altability 10c10,11 < "type" : "piercingshot", --- > "name" : "Shrapnel Bomb", > "type" : "shrapnelbomb", 15,16c16,19 < "baseDps" : 0.75, < "energyUsageMultiplier" : 16, --- > > "baseDamage" : 12, > "energyUsage" : 40, > items\active\weapons\ranged\altabilities\spray\spray.altability 5a6 > "name" : "Spray n' Pray", 9c10 < "energyUsageMultiplier" : 1.5, --- > "energyUsage" : 60, items\active\weapons\ranged\altabilities\stickyshot\stickyshot.altability 20a21 > "name" : "Sticky Bombs", 24d24 < "fireTime" : 1.0, 30c30,31 < "energyUsageMultiplier" : 1.25, --- > "energyUsage" : 40, > "fireTime" : 1.0, items\active\weapons\ranged\assaultrifle\commonassaultrifle.activeitem 2a3 > "price" : 150, 28a30 > "energyUsage" : [21, 24], 39a42 > "fireSounds" : [ "/sfx/gun/ar1.ogg", "/sfx/gun/ar2.ogg", "/sfx/gun/ar3.ogg", "/sfx/gun/ar4.ogg", "/sfx/gun/ar5.ogg", "/sfx/gun/ar6.ogg" ], 92,98d94 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/ar1.ogg", "/sfx/gun/ar2.ogg", "/sfx/gun/ar3.ogg", "/sfx/gun/ar4.ogg", "/sfx/gun/ar5.ogg", "/sfx/gun/ar6.ogg" ], < "fire" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "electric" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "ice" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "poison" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ] < }, items\active\weapons\ranged\assaultrifle\rareassaultrifle.activeitem 2a3 > "price" : 190, 26a28 > "energyUsage" : [22.5, 25.5], 33,39d34 < "projectileType" : "standardbullet", < "elementalProjectiles" : { < "fire" : "fireplasma", < "ice" : "iceplasma", < "electric" : "electricplasma", < "poison" : "poisonplasma" < }, 82a78,95 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "projectileType" : "fireplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "burning" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > }, > "ice" : { > "primaryAttack" : { "projectileType" : "iceplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "frostslow" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > }, > "poison" : { > "primaryAttack" : { "projectileType" : "poisonplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "weakpoison" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > }, > "electric" : { > "primaryAttack" : { "projectileType" : "electricplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "paralysis" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > } > }, 102,108d114 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/ar1.ogg", "/sfx/gun/ar2.ogg", "/sfx/gun/ar3.ogg", "/sfx/gun/ar4.ogg", "/sfx/gun/ar5.ogg", "/sfx/gun/ar6.ogg" ], < "fire" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "electric" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "ice" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "poison" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ] < }, items\active\weapons\ranged\assaultrifle\uncommonassaultrifle.activeitem 2a3 > "price" : 170, 26a28 > "energyUsage" : [22.5, 25.5], 33,39d34 < "projectileType" : "standardbullet", < "elementalProjectiles" : { < "fire" : "fireplasma", < "ice" : "iceplasma", < "electric" : "electricplasma", < "poison" : "poisonplasma" < }, 82a78,95 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "projectileType" : "fireplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > }, > "ice" : { > "primaryAttack" : { "projectileType" : "iceplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > }, > "poison" : { > "primaryAttack" : { "projectileType" : "poisonplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > }, > "electric" : { > "primaryAttack" : { "projectileType" : "electricplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > } > }, 102,108d114 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/ar1.ogg", "/sfx/gun/ar2.ogg", "/sfx/gun/ar3.ogg", "/sfx/gun/ar4.ogg", "/sfx/gun/ar5.ogg", "/sfx/gun/ar6.ogg" ], < "fire" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "electric" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "ice" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "poison" : [ "/sfx/gun/plasma_ar1.ogg", "/sfx/gun/plasma_ar2.ogg", "/sfx/gun/plasma_ar3.ogg", "/sfx/gun/plasma_pistol3.ogg" ] < }, items\active\weapons\ranged\boomerang\boomerang.activeitem 2a3 > "price" : 500, 7c8 < "description" : "A perennial favorite.", --- > "description" : "State-of-the-art microthrusters guarantee that it will always return.", 9c10 < "tooltipKind" : "gun", --- > "tooltipKind" : "base", 22c23,26 < "baseDamage" : 3, --- > "projectileParameters" : { > "power" : 3, > "knockback" : 20 > }, items\active\weapons\ranged\boomerang\boomerang.animation 18c18 < "rotationGroup" : "weapon", --- > "rotationGroups" : [ "weapon" ], items\active\weapons\ranged\boomerang\boomerang.lua 6a7,9 > self.projectileParameters = item.instanceValue("projectileParameters") > self.projectileParameters.power = self.projectileParameters.power * root.evalFunction("weaponDamageLevelMultiplier", item.instanceValue("level", 1)) > 52a56,58 > local params = copy(self.projectileParameters) > params.powerMultiplier = activeItem.ownerPowerMultiplier() > params.ownerId = activeItem.ownerEntityId() 59,62c65 < { < powerMultiplier = activeItem.ownerPowerMultiplier(), < power = item.instanceValue("baseDamage") * root.evalFunction("gunDamageLevelMultiplier", item.instanceValue("level", 1)) < } --- > params 66d68 < world.callScriptedEntity(projectileId, "setOwnerId", activeItem.ownerEntityId()) items\active\weapons\ranged\grenadelauncher\commongrenadelauncher.activeitem 2a3 > "price" : 160, 10c11 < "twoHanded" : true, --- > "twoHanded" : false, 47a49,50 > "elementalType" : "physical", > 50a54 > "energyUsage" : [11.25, 13.5], 58,59c62 < < "elementalType" : "physical", --- > "fireSounds" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ], 65c68 < "twoHanded" : true, --- > "twoHanded" : false, 74c77 < "twoHanded" : true, --- > "twoHanded" : false, 83c86 < "twoHanded" : true, --- > "twoHanded" : false, 112,118d114 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ], < "fire" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ], < "electric" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ], < "ice" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ], < "poison" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ] < }, items\active\weapons\ranged\grenadelauncher\raregrenadelauncher.activeitem 2a3 > "price" : 180, 10c11 < "twoHanded" : true, --- > "twoHanded" : false, 51a53 > "energyUsage" : [12.75, 15], 54,59d55 < "elementalProjectiles" : { < "fire" : [ "fireplasmagrenade", "fireplasmaimpactgrenade", "firestickygrenade", "fireproximitymine" ], < "electric" : [ "electricplasmagrenade", "electricplasmaimpactgrenade", "electricstickygrenade", "electricproximitymine" ], < "ice" : [ "iceplasmagrenade", "iceplasmaimpactgrenade", "icestickygrenade", "iceproximitymine" ], < "poison" : [ "poisonplasmagrenade", "poisonplasmaimpactgrenade", "poisonstickygrenade", "poisonproximitymine" ] < }, 63a60 > "fireSounds" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ], 69c66 < "twoHanded" : true, --- > "twoHanded" : false, 78c75 < "twoHanded" : true, --- > "twoHanded" : false, 87c84 < "twoHanded" : true, --- > "twoHanded" : false, 102a100,125 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { > "projectileType" : [ "fireplasmagrenade", "fireplasmaimpactgrenade", "firestickygrenade", "fireproximitymine" ], > "projectileParameters" : { "actionOnReap" : [ { "action" : "config", "file" : "/projectiles/explosions/regularexplosion2/fireexplosionfreezestatus.config" } ] } > } > }, > "ice" : { > "primaryAttack" : { > "projectileType" : [ "iceplasmagrenade", "iceplasmaimpactgrenade", "icestickygrenade", "iceproximitymine" ], > "projectileParameters" : { "actionOnReap" : [ { "action" : "config", "file" : "/projectiles/explosions/regularexplosion2/iceexplosionfreezestatus.config" } ] } > } > }, > "poison" : { > "primaryAttack" : { > "projectileType" : [ "poisonplasmagrenade", "poisonplasmaimpactgrenade", "poisonstickygrenade", "poisonproximitymine" ], > "projectileParameters" : { "actionOnReap" : [ { "action" : "config", "file" : "/projectiles/explosions/regularexplosion2/poisonexplosionfreezestatus.config" } ] } > } > }, > "electric" : { > "primaryAttack" : { > "projectileType" : [ "electricplasmagrenade", "electricplasmaimpactgrenade", "electricstickygrenade", "electricproximitymine" ], > "projectileParameters" : { "actionOnReap" : [ { "action" : "config", "file" : "/projectiles/explosions/regularexplosion2/electricexplosionfreezestatus.config" } ] } > } > } > }, 122,128d144 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ], < "fire" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ], < "electric" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ], < "ice" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ], < "poison" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ] < }, items\active\weapons\ranged\grenadelauncher\uncommongrenadelauncher.activeitem 2a3 > "price" : 170, 10c11 < "twoHanded" : true, --- > "twoHanded" : false, 51a53 > "energyUsage" : [12.75, 15], 54,59d55 < "elementalProjectiles" : { < "fire" : [ "fireplasmagrenade", "fireplasmaimpactgrenade", "firestickygrenade", "fireproximitymine" ], < "electric" : [ "electricplasmagrenade", "electricplasmaimpactgrenade", "electricstickygrenade", "electricproximitymine" ], < "ice" : [ "iceplasmagrenade", "iceplasmaimpactgrenade", "icestickygrenade", "iceproximitymine" ], < "poison" : [ "poisonplasmagrenade", "poisonplasmaimpactgrenade", "poisonstickygrenade", "poisonproximitymine" ] < }, 63a60 > "fireSounds" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ], 69c66 < "twoHanded" : true, --- > "twoHanded" : false, 78c75 < "twoHanded" : true, --- > "twoHanded" : false, 87c84 < "twoHanded" : true, --- > "twoHanded" : false, 102a100,113 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "projectileType" : [ "fireplasmagrenade", "fireplasmaimpactgrenade", "firestickygrenade", "fireproximitymine" ] } > }, > "ice" : { > "primaryAttack" : { "projectileType" : [ "iceplasmagrenade", "iceplasmaimpactgrenade", "icestickygrenade", "iceproximitymine" ] } > }, > "poison" : { > "primaryAttack" : { "projectileType" : [ "poisonplasmagrenade", "poisonplasmaimpactgrenade", "poisonstickygrenade", "poisonproximitymine" ] } > }, > "electric" : { > "primaryAttack" : { "projectileType" : [ "electricplasmagrenade", "electricplasmaimpactgrenade", "electricstickygrenade", "electricproximitymine" ] } > } > }, 122,128d132 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ], < "fire" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ], < "electric" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ], < "ice" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ], < "poison" : [ "/sfx/gun/grenade1.ogg", "/sfx/gun/grenade2.ogg" ] < }, items\active\weapons\ranged\machinepistol\commonmachinepistol.activeitem 2a3 > "price" : 120, 26a28 > "energyUsage" : [11.25, 13.5], 33a36 > "fireSounds" : [ "/sfx/gun/mp1.ogg", "/sfx/gun/mp2.ogg", "/sfx/gun/mp3.ogg" ], 88,94d90 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/mp1.ogg", "/sfx/gun/mp2.ogg", "/sfx/gun/mp3.ogg" ], < "fire" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ], < "electric" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ], < "ice" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ], < "poison" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ] < }, items\active\weapons\ranged\machinepistol\raremachinepistol.activeitem 2a3 > "price" : 140, 26a28 > "energyUsage" : [12.75, 15], 30,35d31 < "elementalProjectiles" : { < "fire" : "fireplasma", < "ice" : "iceplasma", < "electric" : "electricplasma", < "poison" : "poisonplasma" < }, 78a75,92 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "projectileType" : "fireplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "burning" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ] > }, > "ice" : { > "primaryAttack" : { "projectileType" : "iceplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "frostslow" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ] > }, > "poison" : { > "primaryAttack" : { "projectileType" : "poisonplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "weakpoison" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ] > }, > "electric" : { > "primaryAttack" : { "projectileType" : "electricplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "paralysis" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ] > } > }, 98,104d111 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/mp1.ogg", "/sfx/gun/mp2.ogg", "/sfx/gun/mp3.ogg" ], < "fire" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ], < "electric" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ], < "ice" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ], < "poison" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ] < }, items\active\weapons\ranged\machinepistol\uncommonmachinepistol.activeitem 2a3 > "price" : 130, 26a28 > "energyUsage" : [12.75, 15], 29,34d30 < "elementalProjectiles" : { < "fire" : "fireplasma", < "ice" : "iceplasma", < "electric" : "electricplasma", < "poison" : "poisonplasma" < }, 77a74,91 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "projectileType" : "fireplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ] > }, > "ice" : { > "primaryAttack" : { "projectileType" : "iceplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ] > }, > "poison" : { > "primaryAttack" : { "projectileType" : "poisonplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ] > }, > "electric" : { > "primaryAttack" : { "projectileType" : "electricplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ] > } > }, 97,103d110 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/mp1.ogg", "/sfx/gun/mp2.ogg", "/sfx/gun/mp3.ogg" ], < "fire" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ], < "electric" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ], < "ice" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ], < "poison" : [ "/sfx/gun/plasma_mp1.ogg", "/sfx/gun/plasma_mp2.ogg", "/sfx/gun/plasma_mp3.ogg" ] < }, items\active\weapons\ranged\pistol\commonpistol.activeitem 2a3 > "price" : 120, 28a30 > "energyUsage" : [11.25, 13.5], 35a38 > "fireSounds" : [ "/sfx/gun/pistol1.ogg", "/sfx/gun/pistol2.ogg", "/sfx/gun/pistol3.ogg", "/sfx/gun/pistol4.ogg" ], 88,94d90 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/pistol1.ogg", "/sfx/gun/pistol2.ogg", "/sfx/gun/pistol3.ogg", "/sfx/gun/pistol4.ogg" ], < "fire" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "electric" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "ice" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "poison" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ] < }, items\active\weapons\ranged\pistol\rarepistol.activeitem 2a3 > "price" : 140, 26a28 > "energyUsage" : [12.75, 15], 29,34d30 < "elementalProjectiles" : { < "fire" : "fireplasma", < "ice" : "iceplasma", < "electric" : "electricplasma", < "poison" : "poisonplasma" < }, 77a74,91 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "projectileType" : "fireplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "burning" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > }, > "ice" : { > "primaryAttack" : { "projectileType" : "iceplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "frostslow" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > }, > "poison" : { > "primaryAttack" : { "projectileType" : "poisonplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "weakpoison" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > }, > "electric" : { > "primaryAttack" : { "projectileType" : "electricplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "paralysis" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > } > }, 97,103d110 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/pistol1.ogg", "/sfx/gun/pistol2.ogg", "/sfx/gun/pistol3.ogg", "/sfx/gun/pistol4.ogg" ], < "fire" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "electric" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "ice" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "poison" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ] < }, items\active\weapons\ranged\pistol\uncommonpistol.activeitem 2a3 > "price" : 130, 26a28 > "energyUsage" : [12.75, 15], 29,34d30 < "elementalProjectiles" : { < "fire" : "fireplasma", < "ice" : "iceplasma", < "electric" : "electricplasma", < "poison" : "poisonplasma" < }, 77a74,91 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "projectileType" : "fireplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > }, > "ice" : { > "primaryAttack" : { "projectileType" : "iceplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > }, > "poison" : { > "primaryAttack" : { "projectileType" : "poisonplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > }, > "electric" : { > "primaryAttack" : { "projectileType" : "electricplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ] > } > }, 97,103d110 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/pistol1.ogg", "/sfx/gun/pistol2.ogg", "/sfx/gun/pistol3.ogg", "/sfx/gun/pistol4.ogg" ], < "fire" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "electric" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "ice" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ], < "poison" : [ "/sfx/gun/plasma_pistol1.ogg", "/sfx/gun/plasma_pistol2.ogg", "/sfx/gun/plasma_pistol3.ogg" ] < }, items\active\weapons\ranged\rocketlauncher\commonrocketlauncher.activeitem 2a3 > "price" : 190, 6c7 < "description" : "Pop pop", --- > "description" : "Boom.", 56a58 > "energyUsage" : [17, 20], 63a66 > "fireSounds" : [ "/sfx/gun/rocket2.ogg" ], 119,125d121 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/rocket2.ogg" ], < "fire" : [ "/sfx/gun/rocket_fire1.ogg" ], < "electric" : [ "/sfx/gun/rocket_electric1.ogg" ], < "ice" : [ "/sfx/gun/rocket_ice1.ogg" ], < "poison" : [ "/sfx/gun/rocket_poison1.ogg" ] < }, items\active\weapons\ranged\rocketlauncher\rarerocketlauncher.activeitem 2a3 > "price" : 230, 6c7 < "description" : "Pop pop", --- > "description" : "Boom.", 54a56 > "energyUsage" : [17, 20], 57,62d58 < "elementalProjectiles" : { < "fire" : "fireplasmarocket", < "ice" : "iceplasmarocket", < "electric" : "electricplasmarocket", < "poison" : "poisonplasmarocket" < }, 108a105,134 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { > "projectileType" : "fireplasmarocket", > "projectileParameters" : { "actionOnReap" : [ { "action" : "config", "file" : "/projectiles/explosions/regularexplosion2/fireexplosionfreezestatus.config" } ] } > }, > "fireSounds" : [ "/sfx/gun/rocket_fire1.ogg" ] > }, > "ice" : { > "primaryAttack" : { > "projectileType" : "iceplasmarocket", > "projectileParameters" : { "actionOnReap" : [ { "action" : "config", "file" : "/projectiles/explosions/regularexplosion2/iceexplosionfreezestatus.config" } ] } > }, > "fireSounds" : [ "/sfx/gun/rocket_ice1.ogg" ] > }, > "poison" : { > "primaryAttack" : { > "projectileType" : "poisonplasmarocket", > "projectileParameters" : { "actionOnReap" : [ { "action" : "config", "file" : "/projectiles/explosions/regularexplosion2/poisonexplosionfreezestatus.config" } ] } > }, > "fireSounds" : [ "/sfx/gun/rocket_poison1.ogg" ] > }, > "electric" : { > "primaryAttack" : { > "projectileType" : "electricplasmarocket", > "projectileParameters" : { "actionOnReap" : [ { "action" : "config", "file" : "/projectiles/explosions/regularexplosion2/electricexplosionfreezestatus.config" } ] } > }, > "fireSounds" : [ "/sfx/gun/rocket_electric1.ogg" ] > } > }, items\active\weapons\ranged\rocketlauncher\uncommonrocketlauncher.activeitem 2a3 > "price" : 210, 6c7 < "description" : "Pop pop", --- > "description" : "Boom.", 54a56 > "energyUsage" : [17, 20], 57,62d58 < "elementalProjectiles" : { < "fire" : "fireplasmarocket", < "ice" : "iceplasmarocket", < "electric" : "electricplasmarocket", < "poison" : "poisonplasmarocket" < }, 108a105,122 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "projectileType" : "fireplasmarocket" }, > "fireSounds" : [ "/sfx/gun/rocket_fire1.ogg" ] > }, > "ice" : { > "primaryAttack" : { "projectileType" : "iceplasmarocket" }, > "fireSounds" : [ "/sfx/gun/rocket_ice1.ogg" ] > }, > "poison" : { > "primaryAttack" : { "projectileType" : "poisonplasmarocket" }, > "fireSounds" : [ "/sfx/gun/rocket_poison1.ogg" ] > }, > "electric" : { > "primaryAttack" : { "projectileType" : "electricplasmarocket" }, > "fireSounds" : [ "/sfx/gun/rocket_electric1.ogg" ] > } > }, 128,134d141 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/rocket2.ogg" ], < "fire" : [ "/sfx/gun/rocket_fire1.ogg" ], < "electric" : [ "/sfx/gun/rocket_electric1.ogg" ], < "ice" : [ "/sfx/gun/rocket_ice1.ogg" ], < "poison" : [ "/sfx/gun/rocket_poison1.ogg" ] < }, items\active\weapons\ranged\shotgun\commonshotgun.activeitem 2a3 > "price" : 150, 28a30 > "energyUsage" : [27, 30], 36a39 > "fireSounds" : [ "/sfx/gun/shotgun1.ogg", "/sfx/gun/shotgun2.ogg", "/sfx/gun/shotgun3.ogg", "/sfx/gun/shotgun4.ogg" ], 89,95d91 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/shotgun1.ogg", "/sfx/gun/shotgun2.ogg", "/sfx/gun/shotgun3.ogg", "/sfx/gun/shotgun4.ogg" ], < "fire" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ], < "electric" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ], < "ice" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ], < "poison" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ] < }, items\active\weapons\ranged\shotgun\rareshotgun.activeitem 2a3 > "price" : 190, 26a28 > "energyUsage" : [28.5, 31.5], 30,35d31 < "elementalProjectiles" : { < "fire" : "fireplasma", < "ice" : "iceplasma", < "electric" : "electricplasma", < "poison" : "poisonplasma" < }, 78a75,92 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "projectileType" : "fireplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "burning" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ] > }, > "ice" : { > "primaryAttack" : { "projectileType" : "iceplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "frostslow" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ] > }, > "poison" : { > "primaryAttack" : { "projectileType" : "poisonplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "weakpoison" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ] > }, > "electric" : { > "primaryAttack" : { "projectileType" : "electricplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "paralysis" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ] > } > }, 98,104d111 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/shotgun1.ogg", "/sfx/gun/shotgun2.ogg", "/sfx/gun/shotgun3.ogg", "/sfx/gun/shotgun4.ogg" ], < "fire" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ], < "electric" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ], < "ice" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ], < "poison" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ] < }, 106c113 < "/items/active/weapons/ranged/altabilities/vacuum/vacuum.altability" --- > "/items/active/weapons/ranged/altabilities/grenadelauncher/grenadelauncher.altability" items\active\weapons\ranged\shotgun\uncommonshotgun.activeitem 2a3 > "price" : 170, 26a28 > "energyUsage" : [28.5, 31.5], 30,35d31 < "elementalProjectiles" : { < "fire" : "fireplasma", < "ice" : "iceplasma", < "electric" : "electricplasma", < "poison" : "poisonplasma" < }, 78a75,92 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "projectileType" : "fireplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ] > }, > "ice" : { > "primaryAttack" : { "projectileType" : "iceplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ] > }, > "poison" : { > "primaryAttack" : { "projectileType" : "poisonplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ] > }, > "electric" : { > "primaryAttack" : { "projectileType" : "electricplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ] > } > }, 98,105c112,114 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/shotgun1.ogg", "/sfx/gun/shotgun2.ogg", "/sfx/gun/shotgun3.ogg", "/sfx/gun/shotgun4.ogg" ], < "fire" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ], < "electric" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ], < "ice" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ], < "poison" : [ "/sfx/gun/plasma_shotgun1.ogg", "/sfx/gun/plasma_shotgun2.ogg", "/sfx/gun/plasma_shotgun3.ogg", "/sfx/gun/plasma_shotgun4.ogg" ] < }, < "altAbilities" : [ ], --- > "altAbilities" : [ > "/items/active/weapons/ranged/altabilities/grenadelauncher/grenadelauncher.altability" > ], items\active\weapons\ranged\sniperrifle\commonsniperrifle.activeitem 2a3 > "price" : 150, 28a30 > "energyUsage" : [16.5, 19.5], 35a38 > "fireSounds" : [ "/sfx/gun/sniper1.ogg", "/sfx/gun/sniper2.ogg", "/sfx/gun/sniper3.ogg", "/sfx/gun/sniper4.ogg" ], 48,49c51,52 < "armRotation" : 10, < "weaponRotation" : 10, --- > "armRotation" : 5, > "weaponRotation" : 5, 57,58c60,61 < "armRotation" : 10, < "weaponRotation" : 10, --- > "armRotation" : 5, > "weaponRotation" : 5, 88,94d90 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/sniper1.ogg", "/sfx/gun/sniper2.ogg", "/sfx/gun/sniper3.ogg", "/sfx/gun/sniper4.ogg" ], < "fire" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ], < "electric" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ], < "ice" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ], < "poison" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ] < }, items\active\weapons\ranged\sniperrifle\raresniperrifle.activeitem 2a3 > "price" : 190, 26a28 > "energyUsage" : [16.5, 19.5], 28,34d29 < < "elementalProjectiles" : { < "fire" : "fireplasma", < "ice" : "iceplasma", < "electric" : "electricplasma", < "poison" : "poisonplasma" < }, 51,52c46,47 < "armRotation" : 10, < "weaponRotation" : 10, --- > "armRotation" : 5, > "weaponRotation" : 5, 60,61c55,56 < "armRotation" : 10, < "weaponRotation" : 10, --- > "armRotation" : 5, > "weaponRotation" : 5, 77a73,90 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "projectileType" : "fireplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "burning" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ] > }, > "ice" : { > "primaryAttack" : { "projectileType" : "iceplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "frostslow" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ] > }, > "poison" : { > "primaryAttack" : { "projectileType" : "poisonplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "weakpoison" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ] > }, > "electric" : { > "primaryAttack" : { "projectileType" : "electricplasma", "projectileParameters" : { "statusEffects" : [ "damageflash", "paralysis" ] } }, > "fireSounds" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ] > } > }, 97,103d109 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/sniper1.ogg", "/sfx/gun/sniper2.ogg", "/sfx/gun/sniper3.ogg", "/sfx/gun/sniper4.ogg" ], < "fire" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ], < "electric" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ], < "ice" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ], < "poison" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ] < }, 104a111 > "/items/active/weapons/ranged/altabilities/grenadelauncher/grenadelauncher.altability", items\active\weapons\ranged\sniperrifle\uncommonsniperrifle.activeitem 2a3 > "price" : 170, 26a28 > "energyUsage" : [16.5, 19.5], 28,35c30 < < "elementalProjectiles" : { < "fire" : "fireplasma", < "ice" : "iceplasma", < "electric" : "electricplasma", < "poison" : "poisonplasma" < }, < "projectileParameters" : { --- > "projectileParameters" : { 51,52c46,47 < "armRotation" : 10, < "weaponRotation" : 10, --- > "armRotation" : 5, > "weaponRotation" : 5, 60,61c55,56 < "armRotation" : 10, < "weaponRotation" : 10, --- > "armRotation" : 5, > "weaponRotation" : 5, 77a73,90 > "elementalConfig" : { > "fire" : { > "primaryAttack" : { "projectileType" : "fireplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ] > }, > "ice" : { > "primaryAttack" : { "projectileType" : "iceplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ] > }, > "poison" : { > "primaryAttack" : { "projectileType" : "poisonplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ] > }, > "electric" : { > "primaryAttack" : { "projectileType" : "electricplasma" }, > "fireSounds" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ] > } > }, 97,103d109 < "elementalFireSounds" : { < "physical" : [ "/sfx/gun/sniper1.ogg", "/sfx/gun/sniper2.ogg", "/sfx/gun/sniper3.ogg", "/sfx/gun/sniper4.ogg" ], < "fire" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ], < "electric" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ], < "ice" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ], < "poison" : [ "/sfx/gun/plasma_sniper1.ogg", "/sfx/gun/plasma_sniper2.ogg", "/sfx/gun/plasma_sniper3.ogg", "/sfx/gun/plasma_sniper4.ogg" ] < }, 104a111 > "/items/active/weapons/ranged/altabilities/grenadelauncher/grenadelauncher.altability", items\active\weapons\ranged\translocator\translocator.activeitem 2a3 > "price" : 5000, items\active\weapons\ranged\translocator\translocator.lua 15c15 < if storage.projectileId then --- > if storage.projectileId and world.entityExists(storage.projectileId) then items\buildscripts\buildweapon.lua 2a3 > require "/scripts/versioningutils.lua" 5,7d5 < local animationConfig = root.assetJson(util.absolutePath(directory, config.animation)) < -- sb.logInfo("Weapon builder script called with directory %s\nconfig %s\nparameters %s", directory, config, parameters) < 11,12c9 < local millis = math.floor((os.time() + (os.clock() % 1)) * 1000) < math.randomseed(millis) --- > math.randomseed(util.seedTime()) 23a21,77 > -- select alt ability > if not parameters.altAbilitySource and builderConfig.altAbilities and #builderConfig.altAbilities > 0 then > parameters.altAbilitySource = builderConfig.altAbilities[math.random(1, #builderConfig.altAbilities)] > end > > -- load and merge alt ability > local altAbilitySource = parameters.altAbilitySource or config.altAbilitySource > if altAbilitySource then > local altAbilityConfig = root.assetJson(altAbilitySource) > util.mergeTable(config, altAbilityConfig) > end > > -- elemental type > if not parameters.elementalType and builderConfig.elementalType then > parameters.elementalType = util.randomFromList(builderConfig.elementalType) > end > local elementalType = parameters.elementalType or config.elementalType > > -- elemental config > if builderConfig.elementalConfig then > util.mergeTable(config, builderConfig.elementalConfig[elementalType]) > end > if config.altAbility and config.altAbility.elementalConfig then > util.mergeTable(config.altAbility, config.altAbility.elementalConfig[elementalType]) > end > > -- elemental tag > replacePatternInData(config, nil, "", elementalType) > > -- name > if not parameters.shortdescription and builderConfig.nameGenerator then > parameters.shortdescription = root.generateName(util.absolutePath(directory, builderConfig.nameGenerator)) > end > > -- merge damage properties > if builderConfig.damageConfig then > util.mergeTable(config.damageConfig or {}, builderConfig.damageConfig) > end > > -- preprocess primary attack config > parameters.primaryAttack = parameters.primaryAttack or {} > parameters.primaryAttack.fireTime = parameters.primaryAttack.fireTime or util.randomInRange(config.primaryAttack.fireTime) > parameters.primaryAttack.baseDps = parameters.primaryAttack.baseDps or util.randomInRange(config.primaryAttack.baseDps) > parameters.primaryAttack.energyUsage = parameters.primaryAttack.energyUsage or util.randomInRange(config.primaryAttack.energyUsage) or 0 -- can be 0 for swords > > -- preprocess primary projectile parameters (ranged) > if config.primaryAttack.projectileParameters then > parameters.primaryAttack.projectileType = parameters.primaryAttack.projectileType or util.randomFromList(config.primaryAttack.projectileType) > parameters.primaryAttack.projectileCount = parameters.primaryAttack.projectileCount or util.randomIntInRange(config.primaryAttack.projectileCount) or 1 > parameters.primaryAttack.fireType = parameters.primaryAttack.fireType or util.randomFromList(config.primaryAttack.fireType) or "auto" > parameters.primaryAttack.burstCount = parameters.primaryAttack.burstCount or util.randomIntInRange(config.primaryAttack.burstCount) > parameters.primaryAttack.burstTime = parameters.primaryAttack.burstTime or util.randomInRange(config.primaryAttack.burstTime) > end > > -- calculate damage level multiplier > config.damageLevelMultiplier = root.evalFunction("weaponDamageLevelMultiplier", parameters.level or config.level or 1) > 35,48d88 < -- name < if not parameters.shortdescription and builderConfig.nameGenerator then < parameters.shortdescription = root.generateName(util.absolutePath(directory, builderConfig.nameGenerator)) < end < < -- elemental type < if not parameters.elementalType and builderConfig.elementalType then < if type(builderConfig.elementalType) == "table" then < parameters.elementalType = builderConfig.elementalType[math.random(1, #builderConfig.elementalType)] < else < parameters.elementalType = builderConfig.elementalType < end < end < 51c91 < config.animationCustom = util.mergeTable(config.animationCustom or {}, builderConfig.animationCustom) --- > util.mergeTable(config.animationCustom or {}, builderConfig.animationCustom) 96,97c136,137 < -- elemental fire sounds for guns < if builderConfig.elementalFireSounds then --- > -- elemental fire sounds > if config.fireSounds then 99,101c139 < local elementalType = parameters.elementalType or config.elementalType < local elementalSounds = builderConfig.elementalFireSounds[elementalType] < local sound = elementalSounds[math.random(1,#elementalSounds)] --- > local sound = config.fireSounds[math.random(1,#config.fireSounds)] 113,134c151,170 < -- merge damage properties < if builderConfig.damageConfig then < config.damageConfig = util.mergeTable(config.damageConfig or {}, builderConfig.damageConfig) < if builderConfig.damageConfig.damageSourceKind then < config.damageConfig.damageSourceKind = string.gsub(builderConfig.damageConfig.damageSourceKind, "", parameters.elementalType) < end < end < < -- select alt ability < if not parameters.altAbilitySource and builderConfig.altAbilities and #builderConfig.altAbilities > 0 then < parameters.altAbilitySource = builderConfig.altAbilities[math.random(1, #builderConfig.altAbilities)] < end < < -- load and merge alt ability < local altAbilitySource = parameters.altAbilitySource or config.altAbilitySource < if altAbilitySource then < local altAbilityConfig = root.assetJson(altAbilitySource) < util.mergeTable(config, altAbilityConfig) < if path(config, "altAbility", "damageConfig", "damageSourceKind") and parameters.elementalType then < config.altAbility.damageConfig.damageSourceKind = string.gsub(config.altAbility.damageConfig.damageSourceKind, "", parameters.elementalType) < end < end --- > -- populate tooltip fields > config.tooltipFields = {} > config.tooltipFields.subtitle = parameters.weaponType or config.weaponType > config.tooltipFields.levelLabel = util.round(parameters.level or config.level or 1, 1) > config.tooltipFields.dpsLabel = util.round(parameters.primaryAttack.baseDps * config.damageLevelMultiplier, 1) > config.tooltipFields.speedLabel = util.round(1 / parameters.primaryAttack.fireTime, 1) > config.tooltipFields.damagePerShotLabel = util.round(parameters.primaryAttack.baseDps * parameters.primaryAttack.fireTime * config.damageLevelMultiplier, 1) > config.tooltipFields.energyPerShotLabel = util.round(parameters.primaryAttack.energyUsage * parameters.primaryAttack.fireTime, 1) > if elementalType ~= "physical" then > config.tooltipFields.damageKindImage = "/interface/elements/"..elementalType..".png" > end > if config.altAbility then > config.tooltipFields.altAbilityLabel = config.altAbility.name or "unknown" > else > config.tooltipFields.altAbilityTitleLabel = "" > end > > -- set price > -- TODO: should this be handled elsewhere? > config.price = (config.price or 0) * root.evalFunction("itemLevelPriceMultiplier", parameters.level or config.level or 1) 137c173 < math.randomseed(os.time()) --- > math.randomseed(util.seedTime()) leveling\levelingmultipliers.functions 1a2,16 > "weaponDamageLevelMultiplier" : [ "linear", "clamp", > [0, 0.0], > [1, 1.5], > [2, 2.0], > [3, 2.5], > [4, 3.0], > [5, 3.5], > [6, 4.0], > [7, 4.5], > [8, 5.0], > [9, 5.5], > [10,6.0] > ], > > // DEPRECATED 15a31 > // DEPRECATED 29a46 > // DEPRECATED 43a61 > // DEPRECATED 57a76 > // DEPRECATED monsters\bmonster.lua 4a5 > require "/scripts/drops.lua" 72a74,77 > function die() > spawnDrops() > end > 272c277 < end \ No newline at end of file --- > end monsters\crawlers\triplod\triplod.monstertype 121c121 < "bodyMaterialKind" : "organic", --- > "bodyMaterialKind" : "robotic", 132c132 < "targetMaterialKind" : "organic" --- > "targetMaterialKind" : "robotic" monsters\flyers\batong\batong.animation 16c16,19 < "mode" : "loop" --- > "mode" : "loop", > "frameProperties" : { > "immediateSound" : [ "/sfx/npc/monsters/batong_flap1.ogg", "", "", "", "/sfx/npc/monsters/batong_flap2.ogg", "", "", "" ] > } 21c24,27 < "mode" : "loop" --- > "mode" : "loop", > "frameProperties" : { > "immediateSound" : [ "/sfx/npc/monsters/batong_flap3.ogg", "", "", "", "/sfx/npc/monsters/batong_flap3.ogg", "", "", "" ] > } monsters\flyers\batong\batong.monstertype 76c76 < "damageSourceKind" : "slash", --- > "damageSourceKind" : "lash", monsters\ghosts\spookit\spookit.animation 9c9 < "frames" : 1 --- > "frames" : 10 12c12,13 < "frames" : 1, --- > "frames" : 10, > "mode" : "loop", 18c19,20 < "frames" : 1, --- > "frames" : 10, > "mode" : "loop", 20c22 < "immediateSound" : "/sfx/npc/monsters/spookit_invulnerable.ogg" --- > "immediateSound" : "/sfx/npc/monsters/spookit_invulnerable_combined.ogg" monsters\ghosts\spookit\spookit.frames 4c4 < "dimensions" : [6, 1], --- > "dimensions" : [12, 2], 7c7,8 < [ null, "idle.1", null, "hurt.1", null, "invulnerable.1"] --- > [ null, "idle.1", "idle.2", "idle.3", "idle.4", "idle.5", "idle.6", "idle.7", "idle.8", "idle.9", "idle.10", null ], > [ "hurt.1", null, "invulnerable.1", "invulnerable.2", "invulnerable.3", "invulnerable.4", "invulnerable.5", "invulnerable.6", "invulnerable.7", "invulnerable.8", "invulnerable.9", "invulnerable.10" ] monsters\walkers\crabcano\crabcano.animation 21c21 < "persistentSound" : "/sfx/gun/flamethrower_start.ogg" --- > "persistentSound" : "/sfx/npc/monsters/crabcano_windup2.ogg" 28c28 < "persistentSound" : "/sfx/gun/flamethrower_start.ogg" --- > "persistentSound" : "/sfx/npc/monsters/crabcano_fire.ogg" 123c123,124 < "deathPuff" : [ "/sfx/npc/enemydeathpuff.ogg" ] --- > "deathPuff" : [ "/sfx/npc/enemydeathpuff.ogg" ], > "fire" : [ "/sfx/projectiles/fireball_spit.ogg" ] monsters\walkers\crabcano\crabcano.monstertype 55c55 < "fireSound" : "" --- > "fireSound" : "fire" 141a142,144 > }, > "fireImmunity" : { > "baseValue" : 1.0 monsters\walkers\gleap\gleap.monstertype 68c68 < "damageSourceKind" : "slash", --- > "damageSourceKind" : "lash", monsters\walkers\nutmidge\nutmidge.animation 9,11c9,10 < "frames" : 1, < "cycle" : 2, < "mode" : "loop" --- > "frames" : 13, > "cycle" : 2 30c29 < "cycle" : 1 --- > "cycle" : 0.6 monsters\walkers\nutmidge\nutmidge.frames 13a14,27 > }, > "aliases" : { > "idle.2" : "idle.1", > "idle.3" : "idle.1", > "idle.4" : "idle.1", > "idle.5" : "idle.1", > "idle.6" : "idle.1", > "idle.7" : "idle.1", > "idle.8" : "idle.1", > "idle.9" : "blink.1", > "idle.10" : "idle.1", > "idle.11" : "idle.1", > "idle.12" : "idle.1", > "idle.13" : "idle.1" monsters\walkers\nutmidge\nutmidge.monstertype 39c39 < "chargeTime" : [2, 4], --- > "chargeTime" : [3, 3], 59c59 < "maxJumps" : 3, --- > "maxJumps" : 8, 73c73 < "wanderTime" : [5, 5] --- > "wanderTime" : [5, 20] monsters\walkers\snaunt\snaunt.monstertype 62c62 < "maxJumps" : 3, --- > "maxJumps" : 6, 76c76 < "wanderTime" : [5, 5] --- > "wanderTime" : [5, 15] npcs\bmain.lua 7a8 > require "/scripts/drops.lua" 98a100 > spawnDrops() projectiles\boomerang\boomerang.projectile 21a22,23 > "persistentAudio" : "/sfx/melee/spear_twirl_loop.ogg", > projectiles\boomerang\boomerangflip.projectile 21a22,23 > "persistentAudio" : "/sfx/melee/spear_twirl_loop.ogg", > projectiles\boomerang\boomerangprojectile.lua 9a10 > self.ownerId = config.configParameter("ownerId") 15,16c16,17 < movement.approachVelocity({0, 0}, self.controlForce) < if movement.isColliding() or vec2.mag(movement.velocity()) < 0.2 then --- > mcontroller.approachVelocity({0, 0}, self.controlForce) > if mcontroller.isColliding() or vec2.mag(mcontroller.velocity()) < 0.2 then 20c21 < local toTarget = world.distance(world.entityPosition(self.ownerId), movement.position()) --- > local toTarget = world.distance(world.entityPosition(self.ownerId), mcontroller.position()) 25,26c26,27 < movement.applyParameters({collisionEnabled=false}) < movement.setVelocity(vec2.mul(vec2.norm(toTarget), self.speed)) --- > mcontroller.applyParameters({collisionEnabled=false}) > mcontroller.setVelocity(vec2.mul(vec2.norm(toTarget), self.speed)) 28c29 < movement.approachVelocity(vec2.mul(vec2.norm(toTarget), self.speed), self.controlForce) --- > mcontroller.approachVelocity(vec2.mul(vec2.norm(toTarget), self.speed), self.controlForce) 34,37d34 < end < < function setOwnerId(ownerId) < self.ownerId = ownerId projectiles\delaybullet\delaybullet.lua 18c18 < movement.setVelocity(vec2.mul(vec2.norm(movement.velocity()), config.configParameter("triggerSpeed"))) --- > mcontroller.setVelocity(vec2.mul(vec2.norm(mcontroller.velocity()), config.configParameter("triggerSpeed"))) projectiles\drone\drone.lua 12c12 < movement.approachVelocity(vec2.mul(vec2.norm(direction), config.configParameter("maxSpeed")), config.configParameter("controlForce")) --- > mcontroller.approachVelocity(vec2.mul(vec2.norm(direction), config.configParameter("maxSpeed")), config.configParameter("controlForce")) 16,17c16,17 < local offset = world.distance(position, movement.position()) < movement.approachVelocity(vec2.mul(vec2.norm(offset), config.configParameter("maxSpeed")), config.configParameter("controlForce")) --- > local offset = world.distance(position, mcontroller.position()) > mcontroller.approachVelocity(vec2.mul(vec2.norm(offset), config.configParameter("maxSpeed")), config.configParameter("controlForce")) projectiles\guidedrocket\guidedrocket.lua 7c7 < self.lastTrailPosition = movement.position() --- > self.lastTrailPosition = mcontroller.position() 12,13c12,13 < local currentAngle = math.atan(movement.velocity()[2], movement.velocity()[1]) < local targetOffset = world.distance(self.targetPosition, movement.position()) --- > local currentAngle = math.atan(mcontroller.velocity()[2], mcontroller.velocity()[1]) > local targetOffset = world.distance(self.targetPosition, mcontroller.position()) 20c20 < movement.setVelocity(vec2.rotate(movement.velocity(), rotateAmount)) --- > mcontroller.setVelocity(vec2.rotate(mcontroller.velocity(), rotateAmount)) 24,26c24,26 < if self.trailProjectile and world.magnitude(movement.position(), self.lastTrailPosition) >= self.trailDistance then < world.spawnProjectile(self.trailProjectile, movement.position(), projectile.sourceEntity(), {0,0}, false) < self.lastTrailPosition = movement.position() --- > if self.trailProjectile and world.magnitude(mcontroller.position(), self.lastTrailPosition) >= self.trailDistance then > world.spawnProjectile(self.trailProjectile, mcontroller.position(), projectile.sourceEntity(), {0,0}, false) > self.lastTrailPosition = mcontroller.position() projectiles\guns\grenades\grenade\electricplasmagrenade.projectile 6a7,8 > "pointLight" : true, > "lightColor" : [60, 40, 80], projectiles\guns\grenades\grenade\fireplasmagrenade.projectile 6a7,8 > "pointLight" : true, > "lightColor" : [80, 60, 40], projectiles\guns\grenades\grenade\iceplasmagrenade.projectile 6a7,8 > "pointLight" : true, > "lightColor" : [40, 60, 80], projectiles\guns\grenades\grenade\poisonplasmagrenade.projectile 6a7,8 > "pointLight" : true, > "lightColor" : [60, 80, 40], projectiles\guns\grenades\impactgrenade\electricplasmaimpactgrenade.projectile 6a7,8 > "pointLight" : true, > "lightColor" : [60, 40, 80], projectiles\guns\grenades\impactgrenade\fireplasmaimpactgrenade.projectile 6a7,8 > "pointLight" : true, > "lightColor" : [80, 60, 40], projectiles\guns\grenades\impactgrenade\iceplasmaimpactgrenade.projectile 6a7,8 > "pointLight" : true, > "lightColor" : [40, 60, 80], projectiles\guns\grenades\impactgrenade\poisonplasmaimpactgrenade.projectile 6a7,8 > "pointLight" : true, > "lightColor" : [60, 80, 40], projectiles\guns\grenades\proximitymines\proximitymine.lua 9,10c9,10 < if self.hitGround or movement.onGround() then < movement.setRotation(0) --- > if self.hitGround or mcontroller.onGround() then > mcontroller.setRotation(0) 13c13 < movement.setRotation(math.atan(movement.velocity()[2], movement.velocity()[1])) --- > mcontroller.setRotation(math.atan(mcontroller.velocity()[2], mcontroller.velocity()[1])) 18c18 < local near = world.entityQuery(movement.position(), 4, { includedTypes = {"monster", "npc"} }) --- > local near = world.entityQuery(mcontroller.position(), 4, { includedTypes = {"monster", "npc"} }) projectiles\guns\grenades\shrapnelbomb\shrapnelbomb.projectile 20c20 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 27c27 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 34c34 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 41c41 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 48c48 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 55c55 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 62c62 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 69c69 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 76c76 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 83c83 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 90c90 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 97c97 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 104c104 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 106,107c106 < } < /* --- > }, 112c111 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 119c118 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 121c120,121 < }, --- > } > /* 126c126 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 133c133 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 140c140 < "inheritDamageFactor" : 1.25, --- > "inheritDamageFactor" : 0.625, 146d145 < "damageType" : "NoDamage", 148a148 > //"damageType" : "NoDamage", projectiles\guns\grenades\stickygrenade\electricstickygrenade.projectile 7c7 < "lightColor" : [40, 60, 80], --- > "lightColor" : [60, 40, 80], projectiles\guns\grenades\stickygrenade\firestickygrenade.projectile 7c7 < "lightColor" : [40, 60, 80], --- > "lightColor" : [80, 60, 40], projectiles\guns\grenades\stickygrenade\poisonstickygrenade.projectile 7c7 < "lightColor" : [40, 60, 80], --- > "lightColor" : [60, 80, 40], projectiles\guns\rockets\homingrocket\homingrocket.lua 9c9 < movement.setRotation(math.atan(movement.velocity()[2], movement.velocity()[1])) --- > mcontroller.setRotation(math.atan(mcontroller.velocity()[2], mcontroller.velocity()[1])) 14c14 < movement.applyParameters({ --- > mcontroller.applyParameters({ 17c17 < local toTarget = world.distance(self.targetPosition, movement.position()) --- > local toTarget = world.distance(self.targetPosition, mcontroller.position()) 19c19 < movement.approachVelocity(vec2.mul(toTarget, self.maxSpeed), self.controlForce) --- > mcontroller.approachVelocity(vec2.mul(toTarget, self.maxSpeed), self.controlForce) projectiles\guns\rockets\minirocket\minirocket.lua 4c4 < self.approach = vec2.norm(movement.velocity()) --- > self.approach = vec2.norm(mcontroller.velocity()) 12c12 < movement.approachVelocity(vec2.mul(self.approach, self.maxSpeed), self.controlForce) --- > mcontroller.approachVelocity(vec2.mul(self.approach, self.maxSpeed), self.controlForce) projectiles\homingarrow\homingarrow.lua 4c4 < self.targetSpeed = vec2.mag(movement.velocity()) --- > self.targetSpeed = vec2.mag(mcontroller.velocity()) 9c9 < local targets = world.entityQuery(movement.position(), 20, { --- > local targets = world.entityQuery(mcontroller.position(), 20, { 18c18 < local myPos = movement.position() --- > local myPos = mcontroller.position() 21c21 < movement.approachVelocity(vec2.mul(vec2.norm(dist), self.targetSpeed), self.controlForce) --- > mcontroller.approachVelocity(vec2.mul(vec2.norm(dist), self.targetSpeed), self.controlForce) projectiles\npcs\acidspit\acidspit.projectile 16c16 < "emitters" : [ "poisonplasma", "largepoisonswoosh" ] --- > "emitters" : [ "poisonplasma" ] projectiles\npcs\bloodvomit\bloodvomit.projectile 5c5 < "animationCycle" : 1, --- > "animationCycle" : 0.5, 7c7 < "frameNumber" : 10, --- > "frameNumber" : 7, 10c10 < "timeToLive" : 1, --- > "timeToLive" : 0.5, projectiles\npcs\crabcanoball\crabcanoball.projectile 15c15 < "file" : "/projectiles/explosions/smallregularexplosion/smallregularexplosion.config" --- > "file" : "/projectiles/explosions/weakexplosion/weakexplosion.config" projectiles\translocatordisc\translocatordisc.lua 12,13c12,13 < if self.hitGround or movement.onGround() then < movement.setRotation(0) --- > if self.hitGround or mcontroller.onGround() then > mcontroller.setRotation(0) 16c16 < movement.setRotation(math.atan(movement.velocity()[2], movement.velocity()[1])) --- > mcontroller.setRotation(math.atan(mcontroller.velocity()[2], mcontroller.velocity()[1])) 21c21 < local resolvedPoint = world.resolvePolyCollision(collidePoly, vec2.add(movement.position(), config.configParameter("teleportOffset")), config.configParameter("teleportTolerance")) --- > local resolvedPoint = world.resolvePolyCollision(collidePoly, vec2.add(mcontroller.position(), config.configParameter("teleportOffset")), config.configParameter("teleportTolerance")) quests\quests.config 30c30,32 < "defaultCustomIndicator" : "questrelevant" --- > "defaultCustomIndicator" : "questrelevant", > > "goalTextSeparator" : "^reset;\n\n" quests\generated\subquests.config 35a36,124 > "kill_monster" : { > "templateId" : "kill_monster.generated", > "parameters" : { > "monster" : { > "type" : "monsterType" > }, > "items" : { > "type" : "itemList" > }, > "spawnPoint" : { > "type" : "location" > }, > "extraRewards" : { > "type" : "itemList" > } > }, > "participants" : { > "questGiver" : { "turnInQuest" : true } > }, > > "cost" : 0.1, > "merging" : { > "output" : "items", > "extraMerge" : [ "extraRewards" ] > }, > > "managerPlugin" : { > "script" : "/scripts/quest/manager/spawn_entities.lua", > "pluginClass" : "SpawnEntities", > "pluginConfig" : { > "spawnCount" : 1, > "positionParam" : "spawnPoint", > "spawnOffset" : [2.0, 3.5], > "persistent" : true, > "spawnParameter" : "monster", > "drops" : "items", > "levelBoost" : 1.0 > } > }, > > "preconditions" : [ > ["itemList", "extraRewards", "money", "itemPrice"], > ["itemName", "money", {"literal":"money"}], > ["price", "item", "itemPrice"], > > ["nearbySpawnPoint", "spawnPoint", 4.0, 4.0], > ["isMonster", "monster"], > > ["itemList", "items", "item", "count"], > ["<", 0, "count"] > ], > "postconditions" : [ > ["owns", "player", "item", "count"] > ] > }, > > "fetch_dungeon" : { > "templateId" : "fetch_dungeon.generated", > "parameters" : { > "fetchedItems" : { > "type" : "itemList" > }, > "dungeon" : { > "type" : "noDetail" > }, > "extraRewards" : { > "type" : "itemList" > } > }, > "participants" : { > "questGiver" : { "turnInQuest" : true } > }, > > "chance" : 0.3, > > "preconditions" : [ > ["itemList", "extraRewards", "money", "itemPrice"], > ["itemName", "money", {"literal":"money"}], > ["price", "item", "itemPrice"], > > ["itemList", "fetchedItems", "item", "count"], > ["isDungeonItem", "dungeon", "item"], > ["<", 0, "count"] > ], > "postconditions" : [ > ["owns", "player", "item", "count"] > ] > }, > 626,627c715,716 < "other" : { < "type" : "entity" --- > "threat" : { > "type" : "npcType" 645,648c734 < "entityType" : "npc", < "species" : "human", < "typeName" : "bandit", < "parameters" : {} --- > "spawnParameter" : "threat" 653,657c739,742 < ["nearbySpawnPoint", "spawnPoint"], < ["fears", "target", "other"], < ["!=", "target", "other"], < ["!=", "target", "questGiver"], < ["!=", "questGiver", "other"] --- > ["nearbySpawnPoint", "spawnPoint", 4.0, 4.0], > ["isNpcThreat", "threat"], > ["isNpc", "target"], > ["!=", "target", "questGiver"] 660,661d744 < ["!fears", "target", "other"], < ["!likes", "other", "questGiver"], quests\generated\comfort\add_object_to_house.questtemplate 3,4c3,20 < "title" : "^orange;'s new furniture", < "goalText" : "^orange;More material possesions would make my house feel more like home. Will you help me acquire more furniture?^white;\n", --- > "title" : [ > "'s Home Makeover", > "Redecorating for " > ], > "goalText" : { > "floran" : [ > "^cyan;Floran's home is too sssedate. Let'sss make it brighter!", > "^cyan;Floran hasss a new piece of furniture in mind for home. Let'sss make this happen!" > ], > "glitch" : [ > "^cyan;Observant. I have decided that my home needs improving - Can you assist?", > "^cyan;Self-conscious. My home could use some new decor. I have a plan to make this happen!" > ], > "default" : [ > "^cyan;This still doesn't feel like home, it's missing what my old place had that really tied the room together. Could you help me out?", > "^cyan;I have a plan to redecorate my home, but I don't think I can do it all myself. Can you give me a hand setting things up?" > ] > }, 6,7c22,35 < "default" : "Place a ^green;^white; somewhere in my home! Make my home larger if necessary!", < "last" : "Finally, place the ^green;^white; somewhere in my home! Make my home larger if necessary!" --- > "default" : { > "floran" : [ > "Finally Floran hasss the ^orange; ^white;Floran wanted! It will look good in Floran's home, so ^green;please put it down sssomewhere in there.", > "That ^orange; ^white;is jussst what my home needss! ^green;Pleasse place it somewhere here." > ], > "glitch" : [ > "Excited. Finally,^green; could you place the ^orange;^green; somewhere in my home? You should ^green;make some room^white; if necessary.", > "Eager. It is almost over - All you need to do now is ^green;place the ^orange;^green; in my home^white; somewhere!" > ], > "default" : [ > "Alright, I think this ^orange^white; is exactly what's needed! Could you find a good spot for it? ^green;Place it somewhere that ties it all together!", > "I think this ^orange^white; is going to do the trick! All that's left to do is ^green;place it in the perfect spot." > ] > } 10,12c38,51 < "default" : "Thanks, it looks great there.", < "solo" : "Thanks, it looks great there. This place feels much more homely now!", < "last" : "Thanks, it looks great there. This place feels much more homely now!" --- > "default" : { > "floran" : [ > "Floran very happy with thisss. Floran's new looksss good there.", > "This is really helping my home looks ssshiny! Thanksss for your help!" > ], > "glitch" : [ > "Overjoyed. That really adds to my home, do you not agree? Thank you for your help with this!", > "Pleased. I think the addition of the is just what my home needed. Thank you for your help!" > ], > "default" : [ > "That's it! It looks perfect right there don't you agree? Thanks for all your help!", > "Much better! It looks just how I'd imagined it. Many thanks, feel free to stop by anytime to admire your handywork!" > ] > } 14c53,56 < "failureText" : "I was unable to put the furniture in 's house.", --- > "failureText" : [ > "I failed to help make some home improvements. I'm sure they'll manage without my help.", > "I failed to improve the decoration in 's home. It probably would have looked bad anyway." > ], quests\generated\pools\pools.config 27a28,39 > }, > "isDungeonItem" : { > "base" : "DungeonItemPoolRelation", > "poolFile" : "/quests/generated/pools/dungeonitems.config" > }, > "isNpcThreat" : { > "base" : "NpcTypePoolRelation", > "poolFile" : "/quests/generated/pools/npcthreats.config" > }, > "isMonster" : { > "base" : "MonsterTypePoolRelation", > "poolFile" : "/quests/generated/pools/monsters.config" quests\generated\subquests\bribe.questtemplate 3,4c3,20 < "title" : "^orange;Bribe ^white;", < "goalText" : "^orange;Help me gain 's compliance! Let's bribe !^white;\n\n", --- > "title" : [ > "Bribe ", > "'s Agenda" > ], > "goalText" : { > "floran" : [ > "^cyan;If we give a presssent, Floran is sssure they will feel indebted to us.", > "^cyan;Floran has heard that giving giftsss are great ways to receive favours." > ], > "glitch" : [ > "^cyan;Observation. I've been looking for a reliable way to indebt to myself.", > "^cyan;Manipulative. I'd like to act in my favour. Help me sweeten them up." > ], > "default" : [ > "^cyan;The fastest method to win favours is to bribe people, right? I have a plan for ...", > "^cyan;Making friends is easy, but bribery works faster! I want to owe me a favour, so I have a plan." > ] > }, 6,9c22,49 < "default" : "Could you give a ^green;^white; to ^green;^white;? I think it would help me get ^green;^white;'s ^orange;obedience^white;!", < "first" : "Firstly, could you give a ^green;^white; to ^green;^white;? I think it would help me get ^green;^white;'s ^orange;obedience^white;!", < "last" : "Finally, could you give the ^green;^white; to ^green;^white;? I think it would help me get ^green;^white;'s ^orange;obedience^white;!", < "next" : "Next, could you give the ^green;^white; to ^green;^white;? I think it would help me get ^green;^white;'s ^orange;obedience^white;!" --- > "next" : { > "floran" : [ > "Floran heard that ^orange;^white; hasss been looking for a nice ^orange;^white; for a long time now. Lucky for them we have one! If we give them this precious ^orange;^white; Floran is sssure they will feel presssured to help us.", > "Floran heard from a friend of a friend that ^orange;'s^white; biggessst wish is to have a nice ^orange;^white;. Let's ussse this to our advantage. ^green;Give them our preciousss ^orange;^white; and they will surely feel indebted to usss. " > ], > "glitch" : [ > "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..." > ], > "default" : [ > "Next ^green;I need to win over ^orange;^white;, and it just so happens that ^green;they would probably love your ^white;! Is that bribery? Sure, but I don't think they'll mind...", > "How do you feel about bribery? I figure that if you were to ^green;gift that ^orange;^green; to ^orange;^white; on my behalf, they would owe me a favour! Can you go and ^green;give it to them for me?" > ] > }, > "default" : { > "floran" : [ > "Now we can finally get to the important part of the plan. Floran knowss that ^orange;^white; has been searching for a nice ^orange;^white; for a long time. ^green;If you bribe them with ours,^white; they'll help me in future.", > "Floran hass done research and found out that ^orange;^white; needs one ^orange;^white; for their persssonal use. Floran thinks that if we ^green;give them our ^orange;^white;, they will surely owe us a favour." > ], > "glitch" : [ > "Apprehensive. IΓÇÖd like to make clear that this is very much not a bribe of any sort. I don't even know the meaning of the word. All I need you to do is ^green;give ^orange; ^green;the ^orange; ^white;to persuade them to act in my favour...", > "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..." > ], > "default" : [ > "Finally, my plan comes together! ^green;Take that ^orange;^green; and generously give it to ^orange;^green; on my behalf^white;. They will be indebted to me for my kind act of bribery!", > "All that is left to do is to ^green;bribe ^orange;^green; with that ^orange;^white; that I know they want. It is completely ethical - Honest!" > ] > } 12,14c52,79 < "default" : "Hooray! You've earned me 's ^orange;obedience^white;!", < "first" : "Hooray! You've earned me 's ^orange;obedience^white;, which is going to be very useful!", < "next" : "Hooray! You've earned me 's ^orange;obedience^white;, which is going to be very useful!" --- > "next" : { > "floran" : [ > "Perfect! Now will feel indebted to uss. And rightfully ssso! Floran is pleased with the outcome.", > "Yesss, Floran is glad that accepted the present. Now to figure out how to use this sssituation to our advantage..." > ], > "glitch" : [ > "Impressed. So accepted the ? This plan is working out better than I anticipated. ", > "Paranoid. So you're saying that didn't suspect anything? Maybe they aren't as bright as I thought." > ], > "default" : [ > " took the bribe? Great! This will be useful for my plans.", > "Wow, bribery is easy! owing me a favour is helpful." > ] > }, > "default" : { > "floran" : [ > "You did it! owes usss big time now!", > "Successs! owes Floran a favour for being sssuch a friendly neighbour. Floran will make sure to use this favour well." > ], > "glitch" : [ > "Exhilarated. took the ? ThatΓÇÖs perfect! If I ever need a favour I know I have someone thatΓÇÖs indebted to me now. I canΓÇÖt believe you thought this was some sort of bribe!", > "Relieved. So they just took the ? No questions asked? Here I was thinking it'd be hard to get on my side." > ], > "default" : [ > "My plan worked! Bribery sure is easy. Now I can call upon to help me whenever I need them. Thanks for your help!", > "Now owes me a favour! That was easier than I thought. Thank you for helping my genius plan!" > ] > } 16c81,84 < "failureText" : "I was unable to bribe ^green;^white; with the ^green;^white; as requested by ^green;^white;.", --- > "failureText" : [ > "Oh no! I failed to deliver the bribe to . Maybe I'm not cut out for shady business.", > "I failed to deliver the bribe to . Maybe should deal with their dirty business themselves anyway?" > ], quests\generated\subquests\build_home.questtemplate 3,4c3,20 < "title" : "^orange;Everyone needs good neighbors^white;", < "goalText" : "^orange;Help me make a new friend! Let's build a house so that someone new moves in!^white;\n\n", --- > "title" : [ > "A new friend for ", > "'s new friend" > ], > "goalText" : { > "floran" : [ > "^cyan;Floran thinks we could do with fresssh blood around here. Let'sss make a new home!", > "^cyan;Floran wantsss more company. Let'sss make a new home!" > ], > "glitch" : [ > "^cyan;Lonely. I have decided I would benefit from a new friend - And you're just the person who can help me!", > "^cyan;Introspective. I have concluded that a new friend would make me happier. Could you help me with this?" > ], > "default" : [ > "^cyan;I love making friends, could you help me setup a residence for a new neighbour?", > "^cyan;I'm lonely and could use someone new to talk to. Could you help find me the friend I'm looking for?" > ] > }, 6,8c22,35 < "default" : "Use these ^green;^white; to build a house. Take my ^green;Colony Deed^white; too, and put it in the house when you've done that.", < "last" : "Finally, use these ^green;^white; to build a house. Take my ^green;Colony Deed^white; too and put it in the house when you've done that.", < "next" : "Next, use these ^green;^white; to build a house. Take my ^green;Colony Deed^white; too and put it in the house when you've done that." --- > "default" : { > "floran" : [ > "Finally, ^green;make a shelter and decorate it with ^orange;. ^white;I'm ssso close to making a new friend! I hope they enjoy hunting!", > "Now ^green;make a home and put ^orange; in it.^white; Floran hopes new friend likes giftsss..." > ], > "glitch" : [ > "Excited. All you need to do now is ^green;make a home^white; using your ^orange;, ^white;and we'll have a new associate in no time!", > "Nervous. Finally, ^green;build a new home^white; and ^green;furnish it^white; with your ^orange;.^white; I hope the new tenant is friendly!" > ], > "default" : [ > "I think we've gathered all the furnishings we need. Now we just need the house itself! ^green;Build a home and set ^orange^green; inside.^white; Along with the ^green;Colony Deed^white; I gave you earlier we should be able to attract a good tenant.", > "The last thing is to ^green;place ^orange^green; inside a house.^white; I'll let you ^green;handle the construction^white; -- I'm not much of a builder. ^green;Remember to place the Colony Deed^white; to announce the unit's available to rent!" > ] > } 11,13c38,51 < "default" : "Hooray! We just made a new friend!", < "first" : "Hooray, we just made a new friend! Talk to me again to continue.", < "next" : "Hooray, we just made a new friend! Talk to me again to continue." --- > "default" : { > "floran" : [ > "It worked, we have a ssshiny new friend! Floran is thankful for your help.", > "You helped Floran find a new friend! Floran is very grateful" > ], > "glitch" : [ > "Thrilled. We have a new friend to get acquainted with - I'm sure they'll fit in just fine! Thank you for making this happen!", > "Delighted. I'm always surprised how fast new homes are inhabited - I guess there's a lot of demand out there! Thank you for your help." > ], > "default" : [ > "Success! I've finally got a new neighbour! This place gets lonely sometimes, it's nice to have folks to talk to.", > "Vacancy filled! That didn't take long! Thanks for helping expand my social network!" > ] > } 15c53,56 < "failureText" : "I was unable to build the house that ^green;^white; wanted.", --- > "failureText" : [ > "I was unable to help make a new friend. They probably have enough friends as it is.", > "I was unable to help make a new friend. I'm sure they'll get over it." > ], quests\generated\subquests\collect_fine.questtemplate 3,4c3,20 < "title" : "^orange;Collect damages", < "goalText" : "^orange; has been caught breaking the law and must pay damages.^white;\n", --- > "title" : [ > "Collect damages from ", > "Bring to Justice" > ], > "goalText" : { > "floran" : [ > "^cyan;Help Floran deliver jusstice to !", > "^cyan;Make pay back for breaking rulesss!" > ], > "glitch" : [ > "^cyan;Preoccupied. Will you help me bring to justice? I have a plan for this...", > "^cyan;Shocked. I have learned that has been stealing from others! I have a plan to bring them to justice..." > ], > "default" : [ > "^cyan;You look like you can handle yourself. Will you help me bring to justice? ", > "^cyan; has been causing a nuisance around here lately, I've charged them with a fine for criminal damages." > ] > }, 6,7c22,77 < "default" : "Convince ^green;^white; to pay, and I'll let you keep the reward.", < "last" : "Finally, convince ^green;^white; to pay, and I'll let you keep the reward." --- > "first" : { > "floran" : [ > "Floran has much to do, sso very busy. Will you assist Floran? ^orange; ^white;has done a ssshameful crime and the law musst be upheld! ^green;Go and give thiss ^orange;crime notice^green; to them and take one ^orange;^white; as payment.", > "Floran heard ^orange;^white; isn't being very nice. Floran wantsss you to resolve thisss quietly - ^green;take thisss ^orange;crime notice^green; to them and collect one ^orange; ^green;from them ^white;as payment." > ], > "glitch" : [ > "Distracted. ^orange;^white; has committed a crime and owes a fine. Will you ^green;deliver this ^orange;notice^green; to them^white; and ^green;take their ^orange;^white; as payment of damages? It is a trivial task, but i'm far too busy for it.", > "Resolute. First, I regret to inform you that our seemingly innocent associate ^orange;^white; recently commited a crime. ^green;Deliver this ^orange;crime notice^white; and take their ^orange;^white; as compensation." > ], > "default" : [ > "I've got plenty of evidence here to prove that ^orange;^white; has been up to no good. ^green;Deliver this ^orange;fine notice^green; to them.^white; They've already agreed to give up their ^orange;^white; as payment. ", > "The first thing on our agenda involves ^orange;^white;. Certain evidence has come to light that they're a pretty shady individual. ^green;Deliver this ^orange;notice^green; and collect their ^orange;^white; as payment." > ] > }, > "next" : { > "floran" : [ > "Floran has more tasssks for you. ^orange; ^white;has done something sssinful and Floran wantsss justice! ^green;Go and give thiss ^orange;crime notice^green; to them and take one ^orange;^white; as payment.", > "Floran heard about ^orange; ^white;doing some nasssty things. Floran has written a ^orange;crime notice^white; for them. ^green;Deliver it, and take one ^orange;^white; as payment." > ], > "glitch" : [ > "Inattentive. I need you to do something else for me - upholding the law is quite important and all, but so are lunch breaks. ^orange;^white; owes a fine - will you ^green;deliver this ^orange;notice^green; to them^white; and ^green;take their ^orange;^white; as payment of damages?", > "Determined. I have heard that ^orange;^white; has been caught commiting a crime! I won't let this pass - ^green;Deliver this ^orange;crime notice^green; to them^white; and ^green;take their ^orange;^white; as compensation." > ], > "default" : [ > "Now, ^orange;^white; owes a fine for being a law breaker. ^green;Will you deliver this ^orange;fine notice?^white; They've agreed to give their ^orange;^white; as payment of damages.", > "Next on our list involves ^orange;, ^white;they've proven themselves to be quite the lawbreaker. ^green;Deliver this ^orange;notice^green; for damages to them,^white; they've already agreed to give their ^orange; as compensation." > ] > }, > "last" : { > "floran" : [ > "Floran has one lassst job for you. ^orange; ^white;has committed a sshameful crime and justice musst be served! ^green;Go and give thiss ^orange;crime notice^green; to them and take one ^orange;^white; as payment.", > "It'sss time to deliver justice to ^orange;! ^green;Deliver this ^orange;crime notice ^white;Floran wrote, and ^green;take one ^orange;^white; as payment." > ], > "glitch" : [ > "Irritated. Lastly, ^orange;^white; has broken the law and owes a fine. I am far too busy to collect it. Will you ^green;deliver this notice to ^orange;^white; and ^green;collect their ^orange;^white; as payment of damages? I would be most grateful.", > "Serious. It's time we get ^orange;^white; to pay for their crimes. ^green;Deliver this ^orange;crime notice^green; to them,^white; and take their ^orange;^white; as compensation. Hopefully they'll behave in future!" > ], > "default" : [ > "Lastly, ^orange;^white; owes a fine. ^green;Deliver this ^orange;notice^white; and ^green;collect their ^orange;^white; as payment of damages.", > "Finally, we need ^orange;^white; to pay for their shady practices. ^green;Deliver this ^orange;notice^green; to them,^white; it's a receipt for criminal damages. Then ^green;collect their ^orange;^white; as compensation." > ] > }, > "default" : { > "floran" : [ > "^orange;^white; has done a dessspicable crime and must face justice! Floran thinks you're bessst for this job! ^green;Go and give this ^orange;crime notice^green; to ^orange;^green; and take ^orange; ^white;as payment.", > "Floran has dissscovered ^orange;^white; has done some nasssty things! Here'sss a ^orange;crime notice. ^green;Take it to them and take one ^orange; ^white;as payment for their actionsss." > ], > "glitch" : [ > "Lackadaisical. You wouldn't happen to be busy, would you? ^orange;^white; has broken the law and owes a fine. Will you ^green;deliver this ^orange;notice^green; to them^white; and ^green;collect their ^orange;^white; as payment? I would do it myself, but I am... Busy. Yes, very busy.", > "Determined. ^orange;^white; has been up to some unethical business, and I wish to teach them a lesson. ^green;Deliver this ^orange;crime notice^white; to them,^white; and ^green;take their ^orange;^white; as compensation for their behaviour. Hopefully they'll learn!" > ], > "default" : [ > "I've got a ^orange;fine notice^white; right here. ^orange;^white; has already agreed to give up their ^orange;^white; as payment of damages, ^green;will you deliver it to them?", > "^green;Deliver this ^orange;crime notice^green; to ^orange;^white;. They've agreed to give their ^orange;^white; as compensation for their behaviour." > ] > } 10c80,135 < "default" : "Great work! I wish others cared as much about upholding the law as you." --- > "first" : { > "floran" : [ > "Ssuperb law-upholding - You are good at thisss! Will you do ssomething else for Floran?", > "Floran has brought jussstice, and we got a out of it. Floran might find use for thisss..." > ], > "glitch" : [ > "Pleased. Well done collecting the fine from ! That's one more thing I can cross off my to-do list. Do you think you could do something else for me?", > "Vindicated. has no doubt learned their lesson... And that will come in useful as well!" > ], > "default" : [ > "Well done collecting the fine from ! This will do nicely. Do you think you could do something else for me?", > " has no doubt learned their lesson. This will come in useful too!" > ] > }, > "next" : { > "floran" : [ > "Jussstice has been served! You're good at thisss! Will you do one lassst thing for Floran?", > "Thanksss! Hopefully will ssstay nice from now on. This might also be helpful for Floran..." > ], > "glitch" : [ > "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?", > "Pleased. Thank you for helping teach that there's consequences for their actions! That might also be useful, too." > ], > "default" : [ > "Thank you for collecting 's fine! I wasn't sure they'd follow through with payment if I went myself. Luckily you look like someone wouldn't want to mess with.", > "Thank you for helping teach that there's consequences for their actions! I can see a few uses for this already." > ] > }, > "last" : { > "floran" : [ > "Ssweet justice! Perhaps you should be doing thisss job instead of Floran...", > "Thankss for your help! You can keep that , Floran doesn't need it." > ], > "glitch" : [ > "Thankful. Nice work collecting the fine from ! That certainly saved me a lot of hassle.", > "Relieved. Thank you for teaching a lesson. You can keep that , you've earned it." > ], > "default" : [ > "Nice work collecting the fine from . I was a little worried that they'd try to wriggle out of it. You can keep that as payment.", > "Thank you for teaching a lesson. I hope they realise that nobody is above the law. You can keep the . You've earned it." > ] > }, > "default" : { > "floran" : [ > "That was some sssuperb law-upholding! You ssshould do this more often.", > "Hopefully learned to play by the rulesss. Floran knows that you should never get caught if doing bad things... You can keep that as paymentsss." > ], > "glitch" : [ > "Pleased. Well done collecting the fine from ! That's one more thing I can cross off my to-do list. Hurrah!", > "Grateful. Thank you for teaching that we follow rules around here, even if those rules are vague and not actually written down anywhere. Keep that too, if you like." > ], > "default" : [ > "You did a good job! Keep the as payment for your services, I just wanted to show that nobody is above the law.", > "Thanks for your help! should realise that we have to follow the rules around here. Keep that too, if you like." > ] > } 12c137,140 < "failureText" : "I was unable to collect the fine from criminal .", --- > "failureText" : [ > "I failed to deliver the crime notice to and collect one as collateral. Perhaps I'm not cut out for the vigilante life after all.", > "I failed to get compensation from for their actions. I guess crime does pay, after all." > ], 28a157 > " is being charged with: . They must pay 1 ", 35,36c164,165 < "terrible puns", < "poor taste in music", --- > "being a jerk", > "intrusion", 38c167,170 < "bodily harm", --- > "malicious behaviour", > "disturbing the peace", > "unfriendly behaviour", > "upsetting others", quests\generated\subquests\collect_for_safekeeping.questtemplate 3,4d2 < "title" : "^orange;Collect 's for safekeeping by ^white;", < "goalText" : "^orange;Help me collect an from for safekeeping!^white;\n\n", 6,9c4,31 < "default" : "^green;^white; has decided to ^orange;entrust^white; me with an ^green;^white;. If you pick it up for me, I'll let you keep it.", < "first" : "Firstly, ^green;^white; has decided to ^orange;entrust^white; me with an ^green;^white;. Could you go pick it up?", < "last" : "Finally, ^green;^white; has decided to ^orange;entrust^white; me with an ^green;^white;. If you pick it up for me, I'll let you keep it.", < "next" : "Now ^green;^white; has decided to ^orange;entrust^white; me with an ^green;^white;. Could you go pick it up?" --- > "first" : { > "floran" : [ > "Before we can do anything elsse, we need ^orange;^white;. Floran knowss that ^orange;^white; will let Floran borrow theirs. ^green;Will you go get it?", > "Floran knowss that ^orange;^white; hass ^orange;^white; that we need. ^green;If you ask to borrow it, that'll save usss time." > ], > "glitch" : [ > "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.", > "Restless. Our first priority should be obtaining a good quality ^orange;. ItΓÇÖs likely quicker to just^green; ask ^orange;^green; if we can borrow theirs. " > ], > "default" : [ > "We will need a nice ^orange;^white; to begin with. I seem to remember seeing ^orange; ^white;with one quite recently. Why don't you ^green;go and ask if we can borrow it for a while? ^white;We can tell them we lost it later if they ask for it back. ", > "I think ^orange;^white; has a nice ^orange;^white; that we could use. Why don't you ^green;go and ask them if we can borrow it indefinitely?^white; Actually, leave out the indefinitely part..." > ] > }, > "default" : { > "floran" : [ > "We need to talk to ^orange;^white; next. ^green;Go assk for their ^orange;^white;, they won't mind if Floran borrowsss it.", > "Next, we need a sshiny ^orange;^white;. Floran saw ^orange;^white; with one, ^green;you should asssk to borrow it." > ], > "glitch" : [ > "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. " > ], > "default" : [ > "Now we need to find ourselves one . You should go and ask if we can borrow theirs. No need to mention that we won't be able to return it. ", > "We could really use a good ^orange;^white; now. ^orange; ^white;is sure to have one in their posession. Why don't you ^green;go and borrow it from them? " > ] > } 12c34,61 < "default" : "Here is my ^green;^white;! I'm sure I can trust ^green;^white; to take good care of it!" --- > "first" : { > "floran" : [ > "Great, you got it! Let's hope understandss Floran's meaning of borrow...", > "You got the ! It's nice that trustsss us with it. I can't promisse that we'll give it back though." > ], > "glitch" : [ > "Delighted. Great! thatΓÇÖs just what we needed. I knew would come through for us! Just donΓÇÖt do something silly like forget to hand it back to them when weΓÇÖre done here. ThatΓÇÖd be pretty embarrassing!", > "Relieved. You got it! this will do nicely. It was nice of to let us borrow it. Try and remember to return it when weΓÇÖve finished." > ], > "default" : [ > "Great! sure is a generous neighbour. ", > "That's a decent . Let's hope won't miss it. " > ] > }, > "default" : { > "floran" : [ > "You got it! Floran thinksss we'll need a little longer than may like. But let'ss worry about that later.", > "Thiss is a very good ! Floran surprised that give it up so easssily. Maybe we won't give it back so ssoon." > ], > "glitch" : [ > "Trusting. Ah good, you got the ! YouΓÇÖll have to remember to return it at some point, but donΓÇÖt worry about that for now.", > "Thankful. This will work perfectly! it also saved us tracking one down ourselves. Make sure you donΓÇÖt damage it, wouldnΓÇÖt be happy if you returned it in poor condition." > ], > "default" : [ > "That went smoothly. Let's hope doesn't ask for it back.", > "Well done! We probably won't be able to return this to , but I'm sure they won't miss this dusty old thing anyway. " > ] > } 14d62 < "failureText" : "I was unable to collect the ^green;^white; from ^green;^white; for safekeeping by ^green;^white;.", quests\generated\subquests\collect_gift.questtemplate 3,4d2 < "title" : "^orange;Collect 's present for ^white;", < "goalText" : "^orange;Help me get a present from !^white;\n\n", 6,9c4,31 < "default" : "My ^orange;friend^white;, ^green;^white; has a present for me. Could you pick it up? I'll let you keep it for helping out.", < "first" : "Firstly, my ^orange;friend^white;, ^green;^white; has a present for me. Could you pick it up? I think it will be something very useful!", < "last" : "Finally, my ^orange;friend^white;, ^green;^white; has a present for me. Could you pick it up? I'll let you keep it for helping out.", < "next" : "Next, my ^orange;friend^white;, ^green;^white; has a present for me. Could you pick it up? I think it will be something very useful!" --- > "first" : { > "floran" : [ > "Firssst, Floran needs you to ^green;get a ssshiny ^orange;. ^white;Floran thinksss ^orange; ^green;will have one.", > "To sstart, Floran first needs a sshiny ^orange; ^green;from ^orange;. ^green;Go asssk them for one." > ], > "glitch" : [ > "Friendly. First ^green;I shall need one ^orange;^white;, and I know that ^orange;^white; currently owns one. ^green;Can you ask them to donate it to our cause?", > "Confident. ^green;I am going to need one ^orange;^white;, I know that ^orange;^white; owns one. ^green;I am sure they'll give it to me if you asked." > ], > "default" : [ > "The first thing I'll need is one ^orange;. ^white; has an extra, and owes me a favor. ^green;Could you run over to ^orange;^white; and pick it up?", > "To begin we'll need one ^orange;.^white; I know ^orange;^white; got a new one recently, ^green;you should ask if we can use it." > ] > }, > "default" : { > "floran" : [ > "Next, Floran heard that ^orange; ^green;hass a nice . ^white;Could you ^green;collect it for Floran^white;, pleassse?", > "For the next part, Floran needs a nice ^orange;. ^white;Floran heard that ^orange; ^green;hasss one. You ssshould ask them." > ], > "glitch" : [ > "Upbeat. Next, ^green;I have need of ^orange;'s ^white;. I'm positive that if you asked them nicely, they'd give it to us. ^green;You should speak to them!", > "Expectant. ^green;I need one ^orange; and know that ^orange; has one. I am sure you could ^green;retrieve it for me if you asked them nicely." > ], > "default" : [ > "Next, I need you to ^green;retreive my ^orange;^white;. I loaned it to ^orange;^white; last week, ^green;could you ask for it back?^white; We're going to need it for the next phase of my plan.", > "Now I'll need you to gather one ^orange;. ^white; has the biggest collection around, if you ^green;ask nicely^white; I'm sure that just one wouldn't be missed." > ] > } 12,14c34,61 < "default" : "Here it is, a genuine ^green;^white;!", < "first" : "Here it is, a genuine ^green;^white;! I hope ^green;^white; appreciates it!", < "next" : "Here it is, a genuine ^green;^white;! I hope ^green;^white; appreciates it!" --- > "last" : { > "floran" : [ > "You brought Floran the ! won't misss it.", > "Thanksss! Floran knew wouldn't mind." > ], > "glitch" : [ > "Happy. I knew that would be willing to help me out. Thank you for your assistance!", > "Overjoyed. That is just what I need - is kind to have provided it. Thank you for your help as well!" > ], > "default" : [ > "You got the from , excellent work! This next step would have been tough without it.", > "Perfect, I'll have to give my thanks. This is exactly what we need." > ] > }, > "default" : { > "floran" : [ > "Thanksss! Floran thinksss we'll need this more than does.", > "Perfect! Floran has more plansss with this ." > ], > "glitch" : [ > "Pleased. is always reliable, and so are you! Thank you for your assistance.", > "Appreciative. I am lucky to have friends like you and who can help me out!" > ], > "default" : [ > "Thanks for getting what we needed from . Now to move things forward.", > "That is one good looking . Thanks for picking this up." > ] > } 16d62 < "failureText" : "I was unable to get the present for ^green;^white; from ^green;^white;.", quests\generated\subquests\cooking.questtemplate 3d2 < "title" : "^orange;Cooking ^white;", 5,8c4,17 < "default" : "Do some cooking! Use to cook ^green;^white;.", < "first" : "Firstly, use to cook ^green;^white;.", < "last" : "Finally, use your to cook ^green;^white;.", < "next" : "Next, use your to cook ^green;^white;." --- > "default" : { > "floran" : [ > "Now for the worsssssst part! Floran hatess cooking! ^green; needsss to cook ^orange; ^white;for Floran using the ^orange;. ", > "Next needs to ^green;cook Floran ^orange; ^green;from the ^orange;." > ], > "glitch" : [ > "Confused. Now that you have all the ^orange;ingredients^white;, ^green;they just need to be fashioned into ^orange;^white; somehow. I will leave this part to you!", > "Calm. ^green;Now you just need to prepare ^orange;^white; from the ^orange;^white;. Simple!" > ], > "default" : [ > "Now comes the tricky part -- cooking. You should be able to ^green;assemble ^orange;^white; into ^orange;^white;. The recipe seems simple, but my attempts at cooking always taste awful.", > "^orange;^white; aren't going to work alone, so you'll need to do some cooking. You should be able to ^green;whip up ^orange;^white;, why don't you give it a try?" > ] > } 11,13c20,33 < "default" : "This looks delicious! Well done.", < "first" : "Great job, it looks delicious. Talk to me again to continue.", < "next" : "Great job, it looks delicious. Talk to me again to continue." --- > "default" : { > "floran" : [ > "Yesss! Floran not too great a cook, thisss was better plan!", > "Thank you , you sssssure are a better chef than Floran!" > ], > "glitch" : [ > "Envious. I am very grateful to benefit from your excellent cooking skills. Thank you!", > "Happy. The look splendid. " > ], > "default" : [ > "Wow! That looks delicious! I wish we could eat this right now but we'll need it for what comes next...", > "You didn't seem to have any trouble cooking that! Thank you, this is exactly what's needed to complete my plan." > ] > } 15d34 < "failureText" : "I was unable to bring the ^green;^white;.", quests\generated\subquests\craft.questtemplate 4c4 < "next" : { --- > "default" : { 6c6,11 < "Now has the crafting ingredientsss we need. Make Floran ." --- > "Now you have the crafting ingredientsss we need. ^green;Make Floran ^orange;.", > "Floran needsss ^orange;.^green; Thisss can be crafted from . ^white;Can you help?" > ], > "glitch" : [ > "Purposeful. Now for the real task at hand, ^green;you must craft ^orange;^white; for me. You already have all the materials you need, and my gratitude.", > "Concerned. Here is the point at which I falter. My creative ability is below average, ^green;would you be so kind as to craft ^orange;^white; on my behalf? You can use the ^orange;^white; we obtained earlier." 9c14,15 < "Next, use your to craft ." --- > "Next you'll need to ^green;assemble ^orange;^white;. You should be able to ^green;use the ^orange;^white; that you gathered earlier to do that.", > "The next step requires ^green;putting together ^orange;^white;. I would assemble this myself, but my crafting skills are terrible! If you want to take a shot, you should have everything you need." 14c20 < "next" : { --- > "default" : { 16c22,27 < "Ssskillfully crafted, ! Now Floran has another requessst." --- > "Ssskillfully crafted, ! Now Floran has another requessst.", > " will be very ussseful. Floran thanksss you for making these." > ], > "glitch" : [ > "Delighted. Your craftsmanship is truly splendid! I'll be sure to call on you again in future. ", > "Relieved. The wait has been agonising but at last my plans can go ahead, all thanks to you! " 19c30,31 < "Great, now let's use them!" --- > "Wow, very well constructed. Thank you, this is going to work nicely for what I have planned.", > "You made that look easy! I suspect you've done some crafting before. With this we can finally move forward. Thanks!" quests\generated\subquests\extort.questtemplate 3,4d2 < "title" : "^orange;Extort ^white;", < "goalText" : "^orange;Feel like getting some free stuff from ?^white;\n\n", 6,9c4,31 < "default" : "^green;^white; ^orange;fears^white; me. I figure it must be worth at least a ^green;^white;. If you go collect it, I'll let you keep it for yourself.", < "first" : "Firstly, we need a ^green;^white;. ^green;^orange; ^orange;fears^white; me, and I think it would be easy to persuade ^green;^white; to hand over a ^green;^white;. Go do that.", < "last" : "Finally, ^green;^orange; ^orange;fears^white; me, and I think it would be easy to persuade ^green;^white; to hand over a ^green;^white;. Go do that, and I'll let you keep it for yourself.", < "next" : "Now we need a ^green;^white;. ^green;^orange; ^orange;fears^white; me, and I think it would be easy to convince ^green;^white; to hand over a ^green;^white;. Go do that." --- > "first" : { > "floran" : [ > "Okay, to do thiss we need ^orange;^white;. Floran knows jusst the person to get it. ^green;Find ^orange;^green; and tell them to give their ^orange;^green; up,^white; or Floran will deal with them perssonally!", > "Step one, ^green;we need to get ^orange;^white;. Floran knowss that ^orange;^white; has one. ^green;Make them hand it over^white;, Floran knowss they are pitiful and won't protessst." > ], > "glitch" : [ > "Blunt. First I need you to ^green;find that fool, ^orange; ^green;and ask them to give up their ^orange;. ^white;Make sure you mention that ^orange;^white; sent you, they wonΓÇÖt protest... ", > "Exasperated. First, we must deal with ^orange;. ^white;I need their ^orange;, ^white;but theyΓÇÖd be petrified if I went in person. It would save us both some trouble if you were to ^green;fetch it^white; instead." > ], > "default" : [ > "To begin with we need to find ourselves a good ^orange;. ^white;I happen to know that ^orange; ^white;has got one, so you could ^green;pick it up directly from them.^white; They already know their place, so they wouldn't dare to disobey me. ", > "We need to get our hands on one ^orange;.^white; Luckily, ^orange;^white; who lives nearby ^green;should have one of these.^white; Even better, they already know who's the boss around here, so ^green;they'll oblige you^white; quickly for sure. " > ] > }, > "default" : { > "floran" : [ > "Next step requiress some muscle. Floran knowss ^orange;^white; is cowering somewhere. ^green;Go tell them Floran thinkss they sshould... Volunteer their ^orange;.", > "We need ^orange;^white; next. ^green;Try to squeeze one from ^orange;^white; firsst, they're so ssscared they do whatever Floran wantss." > ], > "glitch" : [ > "Dishonest. Next, we need a little something from ^orange;. ^white;They owe me a favour, so I just have to ask. ^green;Tell them that ^orange;^green; is in need of their ^orange;. ", > "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." > ], > "default" : [ > "We have to collect one ^orange;^white; from somewhere. I believe ^orange;^white; has one, and they just so happen to owe me a favour. Will you ^green;pick up the ^orange;^green; from them?", > "Having a good ^orange; ^white;is necessary for our plan. I'm pretty sure ^orange;^white; has one of these, so why don't you ^green;go and collect it? ^white;Don't worry, they wouldn't disobey us... " > ] > } 12c34,61 < "default" : "Don't hurt me! Please! I wish ^green;^white; wasn't so scary. Here, take this ^green;^white;!" --- > "first" : { > "floran" : [ > "Great! Floran knew wouldn't put up a fight. Thisss will do nicely.", > "You got it! Eassy, right? Floran wissh they could've seen 's face! bet they were ssshaking in their boots!" > ], > "glitch" : [ > "Sarcastic. Ah, I see you got the . IΓÇÖm sure it was difficult for you to get to hand it over. Keep hold of it for me for the time being.", > "Amused. Ah, you got ΓÇÖs . I can imagine the look on their face was priceless!" > ], > "default" : [ > "Well done! This will come in handy to us very soon. ", > "This is perfect! You've done well." > ] > }, > "default" : { > "floran" : [ > "You got it? How nice of to give their to Floran without a fight. They know what's bessst for them.", > "See? Sometimesss easiest way to get something done iss to apply a little pressssure." > ], > "glitch" : [ > "Distrustful. This is definitely ΓÇÖs ? And they just handed it you? ItΓÇÖs probably nothing...But you should hold onto it for now.", > "Approving. This is the we needed! I assume wasnΓÇÖt too much trouble? You'll need to keep hold of it for now." > ], > "default" : [ > "Perfect. I knew wouldn't dare to complain. ", > "Good job collecting our ! I knew would be useful to have around..." > ] > } 14d62 < "failureText" : "I was unable to extort the ^green;^white; from ^green;^white; for ^green;^white;.", quests\generated\subquests\farming.questtemplate 3d2 < "title" : "^orange;Farm ^white;", 5,8c4,31 < "default" : "Use these seeds to grow ^green;^white;.", < "first" : "Firstly, take these seeds and grow ^green;^white;.", < "last" : "Finally, take these seeds and grow ^green;^white;.", < "next" : "Next, take these seeds and grow ^green;^white;." --- > "first" : { > "floran" : [ > "For startersss, ^green;plant these ssseeds. ^white;Water them and watch them grow. When crop iss ripe, ^green;bring Floran the ^orange;.", > "The firsssst thing you need to do is ^green;plant these seeds. ^white;Once the crop hass grown, ^green;bring Floran the ripe ^orange;. ^white;Don't forget to water them!" > ], > "glitch" : [ > "Friendly. To begin, ^green;I am in need of some fresh ^orange;^white;. Even a beginner should be able to grow some with these ^orange;seeds^white; and a little patience.", > "Sceptical. I purchased these ^orange;seeds^white; from a merchant and have been unable to successfully grow anything from them. ^green;See if you can grow ^orange;^white; for me." > ], > "default" : [ > "Firstly, I need you to ^green;plant ^orange;. Water them regularly, then when they are ready, ^green;harvest the ^orange; and bring your bountiful harvest to me.", > "First, I need ^orange;,^white; but it's out of season. You can garden right? Here's ^orange;^green; for you to plant,^white; when you've ^green;harvested ^orange;^green; could you bring them to me?" > ] > }, > "default" : { > "floran" : [ > "Now Floran needs ^orange;. ^green;Plant and water ^orange;. ^white;Crop will be ripe and ready to pick when big and ssssquishy! ^green;Bring crop back to Floran.", > "Next Floran needs you to ^green;grow ^orange; ^green;from these seedsss." > ], > "glitch" : [ > "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!", > "Excited. The next part of my plan involves ^orange;. ^green;Take these ^orange;seeds^green; and grow me the crops^white; I need. " > ], > "default" : [ > "Now I need you to ^green;plant ^orange;^white;. Care for them until they are ready, then ^green;harvest the ^orange;^green; for me.", > "Next, we need some produce. I have ^orange;,^white; but no place to grow. Would you mind ^green;growing them and bringing me ^orange;^white;? Any other bounty you can keep for yourself." > ] > } 11,13c34,61 < "default" : "Great job.", < "first" : "Great, now let's make use of this produce. Talk to me again to continue.", < "next" : "Great, now let's make use of this produce. Talk to me again to continue." --- > "first" : { > "floran" : [ > "Thanksssss, friend. Floran finds hard to grow here, you have been a great help.", > "Perfectly plump and delicioussss produce, thank you ssstranger!" > ], > "glitch" : [ > "Impressed. These crops have turned out better than I could have grown myself, you have a real talent for farming.", > "Secretive. I will never know how you were able to grow these seeds, and I do not need to. You have my thanks, friend. " > ], > "default" : [ > "Ah, beautifully ripe! You have a real talent for this, .", > "Wow, you may have a future in farming! fresh out of the ground! This will work wonderfully." > ] > }, > "default" : { > "floran" : [ > "Yessss, just what Floran needsss! You are the besssst!", > "Thankss friend. Floran can't undersssstand why anyone would eat thisss stuff, but it suits my purposessss." > ], > "glitch" : [ > "Jolly. This is a bumper crop! Thank you!", > "Grateful. Excellent work, my plan is coming together nicely. " > ], > "default" : [ > "Thank you, stranger. These look a little on the small side, but that's what you get for going organic!", > " exactly as requested. Nice work , time to put this produce to good use!" > ] > } 15d62 < "failureText" : "I was unable to bring the ^green;^white;.", quests\generated\subquests\fetch.questtemplate 6c6,11 < "Firssst, Floran needs you to find . Be hasssty!" --- > "Firssst, Floran needs you to ^green;find ^orange;. ^white;Be hasssty!", > "Psst, you! Floran can't find ^orange;. ^white;Floran will reward generousssly if you ^green;fetch this for usss." > ], > "glitch" : [ > "Eager. First ^green;I need you to gather ^orange;^white; for me. It would be very appreciated!", > "Excited. For the first part of my plan, ^green;I need you to gather ^orange;^white; for me." 9c14,15 < "To begin with, find ." --- > "To begin, ^green;I'll need ^orange;^white;. Could you lend a hand?", > "Initially, ^green;we'll need to gather ^orange;^white;. Could you handle that?" 12c18 < "next" : { --- > "default" : { 14c20,25 < "Time to find . It'sss very important we do that next." --- > "Time to ^green;find ^orange;. ^white;It'sss very important we do this next.", > "As your next tasssk, could you ^green;find us ^orange;? ^white;Not big job for someone ssskillful like you." > ], > "glitch" : [ > "Confident. Next ^green;we'll need ^orange;.^white; I'm sure this task will not be difficult for you.", > "Eager. Next, ^green;I need you to collect ^orange;^white;." 17c28,29 < "Next, bring me ." --- > "Next, ^green;we'll need ^orange;^white;. No problem right?", > "^green;The next thing I'll need is ^orange;^white;. It's important to the plan." 24c36,41 < "Successs! Let's get to work with our ." --- > "Successs! Let's get to work with our .", > "You exceeded my expectationsss. Floran has need for thessse!" > ], > "glitch" : [ > "Thankful. I appreciate you gathering those items for me! I have a plan for them, do not worry.", > "Pleased. These items are just what I need for my plan!" 27c44,45 < "Great, now let's use them for something!" --- > "Excellent! Now we can put these to use.", > "Well done , I never doubted you could do it!" 30c48 < "next" : { --- > "default" : { 32c50,55 < "Perfect, time to put or to ussse." --- > "Perfect, time to put our to ussse.", > "That wasss quicker than we expected! Floran is pleasssed with you." > ], > "glitch" : [ > "Appreciative. These items are necessary for my plan, so I am pleased that you managed to gather them for me.", > "Excited. I have plans for these items, thank you for getting them for me!" 35c58,59 < "Great job yet again, ! Now let's use these items..." --- > "Thank you, this is exactly what I need for my next request...", > "Perfect, this will work nicely. Thank you!" quests\generated\subquests\gift.questtemplate 4,5c4,5 < "A present for ", < " the gift giver" --- > " the Gift Giver", > "Help deliver a gift" 9c9,14 < "Floran likess 's scent. Floran wantsss them around more often.\n\n" --- > "^cyan;Floran likess 's scent. Floran wantsss them around more often.", > "^cyan;Floran wantss a hunting partner. Floran thinks isss a good choice! Will you help Floran impress them enough to join?" > ], > "glitch" : [ > "^cyan;Needy. I want to win the favour of , and have a plan to do so. Can you help?", > "^cyan;Friendly. I would like to like me more - Could you help me?" 12c17,18 < "^orange;Help me make a new friend! Let's present with a gift!^white;\n\n" --- > "^cyan;I'm trying to impress and need the perfect gift. I have one in mind but could use some help. ", > "^cyan;I admire and want to make a good impression. Do you think you could help me get a gift to knock their socks off?" 16,19c22 < "last" : { < "default" : [ < "Finally, could you give the ^green;^white; to ^green;^white;? I think it would help me gain ^green;^white;'s ^orange;friendship^white;!" < ], --- > "next" : { 21c24,33 < "Floran thinks will like thisss last part! This is perfect, it remindss Floran of them so much. Floran isn't shy... But perhaps you give it to them?" --- > "Next, Floran thinkss ^orange; ^white;might appreciate a gift. Thiss ^orange; ^white;will be perfect! Floran not afraid of anything! but... Perhapss you ^green;give it to them?", > "Okay, next let's ^green;give ^orange; ^green;a hunting trophy!^white; Floran hasn't been on many huntss lately, so thiss ^orange; ^white;will have to do. Floran still thinksss they will be impressed!" > ], > "glitch" : [ > "Enthusiastic. Next ^green;I need to win ^orange;'s^white; friendship. Can you ^green;deliver this ^orange;^white; to them as a gift?", > "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?" > ], > "default" : [ > "I think this is the perfect ^orange. ^green;Could you deliver it to ^orange^white;? Make sure they know it's from me!", > "Who wouldn't love a new ^orange? I hope ^orange^white; appreciates all the hard work I had you do for this! ^green; Could you deliver it to them?" 24,27c36 < "next" : { < "default" : [ < "Next, could you give the ^green;^white; to ^green;^white;? I think it would help me gain ^green;^white;'s ^orange;friendship^white;!" < ], --- > "default" : { 29c38,47 < "Next, Floran thinkss might appreciate a gift. Thiss will be perfect! Floran not afraid of anything! but... Perhapss you give it to them?" --- > "Floran thinks ^orange;^white; will like thisss last part! This ^orange; ^white;is perfect, it remindss Floran of them so much. Floran isn't shy... But perhaps you ^green;give it to them?", > "Lastly, the final thing to impresss ^orange;. A hunting trophy! Floran doesn't hunt alone, so thiss ^orange; ^white;will have to do for now. Can you ^green;deliver the gift to them?" > ], > "glitch" : [ > "Nervous. Finally, ^green;can you give the ^orange;^green; to ^orange;^white;? I hope they appreciate it!", > "Eager. It is almost over - All you need to do now is ^green;place the ^orange;^green; in my home^white; somewhere!" > ], > "default" : [ > "The only thing left to do now is ^green;deliver the ^orange^white; Could you give it to for me?", > "Now we just need to ^green;drop that ^orange^green; off to ^orange.^white; Can I ask you to take it to them? I hope they don't already have one!" 34,37c52 < "last" : { < "default" : [ < "Hooray! You've earned me 's ^orange;friendship^white;!" < ], --- > "next" : { 39c54,63 < " really liked the gift! Now they'll spend lotsss of time with Floran, and Floran can ssmell their pleasant ssmells all day! Thanksss a lot!" --- > "Floran is very pleased! It turnss out the is one of 's favourite things! Sorry Floran lied about not being afraid earlier, just a little shy...", > "Good job! Maybe the wass a bit ssstrange for a trophy, but I'm glad they liked it!" > ], > "glitch" : [ > "Delighted. appears to have liked the gift! Thank you for your assistance, I greatly appreciate it.", > "Exuberant. I now have a closer friendship with thanks to your help delivering the gift to them. I will remember how reliable you have been!" > ], > "default" : [ > "It looks like loved the . I'm such a good gift-giver! Well, with your help of course!", > "Horray! Now and I can be best friends! Now to figure out what I should get them next..." 42,45c66 < "next" : { < "default" : [ < "Hooray! You've earned me 's ^orange;friendship^white;! I wonder if ^green;^white; will do something in return for us..." < ], --- > "default" : { 47c68,77 < "Floran is very pleased! It turnss out the is one of 's favourite things! Sorry Floran lied about not being afraid earlier, just a little shy..." --- > " really liked the gift! Now they'll spend lotsss of time with Floran, and Floran can ssmell their pleasant ssmells all day! Thanksss a lot!", > "Thankss! Floran knew would like the hunting trophy, and now Floran hasss a hunting buddy! Floran will sschedule a hunt for tomorrow!" > ], > "glitch" : [ > "Gratified. liked my present! Thank you for your help in my quest for friendship.", > "Jubilant. The gift delivery was a success! Thank you for helping with this plan, I greatly appreciate it." > ], > "default" : [ > "Apparently has been wanting a new for some time! They loved it and can't thank me enough. Thanks for your help!", > " liked the gift? I don't need anything in return, it feels good just to give friends something they'll enjoy!" 52,54c82,84 < "Whoops! I didn't get the to . I'm sure will find another hunting partner.", < "Whoops, I failed to get the to . I hope I didn't ruin 's day." < ], --- > "I failed to help win the favour of . They should probably learn to make friends without my help.", > "I failed to help deliver a gift to . Perhaps they should learn to make friends without giving them presents?" > ], quests\generated\subquests\intimidate.questtemplate 3,4c3,20 < "title" : "^orange;Intimidate ^white;", < "goalText" : "^orange;I want to gain 's obedience.^white;\n\n", --- > "title" : [ > "Intimidate ", > "Threaten someone for " > ], > "goalText" : { > "floran" : [ > "^cyan; needsss to know that Floran is one to fear!", > "^cyan;Floran wantss to fear them." > ], > "glitch" : [ > "^cyan;Aggressive. I need to be compliant, and I have a plan to make it happen.", > "^cyan;Cunning. I have decided that could do with fearing me - And I know how to achieve this." > ], > "default" : [ > "^cyan;I've decided that it would be quite nice to have obey me, in case I ever need them for something. I have just the plan to make this happen...", > "^cyan;You know what quality I like in others? Total subservience! I have just the way to get to respect me through fear..." > ] > }, 6,9c22,77 < "default" : "Could you intimidate ^green;^white; with a ^green;^white; for me? Striking ^orange;fear^white; into the hearts of others is a great way to gain their ^orange;obedience^white;.", < "first" : "To start with, could you intimidate ^green;^white; with a ^green;^white; for me? Striking ^orange;fear^white; into the hearts of others is a great way to gain their ^orange;obedience^white;.", < "last" : "Lastly, could you intimidate ^green;^white; with a ^green;^white; for me? Striking ^orange;fear^white; into the hearts of others is a great way to gain their ^orange;obedience^white;.", < "next" : "Now, could you intimidate ^green;^white; with a ^green;^white; for me? Striking ^orange;fear^white; into the hearts of others is a great way to gain their ^orange;obedience^white;." --- > "first" : { > "floran" : [ > "We will begin by making sure ^orange; ^white;acknowledgesss our authority. Floran knows great way of doing thisss. ^green;Grab a ssshiny ^orange; ^green;and go have a chat with them. ^white;Never failsss!", > "First, Floran doessn't think that ^orange;^white; know how important Floran isss around here. ^green;Point a deadly ^orange;^white; at them and ^green;ssstart a conversation^white; - They'll know to respect me." > ], > "glitch" : [ > "Intrusive. First of all, I need ^orange;^white; to fear me. Could you go and ^green;point a large ^orange;^green; at them?^white; That will let them know who has the power around here...", > "Threatening. First I need ^orange;^white; to be willing to help me with whatever I ask - Could you ^green;intimidate them^white; on my behalf? ^green;Talk to them with a nice ^orange;^white; in hand, and I'm sure they'll get the message." > ], > "default" : [ > "First, I need ^orange;'s^white; obedience. If you could ^green;go and point a big ^orange; ^green;at them and strike up a conversation, ^white;I'm sure they'll get the message...", > "First, I need ^orange;^white; to help me out. This means they need to fear me, of course! ^green;Talk to them whilst pointing a nice ^orange;^green; in their face ^white;and I'm sure they'll know to help me out in future..." > ] > }, > "next" : { > "floran" : [ > "Thiss is a good time to aquire sssome allies. ^green;Use a ssscary ^orange;^green; and tell ^orange;target>^green; to lisssten to Floran from now on!^white; Don't worry, it's eassssy. Floran has done this before. ", > "Next you need to ^green;use a ssshiny ^orange;^white; to ^green;have a ssserious chat^white; with ^orange;^white;. Pleassse make sure they know who's the bossss around here. It's Floran of courssse!" > ], > "glitch" : [ > "Menacing. Next, my plans require ^orange;^white; to be willing to do anything for me - Which means ^green;they need to fear me.^white; They're afraid of ^orange;s - ^green;Strike up a conversation^white; with them ^green;with one in your hands^white; and they'll get the message.", > "Invasive. Next I need ^orange;'s^white; obedience - If they fear me, they'll do what I say. I hear ^green;they are afraid of ^orange;s^white; - Could you ^green;point one at them^white; and let them know who holds the power around here?" > ], > "default" : [ > "The next part of my plan requires ^orange;'s^white; obedience. There's no better way to achieve this than to threaten their life! ^green;Hold a big ^orange; ^green;and go talk to them ^white;- They'll know who sent you.", > "Next, I'm going to need ^orange;^white to do anything I say. This is easiest when they fear me - Can you ^green;go and point a nice ^orange; ^green;at them and start up a conversation on my behalf?^white; That should work just fine!" > ] > }, > "last" : { > "floran" : [ > "Floran needss final favour now. ^orange; ^white;would be a great ally to Floran. If you ^green;chat to them while holding a ssshiny ^orange;,^white; Floran iss sure they will agree with usss!", > "It's time to show ^orange;^white; who's the big Floran in town. ^green;Usse a nice ^orange;^green; and have a chat with them^white;, and I'm ssssure they'll come around quickly. Floran hass faith in you." > ], > "glitch" : [ > "Threatening. Finally, I need the subservience of ^orange;^white; - And I have been informed they're afraid of ^orange;s. ^green;Why not point one at them and strike up conversation ^white;- They'll get the message!", > "Invasive. Finally, I need to make ^orange;^white; respect me. There's only one way to achieve this - You should ^green;threaten them with a big ^orange;^white; so they learn to fear me! This is a foolproof plan." > ], > "default" : [ > "Finally, my plan comes together. Did you know ^orange;^white; is afraid of ^orange;s?^white; You should ^green;point one at them and strike up a conversation ^white;- They'll be so scared that they'll do anything I say! It's a perfect plan.", > "My plan finally comes together! I need ^orange;'s^white; utter obedience, if they fear me they'll help me out with anything I need in future! Can you ^green; point a nice ^orange; ^green;at them and strike up a conversation? ^white;They'll know you sent me, don't worry." > ] > }, > "default" : { > "floran" : [ > "Floran thinkss it's good to have sstrong network in town. Floran thinks ^orange; ^white;would be good to have on our sside. No better way to do thiss than to ^green;talk to them with a big ^orange;^green; in hand.^white; Floran is convinced you can do this ssuccessfully. ", > "Floran needss to make sure ^orange;^white; knows Floran isss big deal. Please ^green;go and talk to them^white; for Floran. Oh, and ^green;point a big ^orange;^white; at them, it'll make them lisssten." > ], > "glitch" : [ > "Menacing. In order to win ^orange;'s^white; obedience, I need them to fear me. ^green;Could you point a large ^orange;^green; at them on my behalf?^white; I'm sure they'll understand.", > "Intrusive. In order for ^orange;^white; to fear me, you should ^green;find a nice big ^orange;^green; and point it in their face.^white; I'm sure they'll understand the message!" > ], > "default" : [ > "^orange;,^white; as it turns out, is particularly afraid of ^orange;s. ^white;This is perfect! ^green;Go and point one at them and start a conversation ^white;- I'm sure they'll know I sent you! They'll be so scared, they'll do anything I say in future!", > "I've been informed that ^orange; ^white;is afraid of ^orange;s! ^green;Could you go and threaten them with one for me?^green; I'm sure they'll swear to obey me with a big pointed at them!" > ] > } 12,14c80,135 < "default" : "Great job, you've earned me 's ^orange;obedience^white;!", < "first" : "Great job! Now let's use .", < "next" : "Great job! Now let's use ." --- > "first" : { > "floran" : [ > "Perfect! Now isss sure to help uss in the future!", > "That wasss quick! All thanksss to good old . Floran is pleasssed. " > ], > "glitch" : [ > "Pleased. 's obedience will no doubt come in useful.", > "Impressed. Intimidating was simpler than expected. This is going to help me out." > ], > "default" : [ > "It worked! now utterly fears me, and will probably do whatever I ask! Manipulating others is so easy...", > "The intimidation worked! is willing to help me however I ask now. This will be useful, I'm sure. Thanks for your help!" > ] > }, > "next" : { > "floran" : [ > "Good work. Thisss will make ressst of plan much sssmoother. Floran thanks you.", > "You executed thisss part of the plan perfectly. Let's move on to next part!" > ], > "glitch" : [ > "Excited. Intimidation is easier than I thought! Thank you for your efforts - They were not wasted, I assure you.", > "Eager. I'm looking forward to taking advantage of 's obedience. Thank you for your help!" > ], > "default" : [ > "Now will do anything I say! Intimidation is pretty easy, huh? This will come in handy soon enough...", > "Now that fears for their life, they'll do whatever I say! I should do this more often!" > ] > }, > "last" : { > "floran" : [ > "Floran is pleasssed! With this new ally, Floran's life will be easssier. ", > "Floran could not be more sssatisfied with resultsss. You are a true friend!" > ], > "glitch" : [ > "Pleased. Having 's subservience will prove useful in future, I'm sure. Thank you for your... Assistance.", > "Ambitious. Now that will do anything I say, I see plenty of opportunities for future plans of mine... Thank you for your co-operation!" > ], > "default" : [ > "It worked! Now will do whatever I say. This will be useful one day. Thank you for your... Assistance with this.", > "Why get people to like you when they can fear you instead? Thanks for your help! I'm sure will come in useful to me one day..." > ] > }, > "default" : { > "floran" : [ > "Successs! Floran iss thankful for your hard work. With new connection Floran feelsss powerful. ", > "Thank you, ssstranger. Floran knew you were reliable from the ssstart!" > ], > "glitch" : [ > "Ambitious. I have many plans which now benefit from 's obedience. Now I can start planning! I appreciate your help.", > "Eager. With doing anything I say, more opportunities open up for me. Your co-operation has been... Appreciated." > ], > "default" : [ > "Thanks for your assistance. Now will do anything I say in future! That's going to be useful...", > "Social manipulation is easy! is now loyal to me, through fear. Thank you for helping... Make this happen." > ] > } 16c137,141 < "failureText" : "I was unable to help ^green;^white; gain ^green;^white;'s ^orange;obedience^white;.", --- > "failureText" : [ > "This quest didn't go as planned. should probably do their own dirty work from now on. ", > "I didn't manage to intimidate in the end. Hopefully isn't too disappointed with me.", > "I failed to help intimidate . It is maybe for the best - Intimidation isn't very nice." > ], quests\generated\subquests\protect.questtemplate 3,4c3,20 < "title" : "^orange;Bandit invasion", < "goalText" : "^orange;I need you to protect .^white;\n", --- > "title" : [ > "Protect from ", > "Save from " > ], > "goalText" : { > "floran" : [ > "^cyan;Floran wantss on our sside. Floran have a little plan to make thiss work.", > "^cyan;Floran wantsss to owe Floran a favour." > ], > "glitch" : [ > "^cyan;Worried. I wish to win the favour of , and now hear they are in danger. ", > "^cyan;Eager. I have word that may be in danger - And this might be a chance to win their favour." > ], > "default" : [ > "^cyan;I heard a rumour that are after . If you could defend them and put in a good word maybe I can earn 's trust.", > "^cyan;I want to gain trust, and I've got a plan to do so. Word is that are on their way here to settle a score with , if we could offer protection that would give us their alliegence." > ] > }, 6,9c22,63 < "default" : "I overheard ^green;^white; making a deal with some ^green;bandits^white; to punish ^green;^white;. Kill the bandits! Protect ^green;^white;! Protect the town!", < "first" : "Firstly, we need ^green;^white;'s ^orange;trust^white;. I overheard ^green;^white; making a deal with some ^green;bandits^white; to punish ^green;^white;. Kill the bandits, protect ^green;^white; and we will surely be ^orange;trusted^white;!", < "next" : "Next, we need ^green;^white;'s ^orange;trust^white;. I overheard ^green;^white; making a deal with some ^green;bandits^white; to punish ^green;^white;. Kill the bandits, protect ^green;^white; and we will surely be ^orange;trusted^white;!", < "last" : "Finally, I overheard ^green;^white; making a deal with some ^green;bandits^white; to punish ^green;^white;. Kill the bandits! Protect ^green;^white;! Protect the town!" --- > "first" : { > "floran" : [ > "Floran knowss that ^orange;^green; are looking for ^orange;. ^white;Floran needss them alive for plan to work, so make sssure you ^green;protect them.", > "Floran heard that ^orange; ^green;upssset , and they're coming here! ^white;Floran wantss you to ^green;protect them." > ], > "glitch" : [ > "Tense. I heard talk of approaching ^orange;^white; and believe they're here to get ^orange;. ^green;Can you help protect them?", > "Distressed. I have reason to believe ^orange;^white; are coming for ^orange;. ^green;You must help protect them!" > ], > "default" : [ > "The first concern are the reports that ^orange^white; are on their way here. I hear they're after ^orange! ^green;Do whatever you can to fend them off.^white; They need our protection!", > "The first task is simple; head over to ^orange^white; and make sure those ^orange^white; don't succeed in their attack! ^green;Protect ^orange^green; at all costs!" > ] > }, > "next" : { > "floran" : [ > "Next part not sso eassy. Floran hearss that ^orange; ^green;are coming for ^orange;.^white; Floran needss you to ^green;stop them.", > "Next part iss good timing. Floran hear on grapevine that ^orange; ^green;are coming to messs with ^orange;. ^white;Floran wantss you to ^green;protect ^orange; ^green;from ^orange;." > ], > "glitch" : [ > "Alerted. I have recieved a tip-off that ^orange;^white; are coming to attack, and are after ^orange;. ^green;If you can help me protect them,^white; I would be pleased!", > "Agitated. I have recieved information that ^orange;^white; are incoming, and are here to get to ^orange;. ^green;If you can help me save them,^white; I may win their gratitude. Can you assist?" > ], > "default" : [ > "Next ^green;we'll need to defend against incoming ^orange^white;. I've heard that their target is ^orange^white;. If we show that we're willing to risk life and limb to ^green;protect ^orange;^white;, they will know they can trust us.", > "Next, we'll need to protect ^orange^white;. There's a group of ^orange^white; on their way here to attack them. ^green;Do whatever you can to keep them safe from harm!" > ] > }, > "default" : { > "floran" : [ > "Floran might have told that wass hiding here. Floran knowss they been looking for a while. Keep ssafe and everyone winsss.", > "Floran knowss got on the wrong side of , and they'll be here sshortly! if Floran helpss then they'll have to owe Floran a favour. Will you help protect them?" > ], > "glitch" : [ > "Tense. I've been informed that ^orange;^white; are approaching - and ^orange;^white; is their target! ^green;Can you help me protect their life?", > "Distressed. I've recieved word that ^orange;^white; are coming for ^orange;! ^green;You must help me protect them,^white; before it is too late!" > ], > "default" : [ > "Word is that ^orange;^white; are on their way here to capture ^orange;^white;. We can't allow this, ^green;please help protect them^white; however you can!", > "^orange;^white; is in danger! It seems there's a gang of ^orange;^white; on their way with hostile intentions. ^green;Make sure they don't harm ^orange;^white;. Do whatever it takes!" > ] > } 12,14c66,107 < "default" : "Whew, that was close, but we will surely recover. Good job ^green;^white;!", < "first" : "Whew, that was close, but we will surely recover. Good job ^green;^white;, we've earned ^green;^white;'s trust!", < "next" : "Whew, that was close, but we will surely recover. Good job ^green;^white;, we've earned ^green;^white;'s trust!" --- > "first" : { > "floran" : [ > "Well done, Floran's plan isss working perfectly! doesn't need to know that Floran told where they were hiding... ", > "Good job, wass no match for your protection skillss!" > ], > "glitch" : [ > "Relieved. is safe now - As well as being honour-bound to help me in the future. Thank you!", > "Appreciative. Thanks to you, is safe. They are also honour-bound to assist me if I call upon them - This is helpful!" > ], > "default" : [ > "Thanks to you wasn't harmed. I'm sure they are extremely grateful to us. I know I would be!", > "You kept safe! They will never forget that we saved their lives. It feels like a bond has been created between us." > ] > }, > "next" : { > "floran" : [ > "Floran impressed at your combat skillsss. weren't expecting that!", > "Floran impressed. Lucky for the grapevine wass right, bet weren't expecting that!" > ], > "glitch" : [ > "Overjoyed. You helped protect ! They owe me a favour for saving their life - I am sure this will be useful.", > "Impressed. You saved ! You may have done most of the work, but they still owe me a favour for informing you. Thank you for your help!" > ], > "default" : [ > "You made short work of those ! We've also earned the trust of . I'm sure that will prove helpful!", > "Well done! Those met their match. should trust us now that we've shown we're on the same side." > ] > }, > "default" : { > "floran" : [ > "Successs! friendly to Floran. They know I ask you ssstop . Not important for to know the detailss...", > "Successs! appreciatess the protection. They ssurely owe Floran a favour in future!" > ], > "glitch" : [ > "Impressed. You are a indeed a gallant Knight! Thanks to you, is safe, as well as owing me their help if I ever call upon it.", > "Exuberant. You defeated the and saved ! You are no doubt a noble warrior! Thank you for your help." > ], > "default" : [ > "Haha, are no match for us ... er, I mean you! I think this will put us in 's good books, we should be able to call in a favor if we need anything.", > "I'm impressed! The never stood a chance. I think we've earned 's trust as well." > ] > } 16c109,114 < "failureText" : "I was unable to save ^green;^white; from the bandits.", --- > "failureText" : [ > "I wasn't able to save from . I should probably feel a little guilty about that.", > "I failed to protect from . Maybe I'm not much of a fighter, after all.", > "I failed to protect . Maybe I shouldn't try to protect people in future.", > "I failed to protect . Maybe should have given me more notice." > ], 18c116 < "objectivePortrait" : "target", --- > "objectivePortrait" : "threat", quests\generated\subquests\return_stolen.questtemplate 3,4c3,20 < "title" : "^orange;Return 's stolen ^white;", < "goalText" : "^orange;I want to gain the trust of this community. Let's help out!^white;\n\n", --- > "title" : [ > "Return the stolen ", > "Retrieve the stolen " > ], > "goalText" : { > "floran" : [ > "^cyan; has been robbed! Let'ss help them out!", > "^cyan;Ssomeone's was stolen. Ressstore justice to the town!" > ], > "glitch" : [ > "^cyan;Troubled. has been the victim of petty thievery! Let's help them!", > "^cyan;Furious. I have discovered that has been stealing! Help me bring them to justice, please." > ], > "default" : [ > "^cyan;I saw that was looking for their stolen , and I happen to know where it is. TheyΓÇÖd be pretty thankful if we were to help return it. ", > "^cyan; was asking if I knew anyone that could help find their . I know where it is, but I need your help." > ] > }, 6,9c22,77 < "default" : "I have a witness who claims that ^green;^white; stole ^green;^white;'s ^green;^white;. Could you return it on my behalf? It would help me gain ^green;^white;'s ^orange;trust^white;.", < "first" : "First things first, I have a witness who claims that ^green;^white; stole ^green;^white;'s ^green;^white;. Could you return it on my behalf? It would help me gain ^green;^white;'s ^orange;trust^white;.", < "next" : "Next up, I have a witness who claims that ^green;^white; stole ^green;^white;'s ^green;^white;. Could you return it on my behalf? It would help me gain ^green;^white;'s ^orange;trust^white;.", < "last" : "Finally, I have a witness who claims that ^green;^white; stole ^green;^white;'s ^green;^white;. Could you return it on my behalf? It would help me gain ^green;^white;'s ^orange;trust^white;." --- > "first" : { > "floran" : [ > "Floran has problemsss, needs help from you. That ssneakthief ^orange;^white; has stolen a fine ^orange;^white; from sstand-up citizen ^orange;! ^green;Take it back and put it in ^orange;'s^green; house. ^white;Floran thanksss you for this.", > "You won't believe what's happened! ^orange;^white; wasss robbed by none other than ^orange;.^white; Floran wishes there was ssssomething we could do to help. Maybe you can ^green;return the sssstolen ^orange; ^white;before things get worse!" > ], > "glitch" : [ > "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?" > ], > "default" : [ > "Alright, I know for a fact that ^orange;^white; has been keeping ^orange;ΓÇÖs^white; stolen ^orange;^white; in their home. IΓÇÖll keep watch while you ^green;take it back. Once youΓÇÖve got it, ^green;place it back in ^orange;ΓÇÖs^green; house.", > "The first thing weΓÇÖve got to do involves a little bit of thievery. Well, it's a good kind of thievery. The ^orange; we need to steal back is located in ^orange;ΓÇÖs home. Go get it, then place it back in ^orange;ΓÇÖs house." > ] > }, > "next" : { > "floran" : [ > "Yess nice work! Floran needss another favour from you. ^orange;^white; has stolen a preciouss ^orange;^white; from friendly neighbour ^orange;^white; - sso rude! ^green;Take it back and put it in ^orange;'s^green; house. ^white;Floran iss very grateful.", > "Floran isss torn up about recent incident. How could ^orange; ^white;shamelessssly steal from ^orange;?^white; If you could ^green;return the ssstolen ^orange;^green; to poor ^orange;,^white; I'm sssure they'll be thankful." > ], > "glitch" : [ > "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?", > "Guileful. Next, I bet it would make ^orange;^white; happy if you ^green;retrieved the ^orange;^white; that ^orange;^white; stole from them, and ^green;put it back in their house.^white; Will you do that?" > ], > "default" : [ > "Okay, now we get to do some housebreaking. ^green;Go grab the stolen ^orange;^green; from ^orange;ΓÇÖs^green; home, and ^green;place it back in ^orange;ΓÇÖs^green; house.^white; IΓÇÖll keep an eye out and make sure nobodyΓÇÖs watching.", > "A little breaking and entering never hurt anyone. Nobody we know or care about, at least. Go steal back the ^orange; in ^orange;'s house. Then put it back in ^orange;ΓÇÖs home." > ] > }, > "last" : { > "floran" : [ > "Ssuper! Floran needss one more favour. ^orange;^white; has stolen one ^orange;^white; from poor ^orange; ^white;- how tricksy! ^green;Take it back and put it in ^orange;'s^green; house. ^white;Then Floran leaves you alone.", > "Tragedy! Floran heard ^orange;^white; was robbed by ^orange;.^white; No one wasss there to ssstop the crime! Pleassse, will you ^green;retrieve the stolen ^orange;^green; from the thief?" > ], > "glitch" : [ > "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." > ], > "default" : [ > "Finally, time for some vigilante justice! ^green;Remove the stolen ^orange;^green; from ^orange;ΓÇÖs^green; home, and ^green;place it back in ^orange;ΓÇÖs^green; house.^white; IΓÇÖll be watching to make sure nobody sees whatΓÇÖs going on.", > "Everything else is in place! ItΓÇÖs time for some vigilante style burglary. IΓÇÖll be your lookout while you grab the stolen ^orange; from ^orange;ΓÇÖs place. Then sneak it back into ^orange;ΓÇÖs home." > ] > }, > "default" : { > "floran" : [ > "You! Yesss, Floran speaks to you. ^orange;^white; has stolen a fine ^orange;^white; from dear friend ^orange;^white; - how ssneaky! ^green;Take it back and put it in ^orange;'s ^green;house. ^white;Floran thanksss you.", > "These are dark timesss... Floran heard rumourssss of ^orange;^white; stealing ^orange;'s^white; . ^white;Not even your neighbours can be trusssted nowadays! Please ^green;return the^orange; ^green;to itsss rightful owner." > ], > "glitch" : [ > "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?" > ], > "default" : [ > "Alright, IΓÇÖll keep a lookout while you ^green;take the stolen ^orange;^green; from ^orange;ΓÇÖs^green; home.^white; Once youΓÇÖre done, ^green;place it back in ^orange;'s^green; house. ", > "The ^orange; weΓÇÖre looking for was stolen by ^orange;. Right now itΓÇÖs sitting in their home. ^green;Go steal it back, then ^green;place it back in ^orange;'s^green; house where it belongs. IΓÇÖll be watching for trouble." > ] > } 12,14c80,135 < "default" : "Well done. I strongly believe in upholding the principles of law and justice, and clearly you do too!", < "first" : "Well done. I strongly believe in upholding the principles of law and justice, and clearly you do too!\n\nGetting people to ^orange;trust^white; you is merely a useful side-effect...", < "next" : "Well done. I strongly believe in upholding the principles of law and justice, and clearly you do too!\n\nGetting people to ^orange;trust^white; you is merely a useful side-effect..." --- > "first" : { > "floran" : [ > "Stupendouss! will be sso pleased to have the back! Now Floran neeedss more help.", > "Panic averted! Now we can ressst easy, knowing that has been reunited with their . " > ], > "glitch" : [ > "Pleased. Nice work, ! has their and all is right with the universe... Almost.", > "Impressed. You managed to put the back in 's house - thank you! If I can convince them that I was responsible, I'll definitely have earned their trust!" > ], > "default" : [ > "You did such a good job! I canΓÇÖt wait to see ΓÇÖs face when they see they got a taste of their own medicine. ", > "That wasn't as hard as I thought. You're pretty good at this stuff, aren't you? will be happy to see their stuff back where it belongs." > ] > }, > "next" : { > "floran" : [ > "Ssuperb! will be so grateful to have the back. Now Floran neeedss more help.", > "You did it! Hopefully regretsss their crime. Floran will keep an eye out to make ssssure it doesn't happen again! " > ], > "glitch" : [ > "Satisfied. You've done well, ! will be so pleased to have the back. Would you be willing to do something else for me?", > "Pleased. Thank you for retrieving the for ! I hope you don't mind me taking all the credit. I'll certainly have earned 's trust then!" > ], > "default" : [ > "That was really impressive! I also like the way you didnΓÇÖt leave any fingerprints, thatΓÇÖs smart thinking. Just wait until hears about this! ", > "Good job! will be pleased with me, once they see their back in its rightful place." > ] > }, > "last" : { > "floran" : [ > "Ssssuccess! will be so happy to have the back. Thiss makes Floran happy too.", > "Floran thankssss you deeply for returning the to . Floran knows you can be counted on!" > ], > "glitch" : [ > "Gleeful. Crisis averted- has their back! Thank you for being so helpful, .", > "Satisfied. I'm so glad you retrieved the for ! Once I take all the credit for helping them out, they'll definitely trust me!" > ], > "default" : [ > " and , purveyors of vigilante justice! Sounds good, right? You were like a ghost in there. wonΓÇÖt know what to think! ", > "You have a real talent for this kind of thing, I see you even brought your own tool for the job. will be pleased to see their stuff has been returned." > ] > }, > "default" : { > "floran" : [ > "Mission accomplished! will be so happy to have the back. Thiss makes Floran happy too.", > "You returned the ! I'm sssure that feels sssafer knowing you are here to help out!" > ], > "glitch" : [ > "Relieved. Many thanks, ! has their and knows better than to steal from them again!", > "Grateful. Nice work returning the to 's house on my behalf! You don't mind me taking all the credit, do you? Of course you don't." > ], > "default" : [ > "Wow, you made that look easy! will be pleased to see we got their back. Have you done this before? ThereΓÇÖs no danger of leaving fingerprints with a specialised tool like that..", > "Nice work! will be pretty thankful to see that I helped get their back. We're a daring vigilante twosome now!" > ] > } 16c137,140 < "failureText" : "I failed to return ^green;^white;'s stolen ^green;^white;.", --- > "failureText" : [ > "I couldn't bring justice to . Maybe it's better that I didn't get involved.", > "I didn't manage to return the stolen item to . Let's hope that they are okay with this." > ], quests\generated\subquests\share_secret.questtemplate 3,4c3,20 < "title" : "^orange;Share 's secret with ^white;", < "goalText" : "^orange;I want to gain 's friendship.^white;\n\n", --- > "title" : [ > "'s secrets", > "'s secret" > ], > "goalText" : { > "floran" : [ > "^cyan;Floran wantsss 's friendship.", > "^cyan;Floran wishes trusted Floran more. Floran has plan to make thisss happen." > ], > "glitch" : [ > "^cyan;Hopeful. I have devised a plan to obtain a new friend, by the means of sharing a secret.", > "^cyan;Friendly. I would like to win 's friendship - And have an idea on how to do this." > ], > "default" : [ > "^cyan;I have a secret to share with . I'm hoping this will inspire a friendship between us.", > "^cyan;I'd like to make friends with . By telling them a personal secret, I'm sure they will open up to me." > ] > }, 6,9c22,77 < "default" : "I know! Pass on my very personal secret to ^green;^white;. Take this note but don't read it! Sharing secrets is a sure way to make new ^orange;friends^white;!", < "first" : "To start with, we need to get ^green;^white;'s ^orange;friendship^white;.\n\nI know! Pass this note on to ^green;^white;. It has a very personal secret on it though, so don't read it yourself!", < "last" : "Lastly, could you help me gain ^green;^white;'s ^orange;friendship^white;? Pass this note on to ^green;^white;. It has a very personal secret on it though, so don't read it yourself!", < "next" : "Next, we're going to need ^green;^white;'s ^orange;friendship^white;! Pass this note on to ^green;^white;. It has a very personal secret on it though, so don't read it yourself!" --- > "first" : { > "floran" : [ > "To begin, Floran needsss ^orange;'s friendship. Here is a ^orange;note ^white;Floran wantsss you to ^green;deliver to ^orange; ^white;to make friendsss. Don't read it yourssself or Floran will stab you.", > "Floran firssst needs trust of ^orange;. ^white;Floran will share persssonal secret with them. ^green;Deliver this ^orange;note^green; to them^white; for Floran." > ], > "glitch" : [ > "Confident. I firmly believe that by sharing my one secret with ^orange;,^white; a friendly relationship could be initiated. ^green;Would you deliver this ^orange;note^green; containing my secret to them?^white; I have to ask you to refrain from reading it yourself. ", > "Eager. I wish to initiate a friendship with ^orange;.^white; The most efficient way to do this is to share a personal secret with them. ^green;Could you deliver this ^orange;note^green; to them for me?" > ], > "default" : [ > "To begin with, I'd like you to ^green;deliver this ^orange;note^green; to ^orange;.^white; It contains one of the many secrets that I keep. I'm hoping that, by sharing this secret with someone, they might want to become my friend. ", > "I'd like to begin by establishing a new friendship in town. ^orange;^white; has always seemed like a friendly person. Would you ^green;deliver this ^orange;note^white; to them from me?^white; It contains private information which will surely make them warm to me." > ] > }, > "next" : { > "floran" : [ > "Floran pleased, but now Floran needs a favour from ^orange;. , ^white;so that ^orange; ^white;becomesss Floran's friend.", > "Now Floran needss ^orange;'s ], > "glitch" : [ > "Thoughtful. In order to initiate a new friendship, often a private secret is shared. I must ask you to ^green;hand this ^orange;note^green; to ^orange;.^white; It contains none other than my darkest secret.", > "Friendly. Next, I need to befriend ^orange;.^white; Sharing a secret with them is the perfect way to build trust. ^green;Could you deliver this ^orange;note^green; to them?^white; Don't read it!" > ], > "default" : [ > "For tactical reasons, I've made the decision to share a secret with ^orange;.^white; Sharing a secret is a common way to start a friendship and having a friend is always useful. Please, would you ^green;deliver this ^orange;note^green; containing my secret?", > "^orange;^white; is a friendly face around town. I think it would be a good idea to befriend them. I've prepared this ^orange;note^white; with some personal information. ^green;If you deliver it to them, I'm positive they will like me. " > ] > }, > "last" : { > "floran" : [ > "At lassst! Now Floran can become friendsss with ^orange;. Here is Floran's darkest sssecret in a ^orange;letter.^white; Floran wantss you to ^green;give this to ^orange; ^white;to sssecure friendship.", > "Finally, Floran will win ^orange;'s ^white;favour by growing perssonal bond. Floran has a pretend secret in this ^orange;letter^white; to ssshare with them. ^green;Pleassse take it for me." > ], > "glitch" : [ > "Eager. At last we have arrived at the final part of our program. ^green;Please take this ^orange;note.^white; On it I have cited a very intimate secret of mine that I wish to ^green;share only with ^orange;'s^green; eyes. I trust you to deliver it unopened. ", > "Excited. Finally, I wish to form a bond of eternal friendship with ^orange;.^white; To do this, ^green;I need you to deliver this personal secret ^orange;note^green; to them.^white; Please do not read it!" > ], > "default" : [ > "It's time for me to initiate a friendship with ^orange;.^white; Sometimes when people make friends, they share secrets. I've written down one of my secrets on this ^orange;note,^white; and I'd like you to ^green;deliver it to ^orange;. ", > "I've prepared this ^orange;note^white; with a sensitive message. It's one of my personal secrets. If you deliver it to ^orange;^white; I'm hoping that a friendship will be initiated. ^green;Please take it to them^white; without reading it yourself!" > ] > }, > "default" : { > "floran" : [ > "Floran has an idea. Floran wrote a very perssonal sssecret on this ^orange;paper^white; for you to ^green;give to ^orange;.^white; Sharing secretss is a good way to make new friends.", > "Floran thinkss ^orange;'s ^white;friendssship could be useful one day. ^green;Take this private sssecret ^orange;letter^green; to them^white; from Floran so they trust Floran like true friend." > ], > "glitch" : [ > "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? ", > "Amicable. I must earn ^orange;'s^white; trust. Could you ^green;deliver this extremely personal secret ^orange;note^green; to them for me?^white; Sharing secrets is the fastest way to earn trust!" > ], > "default" : [ > "I always thought that ^orange;^white; was really cool, but I'm too intimidated to initiate contact. I've noted down one of my secrets on this ^orange;letter. ^white;Will you ^green;deliver it to them for me?^white; I'm hoping that sharing a secret will encourage a friendship. ", > "I've wanted to befriend ^orange;^white; for a long time. I think today is the day! Please ^green;deliver this ^orange;note^white; to them. It contains one of my many secrets, and I think it will kickstart a great friendship." > ] > } 12,14c80,135 < "default" : "Great job! You've earned me ^green;^white;'s ^orange;friendship^white;.", < "first" : "Great job! ^green;^white; is now our ^orange;friend^white;!", < "next" : "Great job! ^green;^white; is now our ^orange;friend^white;!" --- > "first" : { > "floran" : [ > "Did you peek at Floran's sssecret? Perhaps will do Floran a favour now...", > "Successs! is now trussted contact. Thisss will prove useful." > ], > "glitch" : [ > "Relieved. I never doubted our plan for a moment. Still, I am delighted to see you return with such good news. I thank you. ", > "Overjoyed. You delivered the note! and I will no doubt be close acquaintances. I'm sure this friendship will be helpful." > ], > "default" : [ > "We did it! has accepted my friendship. What a wonderful feeling. ", > "I'm pleased! With a new friend in town things will be much easier. " > ] > }, > "next" : { > "floran" : [ > "Floran hearsss ssseeks a way to please Floran. Sharing sssecrets worked. Floran thanksss you.", > "Floran's sssocial skills have won Floran another loyal friend! Floran can now use this connection." > ], > "glitch" : [ > "Appreciative. Thank you for delivering the note! I trust that you wouldn't have read such a personal document.", > "Pleased. 's reply means we're almost certainly friends! This friendship will be most beneficial. Thanks for your help." > ], > "default" : [ > "Good job! I expect things will go smoothly from here on thanks to having a new friend in town. ", > "Friendship aquired! You did great!" > ] > }, > "last" : { > "floran" : [ > "Floran thanksss you for sssecuring 's friendship!", > "Floran has confession - Floran's secret letter wasssn't pretend. I hope you didn't read it. Thankss for your help!" > ], > "glitch" : [ > "Excited. I now have a friend to call my own! This is a wonderful day. Thank you.", > "Nervous. All I have left to do is to give this note containing a personal secret - Such a gesture of trust will convince them to be my friend! Can you deliver this to them for me?" > ], > "default" : [ > "Success! must have been able to relate to my secret. It feels great to have a new friend. ", > "A brand new friendship has blossomed. What a lovely outcome. I'm sure feels the same!" > ] > }, > "default" : { > "floran" : [ > "Floran pleased. will make a sssatisfactory friend.", > "Thankss! Now is friendsss with Floran. Friendssships are useful for tactical reasssons." > ], > "glitch" : [ > "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!" > ], > "default" : [ > "Amazing! I feel like this is going to be the beginning of a meaningful friendship. Thank you!", > "We succeeded! I should probably go and make plans with my new friend straight away. Thank you!" > ] > } 16c137,142 < "failureText" : "I was unable to help ^green;^white; gain ^green;^white;'s ^orange;friendship^white;.", --- > "failureText" : [ > "I failed. will have to get by without 's friendship.", > "I was unable to form a closer friendship between and . Maybe it just wasn't meant to be.", > "I failed to help in their plan to form a friendship. Maybe they should learn to be more independant?", > "I was unable to help make a new friend. Perhaps this is something they should do on their own?" > ], 33,36c159,163 < "Dear , I secretly . Love ", < "Does anyone else ?", < " this is , I .", < "TOP SECRET: !" --- > "Hey , I secretly . From ", > " here, does anyone else ?", > " this is , I .", > "'s confession: I .", > "TOP SECRET: !" 41d167 < // First-person verbs 43,47c169,180 < "eat", < "lick", < "collect", < "like touching", < "worship" --- > "adore", > "stare at", > "dream about", > "want to draw", > "draw pictures of", > "like poking", > "smell", > "daydream about", > "sing to", > "write stories about", > "love", > "forget about" 50d182 < // Second-person verbs 52,56c184,211 < "eats", < "licks", < "collects", < "likes touching", < "worships" --- > "adores", > "stares at", > "dreams about", > "wants to draw", > "draws pictures of", > "likes poking", > "smells", > "daydreams about", > "sings to", > "writes stories about", > "loves", > "forgets about" > ], > "object1" : [ > "your face", > "you", > "myself", > "Poptops", > "snails", > "Gleaps", > "Pearlpeas", > "vegetables", > "computers", > "Crasberries", > "my toes", > "sleeping people", > "spaceships", > "rocks" 58,64c213,226 < "object" : [ < "power outlets", < "poop", < "turtles", < "paper", < "hair", < "metal" --- > "object2" : [ > "their own face", > "themselves", > "Poptops", > "snails", > "Gleaps", > "Pearlpeas", > "vegetables", > "computers", > "Crasberries", > "their toes", > "sleeping people", > "spaceships", > "rocks" 71c233,237 < "Eww you're gross... Let's hang out sometime!", --- > "I don't judge you. Let's hang out sometime!", > "Admitting that takes courage. I admire that!", > "We all have our quirks! We should talk more!", > "Your secret is safe with me! Let's catch up some time!", > "That's a bit weird, but I admire your honesty!", 73,74c239,241 < "Hahaha, sharing that was brave! You're cool :)", < "Uh, what? Maybe you can show me sometime..." --- > "Are you psychic?! So do I! We should hang out!", > "Hahaha, sharing that was brave! I respect that!", > "You're strange, but I like that. Let's be friends!" quests\generated\subquests\spread_rumors.questtemplate 3,4c3,20 < "title" : "^orange;Spread rumors about to ^white;", < "goalText" : "^orange; is friends with . I need to fix this.^white;\n\n", --- > "title" : [ > "Help spread rumours", > "'s rumour mill" > ], > "goalText" : { > "floran" : [ > "^cyan; ssseems like fun company. Let's replace their current besst friend.", > "^cyan;Floran wantss to befriend . Let's get rid of their current obnoxiouss friend! " > ], > "glitch" : [ > "^cyan;Jealous. should be friends with me, not .", > "^cyan;Resentful. I heard that 's been spreading rumours about me. I'd like to return the favour." > ], > "default" : [ > "^cyan;I'd like to befriend . Let's remove their other friend from the picture. ", > "^cyan;I'd like to become my friend instead of 's. I have a plan for how to accomplish this." > ] > }, 6,9c22,77 < "default" : "I've written some made-up rumors about ^green;^white; on this note. Could you deliver it to ^green;^white;? This will surely break ^green;^white;'s grip on ^green;^white;!", < "first" : "Firstly, we need ^green;^white;'s ^orange;friendship^white;. To do that, we'll have to break ^green;^white;'s grip on ^green;^white;.\n\nI've written some made-up rumors about ^green;^white; on this note. Could you deliver it to ^green;^white;? This will surely break ^green;^white;'s grip on ^green;^white;!", < "last" : "Finally, I've written some made-up rumors about ^green;^white; on this note. Could you deliver it to ^green;^white;? This will surely break ^green;^white;'s grip on ^green;^white;!", < "next" : "Next, we need ^green;^white;'s ^orange;friendship^white;. To do that, we'll have to break ^green;^white;'s grip on ^green;^white;.\n\nI've written some made-up rumors about ^green;^white; on this note. Could you deliver it to ^green;^white;? This will surely break ^green;^white;'s grip on ^green;^white;!" --- > "first" : { > "floran" : [ > "First Floran needs to befriend ^orange;^white;. Floran knowss how friendss are made. We need to make ssure they stop being friends with that pesssky ^orange;^white;! ^green;Deliver thiss ^orange;note^white; to ^orange;^white;. It describes the ugly truth about their so called friend.", > "To start, Floran needss to befriend lovely ^orange;^white;. Too bad they always spend time with ssstupid ^orange;^white;. Pleassse ^green;deliver this ^orange;note^green; to ^orange;^white;. It contains the truth about their so called friend. " > ], > "glitch" : [ > "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." > ], > "default" : [ > "I think and I would look good together as friends. They always hang out with the ugly though, so let's put a stop to that. ^green;Here's a ^orange;note^green; I want you to deliver to ^orange;^white; that will put them off seing their ugly friend again. Don't worry about what it says.", > "Let's start by befriending . First we have to make them stop seeing their lame friend. ^green;I've prepared this ^orange;note^green; that I want you to deliver to ^orange;^white; that outlines with my opinion of their boring friend. Please deliver it for me!" > ] > }, > "next" : { > "floran" : [ > "Now Floran needs ^orange;^white; like usss. Floran has seen them friendly with ^orange;^white;. Put a ssstop to this so they only friendly with Floran! ^green;Deliver thiss ^orange;letter^green; to ^white;. This will sssurely make them realise what a loser their friend iss.", > "It's time for Floran to befriend ^orange;^white;. We need to ssstop them from seeing ^orange;^white;. This ^orange;note^white; Floran wrote containsss information that will make ^orange;^white; realise that Floran is better friend! ^green;Please deliver it!" > ], > "glitch" : [ > "Manipulative. Now I need you to ^green;give this ^orange;note^green; to ^orange;^white; to persuade them to stop talking to ^orange;^white;. What? No, everything it says is definitely completely true.", > "Vindictive. Once you ^green;give ^orange; ^green;this rumour about ^orange;, ^white;they won't be able to resist telling everyone!" > ], > "default" : [ > "I've seen ^orange;^white; hang out with that stupid a lot recently. I want them to hang out with me! ^green;Deliver this ^orange;note^green; to them^white; and they will realise what a waste of time is. ", > "I want to stop being friendly with and become my friend instead. Here's a ^orange;note^white; I wrote with the truth about . ^green;Please, deliver it to ^orange;^white; for me!" > ] > }, > "last" : { > "floran" : [ > "^orange;^white; and ^orange;^white; have been friends for long time. Now ^orange;^white; will finally become Floran's friend inssstead! Floran's plan is for you to ^green;tell ^orange;^green; how terrible their friend iss.^white; Floran already prepared this ^orange;note^white; for^green; you to deliver.", > "Now for the finale! Floran wantss to befriend ^orange;^white;. We need to stop them from conssstantly seeing ^orange;^white;. If you ^green;deliver thiss ^orange;letter^white; to ^orange;^white; they will become Floran's friend insstead. Floran iss sure of thisss." > ], > "glitch" : [ > "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...", > "Venomous. Finally, ^green;hand this rumour about ^orange; ^green;to ^orange;. ^white;It's a little far fetched, but there's no smoke without fire." > ], > "default" : [ > "Finally, let's make realise that I'm better friend material than . ^green;Show them this ^orange;note^green; that I've written^white; about and things will become obvious to them!", > "Here's a ^orange;note^white; I wrote about . Everyone knows they're a bore, and still ^orange;^white; hangs out with them every day. It's my time to be ^green;'s friend though! ^green;Please deliver this note to them." > ] > }, > "default" : { > "floran" : [ > "Floran hass great plan to befriend ^orange;^white;. However, Floran's future friend is alwayss seen with ^orange;^white;. ^green;You need to tell ^orange;^white; how nasssty ^orange;^white; is! Please ^green;deliver this ^orange;note^white; that Floran prepared.", > "Here is a ^orange;note ^green;Floran needss you to deliver to ^orange;.^white; ^orange;Note^white; containss the truth about their friend ^orange;^white;Here is a ^orange;note ^green;Floran needss you to deliver to ^orange;^white;. Note containss the truth about their friend ^orange;. As sssoon as they read it ^orange; will realise that Floran is better friend!. As sssoon as they read it ^orange; will realise that Floran is better friend!" > ], > "glitch" : [ > "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.", > "Malicious. I'll teach ^orange;^white; a lesson they won't soon forget. ^green;Give this rumour to ^orange;^white;, then we can sit back and watch the fireworks." > ], > "default" : [ > "I wish ^orange;^white; would become my friend instead of 's. I've prepared this ^orange;note^white; for them that will explain the truth about . It will make them realise I'm much better friend material! ^green;Please deliver it to them for me.", > "I've wanted to be 's friend for ages, but they only hang out with . ^green;I've prepared this ^orange;note^green; for you to deliver to ^orange;^white;. It will tell them the truth about their friend. " > ] > } 12,14c80,135 < "default" : "Great job! You've earned me ^green;^white;'s ^orange;friendship^white;.", < "first" : "Great job! ^green;^white; is now our ^orange;friend^white;!", < "next" : "Great job! ^green;^white; is now our ^orange;friend^white;!" --- > "first" : { > "floran" : [ > "Good job! Now Floran's and 's friendssship will truly blossom. ", > "We did it! Floran iss happy about new friendsship. Thank you!" > ], > "glitch" : [ > "Impressed. looked horrified when they read the message! Not that I was hiding and watching them or anything. Anyway, there's work to do yet!", > "Satisfied. That was great! bought it immediately. I can hear the rumour about spreading already." > ], > "default" : [ > "Wonderful news! I've made a fashionable friend, and lost a friend. I can feel good things coming. ", > "You did it. Friends are great assets and I'm sure will prove useful to us in the future. " > ] > }, > "next" : { > "floran" : [ > "That went well! With Floran's new found friend the next ssstep will be much easier.", > "Thank you! Floran will have a lot of fun with thisss new friend of oursss. " > ], > "glitch" : [ > "Pleased. I bet will be spending much less time around now, which definitely means they'll have more time for me. There's something else I need you to do...", > "Amused. It's safe to say won't be hanging around much longer! " > ], > "default" : [ > " abandoned and accepted my friendship! A new friend will certainly come in handy. ", > "Thank you for delivering the note! and I are now officially friends. " > ] > }, > "last" : { > "floran" : [ > "Floran is pleasssed that plan is successful. Floran is ssssure that is thankful that we told them the truth about .", > "Floran hass aquired a new friend! Thiss is a lovely day for Floran!" > ], > "glitch" : [ > "Satisfied. I've no doubt that and I will become good friends now that is out of the picture.", > "Delighted. That rumour fanned the flames magnificently! won't be spending much time with now." > ], > "default" : [ > "I'm excited about my new friend! Everyone knows is bad company anyway! Thanks for your hard work.", > " is out of the picture, and now me and are friends! This friendship will no doubt be useful - thanks for making it happen." > ] > }, > "default" : { > "floran" : [ > "Success! Floran is happy that will now be more friendly with usss. Thank you, friend!", > "Thiss turned out just like Floran wanted! Floran iss happy with new friend." > ], > "glitch" : [ > "Appreciative. I have no doubt that with out of the way, and I will become great friends!", > "Pleased. That worked better than I expected. will think twice before spreading rumours again! was horrified!" > ], > "default" : [ > "They accepted my friendship! And who wouldn't? Thank you for helping me out!", > "The plan worked! is now my friend - and is out of the picture. Thanks for helping make this happen!" > ] > } 16c137,140 < "failureText" : "I was unable to bring ^green;^white; around to the idea of leaving ^green;^white; and becoming ^green;^white;'s friend instead.", --- > "failureText" : [ > "I didn't help in their attempt to sabotage 's friendship. It wasn't a very nice plan, though.", > "I was unable to assist 's plot to ruin 's friendship. It was a mean plan, so I won't lose sleep over it." > ], quests\generated\subquests\steal.questtemplate 3d2 < "title" : "^orange;Steal 's ^white;", 5,8c4,31 < "default" : "Let's steal 's ^green;^white;! Will you do that for me?", < "first" : "First things first, ^green;^white; has something we're going to need to... 'Borrow', let's say. Will you take 's ^green;^white;?", < "next" : "Next, we're going to need to... Ahem, 'borrow', 's ^green;^white;. Take it without noticing!", < "last" : "Finally, let's steal 's ^green;^white;! Bring it to me." --- > "first" : { > "floran" : [ > "Floran's first tassk for you is a sssneaky one. ^orange;^white; has a nice ^orange;^white; in their house and Floran wants you to ^green;borrow it,^white; if you know what Floran means...", > "Let's get the firssst step out of the way. Floran needsss a particular thing from neighbour ^orange;'s^white; houssse. Floran already asssked but was not given the thing. Will you ^green;ssssneak in and get a shiny ^orange;^white; for Floran? " > ], > "glitch" : [ > "Hesitant. IΓÇÖm in need of a certain object, specifically, ^orange;ΓÇÖs . ^white;Would you ^green;visit their home and... Acquire it for me?^white; I wouldnΓÇÖt ask if it wasnΓÇÖt important.", > "Insensitive. Priority one, I need you to ^green;obtain ^orange;ΓÇÖs . ^white;We can make far better use of it, but they wonΓÇÖt just hand it over. ^green;YouΓÇÖll have to take it." > ], > "default" : [ > "IΓÇÖm in need of a certain item, and I know that ^orange;^white; keeps one in their home. I need you to ^green;sneak in and remove their ^orange; ^white;while they're not looking.", > "First, some petty thievery. I need you to ^green;obtain ^orange;ΓÇÖs . ^green;Go grab it from their house^white; but make sure nobody sees you." > ] > }, > "default" : { > "floran" : [ > "Next job isss a vital part of Floransss plan. Floran needs you to ^green;visssit ^orange;'s ^green;house to borrow the ^orange;^white; that we need. Bessst not let ^orange; ^white;know about thisss part of the plan. ", > "This step requires sssneaky skills. Floran has to asssk you to ^green;visit ^orange;'s ^green;house to retrieve one ^orange;. ^white;Floran would not ask for thisss if there was any other way, of courssse." > ], > "glitch" : [ > "Demanding. Now I require a certain object. Specifically the ^orange;^green; in ^orange;ΓÇÖs^green; home.^white; YouΓÇÖre going to have to ^green;acquire it for me. ", > "Apprehensive. IΓÇÖm afraid this next part requires something that does not belong to us. You need to ^green;obtain the ^orange; ^green;located in ^orange;ΓÇÖs ^green;home. ^white;Just make sure you donΓÇÖt get caught." > ], > "default" : [ > "How do you feel about burglary? I'd like you to ^green;aquire the ^orange;^green; in ^orange;ΓÇÖs^green; home for me. ", > "This next part requires something that isnΓÇÖt ours to use. We are in need of the ^orange; ^green;located in ^orange;ΓÇÖs^green; home. Could you get it?" > ] > } 11,13c34,61 < "default" : "Haha, you go it! will never know!", < "first" : "Haha, you got it! This is going to be very useful. Talk to me again to continue.", < "next" : "Haha, you got it! This is going to be very useful. Talk to me again to continue." --- > "first" : { > "floran" : [ > "Floran knew you could do it! Clearly no job isss beneath you. Floran appreciates thisss attitude.", > "You succeeded! Your sneaking sskills are far better than Floran's negotiating skills. " > ], > "glitch" : [ > "Anxious. You actually got the from ? I thought maybe youΓÇÖd get cold feet. Keep hold of it for the time being, and make sure you donΓÇÖt lose it!", > "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." > ], > "default" : [ > "Nice work, you made it look easy! Keep hold of that for the time being, and make sure you donΓÇÖt lose it!", > "Yes, this is the I was looking for. Did you make sure nobody saw you take it?" > ] > }, > "default" : { > "floran" : [ > "This is just what we needed! Thiss might not be the bessst way of finding things, but the goal jussstifiees the means, right?", > "Amazing! Not that Floran didn't expect you to sssucceed. This iss necessary for what comes next." > ], > "glitch" : [ > "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.", > "Panicked. DonΓÇÖt just hand me that ! You think wouldnΓÇÖt put two and two together? hold on to it for now. " > ], > "default" : [ > "Wow, I bet you'd take anything that wasn't nailed down! I donΓÇÖt want to get caught if comes looking for that so hold onto it for now.", > "Don't wave that around near me! We don't want to come looking for it." > ] > } 15d62 < "failureText" : "I failed to steal 's ^green;^white;.", quests\scripts\generated\protect.lua 5a6 > self.questClient:setMessageHandler("enemiesSpawned", onEnemiesSpawned) 11a13,24 > end > > function onEnemiesSpawned(_, _, npcs) > local count = 0 > local indicators = {"target"} > for _,npcParam in pairs(npcs) do > local paramName = "enemy"..tostring(count) > quest.setParameter(paramName, npcParam) > indicators[#indicators+1] = paramName > count = count + 1 > end > setIndicators(indicators) quests\tutorial\tutorial1.questtemplate 4c4 < "text" : "The first thing I should do is check the^orange; ship's locker^white;. ^green;At the very least I'll need a^orange; flashlight^white;, but there should be some other supplies in there too.", --- > "text" : "The first thing I should do is ^green;check the^orange; ship's locker^white;. At the very least ^green;I'll need a^orange; flashlight^white;, but there should be some other supplies in there too.", scripts\util.lua 48,49c48,50 < function util.round(value) < return math.floor(value + 0.5) --- > function util.round(num, idp) > local mult = 10^(idp or 0) > return math.floor(num * mult + 0.5) / mult 433a435,438 > function util.seedTime() > return math.floor((os.time() + (os.clock() % 1)) * 1000) > end > 519c524 < end --- > end \ No newline at end of file scripts\projectiles\chainbullet.lua 61c61 < return world.magnitude(movement.position(), world.entityPosition(a)) < world.magnitude(movement.position(), world.entityPosition(b)) --- > return world.magnitude(mcontroller.position(), world.entityPosition(a)) < world.magnitude(mcontroller.position(), world.entityPosition(b)) 67,68c67,68 < local direction = vec2.norm(world.distance(world.entityPosition(newTarget), movement.position())) < movement.setVelocity(vec2.mul(direction, self.seekSpeed)) --- > local direction = vec2.norm(world.distance(world.entityPosition(newTarget), mcontroller.position())) > mcontroller.setVelocity(vec2.mul(direction, self.seekSpeed)) scripts\quest\manager\spawn_entities.lua 23c23 < self.questManager:sendToPlayer(player, "enemiesDead", self.questId) --- > self.questManager:sendToPlayer(player, "enemiesDead") 32c32 < assert(rangeX > 0) --- > assert(rangeX >= 0) 37a38,57 > local function spawnEntity(position, spawnConfig) > local parameters = shallowCopy(spawnConfig.parameters) > parameters.level = (parameters.level or world.threatLevel()) + (spawnConfig.levelBoost or 0) > > if spawnConfig.entityType == "monster" then > return world.spawnMonster(spawnConfig.typeName, position, parameters) > else > assert(spawnConfig.entityType == "npc") > return world.spawnNpc(position, spawnConfig.species, spawnConfig.typeName, parameters.level, nil, parameters) > end > end > > function SpawnEntities:enemyParamName() > local name = self.config.name > if self.config.spawnParameter then > name = self.questParameters[self.config.spawnParameter].name or name > end > return name > end > 53,57c73,84 < local entityId < if self.config.entityType == "monster" then < local parameters = shallowCopy(self.config.parameters) < parameters.level = parameters.level or world.threatLevel() < entityId = world.spawnMonster(self.config.typeName, position, parameters) --- > local entitySpawnConfig = { position = position } > if self.config.spawnParameter then > local param = self.questParameters[self.config.spawnParameter] > if param.type == "npcType" then > entitySpawnConfig.entityType = "npc" > else > assert(param.type == "monsterType") > entitySpawnConfig.entityType = "monster" > end > entitySpawnConfig.species = param.species > entitySpawnConfig.typeName = param.typeName > entitySpawnConfig.parameters = param.parameters or {} 59,60c86,89 < assert(self.config.entityType == "npc") < entityId = world.spawnNpc(position, self.config.species, self.config.typeName, world.threatLevel(), nil, self.config.parameters) --- > entitySpawnConfig.entityType = self.config.entityType > entitySpawnConfig.species = self.config.species > entitySpawnConfig.typeName = self.config.typeName > entitySpawnConfig.parameters = self.config.parameters or {} 61a91,95 > if self.config.persistent then > entitySpawnConfig.parameters.persistent = true > end > entitySpawnConfig.levelBoost = self.config.levelBoost > local entityId = spawnEntity(position, entitySpawnConfig) 66a101,109 > if self.config.drops then > local drops = self.config.drops > if type(drops) == "string" then > drops = self.questParameters[drops].items > end > assert(drops ~= nil) > world.callScriptedEntity(entityId, "addDrops", drops) > end > 69c112 < return uniqueId --- > return uniqueId, entityId 74d116 < if self.data.enemies then return end 76,79c118,139 < self.data.enemies = {} < for i = 1, (self.config.spawnCount or 1) do < local uniqueId = self:spawnUnique() < self.data.enemies[uniqueId] = true --- > local entityIds = {} > if not self.data.enemies then > self.data.enemies = {} > for i = 1, (self.config.spawnCount or 1) do > local uniqueId, entityId = self:spawnUnique() > self.data.enemies[uniqueId] = true > entityIds[uniqueId] = entityId > end > end > > local enemyParams = {} > for uniqueId,_ in pairs(self.data.enemies) do > local entityId = entityIds[uniqueId] or world.loadUniqueEntity(uniqueId) > if world.entityExists(entityId) then > local enemyParam = { > type = "entity", > uniqueId = uniqueId, > name = self:enemyParamName() or world.entityName(entityId), > portrait = world.entityPortrait(entityId, "full") > } > enemyParams[#enemyParams+1] = enemyParam > end 80a141 > self.questManager:sendToPlayer(player, "enemiesSpawned", enemyParams) scripts\questgen\context.lua 20,23c20,22 < -- FIXME don't hard-code the size of this poly, make it configurable to allow < -- spawning larger monsters < local function makeSpawnPoly(x,y) < return {{x-2, y}, {x+2, y}, {x+2, y+4}, {x-2, y+4}} --- > local function makeSpawnPoly(x, y, rectWidth, rectHeight) > assert(rectWidth and rectHeight) > return {{x-rectWidth/2, y}, {x+rectWidth/2, y}, {x+rectWidth/2, y+rectHeight}, {x-rectWidth/2, y+rectHeight}} 26,27c25,27 < local function makeSpawnRect(x,y) < return {x-2, y, x+2, y+4} --- > local function makeSpawnRect(x, y, rectWidth, rectHeight) > assert(rectWidth and rectHeight) > return {x-rectWidth/2, y, x+rectWidth/2, y+rectHeight} 30,32c30,32 < local function canSpawnAt(x,y) < local collidesHere = world.rectTileCollision(makeSpawnRect(x,y), {"Block", "Null"}) < local collidesBelow = world.rectTileCollision(makeSpawnRect(x,y+1), {"Block", "Null", "Platform", "Dynamic"}) --- > local function canSpawnAt(x, y, rectWidth, rectHeight) > local collidesHere = world.rectTileCollision(makeSpawnRect(x, y, rectWidth, rectHeight), {"Block", "Null"}) > local collidesBelow = world.rectTileCollision(makeSpawnRect(x, y-1, rectWidth, rectHeight), {"Block", "Null", "Platform", "Dynamic"}) 36c36 < local function findSpawnPointNear(x, approximateY) --- > local function findSpawnPointNear(x, approximateY, rectWidth, rectHeight) 39c39 < if canSpawnAt(x, approximateY+dy) then --- > if canSpawnAt(x, approximateY+dy, rectWidth, rectHeight) then 42c42 < if canSpawnAt(x, approximateY-dy) then --- > if canSpawnAt(x, approximateY-dy, rectWidth, rectHeight) then 49c49 < function QuestContext:spawnPoints() --- > function QuestContext:spawnPoints(rectWidth, rectHeight) 76c76 < local spawnPoint = findSpawnPointNear(minPosition[1] - spawnDistance, minPosition[2]) --- > local spawnPoint = findSpawnPointNear(minPosition[1] - spawnDistance, minPosition[2], rectWidth, rectHeight) 82c82 < local spawnPoint = findSpawnPointNear(maxPosition[1] + spawnDistance, maxPosition[2]) --- > local spawnPoint = findSpawnPointNear(maxPosition[1] + spawnDistance, maxPosition[2], rectWidth, rectHeight) 88c88,89 < return QuestPredicands.Location.new(makeSpawnPoly(position[1], position[2])) --- > local poly = makeSpawnPoly(position[1], position[2], rectWidth, rectHeight) > return QuestPredicands.Location.new(poly) scripts\questgen\generator.lua 358a359,379 > [QuestPredicands.NpcType] = function (npcType) > return { > type = "npcType", > name = npcType.name, > species = npcType.species, > typeName = npcType.typeName, > parameters = npcType.parameters, > portrait = npcType:portrait() > } > end, > > [QuestPredicands.MonsterType] = function (monsterType) > return { > type = "monsterType", > name = monsterType.name, > typeName = monsterType.typeName, > parameters = monsterType.parameters, > portrait = monsterType:portrait() > } > end, > 360c381,388 < error("Invalid quest parameter: "..tostring(value)) --- > if type(value) == "string" then > return { > type = "noDetail", > name = value > } > else > error("Invalid quest parameter: "..tostring(value)) > end 442c470,471 < parameters = parameters --- > parameters = parameters, > seed = math.random(0, math.maxinteger) scripts\questgen\predicands.lua 261a262,286 > > QuestPredicands.NpcType = createClass("NpcType") > > function QuestPredicands.NpcType:init(json) > self.name = json.name > self.species = json.species > self.typeName = json.typeName > self.parameters = json.parameters or {} > end > > function QuestPredicands.NpcType:portrait() > return root.npcPortrait("full", self.species, self.typeName, self.parameters.level or 1, self.parameters.seed or math.random(0, math.maxinteger), self.parameters) > end > > QuestPredicands.MonsterType = createClass("MonsterType") > > function QuestPredicands.MonsterType:init(json) > self.name = json.name > self.typeName = json.typeName > self.parameters = json.parameters or {} > end > > function QuestPredicands.MonsterType:portrait() > return root.monsterPortrait(self.typeName, self.parameters) > end scripts\questgen\relations.lua 11a12,13 > local NpcType = QuestPredicands.NpcType > local MonsterType = QuestPredicands.MonsterType 755c757 < [case(1, Location)] = function (self, location) --- > [case(1, Location, NonNil, NonNil)] = function (self, location, rectWidth, rectHeight) 757c759 < return {{location}} --- > return {{location, rectWidth, rectHeight}} 762c764 < [case(2, Nil)] = function (self) --- > [case(2, Nil, NonNil, NonNil)] = function (self, _, rectWidth, rectHeight) 767,768c769,770 < return util.map(self.context:spawnPoints(), function (spawnPoint) < return {spawnPoint} --- > return util.map(self.context:spawnPoints(rectWidth, rectHeight), function (spawnPoint) > return {spawnPoint, rectWidth, rectHeight} 865,872c867,868 < query = Relation.unpackedQuery { < [case(0, Item, Item)] = function (self, a, b) < self:loadPool() < if xor(self.negated, (self.leftToRight[a.itemName] or {})[b.itemName]) then < return {{a,b}} < end < return Relation.empty < end, --- > leftMatcher = Item, > rightMatcher = Item, 874,881c870,876 < [case(1, Item, Nil)] = function (self, a) < self:loadPool() < local results = {} < for itemName,_ in pairs(self.leftToRight[a.itemName] or {}) do < results[#results+1] = {a, Item.new(itemName)} < end < return results < end, --- > -- Convert left/right predicands to a Lua value that can be used as a table key > leftKey = function (self, left) > return left.itemName > end, > rightKey = function (self, right) > return right.itemName > end, 883,890c878,884 < [case(2, Nil, Item)] = function (self, _, b) < self:loadPool() < local results = {} < for itemName,_ in pairs(self.rightToLeft[b.itemName] or {}) do < results[#results+1] = {Item.new(itemName), b} < end < return results < end, --- > -- Convert Json values / table keys to instances of the left/right types > makeLeft = function (self, itemName) > return Item.new(itemName) > end, > makeRight = function (self, itemName) > return Item.new(itemName) > end, 892,895c886,919 < [case(3, Nil, Nil)] = function (self) < self:loadPool() < return self.both < end, --- > query = function (self) > self:loadPool() > > return self:unpackPredicands { > [case(0, self.leftMatcher, self.rightMatcher)] = function (self, left, right) > if xor(self.negated, (self.leftToRight[self:leftKey(left)] or {})[self:rightKey(right)]) then > return {{a,b}} > end > return Relation.empty > end, > > [case(1, self.leftMatcher, Nil)] = function (self, left) > local results = {} > for rightKey,_ in pairs(self.leftToRight[self:leftKey(left)] or {}) do > results[#results+1] = {left, self:makeRight(rightKey)} > end > return results > end, > > [case(2, Nil, self.rightMatcher)] = function (self, _, right) > local results = {} > for leftKey,_ in pairs(self.rightToLeft[self:rightKey(right)] or {}) do > results[#results+1] = {self:makeLeft(leftKey), right} > end > return results > end, > > [case(3, Nil, Nil)] = function (self) > return self.both > end, > > default = Relation.empty > } > end, 897,899d920 < default = Relation.empty < }, < 907,915c928,938 < local first, second = table.unpack(row) < assert(type(first) == "string" and type(second) == "string") < local firstItem = Item.new(first) < local secondItem = Item.new(second) < pool.both[#pool.both+1] = {firstItem, secondItem} < pool.leftToRight[first] = pool.leftToRight[first] or {} < pool.leftToRight[first][second] = true < pool.rightToLeft[second] = pool.rightToLeft[second] or {} < pool.rightToLeft[second][first] = true --- > local leftJson, rightJson = table.unpack(row) > assert(type(leftJson) == "string" and type(rightJson) == "string") > local left = self:makeLeft(leftJson) > local right = self:makeRight(rightJson) > local leftKey = self:leftKey(left) > local rightKey = self:rightKey(right) > pool.both[#pool.both+1] = {left, right} > pool.leftToRight[leftKey] = pool.leftToRight[leftKey] or {} > pool.leftToRight[leftKey][rightKey] = true > pool.rightToLeft[rightKey] = pool.rightToLeft[rightKey] or {} > pool.rightToLeft[rightKey][leftKey] = true 923,931c946,947 < PoolRelations.ItemListPoolRelation = defineSubclass(Relation, "ItemListPoolRelation") { < query = Relation.unpackedQuery { < [case(1, ItemList)] = function (self, itemList) < self:loadPool() < if xor(self.negated, self:poolContains(itemList)) then < return {{itemList}} < end < return Relation.empty < end, --- > PoolRelations.DungeonItemPoolRelation = defineSubclass(PoolRelations.ItemPoolBinaryRelation, "DungeonItemPoolRelation") { > leftMatcher = NonNil, 933,939c949,951 < [case(2, Nil)] = function (self) < if self.negated then return Relation.some end < self:loadPool() < return util.map(self.itemLists, function (itemList) < return {itemList} < end) < end, --- > leftKey = function (self, dungeonName) > return dungeonName > end, 941,942c953,984 < default = Relation.empty < }, --- > makeLeft = function (self, dungeonName) > return dungeonName > end > } > > local UnaryPoolRelation = defineSubclass(Relation, "UnaryPoolRelation") { > elementMatcher = NonNil, > > makeElement = function (self, json) > return json > end, > > query = function (self) > self:loadPool() > return self:unpackPredicands { > [case(1, self.elementMatcher)] = function (self, element) > if xor(self.negated, self:poolContains(element)) then > return {{element}} > end > return Relation.empty > end, > > [case(2, Nil)] = function (self) > if self.negated then return Relation.some end > return util.map(self.elements, function (element) > return {element} > end) > end, > > default = Relation.empty > } > end, 945c987 < if self.itemLists then return end --- > if self.elements then return end 947,956c989,992 < if not pool.itemLists then pool.itemLists = {} end < if not pool.itemListSet then pool.itemListSet = {} end < local itemList = {} < for _,itemName in ipairs(row) do < itemList[itemName] = (itemList[itemName] or 0) + 1 < end < itemList = ItemList.new(itemList) < itemList.generatedBy = self.name < pool.itemLists[#pool.itemLists+1] = itemList < pool.itemListSet[itemList] = true --- > if not pool.elements then pool.elements = {} end > local element = self:makeElement(row) > element.generatedBy = self.name > pool.elements[#pool.elements+1] = element 958,959c994 < self.itemLists = pool.itemLists < self.itemListSet = pool.itemListSet --- > self.elements = pool.elements 962,963c997,1026 < poolContains = function (self, itemList) < return itemList.generatedBy == self.name --- > poolContains = function (self, element) > return element.generatedBy == self.name > end > } > > PoolRelations.ItemListPoolRelation = defineSubclass(UnaryPoolRelation, "ItemListPoolRelation") { > elementMatcher = ItemList, > > makeElement = function (self, json) > local itemList = {} > for _,itemName in ipairs(json) do > itemList[itemName] = (itemList[itemName] or 0) + 1 > end > return ItemList.new(itemList) > end > } > > PoolRelations.NpcTypePoolRelation = defineSubclass(UnaryPoolRelation, "NpcTypePoolRelation") { > elementMatcher = NpcType, > > makeElement = function (self, json) > return NpcType.new(json) > end > } > > PoolRelations.MonsterTypePoolRelation = defineSubclass(UnaryPoolRelation, "MonsterTypePoolRelation") { > elementMatcher = MonsterType, > > makeElement = function (self, json) > return MonsterType.new(json) vehicles\hoverbike\default.frames 8,9c8,9 < [ "fall.1", "fall.2", "idle.1" ], < [ "jump.1", "jump.2" ] --- > [ "fall.1", "fall.2", "idle" ], > [ "jump.1", "jump.2", "broken" ] vehicles\hoverbike\hoverbike.animation 5c5 < "default" : "move", --- > "default" : "idle", 6a7,8 > "idle" : {}, > 16c18,19 < "mode" : "end", --- > "mode" : "transition", > "transition" : "fall", 25,26c28,31 < "mode" : "end" < } --- > "mode" : "loop" > }, > > "broken" : {} 40a46,55 > "idle" : { > "properties" : { > "image" : "hoverbikebackground.png:idle" > } > }, > "move" : { > "properties" : { > "image" : "hoverbikebackground.png:move." > } > }, 51c66 < "move" : { --- > "broken" : { 53c68 < "image" : "hoverbikebackground.png:move." --- > "image" : "hoverbikebackground.png:broken" 68a84,88 > "idle" : { > "properties" : { > "image" : "hoverbikeforeground.png:idle" > } > }, 81a102,106 > } > }, > "broken" : { > "properties" : { > "image" : "hoverbikeforeground.png:broken" vehicles\hoverbike\hoverbike.lua 13c13 < self.minimumJumpGroundDistance = vehicle.configParameter("minimumJumpGroundDistance") --- > self.nearGroundDistance = vehicle.configParameter("nearGroundDistance") 22a23,35 > self.protection = 50 > self.maxHealth = 100 > self.materialKind = "robotic" > > self.ownerKey = vehicle.configParameter("ownerKey") > vehicle.setPersistent(self.ownerKey) > message.setHandler("lock", function(_, _, ownerKey) > if (self.ownerKey and self.ownerKey == ownerKey) then > vehicle.destroy() > return true > end > end) > 25a39 > self.health = self.maxHealth 29a44,51 > local nearGround = groundDistance < self.nearGroundDistance > local entityInSeat = vehicle.entityLoungingIn("seat") > > if entityInSeat then > vehicle.setDamageTeam(world.entityDamageTeam(entityInSeat)) > else > vehicle.setDamageTeam({type = "indiscriminate"}) > end 31,33c53,55 < movement.resetParameters(self.movementSettings) < if vehicle.seatOccupied("seat") then < movement.applyParameters(self.occupiedMovementSettings) --- > mcontroller.resetParameters(self.movementSettings) > if entityInSeat then > mcontroller.applyParameters(self.occupiedMovementSettings) 35c57 < movement.approachYVelocity((self.hoverTargetDistance - groundDistance) * self.hoverVelocityFactor, self.hoverControlForce) --- > mcontroller.approachYVelocity((self.hoverTargetDistance - groundDistance) * self.hoverVelocityFactor, self.hoverControlForce) 40c62 < movement.approachXVelocity(-self.targetHorizontalVelocity, self.horizontalControlForce) --- > mcontroller.approachXVelocity(-self.targetHorizontalVelocity, self.horizontalControlForce) 45c67 < movement.approachXVelocity(self.targetHorizontalVelocity, self.horizontalControlForce) --- > mcontroller.approachXVelocity(self.targetHorizontalVelocity, self.horizontalControlForce) 72,73c94,95 < if self.jumpTimer <= 0 and vehicle.controlHeld("jump") and groundDistance < self.minimumJumpGroundDistance then < movement.setYVelocity(self.jumpVelocity) --- > if self.jumpTimer <= 0 and vehicle.controlHeld("jump") and nearGround then > mcontroller.setYVelocity(self.jumpVelocity) 74a97 > animator.setAnimationState("movement", "jump") 76a100,105 > else > if vehicle.controlHeld("left") or vehicle.controlHeld("right") then > animator.setAnimationState("movement", "move") > else > animator.setAnimationState("movement", "idle") > end 79c108 < movement.setRotation(self.angle) --- > mcontroller.setRotation(self.angle) 83a113,139 > > if self.health <= 0 then > vehicle.destroy() > end > end > > function applyDamage(damageRequest) > local damage = 0 > if damageRequest.damageType == "Damage" then > damage = damage + root.evalFunction2("protection", damageRequest.damage, self.protection) > elseif damageRequest.damageType == "IgnoresDef" then > damage = damage + damageRequest.damage > else > return > end > > self.health = self.health - damage > > return {{ > sourceEntityId = damageRequest.sourceEntityId, > targetEntityId = entity.id(), > position = mcontroller.position(), > damage = damage, > damageSourceKind = damageRequest.damageSourceKind, > targetMaterialKind = self.materialKind, > killed = self.health <= 0 > }} 90c146 < point = vec2.add(point, movement.position()) --- > point = vec2.add(point, mcontroller.position()) vehicles\hoverbike\hoverbike.vehicle 6a7 > "canBeHit" : true, 17c18,19 < "orientation" : "sit" --- > "orientation" : "sit", > "protective" : true 31c33 < "minimumJumpGroundDistance" : 5, --- > "nearGroundDistance" : 5,