FILES ----- dungeons\novakid\novakidvillage\novakidvillage.dungeon dungeons\novakid\novakidvillage\saloonbase1.json dungeons\novakid\novakidvillage\saloon_balcony1.json dungeons\novakid\novakidvillage\saloon_balcony2.json dungeons\novakid\novakidvillage\saloon_balcony3.json dungeons\novakid\novakidvillage\saloon_balcony4.json dungeons\novakid\novakidvillage\saloon_balcony5.json dungeons\novakid\novakidvillage\saloon_balcony6.json dungeons\novakid\novakidvillage\saloon_balcony7.json dungeons\novakid\novakidvillage\saloon_balcony8.json dungeons\novakid\novakidvillage\saloon_bar1_left.json dungeons\novakid\novakidvillage\saloon_bar1_right.json dungeons\novakid\novakidvillage\saloon_bar2_left.json dungeons\novakid\novakidvillage\saloon_bar2_right.json dungeons\novakid\novakidvillage\saloon_bar3_left.json dungeons\novakid\novakidvillage\saloon_bar3_right.json dungeons\novakid\novakidvillage\saloon_bar4_left.json dungeons\novakid\novakidvillage\saloon_bar4_right.json dungeons\novakid\novakidvillage\saloon_bar5_left.json dungeons\novakid\novakidvillage\saloon_bar5_right.json dungeons\novakid\novakidvillage\saloon_bar6_left.json dungeons\novakid\novakidvillage\saloon_bar6_right.json dungeons\novakid\novakidvillage\saloon_bar7_left.json dungeons\novakid\novakidvillage\saloon_bar7_right.json dungeons\novakid\novakidvillage\saloon_bar8_left.json dungeons\novakid\novakidvillage\saloon_bar8_right.json dungeons\novakid\novakidvillage\street_empty.json [NEW] dungeons\novakid\novakidvillage\street_lamp.json [NEW] dungeons\novakid\novakidvillage\street_lamp_narrow.json [NEW] dungeons\novakid\novakidvillage\street_lamp_wide.json [NEW] dungeons\novakid\novakidvillage\street_outhouse1.json [NEW] dungeons\novakid\novakidvillage\street_outhouse2.json [NEW] dungeons\novakid\novakidvillage\street_wagon1.json [NEW] dungeons\novakid\novakidvillage\street_wagon2.json [NEW] dungeons\novakid\novakidvillage\street_windmill1.json [NEW] dungeons\novakid\novakidvillage\street_windmill2.json items\active\grapplinghooks\grapplinghook.lua items\armors\avian\avian-tier5manipulator\aviantier5manipulator.chest items\generic\other\upgrademodule.item monsters\fishing\appearState.lua [NEW] monsters\fishing\approachState.lua monsters\fishing\disappearState.lua monsters\fishing\fishingMonster.lua [NEW] monsters\fishing\hookedState.lua [NEW] monsters\fishing\landedState.lua [NEW] monsters\fishing\outOfWaterState.lua monsters\fishing\fishingmed\default.frames monsters\fishing\fishingmed\fishingmed.animation monsters\fishing\fishingmed\fishingmed.monstertype monsters\fishing\fishingmed\body\fishingclown.png [NEW] monsters\fishing\fishingmed\body\fishingsquare.monsterpart [NEW] monsters\fishing\fishingmed\body\fishingsquare.png [NEW] monsters\fishing\fishingsmall\default.frames [NEW] monsters\fishing\fishingsmall\fishingsmall.animation [NEW] monsters\fishing\fishingsmall\fishingsmall.monstertype [NEW] monsters\fishing\fishingsmall\body\fishingjerk.monsterpart [NEW] monsters\fishing\fishingsmall\body\fishingjerk.png monsters\generated\swimming\swimmingMonster.lua objects\novakid\frontiercoffin\frontiercoffin.object objects\novakid\frontierdoor\frontierdoor.object objects\novakid\frontiergramophone\frontiergramophone.object objects\novakid\frontierlamppost\frontierlamppost.object objects\novakid\frontierpainting3\frontierpainting3.object objects\novakid\picturestand\picturestand.object objects\novakid\safe\safe.object objects\novakid\saloonsign\saloonsign.object objects\themed\pastel\pastelbed\pastelbed.object objects\themed\pastel\pastelbed\pastelbedicon.png objects\themed\pastel\pastelbunnyplush\pastelbunnyplush.object objects\themed\pastel\pastelcabinet\pastelcabinet.object objects\themed\pastel\pastelcabinet\pastelcabineticon.png objects\themed\pastel\pastelchair\pastelchair.object objects\themed\pastel\pastellight\pastellight.object objects\themed\pastel\pastellight\pastellight.png objects\themed\pastel\pastellight\pastellightlit.png objects\themed\pastel\pastelstool\pastelstool.object objects\themed\pastel\pasteltable\pasteltable.object objects\themed\pastel\pasteltable\pasteltableicon.png objects\themed\pastel\pastelwallclock\pastelwallclock.object objects\themed\pastel\pastelwardrobe\pastelwardrobe.object projectiles\physics.config quests\generated\templates\borrow.questtemplate quests\generated\templates\bribe.questtemplate quests\generated\templates\return_stolen.questtemplate quests\generated\templates\steal.questtemplate [NEW] scripts\fishingspawn.lua [NEW] sfx\tools\rod_cast1.ogg [NEW] sfx\tools\rod_cast2.ogg [NEW] sfx\tools\rod_cast3.ogg [NEW] sfx\tools\rod_cast4.ogg [NEW] sfx\tools\rod_cast5.ogg [NEW] sfx\tools\rod_cast6.ogg [NEW] sfx\tools\rod_cast_hit.ogg [NEW] sfx\tools\rod_reel_loop.ogg [NEW] sfx\tools\rod_unreel_loop.ogg tiles\materials\copperfence.material vehicles\boat\boat.vehicle DIFFS ----- dungeons\novakid\novakidvillage\novakidvillage.dungeon 10c10 < "maxParts" : 15, --- > "maxParts" : 30, 551c551 < [ "doNotConnectToPart", [ "street_empty", "street1", "street2" ] ] --- > [ "doNotConnectToPart", [ "street_empty", "street_lamp_wide", "street_lamp", "street_lamp_narrow", "street_outhouse1", "street_outhouse2", "street_wagon1", "street_wagon2", "street_windmill1", "street_windmill2" ] ] 554c554,563 < "chance" : 2 --- > "chance" : 1 > }, > > { > "name" : "street_lamp_wide", > "rules" : [ > [ "doNotConnectToPart", [ "street_empty", "street_lamp_wide", "street_lamp", "street_lamp_narrow", "street_outhouse1", "street_outhouse2", "street_wagon1", "street_wagon2", "street_windmill1", "street_windmill2" ] ] > ], > "def" : [ "tmx", "street_lamp_wide.json" ], > "chance" : 1 558c567 < "name" : "street1", --- > "name" : "street_lamp", 560c569 < [ "doNotConnectToPart", [ "street_empty", "street1", "street2" ] ] --- > [ "doNotConnectToPart", [ "street_empty", "street_lamp_wide", "street_lamp", "street_lamp_narrow", "street_outhouse1", "street_outhouse2", "street_wagon1", "street_wagon2", "street_windmill1", "street_windmill2" ] ] 562c571 < "def" : [ "tmx", "street1.json" ], --- > "def" : [ "tmx", "street_lamp.json" ], 567c576 < "name" : "street2", --- > "name" : "street_lamp_narrow", 569c578 < [ "doNotConnectToPart", [ "street_empty", "street1", "street2" ] ] --- > [ "doNotConnectToPart", [ "street_empty", "street_lamp_wide", "street_lamp", "street_lamp_narrow", "street_outhouse1", "street_outhouse2", "street_wagon1", "street_wagon2", "street_windmill1", "street_windmill2" ] ] 571c580,640 < "def" : [ "tmx", "street2.json" ], --- > "def" : [ "tmx", "street_lamp_narrow.json" ], > "chance" : 1 > }, > > { > "name" : "street_outhouse1", > "rules" : [ > [ "doNotCombineWith", [ "street_outhouse1", "street_outhouse2" ] ], > [ "doNotConnectToPart", [ "street_empty", "street_lamp_wide", "street_lamp", "street_lamp_narrow", "street_outhouse1", "street_outhouse2", "street_wagon1", "street_wagon2", "street_windmill1", "street_windmill2" ] ] > ], > "def" : [ "tmx", "street_outhouse1.json" ], > "chance" : 1 > }, > > { > "name" : "street_outhouse2", > "rules" : [ > [ "doNotCombineWith", [ "street_outhouse1", "street_outhouse2" ] ], > [ "doNotConnectToPart", [ "street_empty", "street_lamp_wide", "street_lamp", "street_lamp_narrow", "street_outhouse1", "street_outhouse2", "street_wagon1", "street_wagon2", "street_windmill1", "street_windmill2" ] ] > ], > "def" : [ "tmx", "street_outhouse2.json" ], > "chance" : 1 > }, > > { > "name" : "street_wagon1", > "rules" : [ > [ "doNotCombineWith", [ "street_wagon1", "street_wagon2" ] ], > [ "doNotConnectToPart", [ "street_empty", "street_lamp_wide", "street_lamp", "street_lamp_narrow", "street_outhouse1", "street_outhouse2", "street_wagon1", "street_wagon2", "street_windmill1", "street_windmill2" ] ] > ], > "def" : [ "tmx", "street_wagon1.json" ], > "chance" : 1 > }, > > { > "name" : "street_wagon2", > "rules" : [ > [ "doNotCombineWith", [ "street_wagon1", "street_wagon2" ] ], > [ "doNotConnectToPart", [ "street_empty", "street_lamp_wide", "street_lamp", "street_lamp_narrow", "street_outhouse1", "street_outhouse2", "street_wagon1", "street_wagon2", "street_windmill1", "street_windmill2" ] ] > ], > "def" : [ "tmx", "street_wagon2.json" ], > "chance" : 1 > }, > > { > "name" : "street_windmill1", > "rules" : [ > [ "doNotCombineWith", [ "street_windmill1", "street_windmill2" ] ], > [ "doNotConnectToPart", [ "street_empty", "street_lamp_wide", "street_lamp", "street_lamp_narrow", "street_outhouse1", "street_outhouse2", "street_wagon1", "street_wagon2", "street_windmill1", "street_windmill2" ] ] > ], > "def" : [ "tmx", "street_windmill1.json" ], > "chance" : 1 > }, > > { > "name" : "street_windmill2", > "rules" : [ > [ "doNotCombineWith", [ "street_windmill1", "street_windmill2" ] ], > [ "doNotConnectToPart", [ "street_empty", "street_lamp_wide", "street_lamp", "street_lamp_narrow", "street_outhouse1", "street_outhouse2", "street_wagon1", "street_wagon2", "street_windmill1", "street_windmill2" ] ] > ], > "def" : [ "tmx", "street_windmill2.json" ], 582,583d650 < < dungeons\novakid\novakidvillage\saloonbase1.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_balcony1.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_balcony2.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_balcony3.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_balcony4.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_balcony5.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_balcony6.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_balcony7.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_balcony8.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar1_left.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar1_right.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar2_left.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar2_right.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar3_left.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar3_right.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar4_left.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar4_right.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar5_left.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar5_right.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar6_left.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar6_right.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar7_left.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar7_right.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar8_left.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\saloon_bar8_right.json [TMX file differences are left out for huge size.] dungeons\novakid\novakidvillage\street_empty.json [TMX file differences are left out for huge size.] items\active\grapplinghooks\grapplinghook.lua 203c203 < self.ropeLength = self.ropeLength + vec2.mag(vec2.sub(self.rope[i], self.rope[i - 1])) --- > self.ropeLength = self.ropeLength + world.magnitude(self.rope[i], self.rope[i - 1]) items\armors\avian\avian-tier5manipulator\aviantier5manipulator.chest 8c8 < "description" : "A ferozium chainmail suit that guards the torso but lets the feathers breath.", --- > "description" : "A ferozium chainmail suit that guards the torso but lets the feathers breathe.", 76c76 < } \ No newline at end of file --- > } items\generic\other\upgrademodule.item 2a3 > "price" : 1500, 7,8c8 < "shortdescription" : "Upgrade Module", < "itemTags" : [ "reagent" ] --- > "shortdescription" : "Upgrade Module" monsters\fishing\appearState.lua 1,2d0 < require "/scripts/util.lua" < 6,12c4 < if storage.fadeTimer == 0 then return {} end < end < < function appearState.enterWith(parameters) < if not parameters.appear then return nil end < < return {} --- > if storage.stateStage == "appear" then return {} end 16c8 < -- sb.logInfo("Entering appear state") --- > 20,22c12 < storage.fadeTimer = math.min(self.fadeTime, storage.fadeTimer + dt) < < -- sb.logInfo("fadeTimer increased to %s", storage.fadeTimer) --- > self.targetOpacity = 1 24c14,15 < if storage.fadeTimer == self.fadeTime then --- > if self.currentOpacity == 1 then > storage.stateStage = "approach" 28,30c19 < if self.toLure then < move(self.toLure, false, true) < end --- > move(self.toLure, false) 36c25 < -- sb.logInfo("leaving appearState") --- > monsters\fishing\disappearState.lua 6,12c6,12 < if self.seenItAll then return {} end < end < < function disappearState.enterWith(parameters) < if not parameters.disappear then return nil end < < return {} --- > if storage.stateStage == "disappear" or (storage.stateStage == "despawn" and self.inLiquid) then > local escapeVector = vec2.mul(self.toLure, -1) > if escapeVector[2] > 0 then escapeVector[2] = 0 end > return { > escapeVector = escapeVector > } > end 16c16 < -- sb.logInfo("Entering disappearState") --- > 20,22c20 < storage.fadeTimer = math.max(0, storage.fadeTimer - dt) < < -- sb.logInfo("fadeTimer increased to %s", storage.fadeTimer) --- > if not self.inLiquid then return true end 24c22,26 < if storage.fadeTimer == 0 then --- > self.targetOpacity = 0 > self.targetColorFade = 0 > if self.currentOpacity == 0 then > monster.setDeathSound() > monster.setDeathParticleBurst() 28,29c30,31 < if self.toLure then < move(vec2.mul(self.toLure, -1), true, true) --- > if collides("blockedSensors") then > stateData.escapeVector = vec2.rotate(stateData.escapeVector, util.randomInRange(math.pi - 0.5, math.pi + 0.5)) 31a34,35 > move(stateData.escapeVector, true) > 36c40 < -- sb.logInfo("leaving disappearState") --- > monsters\fishing\fishingMonster.lua 1a2,3 > require "/scripts/vec2.lua" > require "/scripts/stateMachine.lua" 6a9 > storage.stateStage = storage.stateStage or "appear" 8,10c11,13 < self.moveRatioLimit = config.getParameter("moveRatioLimit", false) < self.directionChangeTimer = 0 < self.slowSpeed = mcontroller.baseParameters().flySpeed / 2.0 --- > self.fastSpeed = config.getParameter("swimSpeedFast") > self.slowSpeed = config.getParameter("swimSpeedSlow") > self.swimForce = config.getParameter("swimForce") 15,16c18,23 < storage.fadeTimer = storage.fadeTimer or 0 < self.fadeTime = config.getParameter("fadeTime", 2.0) --- > self.currentOpacity = 0 > self.targetOpacity = 1 > self.currentColorFade = 0 > self.targetColorFade = 0 > self.fadeTime = config.getParameter("fadeTime", 1.0) > self.colorFadeDistance = config.getParameter("colorFadeDistance", {3, 8}) 19,21c26,35 < if self.lureId and world.entityExists(self.lureId) then < self.toLure = world.distance(world.entityPosition(self.lureId), mcontroller.position()) < end --- > self.ownerId = config.getParameter("ownerId") > self.reelParameters = config.getParameter("reelParameters") > > self.rodPosition = config.getParameter("rodPosition") > self.controls = {} > > message.setHandler("updateHooked", function(_, _, rodPosition, controls) > self.rodPosition = rodPosition > self.controls = controls > end) 23,24c37,42 < message.setHandler("setLureId", function(_, _, lureId) < storage.lureId = lureId --- > message.setHandler("unhook", function() > self.lureId = nil > self.ownerId = nil > if storage.stateStage ~= "landed" then > despawn() > end 27,28c45,56 < -- monster.setDeathSound("deathPuff") < -- monster.setDeathParticleBurst(config.getParameter("deathParticles")) --- > message.setHandler("catch", function() > local toOwner = world.distance(world.entityPosition(self.ownerId), mcontroller.position()) > mcontroller.setVelocity({util.toDirection(toOwner[1]) * 10, 20}) > storage.stateStage = "landed" > self.lureId = nil > self.ownerId = nil > self.state.pickState() > end) > > self.inLiquid = true > > -- sb.logInfo("Fishing monster %s spawned", entity.id()) 40,49c68,71 < if mcontroller.liquidMovement() then < if not self.state.hasState() then < self.state.pickState() < end < elseif self.state.stateDesc() ~= "flopState" then < self.state.pickState({flop = true}) < end < < if self.lureId and world.entityExists(self.lureId) then < self.toLure = world.distance(world.entityPosition(self.lureId), mcontroller.position()) --- > updateLure() > updateOwner() > if not self.lureId and not self.ownerId and storage.stateStage ~= "landed" then > despawn() 54c76 < updateFade() --- > self.inLiquid = mcontroller.liquidPercentage() > 0.9 56c78 < if self.directionChangeTimer > 0 then self.directionChangeTimer = self.directionChangeTimer - dt end --- > updateFade(dt) 59,62c81,90 < function updateFade() < local baseRatio = storage.fadeTimer / self.fadeTime < local fadeRatio = (1 - math.max(0, math.min(1, (baseRatio - 0.4) * 1.9))) ^ 0.25 < local opacityRatio = math.min(1, baseRatio * 1.3) --- > function updateLure() > if self.lureId then > if world.entityExists(self.lureId) then > self.toLure = world.distance(world.entityPosition(self.lureId), mcontroller.position()) > else > self.lureId = nil > end > end > self.toLure = self.toLure or {mcontroller.facingDirection(), 0} > end 64,68c92,94 < if baseRatio < 1 then < status.setPrimaryDirectives(string.format("?fade=000000FF;%.2f?multiply=FFFFFF%02X", fadeRatio, math.floor(opacityRatio * 255))) < -- sb.logInfo("primary directives set to %s", status.primaryDirectives()) < else < status.setPrimaryDirectives() --- > function updateOwner() > if self.ownerId and not world.entityExists(self.ownerId) then > self.ownerId = nil 72,78c98,104 < function move(direction, run, noRatioLimit) < moveDirection = {direction[1], direction[2]} < if not noRatioLimit and self.moveRatioLimit and moveDirection[1] ~= 0 then < -- limit movement angle < if math.abs(moveDirection[2] / moveDirection[1]) > self.moveRatioLimit then < moveDirection[2] = math.abs(moveDirection[1] * self.moveRatioLimit) * util.toDirection(moveDirection[2]) < end --- > function updateFade(dt) > if storage.stateStage == "landed" or storage.stateStage == "hooked" or not self.inLiquid then > self.targetOpacity = 1 > self.targetColorFade = 1 > else > local lureDist = vec2.mag(self.toLure) > self.targetColorFade = 1 - math.min(1, math.max(0, (lureDist - self.colorFadeDistance[1]) / (self.colorFadeDistance[2] - self.colorFadeDistance[1]))) 81c107,111 < moveDirection = vec2.norm(moveDirection) --- > if self.targetOpacity < self.currentOpacity then > self.currentOpacity = math.max(self.targetOpacity, self.currentOpacity - dt / self.fadeTime) > elseif self.targetOpacity > self.currentOpacity then > self.currentOpacity = math.min(self.targetOpacity, self.currentOpacity + dt / self.fadeTime) > end 83,89c113,116 < -- don't change direction too often < if util.toDirection(moveDirection[1]) ~= util.toDirection(mcontroller.facingDirection()) then < if self.directionChangeTimer > 0 then < moveDirection[1] = -moveDirection[1] < else < self.directionChangeTimer = config.getParameter("directionChangeCooldown") < end --- > if self.targetColorFade < self.currentColorFade then > self.currentColorFade = math.max(self.targetColorFade, self.currentColorFade - dt / self.fadeTime) > elseif self.targetColorFade > self.currentColorFade then > self.currentColorFade = math.min(self.targetColorFade, self.currentColorFade + dt / self.fadeTime) 91a119,127 > status.setPrimaryDirectives(string.format("?fade=000000FF;%.2f?multiply=FFFFFF%02X", 1 - self.currentColorFade, math.floor(self.currentOpacity * 255))) > end > > function move(direction, run, animationOverride) > if not self.inLiquid then return end > > local moveDirection = vec2.norm(direction) > mcontroller.controlFace(moveDirection[1]) > 97,98c133,134 < mcontroller.controlFly(vec2.mul({ moveDirection[1], moveDirection[2] }, 1000)) < animator.setAnimationState("movement", "swimFast") --- > mcontroller.controlApproachVelocity(vec2.mul(moveDirection, self.fastSpeed), self.swimForce) > animator.setAnimationState("movement", animationOverride or "swimFast") 100,101c136,137 < mcontroller.controlFly(vec2.mul({ moveDirection[1], moveDirection[2] }, self.slowSpeed)) < animator.setAnimationState("movement", "swimSlow") --- > mcontroller.controlApproachVelocity(vec2.mul(moveDirection, self.slowSpeed), self.swimForce) > animator.setAnimationState("movement", animationOverride or "swimSlow") 105c141 < function collides(sensorGroup, direction) --- > function collides(sensorGroup) 107,108c143 < world.debugPoint(monster.toAbsolutePosition(vec2.rotate(sensor, self.rotation)), "blue") < if world.pointTileCollision(monster.toAbsolutePosition(vec2.rotate(sensor, self.rotation)), {"Dynamic", "Null", "Block"}) then --- > if world.pointTileCollision(monster.toAbsolutePosition(sensor), {"Dynamic", "Null", "Block"}) then 118,119c153 < local rotateAmount = math.atan(direction[2], direction[1]) < if rotateAmount < 0 then rotateAmount = rotateAmount + 2 * math.pi end --- > local rotateAmount = vec2.angle(direction) 121d154 < 127c160,167 < mcontroller.setRotation(mcontroller.facingDirection() > 0 and self.rotation or -self.rotation) --- > mcontroller.setRotation(self.rotation * mcontroller.facingDirection()) > end > > function despawn() > if storage.stateStage ~= "despawn" then > storage.stateStage = "despawn" > self.state.pickState() > end monsters\fishing\fishingmed\default.frames 4c4 < "dimensions" : [1, 2], --- > "dimensions" : [8, 1], 7,8c7 < [ "swim.1" ], < [ "swim.2" ] --- > [ "swim.1", "swim.2", "swim.3", "swim.4", "panic.1", "panic.2", "panic.3", "panic.4" ] monsters\fishing\fishingmed\fishingmed.animation 9,10c9,10 < "flopping" : { < "frames" : 2, --- > "panic" : { > "frames" : 4, 15c15 < "frames" : 2, --- > "frames" : 4, 20,21c20,21 < "frames" : 2, < "cycle" : 0.5, --- > "frames" : 4, > "cycle" : 0.7, 43c43 < "flopping" : { --- > "panic" : { 45c45 < "image" : ":swim." --- > "image" : ":panic." 66c66 < "angularVelocity" : 3.0 --- > "angularVelocity" : 20.0 72c72,86 < "particles" : [] --- > "particles" : [ > { "particle" : "monstersplosion" }, > { "particle" : "deathember" }, > { "particle" : "deathember" }, > { "particle" : "deathember" }, > { "particle" : "deathember" }, > { "particle" : "deathfizz1left" }, > { "particle" : "deathfizz1right" }, > { "particle" : "deathfizz2left" }, > { "particle" : "deathfizz2right" }, > { "particle" : "deathfizz3left" }, > { "particle" : "deathfizz3right" }, > { "particle" : "deathfizz4left" }, > { "particle" : "deathfizz4right" } > ] 77c91 < "deathPuff" : [] --- > "deathPuff" : ["/sfx/npc/enemydeathpuff.ogg"] monsters\fishing\fishingmed\fishingmed.monstertype 12,14d11 < "/scripts/util.lua", < "/scripts/vec2.lua", < "/scripts/stateMachine.lua", 16c13,14 < "/monsters/fishing/lookState.lua", --- > "/monsters/fishing/approachState.lua", > "/monsters/fishing/hookedState.lua", 18c16,17 < "/monsters/fishing/flopState.lua" --- > "/monsters/fishing/outOfWaterState.lua", > "/monsters/fishing/landedState.lua" 25c24 < "collisionPoly" : [ [-1.25, -0.75], [1.25, -0.75], [1.25, 0.75], [-1.25, 0.75] ], --- > "collisionPoly" : [ [-1.25, 0], [0, 0.75], [1.25, 0], [0, -0.75] ], 27c26 < "mass" : 1.5, --- > "mass" : 1.0, 29c28 < "flySpeed" : 5, --- > "airFriction" : 0.5, 31d29 < "liquidForce" : 80.0, 48,63c46,48 < "moveRatioLimit" : 0.6, < "directionChangeCooldown" : 1.0, < < "targetSearchRadius" : 15, < "targetHoldRadius" : 40, < "targetChangeCooldown" : 5.0, < < "attackStartDistance" : 12.0, < "attackApproachTime" : 3.0, < "attackWindupTime" : 1.0, < "attackChargeTime" : 1.2, < "attackChargeSpeed" : 60, < < "wanderTime" : [4.0, 8.0], < < "fleeTimeRange" : [2.0, 3.0], --- > "swimSpeedFast" : 15, > "swimSpeedSlow" : 2, > "swimForce" : 100, 71,75c56 < "colors" : "generated", < < "blockedSensors" : [ [2.75, -1.0], [3.0, 0.0], [2.75, 1.0] ], < "upSensors" : [ [-1.25, -1.25], [1.0, -1.25], [2.75, -1.25] ], < "downSensors" : [ [-1.25, 0.75], [1.0, 0.75], [2.75, 0.75] ], --- > "blockedSensors" : [ [1.25, -0.5], [1.25, 0.5] ], 93,98d73 < "knockbackStunTime" : { < "baseValue" : 0.25 < }, < "knockbackThreshold" : { < "baseValue" : 9 < }, 100c75 < "baseValue" : 72 --- > "baseValue" : 10 114,117d88 < "stunned" : { < "deltaValue" : -1.0, < "initialValue" : 0.0 < }, 126,127c97,98 < "mouthOffset" : [0, 0], < "feetOffset" : [0, -4], --- > "mouthOffset" : [9, 0], > "feetOffset" : [0, -6], monsters\generated\swimming\swimmingMonster.lua 144,145c144,145 < -- world.debugPoint(monster.toAbsolutePosition(vec2.rotate(sensor, self.rotation)), "blue") < if world.pointTileCollision(monster.toAbsolutePosition(vec2.rotate(sensor, self.rotation)), {"Dynamic", "Null", "Block"}) then --- > -- world.debugPoint(monster.toAbsolutePosition(sensor), "blue") > if world.pointTileCollision(monster.toAbsolutePosition(sensor), {"Dynamic", "Null", "Block"}) then objects\novakid\frontiercoffin\frontiercoffin.object 12c12 < "avianDescription" : "Tradtional Avian culture would bury their dead in much grander coffins than this.", --- > "avianDescription" : "Traditional Avian culture would bury their dead in much grander coffins than this.", objects\novakid\frontierdoor\frontierdoor.object 12,14c12,14 < "apexDescription" : "", < "avianDescription" : "", < "floranDescription" : "", --- > "apexDescription" : "This wood door has a large, strange symbol on it.", > "avianDescription" : "I wonder if the emblem on this door has meaning.", > "floranDescription" : "Thiss frontier door is dry and old.", 17,18c17,18 < "hylotlDescription" : "", < "novakidDescription" : "", --- > "hylotlDescription" : "The symbol on this door is not familiar to me.", > "novakidDescription" : "Ain't unusual to see doors like this in a frontier buildin'.", objects\novakid\frontiergramophone\frontiergramophone.object 18c18 < "hylotlDescription" : "This music player is suprisingly functional for how simple it is.", --- > "hylotlDescription" : "This music player is surprisingly functional for how simple it is.", objects\novakid\frontierlamppost\frontierlamppost.object 17c17 < "hylotlDescription" : "This lamp post is made from tought iron - I'm sure it could withstand a lot.", --- > "hylotlDescription" : "This lamp post is made from wrought iron - I'm sure it could withstand a lot.", objects\novakid\frontierpainting3\frontierpainting3.object 15c15 < "humanDescription" : "This mooshi in this painting is very majestic for a farm animal.", --- > "humanDescription" : "The mooshi in this painting is very majestic for a farm animal.", objects\novakid\picturestand\picturestand.object 12c12 < "avianDescription" : "Do I stand with my face in the hole to create a picture? How humourous!", --- > "avianDescription" : "Do I stand with my face in the hole to create a picture? How humorous!", objects\novakid\safe\safe.object 17c17 < "floranDescription" : "A sssafe. Keepss tresure away from otherss", --- > "floranDescription" : "A sssafe. Keepss treasure away from otherss", objects\novakid\saloonsign\saloonsign.object 14c14 < "glitchDescription" : "Observant. This sign appears very appealling - I suspect it is meant to draw in customers.", --- > "glitchDescription" : "Observant. This sign appears very appealing - I suspect it is meant to draw in customers.", objects\themed\pastel\pastelbed\pastelbed.object 8c8 < "description" : "-todo-", --- > "description" : "A charming, pastel coloured bed.", 12,18c12,18 < "apexDescription" : "-todo-", < "avianDescription" : "-todo-", < "floranDescription" : "-todo-", < "glitchDescription" : "-todo-", < "humanDescription" : "-todo-", < "hylotlDescription" : "-todo-", < "novakidDescription": "-todo-", --- > "apexDescription" : "How sickly sweet.", > "avianDescription" : "These are very bright colours for a bed!", > "floranDescription" : "Bed hasss flowers on. Floran isss fine with thisss.", > "glitchDescription" : "Intrigued. This bed has many details, such as the heart on the headboard, and the flower print sheets.", > "humanDescription" : "What an adorable bed!", > "hylotlDescription" : "This bed is made with a very nice selection of colours.", > "novakidDescription": "This bed looks a little fancy for me...", objects\themed\pastel\pastelbunnyplush\pastelbunnyplush.object 8,9c8,9 < "description" : "-todo-", < "shortdescription" : "Pastel Bunny Plush", --- > "description" : "A scented pink bunny plush toy.", > "shortdescription" : "Pastel Bunny Plushie", 12,18c12,18 < "apexDescription" : "-todo-", < "avianDescription" : "-todo-", < "floranDescription" : "-todo-", < "glitchDescription" : "-todo-", < "humanDescription" : "-todo-", < "hylotlDescription" : "-todo-", < "novakidDescription": "-todo-", --- > "apexDescription" : "This sickenly cute plush toy is also rose-scented.", > "avianDescription" : "This cute plush toy is actually rose-scented as well.", > "floranDescription" : "Tiny thing smellsss like rosessss. Floran approvesss.", > "glitchDescription" : "Enamoured. This plush toy is utterly adorable.", > "humanDescription" : "This pink bunny toy is so sickenly cute I want to punch it.", > "hylotlDescription" : "This plush toy actually smells like roses. That's a nice touch.", > "novakidDescription": "Well ain't this the cutest thing?", objects\themed\pastel\pastelcabinet\pastelcabinet.object 8c8 < "description" : "-todo-", --- > "description" : "A small cabinet, painted in bright pastel colours.", 13,19c13,19 < "apexDescription" : "-todo-", < "avianDescription" : "-todo-", < "floranDescription" : "-todo-", < "glitchDescription" : "-todo-", < "humanDescription" : "-todo-", < "hylotlDescription" : "-todo-", < "novakidDescription": "-todo-", --- > "apexDescription" : "A rather charming little cabinet.", > "avianDescription" : "This cabinet has a star shaped handle. A nice touch!", > "floranDescription" : "Floran likesss flowery colours of cabinet.", > "glitchDescription" : "Impressed. The handle is carved to look like a little star - a nice detail.", > "humanDescription" : "Aww, this cabinet has little hearts on the side!", > "hylotlDescription" : "This cabinet is rather charming.", > "novakidDescription": "The colours are a little garish for my tastes.", objects\themed\pastel\pastelchair\pastelchair.object 8c8 < "description" : "-todo-", --- > "description" : "a pastel coloured chair with a heart-shaped backrest.", 12,18c12,18 < "apexDescription" : "-todo-", < "avianDescription" : "-todo-", < "floranDescription" : "-todo-", < "glitchDescription" : "-todo-", < "humanDescription" : "-todo-", < "hylotlDescription" : "-todo-", < "novakidDescription": "-todo-", --- > "apexDescription" : "The backrest on this chair is shaped like a heart. That's creative.", > "avianDescription" : "What a charming little chair!", > "floranDescription" : "Chair is nice coloursss.", > "glitchDescription" : "Surprised. The backrest on this chair is a heart... With a smaller heart on top!", > "humanDescription" : "This chair sure has a lot of hearts on it!", > "hylotlDescription" : "This chair features some very tropical colours. I like it.", > "novakidDescription": "I ain't sure this chair is my thing, but I appreciate the attention t' detail on it.", objects\themed\pastel\pastellight\pastellight.object 8c8 < "description" : "-todo-", --- > "description" : "a wall mounted fluorescent pink light.", 12,18c12,18 < "apexDescription" : "-todo-", < "avianDescription" : "-todo-", < "floranDescription" : "-todo-", < "glitchDescription" : "-todo-", < "humanDescription" : "-todo-", < "hylotlDescription" : "-todo-", < "novakidDescription": "-todo-", --- > "apexDescription" : "I haven't seen many lamps that glow pink like this!", > "avianDescription" : "The soft pink glow from this lamp is soothing.", > "floranDescription" : "Floran likesss light colour. Good colour.", > "glitchDescription" : "Observant. I haven't seen many lamps that glow pink like this.", > "humanDescription" : "The subtle pink glow of this lamp is very calming. I could stare at it for hours.", > "hylotlDescription" : "I could believe a Hylotl made this lamp - it's so calming!", > "novakidDescription": "This lamp gives off a warm glow, doesn't it?", objects\themed\pastel\pastelstool\pastelstool.object 8c8 < "description" : "-todo-", --- > "description" : "A small pastel coloured stool.", 12,18c12,18 < "apexDescription" : "-todo-", < "avianDescription" : "-todo-", < "floranDescription" : "-todo-", < "glitchDescription" : "-todo-", < "humanDescription" : "-todo-", < "hylotlDescription" : "-todo-", < "novakidDescription": "-todo-", --- > "apexDescription" : "A small stool, adorned with decorative hearts.", > "avianDescription" : "A quaint little stool. It has hearts on it!", > "floranDescription" : "Floran wondersss if ssstool is made from real heartsss.", > "glitchDescription" : "Curious. A small stool, decorated with hearts.", > "humanDescription" : "This is a rather appealing little stool.", > "hylotlDescription" : "A rather pleasant little stool.", > "novakidDescription": "A pretty lil' stool for resting up on.", objects\themed\pastel\pasteltable\pasteltable.object 8c8 < "description" : "-todo-", --- > "description" : "A brightly coloured table with a flowery tablecloth.", 12,18c12,18 < "apexDescription" : "-todo-", < "avianDescription" : "-todo-", < "floranDescription" : "-todo-", < "glitchDescription" : "-todo-", < "humanDescription" : "-todo-", < "hylotlDescription" : "-todo-", < "novakidDescription": "-todo-", --- > "apexDescription" : "This table has a very pleasant tablecloth.", > "avianDescription" : "I like the flowery tablecloth on this table!", > "floranDescription" : "Floran likesss flowery table.", > "glitchDescription" : "Observant. This table has been painted with a variety of pastel colours.", > "humanDescription" : "The flowers on this tablecloth are hand-stitched. Such dedication!", > "hylotlDescription" : "What an intricately decorated table.", > "novakidDescription": "That's a might pretty table.", objects\themed\pastel\pastelwallclock\pastelwallclock.object 8c8 < "description" : "-todo-", --- > "description" : "a colourful square wall clock.", 12,18c12,18 < "apexDescription" : "-todo-", < "avianDescription" : "-todo-", < "floranDescription" : "-todo-", < "glitchDescription" : "-todo-", < "humanDescription" : "-todo-", < "hylotlDescription" : "-todo-", < "novakidDescription": "-todo-", --- > "apexDescription" : "A lilac coloured wall clock.", > "avianDescription" : "A rather unique looking wall clock.", > "floranDescription" : "Floran hasss no time to check the time.", > "glitchDescription" : "Curious. This is a very odd shaped clock.", > "humanDescription" : "I like my clocks to be square and brightly coloured!", > "hylotlDescription" : "A rather fun shaped clock.", > "novakidDescription": "Time's a-tickin' away.", objects\themed\pastel\pastelwardrobe\pastelwardrobe.object 8c8 < "description" : "-todo-", --- > "description" : "A marvellous pastel coloured wardrobe.", 13,19c13,19 < "apexDescription" : "-todo-", < "avianDescription" : "-todo-", < "floranDescription" : "-todo-", < "glitchDescription" : "-todo-", < "humanDescription" : "-todo-", < "hylotlDescription" : "-todo-", < "novakidDescription": "-todo-", --- > "apexDescription" : "A finely decorated wardrobe.", > "avianDescription" : "This wardrobe is decorated with painted hearts and big star at the top.", > "floranDescription" : "Floran wantsss to hide in thing.", > "glitchDescription" : "Impressed. This wardrobe looks like a labour of love.", > "humanDescription" : "This is a very magical looking wardrobe. Think of all the things that could be inside!", > "hylotlDescription" : "Fine craftsmanship went into the making of this wardrobe.", > "novakidDescription": "I'm likin' the little star decoration at the top of this here wardrobe.", projectiles\physics.config 146c146 < "collisionPoly" : [ [-0.5, -0.5], [0.5, -0.5], [0.5, 0.5], [-0.5, 0.5] ], --- > "collisionPoly" : [ [0, 0], [1, 0.5], [2, 0], [1, -0.5] ], 153c153 < "maximumCorrection" : 0.75 --- > "maximumCorrection" : 1.5 quests\generated\templates\borrow.questtemplate 41c41 < "Eager. First things first, youΓÇÖll need to ^green;speak to ^orange; ^white;and ^green;borrow ^orange;. ^white;Just tell I sent you, and 'll be happy to lend it to you.", --- > "Eager. First things first, you'll need to ^green;speak to ^orange; ^white;and ^green;borrow ^orange;. ^white;Just tell I sent you, and 'll be happy to lend it to you.", 55c55 < "Spontaneous. WeΓÇÖll need to ^green;borrow^orange; ΓÇÖs ^white;next. ΓÇÖll not have a problem handing it over if you ^green;tell I sent you.", --- > "Spontaneous. We'll need to ^green;borrow^orange; 's ^white;next. 'll not have a problem handing it over if you ^green;tell I sent you.", quests\generated\templates\bribe.questtemplate 69c69 < "Conniving. The next thing IΓÇÖd like you to do is give ^orange; ^white;a very special something. ^green;I need to receive the ^orange;^white; in order for the plan to work.", --- > "Conniving. The next thing I'd like you to do is give ^orange; ^white;a very special something. ^green;I need to receive the ^orange;^white; in order for the plan to work.", quests\generated\templates\return_stolen.questtemplate 80c80 < "You won't believe what's happened! ^orange;^white; was robbed by none other than ^orange;.^white; Floran wishes there was sssomething we could do to help. Maybe you can ^green;return the stolen ^orange; ^green;to ΓÇÖs houssse?" --- > "You won't believe what's happened! ^orange;^white; was robbed by none other than ^orange;.^white; Floran wishes there was sssomething we could do to help. Maybe you can ^green;return the stolen ^orange; ^green;to 's houssse?" 83c83 < "Concerned. A thief who goes by the name of ^orange;^white; has stolen ΓÇÖs prized ^orange;! Will you^green; retrieve it and put it back in ^orange;ΓÇÖs^green; house?^white; I'm sure would appreciate it.", --- > "Concerned. A thief who goes by the name of ^orange;^white; has stolen 's prized ^orange;! Will you^green; retrieve it and put it back in ^orange;'s^green; house?^white; I'm sure would appreciate it.", 87,88c87,88 < "Alright, I know for a fact that ^orange;^white; has stolen ^orange;ΓÇÖs ^white;. IΓÇÖll keep watch while you ^green;take it back.^white; 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;^white; we need to steal back is located in ^orange;ΓÇÖs home. ^green;Go get it, then place it back in ^orange;ΓÇÖs^green; home." --- > "Alright, I know for a fact that ^orange;^white; has stolen ^orange;'s ^white;. I'll keep watch while you ^green;take it back.^white; 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;^white; we need to steal back is located in ^orange;'s home. ^green;Go get it, then place it back in ^orange;'s^green; home." 102c102 < "A little breaking and entering never hurt anyone... Sort of. Go ^green;steal back the ^orange; ^green; in ^orange;'s ^green; home. Then put it back in ^orange;ΓÇÖs ^green; home." --- > "A little breaking and entering never hurt anyone... Sort of. Go ^green;steal back the ^orange; ^green; in ^orange;'s ^green; home. Then put it back in ^orange;'s ^green; home." 116c116 < "Everything else is in place! ItΓÇÖs time for some vigilante style burglary. IΓÇÖll be your lookout while you^green; grab the stolen ^orange;^green; from ^orange;ΓÇÖs^green;place. Then sneak it back into ^orange;ΓÇÖs^green; home." --- > "Everything else is in place! It's time for some vigilante style burglary. I'll be your lookout while you^green; grab the stolen ^orange;^green; from ^orange;'s^green;place. Then sneak it back into ^orange;'s^green; home." 125c125 < "Concerned. In a moment of desperation, ^orange;^white; robbed of ^orange;^white;! If you ^green;retrieve it and put it back in ^orange;ΓÇÖs^green; house,^white; may never even realise it was gone. I would be grateful.", --- > "Concerned. In a moment of desperation, ^orange;^white; robbed of ^orange;^white;! If you ^green;retrieve it and put it back in ^orange;'s^green; house,^white; may never even realise it was gone. I would be grateful.", quests\generated\templates\steal.questtemplate 87c87 < "Paranoid. This is the I required. I hope nobody saw you take it! Better not hand it to me immediately. LetΓÇÖs wait for a moment." --- > "Paranoid. This is the I required. I hope nobody saw you take it! Better not hand it to me immediately. Let's wait for a moment." 100,101c100,101 < "Unimpressed. This looks like ΓÇÖs alright. ItΓÇÖs not in the best condition, but itΓÇÖll have to do for now.", < "Panicked. Don't just hand me that ! You think wouldn't put two and two together? hold on to it for now. " --- > "Unimpressed. This looks like 's alright. It's not in the best condition, but it'll have to do for now.", > "Panicked. Don't just hand me that ! You think wouldn't put two and two together? Hold on to it for now. " tiles\materials\copperfence.material 14d13 < "damageTable" : "/tiles/flammableDamage.config", vehicles\boat\boat.vehicle 55c55 < "rockingWindAngleMultiplier": -0.006, --- > "rockingWindAngleMultiplier": -0.002,