FILES ----- client.config [NEW] damage\electricplasmabullet.damage [NEW] damage\electricplasmashotgun.damage [NEW] damage\fireplasmabullet.damage [NEW] damage\fireplasmashotgun.damage [NEW] damage\iceplasmabullet.damage [NEW] damage\iceplasmashotgun.damage [NEW] damage\poisonplasmabullet.damage [NEW] damage\poisonplasmashotgun.damage [NEW] damage\shotgunbullet.damage [NEW] damage\standardbullet.damage dungeons\other\outpost\outpost.json interface\confirmation\teleportconfirmation.config interface\games\fossilgame\fossilgame.lua interface\games\fossilgame\fossilgamegui.config interface\games\fossilgame\generator.lua interface\games\fossilgame\level.lua interface\games\fossilgame\tools.lua [NEW] interface\games\fossilgame\images\raretreasurechest.png [NEW] interface\games\fossilgame\images\treasurechest.png interface\windowconfig\crafting.config interface\windowconfig\craftinganvil.config interface\windowconfig\craftingfarming.config interface\windowconfig\craftingfood.config interface\windowconfig\craftingfurnace.config interface\windowconfig\craftingfurniture.config interface\windowconfig\craftingmedical.config [NEW] interface\windowconfig\craftingwheel.config interface\windowconfig\inventorstable.config interface\windowconfig\wiringstation.config [NEW] items\active\weapons\melee\broadsword\legendblade.activeitem [NEW] items\active\weapons\melee\broadsword\legendblade.png [NEW] items\active\weapons\melee\broadsword\stoneblade.activeitem [NEW] items\active\weapons\melee\broadsword\stoneblade.png items\active\weapons\melee\dagger\commondagger.activeitem items\active\weapons\melee\dagger\raredagger.activeitem items\active\weapons\melee\dagger\uncommondagger.activeitem [NEW] items\active\weapons\novakid\titaniummachinepistol.png [NEW] items\active\weapons\novakid\titaniumsniperrifle.png [NEW] items\active\weapons\novakid\tungstenmagnum.png [NEW] items\active\weapons\novakid\tungstenshotgun.activeitem [NEW] items\active\weapons\novakid\tungstenshotgun.png items\active\weapons\npc\npcdagger.activeitem items\active\weapons\npc\npcmachinepistol.activeitem items\active\weapons\npc\npcpistol.activeitem items\active\weapons\npc\npcshotgun.activeitem items\active\weapons\other\armgun\armgun.activeitem items\active\weapons\other\armgun\armgun.animation items\active\weapons\other\armgun\default.frames [NEW] items\active\weapons\other\armgun\rocketstack.lua items\active\weapons\other\chargegun\chargegun.animation items\active\weapons\other\chargegun\default.frames items\active\weapons\other\gristlegun\gristlegun.activeitem items\active\weapons\protectorate\titaniumdagger.activeitem items\active\weapons\protectorate\tungstenaxe.activeitem items\active\weapons\protectorate\aegisaltpistol\aegisaltpistol.activeitem items\active\weapons\ranged\abilities\burstshot\burstshot.weaponability 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\shotgun\commonshotgun.activeitem items\active\weapons\ranged\shotgun\rareshotgun.activeitem items\active\weapons\ranged\shotgun\uncommonshotgun.activeitem items\armors\novakid\nova-tier1\novatier1.chest items\armors\novakid\nova-tier1\novatier1.head items\armors\novakid\nova-tier1\novatier1.legs items\armors\novakid\nova-tier2\novatier2.chest items\armors\novakid\nova-tier2\novatier2.head items\armors\novakid\nova-tier2\novatier2.legs items\armors\novakid\nova-tier3\novatier3.chest items\armors\novakid\nova-tier3\novatier3.head items\armors\novakid\nova-tier3\novatier3.legs items\armors\novakid\nova-tier4\novatier4.chest items\armors\novakid\nova-tier4\novatier4.head items\armors\novakid\nova-tier4\novatier4.legs items\armors\novakid\nova-tier5accelerator\novatier5accelerator.chest items\armors\novakid\nova-tier5accelerator\novatier5accelerator.legs items\armors\novakid\nova-tier5manipulator\novatier5manipulator.chest items\armors\novakid\nova-tier5manipulator\novatier5manipulator.head items\armors\novakid\nova-tier5manipulator\novatier5manipulator.legs items\armors\novakid\nova-tier5separator\novatier5separator.chest items\armors\novakid\nova-tier5separator\novatier5separator.head items\armors\novakid\nova-tier5separator\novatier5separator.legs items\armors\novakid\nova-tier6accelerator\novatier6accelerator.chest items\armors\novakid\nova-tier6accelerator\novatier6accelerator.head items\armors\novakid\nova-tier6accelerator\novatier6accelerator.legs items\armors\novakid\nova-tier6manipulator\novatier6manipulator.chest items\armors\novakid\nova-tier6manipulator\novatier6manipulator.head items\armors\novakid\nova-tier6manipulator\novatier6manipulator.legs items\armors\novakid\nova-tier6separator\novatier6separator.chest items\armors\novakid\nova-tier6separator\novatier6separator.head items\armors\novakid\nova-tier6separator\novatier6separator.legs items\armors\novakid\novakidfancy\novakidfancy.chest items\armors\novakid\novakidfancy\novakidfancy.legs items\armors\novakid\novakidjacket\icons.png items\armors\novakid\novakidjacket\novakidjacket.chest items\armors\novakid\novakidjacket\novakidjacket.legs items\armors\novakid\novakidwaistcoat\novakidwaistcoat.chest items\armors\novakid\novakidwaistcoat\novakidwaistcoat.legs items\generic\produce\thornfruit.consumable objects\crafting\alloyfurnace\alloyfurnace.object objects\crafting\campfire\campfire.object objects\crafting\refinery\refinery.object objects\crafting\stonefurnace\stonefurnace.object objects\crafting\upgradeablecraftingobjects\craftingwheel\craftingwheel.object [NEW] objects\farmables\stonesword\stoneswordlegendblade.png [NEW] objects\farmables\stonesword\stoneswordseed.png [NEW] objects\farmables\stonesword\stoneswordstoneblade.png objects\floran\floranstove\floranstove.object [NEW] objects\fossils\dirtyfossils\dirtyfossil.animation objects\fossils\dirtyfossils\dirtyfossil.lua objects\fossils\dirtyfossils\dirtyfossil1.object objects\fossils\dirtyfossils\dirtyfossil2.object objects\fossils\dirtyfossils\dirtyfossil3.object objects\fossils\dirtyfossils\dirtyfossil4.object objects\fossils\dirtyfossils\dirtyfossil5.object objects\fossils\dirtyfossils\dirtyfossil6.object objects\fossils\dirtyfossils\dirtyfossil7.object objects\fossils\dirtyfossils\dirtyfossil8.object objects\generic\nanostove\nanostove.object objects\glitch\medievallargecookingpot\medievallargecookingpot.object objects\outpost\ursaminer\ursaminer.object projectiles\guns\bullets\standardbullet\standardbullet.projectile projectiles\guns\plasmabullets\electricplasma\electricplasma.projectile projectiles\guns\plasmabullets\fireplasma\fireplasma.projectile projectiles\guns\plasmabullets\iceplasma\iceplasma.projectile projectiles\guns\plasmabullets\poisonplasma\poisonplasma.projectile [NEW] sfx\gun\bullet_hit_organic.ogg [NEW] sfx\gun\bullet_hit_wood1.ogg [NEW] sfx\gun\bullet_hit_wood2.ogg [NEW] sfx\gun\bullet_hit_wood3.ogg [NEW] sfx\gun\bullet_kill_organic.ogg [NEW] sfx\gun\plasmabullet_hit_metal1.ogg [NEW] sfx\gun\plasmabullet_hit_metal2.ogg [NEW] sfx\gun\plasmabullet_hit_metal3.ogg [NEW] sfx\gun\plasmabullet_hit_metal4.ogg [NEW] sfx\gun\plasmabullet_hit_metal5.ogg [NEW] sfx\gun\plasmabullet_hit_organic.ogg [NEW] sfx\gun\plasmabullet_hit_wood1.ogg [NEW] sfx\gun\plasmabullet_hit_wood2.ogg [NEW] sfx\gun\plasmabullet_hit_wood3.ogg [NEW] sfx\gun\plasmabullet_kill_organic.ogg [NEW] sfx\gun\plasmabullet_kill_wood1.ogg [NEW] sfx\gun\plasmabullet_kill_wood2.ogg [NEW] sfx\gun\plasmashotgun_hit_metal1.ogg [NEW] sfx\gun\plasmashotgun_hit_metal2.ogg [NEW] sfx\gun\plasmashotgun_hit_metal3.ogg [NEW] sfx\gun\plasmashotgun_hit_metal4.ogg [NEW] sfx\gun\plasmashotgun_hit_metal5.ogg [NEW] sfx\gun\plasmashotgun_hit_organic.ogg [NEW] sfx\gun\plasmashotgun_hit_wood1.ogg [NEW] sfx\gun\plasmashotgun_hit_wood2.ogg [NEW] sfx\gun\plasmashotgun_hit_wood3.ogg [NEW] sfx\gun\plasmashotgun_kill_organic.ogg [NEW] sfx\gun\plasmashotgun_kill_wood1.ogg [NEW] sfx\gun\plasmashotgun_kill_wood2.ogg sfx\gun\plasma_ar3.ogg [NEW] sfx\gun\shotgun_hit_organic.ogg [NEW] sfx\gun\shotgun_hit_wood1.ogg [NEW] sfx\gun\shotgun_hit_wood2.ogg [NEW] sfx\gun\shotgun_hit_wood3.ogg [NEW] sfx\gun\shotgun_kill_organic.ogg [NEW] sfx\gun\shotgun_kill_robotic1.ogg [NEW] sfx\gun\shotgun_kill_robotic2.ogg [NEW] sfx\gun\shotgun_kill_robotic3.ogg [NEW] sfx\gun\shotgun_kill_wood1.ogg [NEW] sfx\gun\shotgun_kill_wood2.ogg [NEW] sfx\interface\crafting_general1.ogg [NEW] sfx\interface\crafting_general2.ogg [NEW] sfx\interface\crafting_general3.ogg [NEW] sfx\interface\crafting_general4.ogg [NEW] sfx\interface\crafting_general5.ogg [NEW] sfx\interface\crafting_general6.ogg [NEW] sfx\interface\crafting_general7.ogg [NEW] sfx\interface\crafting_general8.ogg [NEW] sfx\melee\fossilbrush_dust.ogg DIFFS ----- client.config 109c109 < "updateTrackWindow" : 0.25 --- > "updateTrackWindow" : 0.5 dungeons\other\outpost\outpost.json [TMX file differences are left out for huge size.] interface\confirmation\teleportconfirmation.config 91,92c91,92 < "okCaption" : "READY", < "cancelCaption" : "NOT YET", --- > "okCaption" : "Ready", > "cancelCaption" : "Not now", interface\games\fossilgame\fossilgame.lua 11d10 < self.fossilId = console.sourceEntity() 13c12 < world.sendEntityMessage(self.fossilId, "setInUse", true) --- > world.sendEntityMessage(console.sourceEntity(), "setInUse", true) 30,33c29,35 < local treasureChance = world.getObjectParameter(self.fossilId, "bonusChance") < if math.random() < treasureChance then < local treasurePool = root.createTreasure(world.getObjectParameter(self.fossilId, "bonusPool"), world.threatLevel()) < self.treasureItem = treasurePool[1] --- > local treasure = world.getObjectParameter(fossilId, "treasure") > self.treasureType = treasure.type > > local treasurePool = treasure.pool > if treasurePool then > local treasure = root.createTreasure(treasurePool, world.threatLevel()) > self.treasureItem = treasure[1] 53,56c55,58 < local generator = LevelGenerator:new({ < SquareTool, < CrossTool < }) --- > local treasureTypes = config.getParameter("treasureConfig") > local treasure = treasureTypes[self.treasureType] > > local generator = LevelGenerator:new({SquareTool, CrossTool}, treasure) 64c66 < local level, toolUses = generator:generate(size, 16, position, self.treasureItem ~= nil, self.tileData[1], self.tileData[2], self.tileData[3], self.tileData[4]) --- > local level, toolUses = generator:generate(size, 16, position, self.tileData[1], self.tileData[2], self.tileData[3], treasure) 155c157,158 < treasureIcon:fitToBox(24, 24) --- > local size = vec2.mul(self.level.treasure.size, self.level.tileSize) > treasureIcon:fitToBox(size[1] - 8, size[2] - 8) 233c236 < world.sendEntityMessage(self.fossilId, "addDrop", self.treasureItem) --- > world.sendEntityMessage(console.sourceEntity(), "addDrop", self.treasureItem) 235c238 < world.sendEntityMessage(self.fossilId, "addDrop", self.fossilItem) --- > world.sendEntityMessage(console.sourceEntity(), "addDrop", self.fossilItem) interface\games\fossilgame\fossilgamegui.config 37c37,43 < "clearRockSound" : "/sfx/objects/rock_break5.ogg" --- > "clearRockSound" : "/sfx/objects/rock_break5.ogg", > > "treasureConfig" : { > "none" : {"size" : [0, 0], "image" : ""}, > "normal" : {"size" : [2, 2], "image" : "/interface/games/fossilgame/images/treasurechest.png"}, > "rare" : { "size" : [3, 3], "image" : "/interface/games/fossilgame/images/raretreasurechest.png" } > } interface\games\fossilgame\generator.lua 16,18c16,21 < function LevelGenerator:generate(size, tileSize, position, withTreasure, dirt, rock, bone, treasure) < local level = Level:new(size, tileSize, position, dirt, rock, bone, treasure) < level:init() --- > function LevelGenerator:generate(size, tileSize, position, dirt, rock, bone, treasure) > local level, toolUses > repeat > toolUses = false > level = Level:new(size, tileSize, position, dirt, rock, bone, treasure) > level:init() 20c23 < self.fossilTiles = level.fossilTiles --- > self.fossilTiles = level.fossilTiles 22c25 < self:placeFossil(level) --- > self:placeFossil(level) 24,26c27,28 < if (withTreasure) then < self:placeTreasure(level) < end --- > if self:placeTreasure(level, treasure) then > self.treasureTiles = level.treasureTiles 28c30,32 < local toolUses = self:placeRocks(level) --- > toolUses = self:placeRocks(level) > end > until toolUses 47c51 < toolTiles, placed = self:placeToolAdjacent(level, toolTiles, tool) --- > toolTiles, placed = self:placeToolAdjacent(level, toolTiles, self.fossilTiles, {}, tool) 53c57 < if level:fossilAt(tile) or math.random() <= self.toolRockChance then --- > if not level:treasureAt(tile) and (level:fossilAt(tile) or math.random() <= self.toolRockChance) then 57a62,73 > local treasureTool = self.tools[math.random(1,#self.tools)] > local treasureTiles, placed = self:placeToolAdjacent(level, {}, self.treasureTiles, self.fossilTiles, treasureTool) > if placed then > for _,tile in pairs(treasureTiles) do > if level:treasureAt(tile) or math.random() <= self.toolRockChance then > level:addRock(tile) > end > end > else > return false > end > 61,62c77,81 < if math.random() <= self.randomRockChance and not contains(self.fossilTiles, {x,y}) and not contains(toolTiles, {x,y}) then < level:addRock({x,y}) --- > if math.random() <= self.randomRockChance > and not level:treasureAt({x,y}) > and not level:fossilAt({x,y}) > and not contains(toolTiles, {x,y}) then > level:addRock({x,y}) 80c99,103 < function LevelGenerator:placeTreasure(level) --- > function LevelGenerator:placeTreasure(level, treasure) > if treasure.size[1] == 0 or treasure.size[1] == 0 then > return true > end > 81a105,114 > local canPlace = function(position) > for x=0, treasure.size[1]-1 do > for y=0, treasure.size[2]-1 do > if level:fossilAt({position[1] + x, position[2] + y}) then > return false > end > end > end > return true > end 84,89c117,119 < for x = 0, level.size[1] - 2 do < for y = 0, level.size[2] - 2 do < if level:fossilAt({x,y})==false < and level:fossilAt({x+1,y})==false < and level:fossilAt({x,y+1})==false < and level:fossilAt({x+1,y+1})==false then --- > for x = 0, level.size[1] - treasure.size[1] do > for y = 0, level.size[2] - treasure.size[2] do > if canPlace({x, y}) then 94a125,127 > if #treasureOptions == 0 then > return false > end 97c130,131 < level:setTreasurePos(treasurePos) --- > level:setTreasure(treasure, treasurePos) > return true 108c142 < function LevelGenerator:placeToolAdjacent(level, toolTiles, tool) --- > function LevelGenerator:placeToolAdjacent(level, toolTiles, coverTiles, avoidTiles, tool) 121c155 < if (#toolTiles == 0 or adjacentTiles > 0) and containsAny(self.fossilTiles, area) then --- > if (#toolTiles == 0 or adjacentTiles > 0) and containsAny(coverTiles, area) and not containsAny(avoidTiles, area) then 138c172 < if not containsAll(newTiles, self.fossilTiles) then --- > if not containsAll(newTiles, coverTiles) then interface\games\fossilgame\level.lua 56a57,58 > self.treasureTiles = {} > 167,172c169 < if self.hasTreasure then < return (tilePos[1]==self.treasurePos[1] or tilePos[1]==self.treasurePos[1]+1) < and (tilePos[2]==self.treasurePos[2] or tilePos[2]==self.treasurePos[2]+1) < end < < return false --- > return contains(self.treasureTiles, tilePos) 175c172 < function Level:setTreasurePos(tilePos) --- > function Level:setTreasure(treasure, position) 177c174,181 < self.treasurePos = tilePos --- > self.treasurePos = position > self.treasure = treasure > > for x = 0, treasure.size[1]-1 do > for y = 0, treasure.size[2]-1 do > table.insert(self.treasureTiles, {position[1] + x, position[2] + y}) > end > end 182,190c186,189 < local tx = self.treasurePos[1] < local ty = self.treasurePos[2] < < for x = 0, 1 do < for y = 0, 1 do < local checkPos = {tx + x, ty + y} < if self:dirtAt(checkPos) or self:rockAt(checkPos) then < return false < end --- > > for _,tilePos in pairs(self.treasureTiles) do > if self:dirtAt(tilePos) or self:rockAt(tilePos) then > return false 193d191 < 198,208c196,200 < if (self.hasTreasure) then < local tx = self.treasurePos[1] < local ty = self.treasurePos[2] < < for x = 0, 1 do < for y = 0, 1 do < local checkPos = {tx + x, ty + y} < if self:rockAt({tx + x, ty + y}) then < return true < end < end --- > if not self.hasTreasure then return false end > > for _,tilePos in pairs(self.treasureTiles) do > if self:rockAt(tilePos) then > return true 217,220c209 < local quad = {screenX, screenY, screenX + self.tileSize*2, screenY + self.tileSize*2} < < local texCoords = {0, 0, 15, 15} < console.canvasDrawImageRect("/interface/games/fossilgame/treasurechest.png", texCoords, quad, {255,255,255,255}) --- > console.canvasDrawImage(self.treasure.image, {screenX, screenY}, 2) 227,230c216,221 < for i = 1, 50 do < local colorFade = math.random() < local color = {120 + colorFade * 60, 70 + colorFade * 45, 0 + colorFade, 255} < self:spawnTileParticle(self.treasurePos, self.tileSize*2, color) --- > for _,tilePos in pairs(self.treasureTiles) do > for i = 1, 25 do > local colorFade = math.random() > local color = {100 + colorFade * 20, 50 + colorFade * 20, 0, 255} > self:spawnTileParticle(tilePos, self.tileSize, color) > end interface\games\fossilgame\tools.lua 159d158 < interface\windowconfig\crafting.config 2a3 > "craftingSound" : "/sfx/interface/crafting_general7.ogg", interface\windowconfig\craftinganvil.config 6c6 < "craftingSound" : "/sfx/objects/wooden_elevator_loop1.ogg", --- > "craftingSound" : "/sfx/interface/crafting_general7.ogg", interface\windowconfig\craftingfarming.config 6c6 < "craftingSound" : "/sfx/objects/wooden_elevator_loop1.ogg", --- > "craftingSound" : "/sfx/interface/crafting_general7.ogg", interface\windowconfig\craftingfood.config 1a2 > "craftingSound" : "/sfx/interface/crafting_general7.ogg", interface\windowconfig\craftingfurnace.config 5a6 > "craftingSound" : "/sfx/interface/crafting_general7.ogg", interface\windowconfig\craftingfurniture.config 6c6 < "craftingSound" : "/sfx/objects/wooden_elevator_loop1.ogg", --- > "craftingSound" : "/sfx/interface/crafting_general7.ogg", interface\windowconfig\craftingmedical.config 6c6 < "craftingSound" : "/sfx/objects/wooden_elevator_loop1.ogg", --- > "craftingSound" : "/sfx/interface/crafting_general7.ogg", interface\windowconfig\inventorstable.config 6a7 > "craftingSound" : "/sfx/interface/crafting_general7.ogg", interface\windowconfig\wiringstation.config 6a7 > "craftingSound" : "/sfx/interface/crafting_general7.ogg", items\active\weapons\melee\dagger\commondagger.activeitem 27c27 < "baseDps" : [7, 8], --- > "baseDps" : [7.5, 8.5], items\active\weapons\melee\dagger\raredagger.activeitem 28c28 < "baseDps" : [7.5, 8.5], --- > "baseDps" : [8.0, 9.0], items\active\weapons\melee\dagger\uncommondagger.activeitem 28c28 < "baseDps" : [7.5, 8.5], --- > "baseDps" : [8.0, 9.0], items\active\weapons\npc\npcdagger.activeitem 26,27c26,27 < "fireTime" : [0.7, 0.7], < "baseDps" : [4, 4], --- > "fireTime" : 0.7, > "baseDps" : 4.5, items\active\weapons\npc\npcmachinepistol.activeitem 27,28c27,28 < "baseDps" : 4.25, < "energyUsage" : 8.5, --- > "baseDps" : 5.5, > "energyUsage" : 11, items\active\weapons\npc\npcpistol.activeitem 29,30c29,30 < "baseDps" : 4.25, < "energyUsage" : 8.5, --- > "baseDps" : 5.5, > "energyUsage" : 11, items\active\weapons\npc\npcshotgun.activeitem 35a36 > "damageKind" : "shotgunbullet", items\active\weapons\other\armgun\armgun.activeitem 6,8c6,8 < "description" : "Bad things are unleashed upon those who wait.", < "shortdescription" : "Charge Gun", < "tooltipKind" : "gun", --- > "description" : "Hand goes in, rockets come out.", // omg reference jokes > "shortdescription" : "Rocket Larmchair", // so many terrible reference jokes > "tooltipKind" : "base", 13d12 < "handGrip" : "wrap", 22c21 < "muzzleOffset" : [2.5, 0.5], --- > "muzzleOffset" : [1.875, 0.125], 25a25,26 > "handGrip" : "wrap", > 28,29c29,82 < "primaryAbilityType" : "chargefire", < "primaryAbility" : {}, --- > "primaryAbility" : { > "name" : "Rocket Stack", > "scripts" : ["/items/active/weapons/other/armgun/rocketstack.lua"], > "class" : "RocketStack", > > "baseDps" : 7, // TODO: apply damage calculation in script > > "reloadTime" : 0.5, > "maxStack" : 4, > "spread" : 0.1, > > "energyUsage" : 20, // TODO: use energy > "inaccuracy" : 0, > > "projectileType" : "minirocket", > "projectileParameters" : {}, > > "stances" : { > "idle" : { > "armRotation" : 0, > "weaponRotation" : 0, > "twoHanded" : false, > > "allowRotate" : true, > "allowFlip" : true > }, > "charge" : { > "armRotation" : 0, > "weaponRotation" : 0, > "twoHanded" : false, > > "allowRotate" : true, > "allowFlip" : true > }, > "fire" : { > "duration" : 0, > "armRotation" : 3, > "weaponRotation" : 3, > "twoHanded" : false, > > "allowRotate" : false, > "allowFlip" : false > }, > "cooldown" : { > "duration" : 0.25, > "armRotation" : 3, > "weaponRotation" : 3, > "twoHanded" : false, > > "allowRotate" : false, > "allowFlip" : false > } > } > }, items\active\weapons\other\armgun\armgun.animation 4,5c4,5 < "firing" : { < "default" : "off", --- > "gun" : { > "default" : "idle", 7,8c7,8 < "off" : {}, < "charge" : { --- > "idle" : {}, > "reload" : { 10,15c10 < "cycle" : 0.2, < "mode" : "loop" < }, < "fire" : { < "frames" : 1, < "cycle" : 0.07, --- > "cycle" : 0.4, 17c12 < "transition" : "off" --- > "transition" : "idle" 27c22 < "offset" : [0.4, 0], --- > "offset" : [0.75, 0], 32,38c27,28 < "firing" : { < "off" : { < "properties" : { < "image" : ":charge.1" < } < }, < "charge" : { --- > "gun" : { > "idle" : { 40c30 < "image" : ":charge." --- > "image" : ":idle" 43c33 < "fire" : { --- > "reload" : { 45c35 < "image" : ":fire" --- > "image" : ":spin." 60c50,51 < "fire" : [ ] --- > "reload" : ["/sfx/gun/reload/rocket_reload_clip1.ogg"], > "fire" : ["/sfx/gun/rocket1.ogg"] items\active\weapons\other\armgun\default.frames 6c6 < [ "charge.1", "charge.2", "charge.3", "charge.4" ] --- > [ "spin.1", "spin.2", "spin.3", "spin.4" ] 10c10 < "fire" : "charge.1" --- > "idle" : "spin.1" items\active\weapons\other\chargegun\chargegun.animation 15,16c15,16 < "frames" : 2, < "cycle" : 0.15, --- > "frames" : 3, > "cycle" : 0.2, items\active\weapons\other\chargegun\default.frames 9a10,12 > }, > "aliases" : { > "fullcharge.3" : "fire" items\active\weapons\other\gristlegun\gristlegun.activeitem 49,50c49,50 < "baseDps" : 5, < "energyUsage" : 15, --- > "baseDps" : 6.0, > "energyUsage" : 18, items\active\weapons\protectorate\titaniumdagger.activeitem 37c37 < "baseDps" : 8, --- > "baseDps" : 9.0, items\active\weapons\protectorate\tungstenaxe.activeitem 35c35 < "baseDps" : 7.0, --- > "baseDps" : 7.5, items\active\weapons\protectorate\aegisaltpistol\aegisaltpistol.activeitem 37,38c37,38 < "baseDps" : 5.5, < "energyUsage" : 25, --- > "baseDps" : 6.0, > "energyUsage" : 24, items\active\weapons\ranged\abilities\burstshot\burstshot.weaponability 66a67 > "damageSourceKind" : "standardbullet", items\active\weapons\ranged\machinepistol\commonmachinepistol.activeitem 27,28c27,28 < "baseDps" : [3.75, 4.5], < "energyUsage" : [11.25, 13.5], --- > "baseDps" : [5.0, 5.5], > "energyUsage" : [15, 16.5], items\active\weapons\ranged\machinepistol\raremachinepistol.activeitem 27,28c27,28 < "baseDps" : [4.25, 5], < "energyUsage" : [12.75, 15], --- > "baseDps" : [5.5, 6.0], > "energyUsage" : [16.5, 18], items\active\weapons\ranged\machinepistol\uncommonmachinepistol.activeitem 27,28c27,28 < "baseDps" : [4.25, 5], < "energyUsage" : [12.75, 15], --- > "baseDps" : [5.5, 6.0], > "energyUsage" : [16.5, 18], items\active\weapons\ranged\pistol\commonpistol.activeitem 29,30c29,30 < "baseDps" : [3.75, 4.5], < "energyUsage" : [11.25, 13.5], --- > "baseDps" : [5.0, 5.5], > "energyUsage" : [15, 16.5], items\active\weapons\ranged\pistol\rarepistol.activeitem 27,28c27,28 < "baseDps" : [4.25, 5], < "energyUsage" : [12.75, 15], --- > "baseDps" : [5.5, 6.0], > "energyUsage" : [16.5, 18], items\active\weapons\ranged\pistol\uncommonpistol.activeitem 27,28c27,28 < "baseDps" : [4.25, 5], < "energyUsage" : [12.75, 15], --- > "baseDps" : [5.5, 6.0], > "energyUsage" : [16.5, 18], items\active\weapons\ranged\shotgun\commonshotgun.activeitem 35a36 > "damageKind" : "shotgunbullet", items\active\weapons\ranged\shotgun\rareshotgun.activeitem 77c77 < "primaryAbility" : { "projectileType" : "fireplasma", "projectileParameters" : { "statusEffects" : [ "burning" ] } }, --- > "primaryAbility" : { "projectileType" : "fireplasma", "projectileParameters" : { "damageKind" : "fireplasmashotgun", "statusEffects" : [ "burning" ] } }, 81c81 < "primaryAbility" : { "projectileType" : "iceplasma", "projectileParameters" : { "statusEffects" : [ "frostslow" ] } }, --- > "primaryAbility" : { "projectileType" : "iceplasma", "projectileParameters" : { "damageKind" : "iceplasmashotgun", "statusEffects" : [ "frostslow" ] } }, 85c85 < "primaryAbility" : { "projectileType" : "poisonplasma", "projectileParameters" : { "statusEffects" : [ "weakpoison" ] } }, --- > "primaryAbility" : { "projectileType" : "poisonplasma", "projectileParameters" : { "damageKind" : "poisonplasmashotgun", "statusEffects" : [ "weakpoison" ] } }, 89c89 < "primaryAbility" : { "projectileType" : "electricplasma", "projectileParameters" : { "statusEffects" : [ "electrified" ] } }, --- > "primaryAbility" : { "projectileType" : "electricplasma", "projectileParameters" : { "damageKind" : "electricplasmashotgun", "statusEffects" : [ "electrified" ] } }, items\active\weapons\ranged\shotgun\uncommonshotgun.activeitem 77c77 < "primaryAbility" : { "projectileType" : "fireplasma" }, --- > "primaryAbility" : { "projectileType" : "fireplasma", "projectileParameters" : { "damageKind" : "fireplasmashotgun" } }, 81c81 < "primaryAbility" : { "projectileType" : "iceplasma" }, --- > "primaryAbility" : { "projectileType" : "iceplasma", "projectileParameters" : { "damageKind" : "iceplasmashotgun" } }, 85c85 < "primaryAbility" : { "projectileType" : "poisonplasma" }, --- > "primaryAbility" : { "projectileType" : "poisonplasma", "projectileParameters" : { "damageKind" : "poisonplasmashotgun" } }, 89c89 < "primaryAbility" : { "projectileType" : "electricplasma" }, --- > "primaryAbility" : { "projectileType" : "electricplasma", "projectileParameters" : { "damageKind" : "electricplasmashotgun" } }, items\armors\novakid\nova-tier1\novatier1.chest 8c8 < "description" : "Deputy's Vest.", --- > "description" : "A classic vest and bandana combo, complete with an official Deputy's badge.", items\armors\novakid\nova-tier1\novatier1.head 8c8 < "description" : "A Deputy's hat.", --- > "description" : "You'd make a dashing Deputy in this hat.", items\armors\novakid\nova-tier1\novatier1.legs 8c8 < "description" : "A Deputy's slacks.", --- > "description" : "Simple yet stylish Deputy's slacks.", items\armors\novakid\nova-tier2\novatier2.chest 8c8 < "description" : "A Bandit vest.", --- > "description" : "A tough jacket with steel fastenings, to keep you warm in all weathers.", items\armors\novakid\nova-tier2\novatier2.head 8c8 < "description" : "A bandit hat.", --- > "description" : "Go incognito in this bandana-hat combo.", items\armors\novakid\nova-tier2\novatier2.legs 8,9c8,9 < "description" : "A bandit's slacks.", < "shortdescription" : "Bandit Slacks", --- > "description" : "Make the perfect getaway in these Bandit's chaps.", > "shortdescription" : "Bandit Chaps", items\armors\novakid\nova-tier3\novatier3.chest 8c8 < "description" : "An outlaw's chestpiece.", --- > "description" : "A dark jacket with a dusty poncho shoulderpiece.", items\armors\novakid\nova-tier3\novatier3.head 8c8 < "description" : "A outlaw's hat.", --- > "description" : "With a hat like that, ain't no one gonna tell you what to do.", items\armors\novakid\nova-tier3\novatier3.legs 8c8 < "description" : "The pants of an outlaw.", --- > "description" : "Ideal outer-wear for evading the law.", items\armors\novakid\nova-tier4\novatier4.chest 8c8 < "description" : "Be the best in this Sheriff's vest!", --- > "description" : "Be the best-dressed in town, in this Sheriff's vest!", items\armors\novakid\nova-tier4\novatier4.head 8c8 < "description" : "You are the law, with this fancy sheriff's hat!", --- > "description" : "You are the law, with this eccentric 10 gallon hat and mask.", items\armors\novakid\nova-tier4\novatier4.legs 8c8 < "description" : "They'll respect your authority when you're wearing these sheriff's pants.", --- > "description" : "They'll respect your authority when you're wearing these sheriff's slacks.", items\armors\novakid\nova-tier5accelerator\novatier5accelerator.chest 8c8 < "description" : "A mysterious poncho.", --- > "description" : "A mysterious poncho for mysterious purposes.", items\armors\novakid\nova-tier5accelerator\novatier5accelerator.legs 8c8 < "description" : "The pants of a bandit.", --- > "description" : "The pants of a bandito. Possibly stolen.", items\armors\novakid\nova-tier5manipulator\novatier5manipulator.chest 8,9c8,9 < "description" : "Bonesaw's menacing chestpiece.", < "shortdescription" : "Bonesaw's Chest", --- > "description" : "A Bonesaw's coat. Menacing yet elegant.", > "shortdescription" : "Bonesaw's Coat", items\armors\novakid\nova-tier5manipulator\novatier5manipulator.head 8c8 < "description" : "Bonesaw's intimidating hat.", --- > "description" : "The intimidating headwear of a Bonesaw, its eyes burning with malice.", items\armors\novakid\nova-tier5manipulator\novatier5manipulator.legs 8c8 < "description" : "Bonesaw's ominous pants.", --- > "description" : "A Bonesaw's ominous pants.", items\armors\novakid\nova-tier5separator\novatier5separator.chest 8c8 < "description" : "A Varmint's Chestplate.", --- > "description" : "The sorta chest plate that makes yer wanna tie a damsel to a railroad track.", items\armors\novakid\nova-tier5separator\novatier5separator.head 8c8 < "description" : "A Varmint's hat.", --- > "description" : "Keep the dust outta yer eyes and your enemies off yer back with this first-rate headgear.", items\armors\novakid\nova-tier5separator\novatier5separator.legs 8c8 < "description" : "A Varmint's pants.", --- > "description" : "Loose fitting and durable, for all your Varmint needs.", items\armors\novakid\nova-tier6accelerator\novatier6accelerator.chest 8c8 < "description" : "Get lucky with this Gambler's Vest.", --- > "description" : "Got a risky venture planned? Be sure to take this Gambler's vest along.", items\armors\novakid\nova-tier6accelerator\novatier6accelerator.head 8c8 < "description" : "Never lose a hand with this Gambler's Hat.", --- > "description" : "No matter how high the stakes, you won't lose you head with this Gambler's hat.", items\armors\novakid\nova-tier6accelerator\novatier6accelerator.legs 8c8 < "description" : "Gambler's Pants. Spare cards not included.", --- > "description" : "Cut with room to spare. Perfect for a shifty individual.", items\armors\novakid\nova-tier6manipulator\novatier6manipulator.chest 8,9c8,9 < "description" : "A clockwork chestpiece you can count on.", < "shortdescription" : "Clockwork Chest", --- > "description" : "The tall collar hides you face as you enact nefarious deeds.", > "shortdescription" : "Clockwork Jacket", items\armors\novakid\nova-tier6manipulator\novatier6manipulator.head 8c8 < "description" : "A clockwork hat. Tick tock.", --- > "description" : "A clockwork hat. To remind your enemies of the relentless march of time.", items\armors\novakid\nova-tier6manipulator\novatier6manipulator.legs 8,9c8,9 < "description" : "Clockwork pants, for when the timing's just right.", < "shortdescription" : "Clockwork Pants", --- > "description" : "Clockwork trousers - so you always march in time.", > "shortdescription" : "Clockwork Trousers", items\armors\novakid\nova-tier6separator\novatier6separator.chest 8c8 < "description" : "Wrangler's Chestplate.", --- > "description" : "This reinforced chestplate could take on a capricoat.", items\armors\novakid\nova-tier6separator\novatier6separator.head 8c8 < "description" : "Wrangler's Hat.", --- > "description" : "A sturdy Wrangler's Hat, with reinforced facial protection.", items\armors\novakid\nova-tier6separator\novatier6separator.legs 8c8 < "description" : "Wrangler's Pants.", --- > "description" : "Wrangler's Pants, for the hardy Wrangler.", items\armors\novakid\novakidfancy\novakidfancy.chest 8c8 < "description" : "A gunslinger jacket.", --- > "description" : "Casual rookie duds.", items\armors\novakid\novakidfancy\novakidfancy.legs 9c9 < "description" : "A pair of gunslinger pants.", --- > "description" : "Comfy and casual. Brilliant for blending into a crowd.", items\armors\novakid\novakidjacket\novakidjacket.chest 8c8 < "description" : "A worn rustler's jacket.", --- > "description" : "A jacket over a simple cotton shirt.", items\armors\novakid\novakidjacket\novakidjacket.legs 9,10c9,10 < "description" : "Some rustler's pants.", < "shortdescription" : "Rustler Pants", --- > "description" : "Keep cool and comfortable while you climb all those rugged mountains.", > "shortdescription" : "Rustler Cut-offs", items\armors\novakid\novakidwaistcoat\novakidwaistcoat.chest 8c8 < "description" : "For the smooth-dressing wrangler.", --- > "description" : "For the smooth-dressing space farer.", items\armors\novakid\novakidwaistcoat\novakidwaistcoat.legs 9c9 < "description" : "Some formal looking Novakid pants.", --- > "description" : "Flattering and stylish formalwear.", items\generic\produce\thornfruit.consumable 19c19 < "learnBlueprintsOnPickup" : [ "thornjuice", "thornyneedler" ] --- > "learnBlueprintsOnPickup" : [ "thornjuice" ] objects\crafting\alloyfurnace\alloyfurnace.object 71a72 > "soundEffectRangeMultiplier" : 0.5, objects\crafting\campfire\campfire.object 88a89 > "soundEffectRangeMultiplier" : 0.5, objects\crafting\refinery\refinery.object 79a80 > "soundEffectRangeMultiplier" : 0.5, objects\crafting\stonefurnace\stonefurnace.object 80a81 > "soundEffectRangeMultiplier" : 0.5, objects\crafting\upgradeablecraftingobjects\craftingwheel\craftingwheel.object 61c61 < "config" : "/interface/windowconfig/spinningwheel.config", --- > "config" : "/interface/windowconfig/craftingwheel.config", 106c106 < "config" : "/interface/windowconfig/spinningwheel.config", --- > "config" : "/interface/windowconfig/craftingwheel.config", objects\floran\floranstove\floranstove.object 88c88,89 < "soundEffect" : "/sfx/objects/campfire.ogg" --- > "soundEffect" : "/sfx/objects/campfire.ogg", > "soundEffectRangeMultiplier" : 0.5 objects\fossils\dirtyfossils\dirtyfossil.lua 5a6,15 > > local treasure = util.weightedRandom(config.getParameter("treasurePools")) > if treasure.type == "rare" or treasure.type == "normal" then > animator.setParticleEmitterActive("sparkle1", true) > if treasure.type == "rare" then > animator.setParticleEmitterActive("sparkle2", true) > end > end > object.setConfigParameter("treasure", treasure) > objects\fossils\dirtyfossils\dirtyfossil1.object 23,44c23 < "particleEmitter" : { < "emissionRate" : 0.5, < "emissionVariance" : 0.2, < "pixelOrigin" : [12, 12], < < "particle" : { < "type" : "animated", < "animation" : "/animations/sparkles/sparkle2.animation", < "size" : 1.0, < "fade" : 0, < "destructionAction" : "shrink", < "destructionTime" : 3, < "initialVelocity" : [0, 0], < "finalVelocity" : [0, 0], < "timeToLive" : 1, < "layer" : "front" < }, < < "particleVariance" : { < "position" : [1.0, 1.0] < } < }, --- > "animation" : "dirtyfossil.animation", 58,59c37,41 < "bonusChance" : 1.0, < "bonusPool" : "fossilBonusTreasure", --- > "treasurePools" : [ > [0.4, { "type" : "none" }], > [0.4, { "type" : "normal", "pool" : "fossilBonusTreasure"}], > [0.2, { "type" : "rare", "pool" : "fossilRareBonusTreasure"}] > ], objects\fossils\dirtyfossils\dirtyfossil2.object 23,44c23 < "particleEmitter" : { < "emissionRate" : 0.5, < "emissionVariance" : 0.2, < "pixelOrigin" : [12, 12], < < "particle" : { < "type" : "animated", < "animation" : "/animations/sparkles/sparkle2.animation", < "size" : 1.0, < "fade" : 0, < "destructionAction" : "shrink", < "destructionTime" : 3, < "initialVelocity" : [0, 0], < "finalVelocity" : [0, 0], < "timeToLive" : 1, < "layer" : "front" < }, < < "particleVariance" : { < "position" : [1.0, 1.0] < } < }, --- > "animation" : "dirtyfossil.animation", 58,59c37,41 < "bonusChance" : 0.1, < "bonusPool" : "fossilBonusTreasure", --- > "treasurePools" : [ > [0.4, { "type" : "none" }], > [0.4, { "type" : "normal", "pool" : "fossilBonusTreasure"}], > [0.2, { "type" : "rare", "pool" : "fossilRareBonusTreasure"}] > ], objects\fossils\dirtyfossils\dirtyfossil3.object 23,44c23 < "particleEmitter" : { < "emissionRate" : 0.5, < "emissionVariance" : 0.2, < "pixelOrigin" : [12, 12], < < "particle" : { < "type" : "animated", < "animation" : "/animations/sparkles/sparkle2.animation", < "size" : 1.0, < "fade" : 0, < "destructionAction" : "shrink", < "destructionTime" : 3, < "initialVelocity" : [0, 0], < "finalVelocity" : [0, 0], < "timeToLive" : 1, < "layer" : "front" < }, < < "particleVariance" : { < "position" : [1.0, 1.0] < } < }, --- > "animation" : "dirtyfossil.animation", 58,59c37,41 < "bonusChance" : 0.1, < "bonusPool" : "fossilBonusTreasure", --- > "treasurePools" : [ > [0.4, { "type" : "none" }], > [0.4, { "type" : "normal", "pool" : "fossilBonusTreasure"}], > [0.2, { "type" : "rare", "pool" : "fossilRareBonusTreasure"}] > ], objects\fossils\dirtyfossils\dirtyfossil4.object 23,44c23 < "particleEmitter" : { < "emissionRate" : 0.5, < "emissionVariance" : 0.2, < "pixelOrigin" : [12, 12], < < "particle" : { < "type" : "animated", < "animation" : "/animations/sparkles/sparkle2.animation", < "size" : 1.0, < "fade" : 0, < "destructionAction" : "shrink", < "destructionTime" : 3, < "initialVelocity" : [0, 0], < "finalVelocity" : [0, 0], < "timeToLive" : 1, < "layer" : "front" < }, < < "particleVariance" : { < "position" : [1.0, 1.0] < } < }, --- > "animation" : "dirtyfossil.animation", 58,59c37,41 < "bonusChance" : 0.1, < "bonusPool" : "fossilBonusTreasure", --- > "treasurePools" : [ > [0.4, { "type" : "none" }], > [0.4, { "type" : "normal", "pool" : "fossilBonusTreasure"}], > [0.2, { "type" : "rare", "pool" : "fossilRareBonusTreasure"}] > ], objects\fossils\dirtyfossils\dirtyfossil5.object 23,44c23 < "particleEmitter" : { < "emissionRate" : 0.5, < "emissionVariance" : 0.2, < "pixelOrigin" : [12, 12], < < "particle" : { < "type" : "animated", < "animation" : "/animations/sparkles/sparkle2.animation", < "size" : 1.0, < "fade" : 0, < "destructionAction" : "shrink", < "destructionTime" : 3, < "initialVelocity" : [0, 0], < "finalVelocity" : [0, 0], < "timeToLive" : 1, < "layer" : "front" < }, < < "particleVariance" : { < "position" : [1.0, 1.0] < } < }, --- > "animation" : "dirtyfossil.animation", 58,59c37,41 < "bonusChance" : 0.1, < "bonusPool" : "fossilBonusTreasure", --- > "treasurePools" : [ > [0.4, { "type" : "none" }], > [0.4, { "type" : "normal", "pool" : "fossilBonusTreasure"}], > [0.2, { "type" : "rare", "pool" : "fossilRareBonusTreasure"}] > ], objects\fossils\dirtyfossils\dirtyfossil6.object 23,44c23 < "particleEmitter" : { < "emissionRate" : 0.5, < "emissionVariance" : 0.2, < "pixelOrigin" : [12, 12], < < "particle" : { < "type" : "animated", < "animation" : "/animations/sparkles/sparkle2.animation", < "size" : 1.0, < "fade" : 0, < "destructionAction" : "shrink", < "destructionTime" : 3, < "initialVelocity" : [0, 0], < "finalVelocity" : [0, 0], < "timeToLive" : 1, < "layer" : "front" < }, < < "particleVariance" : { < "position" : [1.0, 1.0] < } < }, --- > "animation" : "dirtyfossil.animation", 58,59c37,41 < "bonusChance" : 0.1, < "bonusPool" : "fossilBonusTreasure", --- > "treasurePools" : [ > [0.4, { "type" : "none" }], > [0.4, { "type" : "normal", "pool" : "fossilBonusTreasure"}], > [0.2, { "type" : "rare", "pool" : "fossilRareBonusTreasure"}] > ], objects\fossils\dirtyfossils\dirtyfossil7.object 23,44c23 < "particleEmitter" : { < "emissionRate" : 0.5, < "emissionVariance" : 0.2, < "pixelOrigin" : [12, 12], < < "particle" : { < "type" : "animated", < "animation" : "/animations/sparkles/sparkle2.animation", < "size" : 1.0, < "fade" : 0, < "destructionAction" : "shrink", < "destructionTime" : 3, < "initialVelocity" : [0, 0], < "finalVelocity" : [0, 0], < "timeToLive" : 1, < "layer" : "front" < }, < < "particleVariance" : { < "position" : [1.0, 1.0] < } < }, --- > "animation" : "dirtyfossil.animation", 58,59c37,41 < "bonusChance" : 0.1, < "bonusPool" : "fossilBonusTreasure", --- > "treasurePools" : [ > [0.4, { "type" : "none" }], > [0.4, { "type" : "normal", "pool" : "fossilBonusTreasure"}], > [0.2, { "type" : "rare", "pool" : "fossilRareBonusTreasure"}] > ], objects\fossils\dirtyfossils\dirtyfossil8.object 23,44c23 < "particleEmitter" : { < "emissionRate" : 0.5, < "emissionVariance" : 0.2, < "pixelOrigin" : [12, 12], < < "particle" : { < "type" : "animated", < "animation" : "/animations/sparkles/sparkle2.animation", < "size" : 1.0, < "fade" : 0, < "destructionAction" : "shrink", < "destructionTime" : 3, < "initialVelocity" : [0, 0], < "finalVelocity" : [0, 0], < "timeToLive" : 1, < "layer" : "front" < }, < < "particleVariance" : { < "position" : [1.0, 1.0] < } < }, --- > "animation" : "dirtyfossil.animation", 58,59c37,41 < "bonusChance" : 0.1, < "bonusPool" : "fossilBonusTreasure", --- > "treasurePools" : [ > [0.4, { "type" : "none" }], > [0.4, { "type" : "normal", "pool" : "fossilBonusTreasure"}], > [0.2, { "type" : "rare", "pool" : "fossilRareBonusTreasure"}] > ], objects\generic\nanostove\nanostove.object 69c69,70 < "soundEffect" : "/sfx/objects/campfire.ogg" --- > "soundEffect" : "/sfx/objects/campfire.ogg", > "soundEffectRangeMultiplier" : 0.5 objects\glitch\medievallargecookingpot\medievallargecookingpot.object 90a91 > "soundEffectRangeMultiplier" : 0.5, objects\outpost\ursaminer\ursaminer.object 28c28 < "buyFactor" : 2.0, --- > "buyFactor" : 10.0, projectiles\guns\bullets\standardbullet\standardbullet.projectile 7c7 < "damageKind" : "default", --- > "damageKind" : "standardbullet", projectiles\guns\plasmabullets\electricplasma\electricplasma.projectile 21c21 < "damageKind" : "electricplasma" --- > "damageKind" : "electricplasmabullet" projectiles\guns\plasmabullets\fireplasma\fireplasma.projectile 21c21 < "damageKind" : "fireplasma" --- > "damageKind" : "fireplasmabullet" projectiles\guns\plasmabullets\iceplasma\iceplasma.projectile 21c21 < "damageKind" : "iceplasma" --- > "damageKind" : "iceplasmabullet" projectiles\guns\plasmabullets\poisonplasma\poisonplasma.projectile 21c21 < "damageKind" : "poisonplasma" --- > "damageKind" : "poisonplasmabullet"