FILES ----- [NEW] behaviors\monsters\modular\movement\crawlwander.behavior biomes\underground\underground0a.biome biomes\underground\underground0b.biome biomes\underground\underground0c.biome biomes\underground\underground0d.biome biomes\underground\underground1a.biome biomes\underground\underground1b.biome biomes\underground\underground1c.biome biomes\underground\underground1d.biome biomes\underground\underground3a.biome biomes\underground\underground3b.biome biomes\underground\underground3c.biome biomes\underground\underground3d.biome biomes\underground\underground5a.biome biomes\underground\underground5b.biome biomes\underground\underground5d.biome [NEW] damage\electric.damage damage\poison.damage dialog\quest.config [NEW] dungeons\microdungeons\underground\opennatural1.json [NEW] dungeons\microdungeons\underground\tunnelbackslopenatural1.json [NEW] dungeons\microdungeons\underground\tunnelforwardslopenatural1.json [NEW] dungeons\microdungeons\underground\tunnelnatural1.json [NEW] dungeons\microdungeons\underground\tunnelweakbackslopenatural1.json [NEW] dungeons\microdungeons\underground\tunnelweakforwardslopenatural1.json dungeons\microdungeons\underground\undergroundmicrodungeons.dungeon [NEW] effects\lightningthrowertrail.effectsource [NEW] interface\statuses\electric.png items\active\boxingglove\boxingglove.lua [NEW] items\active\shields\commonlargeshield.activeitem [NEW] items\active\shields\commonshieldnames.config [NEW] items\active\shields\commonsmallshield.activeitem [NEW] items\active\shields\eyeshield.activeitem [NEW] items\active\shields\shield.animation [NEW] items\active\shields\shield.lua [NEW] items\active\shields\images\default.frames [NEW] items\active\shields\images\eyepatch.png [NEW] items\active\shields\images\floran.png [NEW] items\active\shields\images\frost.png [NEW] items\active\shields\images\giantflower.png [NEW] items\active\shields\images\mushroom.png [NEW] items\active\shields\images\seashell.png [NEW] items\active\shields\images\largemetal\1.png [NEW] items\active\shields\images\largemetal\2.png [NEW] items\active\shields\images\largewood\1.png [NEW] items\active\shields\images\largewood\2.png [NEW] items\active\shields\images\smallmetal\1.png [NEW] items\active\shields\images\smallmetal\2.png [NEW] items\active\shields\images\smallwood\1.png [NEW] items\active\shields\images\smallwood\2.png [NEW] items\active\shields\images\smallwood\3.png [NEW] items\active\shields\images\smallwood\4.png [NEW] items\active\shields\images\uncommon\1.png [NEW] items\active\shields\images\uncommon\2.png [NEW] items\active\shields\images\uncommon\3.png [NEW] items\active\shields\images\uncommon\4.png [NEW] items\active\shields\images\uncommon\5.png items\active\weapons\weapon.lua items\active\weapons\melee\altabilities\broadsword\parry\parry.altability items\active\weapons\melee\altabilities\broadsword\parry\parry.lua items\active\weapons\melee\altabilities\generic\blinkslash\blinkslash.altability items\active\weapons\melee\altabilities\generic\blinkslash\blinkslash.lua items\active\weapons\melee\altabilities\spear\rocketspear\rocketspear.altability items\active\weapons\melee\altabilities\spear\rocketspear\rocketspear.lua items\active\weapons\melee\axe\axe.animation items\active\weapons\melee\broadsword\broadsword.animation 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\dagger.animation items\active\weapons\melee\hammer\hammer.animation items\active\weapons\melee\hammer\uncommonhammer.activeitem items\active\weapons\melee\shortsword\shortsword.animation items\active\weapons\melee\spear\spear.animation items\active\weapons\melee\spear\uncommonspear.activeitem items\active\weapons\ranged\gun.animation items\active\weapons\ranged\assaultrifle\uncommonassaultrifle.activeitem items\active\weapons\ranged\rocketlauncher\uncommonrocketlauncher.activeitem items\active\weapons\ranged\sniperrifle\uncommonsniperrifle.activeitem [NEW] items\buildscripts\buildshield.lua leveling\levelingmultipliers.functions monsters\bmonster.lua monsters\crawlers\crustoise\crustoise.animation monsters\crawlers\crustoise\crustoise.monstertype monsters\crawlers\crustoise\crustoise.png monsters\unique\cleaningbot\cleaningbot.monstertype objects\apex\teslaspike\teslaspike.object objects\generic\mechanicalelevator\mechanicalelevator.animation objects\generic\steelelevator\steelelevator.animation objects\generic\woodenelevator\woodenelevator.animation objects\wired\movingplatform\movingplatform.animation projectiles\explosions\electricexplosion\electricexplosion.projectile projectiles\explosions\teslabolt\teslabolt.projectile projectiles\guns\unsorted\electro\electro.projectile projectiles\guns\unsorted\lightning2\lightning2.projectile [NEW] projectiles\guns\unsorted\lightningthrower\icon.png [NEW] projectiles\guns\unsorted\lightningthrower\lightningthrower.frames [NEW] projectiles\guns\unsorted\lightningthrower\lightningthrower.png [NEW] projectiles\guns\unsorted\lightningthrower\lightningthrower.projectile projectiles\guns\unsorted\poisonthrower\poisonthrower.projectile projectiles\minibiomelegendaries\wildorb\leaforb.projectile projectiles\minibiomelegendaries\wildorbx\leaforbx.projectile projectiles\npcs\glitter\glitter.projectile projectiles\npcs\lightning\lightning.projectile projectiles\npcs\orbofzots\zotsorb.projectile projectiles\npcs\orbofzots\zotszot.projectile projectiles\npcs\shortbeam\preshortbeam.projectile projectiles\npcs\shortbeam\shortbeam.projectile projectiles\staves\racialstaves\leaf\leafcloud\leafcloud.projectile projectiles\staves\racialstaves\leaf\petalcloud\petalcloud.projectile projectiles\swoosh\spear\floranprodswoosh\floranprodswoosh.projectile projectiles\swoosh\spear\teslaspear\teslaspear.projectile quests\generated\subquests.config scripts\pathing.lua [NEW] scripts\pathutil.lua scripts\rect.lua scripts\util.lua [NEW] scripts\actions\crawling.lua scripts\actions\math.lua [NEW] scripts\quest\manager\spawn_entities.lua [NEW] sfx\melee\rocketspear_loop_fire.ogg [NEW] sfx\melee\rocketspear_start_fire.ogg [NEW] sfx\melee\rocketspear_stop_fire.ogg [NEW] sfx\melee\rocketspear_stop_fire2.ogg [NEW] vehicles\hoverbike\default.frames [NEW] vehicles\hoverbike\hoverbike.animation [NEW] vehicles\hoverbike\hoverbike.lua [NEW] vehicles\hoverbike\hoverbike.vehicle [NEW] vehicles\hoverbike\hoverbikebackground.png [NEW] vehicles\hoverbike\hoverbikeforeground.png DIFFS ----- biomes\underground\underground0a.biome 134c134 < "priority" : 0.0, --- > "priority" : 99.0, 136c136 < "distribution" : "/biomes/distributions.config:randomEncounterUnderground", --- > "distribution" : "/biomes/distributions.config:denseSmall", 139c139 < "microdungeons" : [ "genericundergroundencounter", "apexundergroundencounter", "avianundergroundencounter", "floranundergroundencounter", "glitchundergroundencounter", "humanundergroundencounter" ] --- > "microdungeons" : [ "undergroundmicrodungeons" ] biomes\underground\underground0b.biome 134c134 < "priority" : 0.0, --- > "priority" : 99.0, 136c136 < "distribution" : "/biomes/distributions.config:randomEncounterUnderground", --- > "distribution" : "/biomes/distributions.config:denseSmall", 139c139 < "microdungeons" : [ "genericundergroundencounter", "apexundergroundencounter", "avianundergroundencounter", "floranundergroundencounter", "glitchundergroundencounter", "humanundergroundencounter" ] --- > "microdungeons" : [ "undergroundmicrodungeons" ] biomes\underground\underground0c.biome 139c139 < "priority" : 0.0, --- > "priority" : 99.0, 141c141 < "distribution" : "/biomes/distributions.config:randomEncounterUnderground", --- > "distribution" : "/biomes/distributions.config:denseSmall", 144c144 < "microdungeons" : [ "genericundergroundencounter", "apexundergroundencounter", "avianundergroundencounter", "floranundergroundencounter", "glitchundergroundencounter", "humanundergroundencounter" ] --- > "microdungeons" : [ "undergroundmicrodungeons" ] biomes\underground\underground0d.biome 144c144 < "priority" : 0.0, --- > "priority" : 99.0, 146c146 < "distribution" : "/biomes/distributions.config:randomEncounterUnderground", --- > "distribution" : "/biomes/distributions.config:denseSmall", 149c149 < "microdungeons" : [ "genericundergroundencounter", "apexundergroundencounter", "avianundergroundencounter", "floranundergroundencounter", "glitchundergroundencounter", "humanundergroundencounter" ] --- > "microdungeons" : [ "undergroundmicrodungeons" ] biomes\underground\underground1a.biome 165c165 < "priority" : 0.0, --- > "priority" : 900.0, 170c170 < "microdungeons" : [ "genericundergroundencounter", "apexundergroundencounter", "avianundergroundencounter", "floranundergroundencounter", "glitchundergroundencounter", "humanundergroundencounter" ] --- > "microdungeons" : [ "undergroundmicrodungeons" ] biomes\underground\underground1b.biome 157c157 < "priority" : 0.0, --- > "priority" : 900.0, 162c162 < "microdungeons" : [ "genericundergroundencounter", "apexundergroundencounter", "avianundergroundencounter", "floranundergroundencounter", "glitchundergroundencounter", "humanundergroundencounter" ] --- > "microdungeons" : [ "undergroundmicrodungeons" ] biomes\underground\underground1c.biome 169c169 < "priority" : 0.0, --- > "priority" : 99.0, 171c171 < "distribution" : "/biomes/distributions.config:randomEncounterUnderground", --- > "distribution" : "/biomes/distributions.config:denseSmall", 174c174 < "microdungeons" : [ "genericundergroundencounter", "apexundergroundencounter", "avianundergroundencounter", "floranundergroundencounter", "glitchundergroundencounter", "humanundergroundencounter" ] --- > "microdungeons" : [ "undergroundmicrodungeons" ] biomes\underground\underground1d.biome 157c157 < "priority" : 0.0, --- > "priority" : 99.0, 159c159 < "distribution" : "/biomes/distributions.config:randomEncounterUnderground", --- > "distribution" : "/biomes/distributions.config:denseSmall", 162c162 < "microdungeons" : [ "genericundergroundencounter", "apexundergroundencounter", "avianundergroundencounter", "floranundergroundencounter", "glitchundergroundencounter", "humanundergroundencounter" ] --- > "microdungeons" : [ "undergroundmicrodungeons" ] biomes\underground\underground3a.biome 157c157 < "priority" : 0.0, --- > "priority" : 99.0, 159c159 < "distribution" : "/biomes/distributions.config:randomEncounterUnderground", --- > "distribution" : "/biomes/distributions.config:denseSmall", 162c162 < "microdungeons" : [ "genericundergroundencounter", "apexundergroundencounter", "avianundergroundencounter", "floranundergroundencounter", "glitchundergroundencounter", "humanundergroundencounter" ] --- > "microdungeons" : [ "undergroundmicrodungeons" ] biomes\underground\underground3b.biome 157c157 < "priority" : 0.0, --- > "priority" : 99.0, 159c159 < "distribution" : "/biomes/distributions.config:randomEncounterUnderground", --- > "distribution" : "/biomes/distributions.config:denseSmall", 162c162 < "microdungeons" : [ "genericundergroundencounter", "apexundergroundencounter", "avianundergroundencounter", "floranundergroundencounter", "glitchundergroundencounter", "humanundergroundencounter" ] --- > "microdungeons" : [ "undergroundmicrodungeons" ] biomes\underground\underground3c.biome 172c172 < "priority" : 0.0, --- > "priority" : 99.0, 174c174 < "distribution" : "/biomes/distributions.config:randomEncounterUnderground", --- > "distribution" : "/biomes/distributions.config:denseSmall", 177c177 < "microdungeons" : [ "genericundergroundencounter", "apexundergroundencounter", "avianundergroundencounter", "floranundergroundencounter", "glitchundergroundencounter", "humanundergroundencounter" ] --- > "microdungeons" : [ "undergroundmicrodungeons" ] biomes\underground\underground3d.biome 153c153 < "priority" : 0.0, --- > "priority" : 99.0, 155c155 < "distribution" : "/biomes/distributions.config:randomEncounterUnderground", --- > "distribution" : "/biomes/distributions.config:denseSmall", 158c158 < "microdungeons" : [ "genericundergroundencounter", "apexundergroundencounter", "avianundergroundencounter", "floranundergroundencounter", "glitchundergroundencounter", "humanundergroundencounter" ] --- > "microdungeons" : [ "undergroundmicrodungeons" ] biomes\underground\underground5a.biome 157c157 < "priority" : 0.0, --- > "priority" : 99.0, 159c159 < "distribution" : "/biomes/distributions.config:randomEncounterUnderground", --- > "distribution" : "/biomes/distributions.config:denseSmall", 162c162 < "microdungeons" : [ "genericundergroundencounter", "apexundergroundencounter", "avianundergroundencounter", "floranundergroundencounter", "glitchundergroundencounter", "humanundergroundencounter" ] --- > "microdungeons" : [ "undergroundmicrodungeons" ] biomes\underground\underground5b.biome 131c131 < "priority" : 0.0, --- > "priority" : 99.0, 133c133 < "distribution" : "/biomes/distributions.config:randomEncounterUnderground", --- > "distribution" : "/biomes/distributions.config:denseSmall", 136c136 < "microdungeons" : [ "genericundergroundencounter", "apexundergroundencounter", "avianundergroundencounter", "floranundergroundencounter", "glitchundergroundencounter", "humanundergroundencounter" ] --- > "microdungeons" : [ "undergroundmicrodungeons" ] biomes\underground\underground5d.biome 183c183 < "priority" : 0.0, --- > "priority" : 99.0, 185c185 < "distribution" : "/biomes/distributions.config:randomEncounterUnderground", --- > "distribution" : "/biomes/distributions.config:denseSmall", 188c188 < "microdungeons" : [ "genericundergroundencounter", "apexundergroundencounter", "avianundergroundencounter", "floranundergroundencounter", "glitchundergroundencounter", "humanundergroundencounter" ] --- > "microdungeons" : [ "undergroundmicrodungeons" ] damage\poison.damage 31c31 < "sounds" : [ "/sfx/gun/impact_flesh.ogg" ], --- > "sounds" : [ "/sfx/gun/impact_plasma.ogg" ], 55c55 < "sounds" : [ "/sfx/gun/impact_robotic1.ogg", "/sfx/gun/impact_robotic2.ogg", "/sfx/gun/impact_robotic3.ogg", "/sfx/gun/impact_robotic4.ogg", "/sfx/gun/impact_robotic5.ogg" ], --- > "sounds" : [ "/sfx/gun/impact_flesh.ogg" ], dialog\quest.config 7a8,37 > }, > "human" : { > "default" : [ > "Please take this reply back to ." > ] > }, > "apex" : { > "default" : [ > "Please take this reply back to ." > ] > }, > "avian" : { > "default" : [ > "Please take this reply back to for me." > ] > }, > "floran" : { > "default" : [ > "Take thisss reply to ." > ] > }, > "glitch" : { > "default" : [ > "Grateful. Please take this reply back to ." > ] > }, > "hylotl" : { > "default" : [ > "Would you kindly take this reply to ?" > ] 17a48,77 > }, > "human" : { > "default" : [ > "Don't point that at me! Tell I'll do anything!" > ] > }, > "apex" : { > "default" : [ > "Don't hurt me with that ! Tell I'll comply!" > ] > }, > "avian" : { > "default" : [ > "Don't hurt me with that ! Tell I'll do anything!" > ] > }, > "floran" : { > "default" : [ > "Don't hurt Floran with ! Tell Floran will obey!" > ] > }, > "glitch" : { > "default" : [ > "Alarmed. Don't hurt me with that - Tell I'll do anything!" > ] > }, > "hylotl" : { > "default" : [ > "Don't hurt me with that ! Tell I'll do anything!" > ] 24a85,121 > }, > "human" : { > "default" : [ > "Why should I do what wants?", > "You don't scare me, and neither does !" > > ] > }, > "apex" : { > "default" : [ > "Has sent you to intimidate me?", > "Has sent you to intimidate me?" > ] > }, > "avian" : { > "default" : [ > "Why should I do what wants?", > "I am not afraid of !" > ] > }, > "floran" : { > "default" : [ > "Floran not ssscared of !", > "Floran not ssscared you, or !" > ] > }, > "glitch" : { > "default" : [ > "Unafraid. Why should I do what wants?", > "Confused. Are you trying to intimidate me on behalf of ?" > ] > }, > "hylotl" : { > "default" : [ > " cannot upset my zen, and neither can you!", > "Why should I do what wants?" > ] 33c130,169 < "Is this legal? Ah who cares... Please give my thanks to ." --- > "Is this a bribe? Ah, who cares... Please give my thanks to ." > ] > }, > "human" : { > "default" : [ > "Is this a bribe? Ah, who cares... Please give my thanks to !", > "Is this bribery? Oh well! Please give my thanks to !", > "Being bribed is pretty satisfying! Please give my thanks to ." > > ] > }, > "apex" : { > "default" : [ > "I am fairly certain I'm being bribed, but give my thanks to .", > "Is this a gift from ? Or is it more of a bribe?" > ] > }, > "avian" : { > "default" : [ > " may be trying to bribe me, but I am thankful anyway!", > " may be trying to win my favour, but this is still a nice gesture!" > ] > }, > "floran" : { > "default" : [ > "Floran doesssn't mind bribes. Say thanksss to !", > "Floran likesss bribes! Say thanksss to ." > ] > }, > "glitch" : { > "default" : [ > "Pleased. This may be a bribe, but give my thanks to .", > "Impressed. Thank for this gift on my behalf!" > > ] > }, > "hylotl" : { > "default" : [ > "My loyalty is easily swayed! Give my thanks to .", > "Gifts can easily sway my alliegance! Give my thanks to ." 41a178,208 > }, > "human" : { > "default" : [ > "I wonder what wants from me though..." > ] > }, > "apex" : { > "default" : [ > "I wonder what wants from me though..." > ] > }, > "avian" : { > "default" : [ > "I wonder what wants from me though..." > ] > }, > "floran" : { > "default" : [ > "Floran wonders what wantsss..." > ] > }, > "glitch" : { > "default" : [ > "Curious. I wonder what wants from me?", > "Concerned. I wonder why wanted to bribe me?" > ] > }, > "hylotl" : { > "default" : [ > "I wonder what may want from me..." > ] 51a219,254 > }, > "human" : { > "default" : [ > "Oh, wow! Please thank for me!", > "How nice! Please thank for me!" > ] > }, > "apex" : { > "default" : [ > "How kind of ! Please thank them for me.", > "Please report my happiness to for their gift!" > ] > }, > "avian" : { > "default" : [ > "Please thank for this lovely gift!", > "Please thank for this gesture!" > ] > }, > "floran" : { > "default" : [ > "Floran likesss gift! Tell for me!", > "A presssent for Floran! Give thanksss to !", > ] > }, > "glitch" : { > "default" : [ > "Appreciative. Please thank on my behalf!", > "Thankful. Tell that I appreciate their gift!" > ] > }, > "hylotl" : { > "default" : [ > " has a kind spirit! Please tell them for me!", > "A gift! deserves my thanks for such a gesture." > ] 57a261,296 > ] > }, > "human" : { > "default" : [ > " is pretty nice!", > " is a great friend." > ] > }, > "apex" : { > "default" : [ > " is clearly someone I can trust.", > " is a trustworthy contact." > ] > }, > "avian" : { > "default" : [ > " is a great friend.", > " is a great friend." > ] > }, > "floran" : { > "default" : [ > "Floran likesss !", > "Floran hasss decided that isss good friend." > ] > }, > "glitch" : { > "default" : [ > "Pleased. is a good friend.", > "Cheerful. is a kind person." > ] > }, > "hylotl" : { > "default" : [ > " has earned my true friendship.", > " has my trust." dungeons\microdungeons\underground\undergroundmicrodungeons.dungeon 8c8 < "anchor" : [ "openTemplate", "tunnelBackSlopeTemplate", "tunnelForwardSlopeTemplate", "tunnelWeakBackSlopeTemplate", "tunnelWeakForwardSlopeTemplate", "tunnelTemplate" ], --- > "anchor" : [ "openNatural1", "tunnelBackSlopeNatural1", "tunnelForwardSlopeNatural1", "tunnelNatural1", "tunnelWeakBackSlopeNatural1", "tunnelWeakForwardSlopeNatural1" ], 18c18 < "name" : "openTemplate", --- > "name" : "openNatural1", 22c22 < "def" : [ "tmx", "openTemplate.json" ] --- > "def" : [ "tmx", "openNatural1.json" ] 24d23 < 26c25 < "name" : "tunnelBackSlopeTemplate", --- > "name" : "tunnelBackSlopeNatural1", 30c29 < "def" : [ "tmx", "tunnelBackSlopeTemplate.json" ] --- > "def" : [ "tmx", "tunnelBackSlopeNatural1.json" ] 32d30 < 34c32 < "name" : "tunnelForwardSlopeTemplate", --- > "name" : "tunnelForwardSlopeNatural1", 38c36 < "def" : [ "tmx", "tunnelForwardSlopeTemplate.json" ] --- > "def" : [ "tmx", "tunnelForwardSlopeNatural1.json" ] 40d37 < 42c39 < "name" : "tunnelWeakBackSlopeTemplate", --- > "name" : "tunnelNatural1", 46c43 < "def" : [ "tmx", "tunnelWeakBackSlopeTemplate.json" ] --- > "def" : [ "tmx", "tunnelNatural1.json" ] 48d44 < 50c46 < "name" : "tunnelWeakForwardSlopeTemplate", --- > "name" : "tunnelWeakBackSlopeNatural1", 54c50 < "def" : [ "tmx", "tunnelWeakForwardSlopeTemplate.json" ] --- > "def" : [ "tmx", "tunnelWeakBackSlopeNatural1.json" ] 56d51 < 58c53 < "name" : "tunnelTemplate", --- > "name" : "tunnelWeakForwardSlopeNatural1", 62c57 < "def" : [ "tmx", "tunnelTemplate.json" ] --- > "def" : [ "tmx", "tunnelWeakForwardSlopeNatural1.json" ] items\active\boxingglove\boxingglove.lua 22c22 < activeItem.setWeaponDamageSources({{ --- > activeItem.setItemDamageSources({{ 31c31 < activeItem.setWeaponDamageSources({}) --- > activeItem.setItemDamageSources({}) items\active\weapons\weapon.lua 105d104 < sb.logInfo("Setting facing direction to %s", self.aimDirection) 113c112 < activeItem.setWeaponDamageSources({ self:damageSource(damageConfig, damageArea, damageTimeout) }) --- > activeItem.setItemDamageSources({ self:damageSource(damageConfig, damageArea, damageTimeout) }) items\active\weapons\melee\altabilities\broadsword\parry\parry.altability 27c27,28 < "rotationCenter" : [0, 0] --- > "rotationCenter" : [0, 0], > "shieldPoly" : [ [-0.25, -2.5], [-0.25, 2.0], [1.0, 2.75], [1.0, -1.0] ] 69c70 < "allowFlip" : true --- > "allowFlip" : false items\active\weapons\melee\altabilities\broadsword\parry\parry.lua 28,29c28,29 < local blockPoly = partDamageArea("blade") < activeItem.setShieldPolys({blockPoly}) --- > local blockPoly = animator.partPoly("parryShield", "shieldPoly") > activeItem.setItemShieldPolys({blockPoly}) 35c35 < if notification.sourceEntityId ~= -65536 then --- > if notification.sourceEntityId ~= -65536 and notification.damage == 0 then 44d43 < damageListener:update() 46c45,47 < return status.resource("shieldStamina") <= 0 --- > if not status.resourcePositive("shieldStamina") then return true end > > damageListener:update() 50c51 < activeItem.setShieldPolys({}) --- > activeItem.setItemShieldPolys({}) 55a57 > activeItem.setItemShieldPolys({}) items\active\weapons\melee\altabilities\generic\blinkslash\blinkslash.altability 56a57 > "requireLineOfSight" : true, items\active\weapons\melee\altabilities\generic\blinkslash\blinkslash.lua 2a3 > require "/scripts/pathutil.lua" 70,72c71 < < self.weapon.aimDirection = -1 < -- mcontroller.setFace(self.weapon.aimDirection) --- > self.weapon.aimDirection = -self.weapon.aimDirection 90,91c89 < self.weapon.aimDirection = 1 < -- mcontroller.setFace(self.weapon.aimDirection) --- > self.weapon.aimDirection = -self.weapon.aimDirection 113,122c111,114 < local collisionPoly = mcontroller.collisionPoly() < local searchStart = vec2.add(mcontroller.position(), {self.blinkDistance * mcontroller.facingDirection(), -self.blinkYTolerance - 0.2}) < for i = 0, 2 * self.blinkYTolerance do < local searchPosition = {searchStart[1], searchStart[2] + i} < if not world.lineTileCollision(mcontroller.position(), searchPosition, {"Null", "Block", "Dynamic"}) then < local resolved = world.resolvePolyCollision(collisionPoly, searchPosition, 1.0) < if resolved and resolved[2] > searchPosition[2] + 0.1 then < return resolved < end < end --- > local searchPosition = vec2.add(mcontroller.position(), {self.blinkDistance * mcontroller.facingDirection(), 0}) > local groundPosition = findGroundPosition(searchPosition, -self.blinkYTolerance, self.blinkYTolerance, false, {"Null", "Block", "Dynamic", "Platform"}) > if groundPosition and (not self.requireLineOfSight or not world.lineTileCollision(mcontroller.position(), groundPosition, {"Null", "Block", "Dynamic"})) then > return groundPosition items\active\weapons\melee\altabilities\spear\rocketspear\rocketspear.altability 15c15 < "immediateSound" : "/sfx/melee/charge_up15.ogg" --- > // "immediateSound" : "/sfx/melee/charge_up15.ogg" 20c20 < "immediateSound" : "/sfx/gun/plasma_sniper1.ogg" --- > // "persistentSound" : "/sfx/gun/flamethrower.ogg" 57a58,71 > }, > "sounds" : { > "fireStart" : [ "/sfx/melee/rocketspear_start_fire.ogg" ], > "fireBlast" : [ "/sfx/melee/rocketspear_loop_fire.ogg" ], > "fireEnd" : [ "/sfx/melee/rocketspear_stop_fire.ogg" ], > "iceStart" : [ "/sfx/melee/rocketspear_start_fire.ogg" ], > "iceBlast" : [ "/sfx/melee/barrier_create_ice.ogg" ], > "iceEnd" : [ "/sfx/gun/plasma_mp2.ogg" ], > "electricStart" : [ "/sfx/melee/rocketspear_start_fire.ogg" ], > "electricBlast" : [ "/sfx/melee/barrier_create_electric.ogg" ], > "electricEnd" : [ "/sfx/gun/plasma_mp2.ogg" ], > "poisonStart" : [ "/sfx/melee/rocketspear_start_fire.ogg" ], > "poisonBlast" : [ "/sfx/melee/barrier_create_poison.ogg" ], > "poisonEnd" : [ "/sfx/gun/plasma_mp2.ogg" ] 73c87 < "electric" : "flamethrower", --- > "electric" : "lightningthrower", items\active\weapons\melee\altabilities\spear\rocketspear\rocketspear.lua 38a39,40 > animator.playSound(self.weapon.elementalType.."Start") > animator.playSound(self.weapon.elementalType.."Blast", -1) 63c65,67 < --- > animator.stopAllSounds(self.weapon.elementalType.."Start") > animator.stopAllSounds(self.weapon.elementalType.."Blast") > animator.playSound(self.weapon.elementalType.."End") 76a81 > animator.stopAllSounds(self.weapon.elementalType.."Blast") items\active\weapons\melee\axe\axe.animation 31c31 < "transformationGroup" : "weapon", --- > "transformationGroups" : ["weapon"], 51c51 < "transformationGroup" : "weapon", --- > "transformationGroups" : ["weapon"], 60c60 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 91c91 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 98c98 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 112c112 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 123c123 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 137c137 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], items\active\weapons\melee\broadsword\broadsword.animation 26c26 < "transformationGroup" : "weapon", --- > "transformationGroups" : ["weapon"], 37c37 < "transformationGroup" : "weapon", --- > "transformationGroups" : ["weapon"], 46c46 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 77c77 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 85c85 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 99c99 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 110c110 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 124c124 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 138c138 < "transformationGroup" : "weapon", --- > "transformationGroups" : ["weapon"], items\active\weapons\melee\broadsword\commonbroadsword.activeitem 13,14d12 < "inventoryIcon" : "icon.png", // FIXME: icons : / < items\active\weapons\melee\broadsword\rarebroadsword.activeitem 13,14d12 < "inventoryIcon" : "icon.png", // FIXME: icons : / < 106,111c104,108 < // "/items/active/weapons/melee/altabilities/broadsword/giantsword/giantsword.altability", < // "/items/active/weapons/melee/altabilities/broadsword/travelingslash/travelingslash.altability", < // "/items/active/weapons/melee/altabilities/generic/blinkexplosion/blinkexplosion.altability", < "/items/active/weapons/melee/altabilities/generic/blinkslash/blinkslash.altability" < // , < // "/items/active/weapons/melee/altabilities/broadsword/traildash/traildash.altability" --- > "/items/active/weapons/melee/altabilities/broadsword/giantsword/giantsword.altability", > "/items/active/weapons/melee/altabilities/broadsword/travelingslash/travelingslash.altability", > "/items/active/weapons/melee/altabilities/generic/blinkexplosion/blinkexplosion.altability", > "/items/active/weapons/melee/altabilities/generic/blinkslash/blinkslash.altability", > "/items/active/weapons/melee/altabilities/broadsword/traildash/traildash.altability" items\active\weapons\melee\broadsword\uncommonbroadsword.activeitem 13,14d12 < "inventoryIcon" : "icon.png", // FIXME: icons : / < 100,101d97 < //"/items/active/weapons/melee/altabilities/broadsword/dashattack.altability", < //"/items/active/weapons/melee/altabilities/broadsword/leapattack.altability", 103c99,102 < "/items/active/weapons/melee/altabilities/broadsword/parry/parry.altability" --- > "/items/active/weapons/melee/altabilities/broadsword/travelingslash/travelingslash.altability", > "/items/active/weapons/melee/altabilities/generic/blinkexplosion/blinkexplosion.altability", > "/items/active/weapons/melee/altabilities/generic/blinkslash/blinkslash.altability", > "/items/active/weapons/melee/altabilities/broadsword/traildash/traildash.altability" items\active\weapons\melee\dagger\dagger.animation 24c24 < "transformationGroup" : "weapon", --- > "transformationGroups" : ["weapon"], 33c33 < "transformationGroup" : "weapon", --- > "transformationGroups" : ["weapon"], 42c42 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 73c73 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 80c80 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 94c94 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 105c105 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 119c119 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], items\active\weapons\melee\hammer\hammer.animation 25c25 < "transformationGroup" : "weapon", --- > "transformationGroups" : ["weapon"], 36c36 < "transformationGroup" : "weapon", --- > "transformationGroups" : ["weapon"], 45c45 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 76c76 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 84c84 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 98c98 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 109c109 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 123c123 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 136c136 < "transformationGroup" : "weapon", --- > "transformationGroups" : ["weapon"], 159c159 < "transformationGroup" : "weapon", --- > "transformationGroups" : ["weapon"], items\active\weapons\melee\hammer\uncommonhammer.activeitem 119c119,124 < "altAbilities" : [ ], --- > "altAbilities" : [ > "/items/active/weapons/melee/altabilities/generic/blinkexplosion/blinkexplosion.altability", > "/items/active/weapons/melee/altabilities/hammer/shockwave/shockwave.altability", > "/items/active/weapons/melee/altabilities/hammer/elementalaura/elementalaura.altability", > "/items/active/weapons/melee/altabilities/hammer/elementalpillar/elementalpillar.altability" > ], items\active\weapons\melee\shortsword\shortsword.animation 24c24 < "transformationGroup" : "weapon", --- > "transformationGroups" : ["weapon"], 34c34 < "transformationGroup" : "weapon", --- > "transformationGroups" : ["weapon"], 43c43 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 74c74 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 81c81 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 95c95 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 106c106 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 120c120 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], items\active\weapons\melee\spear\spear.animation 26c26 < "transformationGroup" : "weapon", --- > "transformationGroups" : ["weapon"], 36c36 < "transformationGroup" : "weapon" --- > "transformationGroups" : ["weapon"] 44c44 < "transformationGroup" : "swoosh" --- > "transformationGroups" : ["swoosh"] 74c74 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 81c81 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 95c95 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 106c106 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], 120c120 < "transformationGroup" : "swoosh", --- > "transformationGroups" : ["swoosh"], items\active\weapons\melee\spear\uncommonspear.activeitem 110c110,115 < "altAbilities" : [ ], --- > "altAbilities" : [ > "/items/active/weapons/melee/altabilities/generic/blinkexplosion/blinkexplosion.altability", > "/items/active/weapons/melee/altabilities/spear/barrier/barrier.altability", > "/items/active/weapons/melee/altabilities/spear/elementalspin/elementalspin.altability", > "/items/active/weapons/melee/altabilities/spear/rocketspear/rocketspear.altability" > ], items\active\weapons\ranged\gun.animation 24c24 < "transformationGroup" : "weapon" --- > "transformationGroups" : ["weapon"] 32c32 < "transformationGroup" : "weapon" --- > "transformationGroups" : ["weapon"] 40c40 < "transformationGroup" : "weapon" --- > "transformationGroups" : ["weapon"] 49c49 < "transformationGroup" : "muzzle" --- > "transformationGroups" : ["muzzle"] 84c84 < "transformationGroup" : "muzzle", --- > "transformationGroups" : ["muzzle"], items\active\weapons\ranged\assaultrifle\uncommonassaultrifle.activeitem 109c109,113 < "altAbilities" : [ ], --- > "altAbilities" : [ > "/items/active/weapons/ranged/altabilities/lance/lance.altability", > "/items/active/weapons/ranged/altabilities/explosiveburst/explosiveburst.altability", > "/items/active/weapons/ranged/altabilities/grenadelauncher/grenadelauncher.altability" > ], items\active\weapons\ranged\rocketlauncher\uncommonrocketlauncher.activeitem 135c135,137 < "altAbilities" : [ ], --- > "altAbilities" : [ > "/items/active/weapons/ranged/altabilities/guidedrocket/guidedrocket.altability" > ], items\active\weapons\ranged\sniperrifle\uncommonsniperrifle.activeitem 104c104,107 < "altAbilities" : [ ], --- > "altAbilities" : [ > "/items/active/weapons/ranged/altabilities/markedshot/markedshot.altability", > "/items/active/weapons/ranged/altabilities/deathbomb/deathbomb.altability" > ], leveling\levelingmultipliers.functions 73c73 < [0, 0.0], --- > [0, 0.5], monsters\bmonster.lua 36a37,38 > entity.setGlobalTag("flipX", "") > 112a115,129 > -- param type > -- param tag > function setGlobalTag(args, output) > args = parseArgs(args, { > type = nil, > tag = nil > }) > if args.type == nil or args.type == ""then > return false > end > > entity.setGlobalTag(args.type, args.tag or "") > return true > end > 162a180,205 > return true > end > > -- param transformationGroup > function resetTransformationGroup(args, output) > args = parseArgs(args, { > transformationGroup = nil > }) > if args.transformationGroup == nil then return false end > entity.resetTransformationGroup(args.transformationGroup) > return true > end > > -- param transformationGroup > -- param angle > function rotateTransformationGroup(args, output) > args = parseArgs(args, { > transformationGroup = nil, > angle = 0 > }) > local angle = BData:getNumber(args.angle) > if angle == nil or args.transformationGroup == nil or args.transformationGroup == "" then > return false > end > > entity.rotateTransformationGroup(args.transformationGroup, angle) monsters\crawlers\crustoise\crustoise.animation 38c38 < "transformationGroups" : "body", --- > "transformationGroup" : "body", 45c45 < "image" : ":idle." --- > "image" : ":idle." 50c50 < "image" : ":walk." --- > "image" : ":walk." 55c55 < "image" : ":jump." --- > "image" : ":jump." 60c60 < "image" : ":fall." --- > "image" : ":fall." 65c65 < "image" : ":fire." --- > "image" : ":fire." 70c70 < "image" : ":hurt." --- > "image" : ":hurt." monsters\crawlers\crustoise\crustoise.monstertype 39c39,47 < "wanderActions" : [ ] --- > "wanderActions" : [ > { > "name" : "wander-crawl", > "parameters" : { > "wanderTime" : 10, > "idleTime" : 1 > } > } > ] 59,60c67,68 < "walkSpeed" : 8, < "runSpeed" : 5, --- > "walkSpeed" : 4, > "runSpeed" : 12, monsters\unique\cleaningbot\cleaningbot.monstertype 47c47 < "damageSourceKind" : "electroshock", --- > "damageSourceKind" : "electric", objects\apex\teslaspike\teslaspike.object 56c56 < "damageSourceKind" : "electroshock" --- > "damageSourceKind" : "electric" 74c74 < "damageSourceKind" : "electroshock" --- > "damageSourceKind" : "electric" 92c92 < "damageSourceKind" : "electroshock" --- > "damageSourceKind" : "electric" 110c110 < "damageSourceKind" : "electroshock" --- > "damageSourceKind" : "electric" 128c128 < "damageSourceKind" : "electroshock" --- > "damageSourceKind" : "electric" 146c146 < "damageSourceKind" : "electroshock" --- > "damageSourceKind" : "electric" 164c164 < "damageSourceKind" : "electroshock" --- > "damageSourceKind" : "electric" 182c182 < "damageSourceKind" : "electroshock" --- > "damageSourceKind" : "electric" objects\generic\mechanicalelevator\mechanicalelevator.animation 47c47 < "transformationGroup" : "platform", --- > "transformationGroups" : ["platform"], objects\generic\steelelevator\steelelevator.animation 29c29 < "transformationGroup" : "platform", --- > "transformationGroups" : ["platform"], objects\generic\woodenelevator\woodenelevator.animation 47c47 < "transformationGroup" : "platform", --- > "transformationGroups" : ["platform"], objects\wired\movingplatform\movingplatform.animation 29c29 < "transformationGroup" : "platform", --- > "transformationGroups" : ["platform"], projectiles\explosions\electricexplosion\electricexplosion.projectile 12c12 < "damageKind" : "electroshock", --- > "damageKind" : "electric", projectiles\explosions\teslabolt\teslabolt.projectile 12c12 < "damageKind" : "electroshock", --- > "damageKind" : "electric", projectiles\guns\unsorted\electro\electro.projectile 14c14 < "damageKind" : "electroshock" --- > "damageKind" : "electric" projectiles\guns\unsorted\lightning2\lightning2.projectile 14c14 < "damageKind" : "electroshock" --- > "damageKind" : "electric" projectiles\guns\unsorted\poisonthrower\poisonthrower.projectile 14c14 < "damageKind" : "ice", --- > "damageKind" : "poison", projectiles\minibiomelegendaries\wildorb\leaforb.projectile 17c17 < "damageKind" : "electroshock" --- > "damageKind" : "electric" projectiles\minibiomelegendaries\wildorbx\leaforbx.projectile 17c17 < "damageKind" : "electroshock" --- > "damageKind" : "electric" projectiles\npcs\glitter\glitter.projectile 16c16 < "damageKind" : "electroshock", --- > "damageKind" : "electric", projectiles\npcs\lightning\lightning.projectile 14c14 < "damageKind" : "electroshock", --- > "damageKind" : "electric", projectiles\npcs\orbofzots\zotsorb.projectile 12c12 < "damageKind" : "electroshock" --- > "damageKind" : "electric" projectiles\npcs\orbofzots\zotszot.projectile 11c11 < "damageKind" : "electroshock" --- > "damageKind" : "electric" projectiles\npcs\shortbeam\preshortbeam.projectile 13c13 < "damageKind" : "electroshock", --- > "damageKind" : "electric", projectiles\npcs\shortbeam\shortbeam.projectile 13c13 < "damageKind" : "electroshock", --- > "damageKind" : "electric", projectiles\staves\racialstaves\leaf\leafcloud\leafcloud.projectile 17c17 < "damageKind" : "electroshock" --- > "damageKind" : "electric" projectiles\staves\racialstaves\leaf\petalcloud\petalcloud.projectile 17c17 < "damageKind" : "electroshock" --- > "damageKind" : "electric" projectiles\swoosh\spear\floranprodswoosh\floranprodswoosh.projectile 15c15 < "damageKind" : "electroshock", --- > "damageKind" : "electric", projectiles\swoosh\spear\teslaspear\teslaspear.projectile 16c16 < "damageKind" : "electroshock", --- > "damageKind" : "electric", quests\generated\subquests.config 616,617c616,617 < "script" : "/scripts/quest/manager/summon_npcs.lua", < "pluginClass" : "SummonNpcs", --- > "script" : "/scripts/quest/manager/spawn_entities.lua", > "pluginClass" : "SpawnEntities", 621a622,623 > "beamIn" : true, > "entityType" : "npc", scripts\pathing.lua 2a3 > require "/scripts/pathutil.lua" 466a468,469 > --Necessary to avoid conflicts between Starbound's 'self' and Lua's 'self' tables > --TODO: Refactor 'self' to a better name, someday... 469,547d471 < end < < --The time it would take to fall distance < function timeToFall(distance) < local gravity = world.gravity(mcontroller.position()) < return math.sqrt(2 * distance / gravity) < end < < < --POSITIONING------------------------------------------ < --Checks if the entity can stand in this position < function validStandingPosition(position, avoidLiquid, collisionSet) < collisionSet = collisionSet or {"Null", "Block"} < local bounds = mcontroller.boundBox() < < local boundRegion = rect.translate(bounds, position) < local groundRegion = { < position[1] + bounds[1], position[2] + bounds[2] - 1, < position[1] + bounds[3], position[2] + bounds[2] < } < if (world.rectTileCollision(groundRegion, {"Null", "Block", "Dynamic", "Platform"}) or (not avoidLiquid and world.liquidAt(position))) < and not world.rectTileCollision(boundRegion, collisionSet) then < return true < end < return false < end < < --Find a valid ground position < function findGroundPosition(position, minHeight, maxHeight, avoidLiquid, collisionSet) < local bounds = mcontroller.boundBox() < < -- Align the vertical position of the bottom of our feet with the top < -- of the row of tiles below: < position = {position[1], math.ceil(position[2]) - (bounds[2] % 1)} < < local groundPosition < for y = 0, math.max(math.abs(minHeight), math.abs(maxHeight)) do < -- -- Look up < if y <= maxHeight and validStandingPosition({position[1], position[2] + y}, avoidLiquid, collisionSet) then < groundPosition = {position[1], position[2] + y} < break < end < -- Look down < if -y >= minHeight and validStandingPosition({position[1], position[2] - y}, avoidLiquid, collisionSet) then < groundPosition = {position[1], position[2] - y} < break < end < end < < if groundPosition and avoidLiquid then < local tileLevel = groundPosition[2] % 1 < local liquidLevel = world.liquidAt(groundPosition) < if liquidLevel and liquidLevel[2] >= tileLevel then < return nil < end < end < < return groundPosition < end < < --Check if entity is on solid ground (not platforms) < function onSolidGround() < local position = mcontroller.position() < local bounds = mcontroller.boundBox() < < local groundRegion = { < position[1] + bounds[1], position[2] + bounds[2] - 1, < position[1] + bounds[3], position[2] + bounds[2] < } < return world.rectTileCollision(groundRegion, {"Null", "Block", "Dynamic"}) < end < < function padBoundBox(xPadding, yPadding) < local bounds = mcontroller.boundBox() < bounds[1] = bounds[1] - xPadding < bounds[3] = bounds[3] + xPadding < bounds[2] = bounds[2] - yPadding < bounds[4] = bounds[4] + yPadding < return bounds scripts\rect.lua 0a1,2 > require "/scripts/vec2.lua" > 7c9,21 < function rect.translate(rect, offset) --- > function rect.translate(rectangle, offset) > return { > rectangle[1] + offset[1], rectangle[2] + offset[2], > rectangle[3] + offset[1], rectangle[4] + offset[2] > } > end > > function rect.rotate(rectangle, angle) > local first = {rectangle[1], rectangle[2]} > local second = {rectangle[3], rectangle[4]} > first = vec2.rotate(first, angle) > second = vec2.rotate(second, angle) > 9,10c23,24 < rect[1] + offset[1], rect[2] + offset[2], < rect[3] + offset[1], rect[4] + offset[2] --- > math.min(first[1], second[1]), math.min(first[2], second[2]), > math.max(first[1], second[1]), math.max(first[2], second[2]) 11a26,45 > end > > function rect.flipX(rectangle) > return {-rectangle[3], rectangle[2], -rectangle[1], rectangle[4]} > end > > function rect.scale(rectangle, scale) > if type(scale) == "table" then > return {rectangle[1] * scale[1], rectangle[2] * scale[2], rectangle[3] * scale[1], rectangle[4] * scale[2]} > else > return {rectangle[1] * scale, rectangle[2] * scale, rectangle[3] * scale, rectangle[4] * scale} > end > end > > function rect.pad(rectangle, padding) > if type(padding) == "table" then > return {rectangle[1] - padding[1], rectangle[2] - padding[2], rectangle[3] + padding[1], rectangle[4] + padding[2]} > else > return {rectangle[1] - padding, rectangle[2] - padding, rectangle[3] + padding, rectangle[4] + padding} > end scripts\util.lua 36a37,46 > function util.wrap(value, min, max) > if value > max then > return min > end > if value < min then > return max > end > return value > end > scripts\actions\math.lua 74a75,86 > -- param vector > -- output angle > function vecAngle(args, output) > args = parseArgs(args, { > vector = nil > }) > local vector = BData:getVec2(args.vector) > if vector == nil then return false end > BData:setNumber(output.angle, math.atan(vector[2], vector[1])) > return true > end >