diff --git a/Actors/admonitor.lua b/Actors/admonitor.lua index c46a17d0..596b30ed 100644 --- a/Actors/admonitor.lua +++ b/Actors/admonitor.lua @@ -15,6 +15,7 @@ local sprite_jump_peak = Sprite.new("AdmonitorJumpPeak", path.combine(SPRITE_PAT local sprite_fall = Sprite.new("AdmonitorFall", path.combine(SPRITE_PATH, "fall.png"), 1, 26, 33) local sprite_death = Sprite.new("AdmonitorDeath", path.combine(SPRITE_PATH, "death.png"), 14, 33, 53) local sprite_shoot1 = Sprite.new("AdmonitorShoot1", path.combine(SPRITE_PATH, "shoot1.png"), 30, 53, 86) +local sprite_ping = Sprite.new("AdmonitorPing", path.combine(SPRITE_PATH, "ping.png"), 1, 16, 18) GM.elite_generate_palettes(sprite_palette) @@ -70,6 +71,7 @@ Callback.add(puncher.on_create, function(actor) actor.sprite_jump_peak = sprite_jump_peak actor.sprite_fall = sprite_fall actor.sprite_death = sprite_death + actor.sprite_ping = sprite_ping actor.can_jump = true diff --git a/Actors/exploder.lua b/Actors/exploder.lua index a687b614..35aade21 100644 --- a/Actors/exploder.lua +++ b/Actors/exploder.lua @@ -12,6 +12,7 @@ local sprite_jump_peak = Sprite.new("ExploderJumpPeak", path.combine(SPRITE_PATH local sprite_fall = Sprite.new("ExploderFall", path.combine(SPRITE_PATH, "fall.png"), 1, 24, 16) local sprite_death = Sprite.new("ExploderDeath", path.combine(SPRITE_PATH, "death.png"), 7, 24, 33) local sprite_shoot1 = Sprite.new("ExploderShoot1", path.combine(SPRITE_PATH, "shoot1.png"), 20, 32, 55) +local sprite_ping = Sprite.new("ExploderPing", path.combine(SPRITE_PATH, "ping.png"), 1, 12, 10) GM.elite_generate_palettes(sprite_palette) @@ -47,6 +48,7 @@ Callback.add(exploder.on_create, function(actor) actor.sprite_jump_peak = sprite_jump_peak actor.sprite_fall = sprite_fall actor.sprite_death = sprite_death + actor.sprite_ping = sprite_ping actor.can_jump = true diff --git a/Actors/mimic.lua b/Actors/mimic.lua index 31dc7583..443a7e89 100644 --- a/Actors/mimic.lua +++ b/Actors/mimic.lua @@ -21,6 +21,7 @@ local sprite_portrait = Sprite.new("MimicPortrait", path.combine(SPRITE_PATH, local sprite_inactive_idle = Sprite.new("MimicInactiveIdle", path.combine(SPRITE_PATH, "inactiveIdle.png"), 14, 30, 38) local sprite_activate = Sprite.new("MimicActivate", path.combine(SPRITE_PATH, "spawn.png"), 18, 30, 60) local sprite_vacuum = Sprite.new("MimicVacuumFX", path.combine(SPRITE_PATH, "vacuumParticle.png"), 4, 4, 4) +local sprite_ping = Sprite.new("MimicPing", path.combine(SPRITE_PATH, "ping.png"), 1, 14, 19) local sound_spawn = Sound.new("MimicSpawn", path.combine(SOUND_PATH, "spawn.ogg")) local sound_hit = Sound.new("MimicHit", path.combine(SOUND_PATH, "hit.ogg")) @@ -172,6 +173,7 @@ Callback.add(mimic.on_create, function(actor) actor.sprite_jump_peak = sprite_jump_peak actor.sprite_fall = sprite_fall actor.sprite_death = sprite_death + actor.sprite_ping = sprite_ping actor.can_jump = true actor.leap_max_distance = 3 @@ -431,6 +433,7 @@ mimicInactive:set_depth(90) Callback.add(mimicInactive.on_create, function(self) GM.interactable_init_cost(self, 0, 50) + self.sprite_ping = gm.constants.sPing_Chest2 self:interactable_init_name() end) diff --git a/Artifacts/displacement.lua b/Artifacts/displacement.lua index 31fe3df8..750f32c3 100644 --- a/Artifacts/displacement.lua +++ b/Artifacts/displacement.lua @@ -2,6 +2,11 @@ -- this one is kinda hard so ill try to explain literally everything lmao -- ill be refering to the stage number as its "tier" here. for example, without the artifact of displacement active dried lake is tier 1, magma barracks is tier 4, temple of the elders is 5, risk of rain is 6, etc -- ill be refering to the stage itself as "environment" or "env" + +-- die +if HOTLOADING then return end +if Settings.enable_beta == false then return end -- only enable if beta is enabled + local loadout = Sprite.new("ArtifactOfDisplacementLoadout", path.combine(PATH, "Sprites/Artifacts/Displacement/loadout.png"), 3, 19, 19) local pickup = Sprite.new("ArtifactOfDisplacementPickup", path.combine(PATH, "Sprites/Artifacts/Displacement/pickup.png"), 1, 20, 20) @@ -13,10 +18,13 @@ local potentialEnvs = List.new() -- this is where we will put environments that local validEnvs = List.new() -- this is where we will put all valid environments (no boar beach cuz its a secret and no risk of rain cuz its a final environment for example) local hook = Hook.add_post(gm.constants.stage_roll_next, function(self, other, result, args) + print("hi") if not displacement.active then return end validEnvs:clear() + print("hi2") + for i = 1, 4 do -- go through 4 tiers of stages, we exclude tier 6 because we dont want to randomly go to risk of rain, and we exclude tier 5 stages because artifact of tempus can easily be cheesed if temple of the elders is chosen as one of the first stages (it also breaks the onstep code of the artifact's object for some reason? no clue why) local envs = List.wrap(gm._mod_stage_get_pool_list(i)) -- get all environments in a tier for _, env in ipairs(envs) do @@ -41,6 +49,8 @@ local hook = Hook.add_post(gm.constants.stage_roll_next, function(self, other, r local randomEnv = math.random(1, #potentialEnvs) -- pick a random environment from list of potential environments local upcomingEnv = potentialEnvs[randomEnv] -- set the next environment to the one picked above + print(upcomingEnv) + result.value = upcomingEnv -- make the script transport you to the upcoming environment instead of the usual one -- delete the selected environment from the list of potential ones so we dont encounter it again diff --git a/Artifacts/gathering.lua b/Artifacts/gathering.lua index 8deb5a21..8280c9f5 100644 --- a/Artifacts/gathering.lua +++ b/Artifacts/gathering.lua @@ -3,6 +3,10 @@ -- btw this should prolly be redone a bit to account for nucleus gems when that gets added -- also also also thanks to onyx (0n_x) for optimizing this mess of an artifact! ! ! ! should be way less laggier now +-- die +if HOTLOADING then return end +if Settings.enable_beta == false then return end -- only enable if beta is enabled + local loadout = Sprite.new("ArtifactOfGatheringLoadout", path.combine(PATH, "Sprites/Artifacts/Gathering/loadout.png"), 3, 19, 19) local pickup = Sprite.new("ArtifactOfGatheringPickup", path.combine(PATH, "Sprites/Artifacts/Gathering/pickup.png"), 1, 20, 20) diff --git a/Artifacts/multitude.lua b/Artifacts/multitude.lua index 21325e6b..b6b54ee2 100644 --- a/Artifacts/multitude.lua +++ b/Artifacts/multitude.lua @@ -2,6 +2,12 @@ -- artifact!!!! makes many enemy but weak enemy!!! -- i tried commenting about everything you could get confused about +-- this is azuline from a year later + +-- die +if HOTLOADING then return end +if Settings.enable_beta == false then return end -- only enable if beta is enabled + local loadout = Sprite.new("ArtifactOfMultitudeLoadout", path.combine(PATH, "Sprites/Artifacts/Multitude/loadout.png"), 3, 19, 19) local pickup = Sprite.new("ArtifactOfMultitudePickup", path.combine(PATH, "Sprites/Artifacts/Multitude/pickup.png"), 1, 20, 20) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2cd6b3d9..15b7a35b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # SSR Changelog *spoilers below!!* +## 0.1.8 +- Put Technician and all Artifacts behind "Unfinished Content" toggle in the settings due to their instability. +- Added skins back! +- Added ping functionality to all enemies. +- Updated Nemesis Mercenary's CSS sprite +- Added a Korean translation (pixelvoxel) +- Added a Chinese translation (Eskevor) +- Resprited Executioner's CSS sprite +- Updated to the last ReturnsAPI version +- Fixed many bugs. +- Crowned Denizu. + ## 0.1.7 - Mod ported to ReturnsAPI - Disabled skins (ReturnsAPI does not support them as of yet) diff --git a/Elites/empyrean.lua b/Elites/empyrean.lua index c5454b1e..3b4c8606 100644 --- a/Elites/empyrean.lua +++ b/Elites/empyrean.lua @@ -26,7 +26,7 @@ local sound_teleport1 = Sound.new("EmpyreanTeleport1", path.combine(SOUND_PATH, local sound_teleport2 = Sound.new("EmpyreanTeleport2", path.combine(SOUND_PATH, "teleport2.ogg")) local sound_teleport3 = Sound.new("EmpyreanTeleport3", path.combine(SOUND_PATH, "teleport3.ogg")) -local empy = ssr_create_elite("empyrean") +local empy = Elite.new("empyrean") empy.healthbar_icon = sprite_icon empy.palette = gm.constants.sElitePaletteDummy empy.blend_col = Color.WHITE diff --git a/Elites/poison.lua b/Elites/poison.lua index 784298e6..54cd066b 100644 --- a/Elites/poison.lua +++ b/Elites/poison.lua @@ -7,7 +7,7 @@ local sprite_palette = Sprite.new("ElitePalettePoison", path.combine(SPRITE_PATH local sound_poison_cloud = Sound.new("PoisonCloud", path.combine(SOUND_PATH, "poisonCloud.ogg")) local sound_poison_inflict = Sound.new("PoisonInflict", path.combine(SOUND_PATH, "poisonInflict.ogg")) -local elitePoison = ssr_create_elite("poison") +local elitePoison = Elite.new("poison") elitePoison.healthbar_icon = sprite_icon elitePoison.palette = sprite_palette elitePoison.blend_col = Color.PURPLE diff --git a/Gameplay/nemesis_spawn_portal.lua b/Gameplay/nemesis_spawn_portal.lua index 368e2211..5ca8b3fa 100644 --- a/Gameplay/nemesis_spawn_portal.lua +++ b/Gameplay/nemesis_spawn_portal.lua @@ -63,7 +63,7 @@ end) Callback.add(Callback.ON_STAGE_START, function() if GM._mod_game_getDirector().stages_passed > 0 then return end if Global.__gamemode_current >= 2 then return end - if Net.online then return end + if Global.coop > 0 then return end if Instance.find(gm.constants.oP).is_nemesis then local pod = Instance.find(gm.constants.oBase) diff --git a/Interactables/chirrsmas_present.lua b/Interactables/chirrsmas_present.lua index 0c25ab0c..3d465394 100644 --- a/Interactables/chirrsmas_present.lua +++ b/Interactables/chirrsmas_present.lua @@ -1,4 +1,5 @@ local sprite = Sprite.new("ChirrsmasPresent", path.combine(PATH, "Sprites/Interactables/ChirrsmasPresent/present.png"), 13, 41, 112) +local sprite_ping = Sprite.new("ChirrsmasPresentPing", path.combine(PATH, "Sprites/Interactables/ChirrsmasPresent/ping.png"), 1, 17, 17) local firework = Object.new("ChirrsmasPresentFirework") firework:set_sprite(gm.constants.sEFFirework) @@ -45,6 +46,7 @@ present:set_depth(90) Callback.add(present.on_create, function(self) self:interactable_init() self.mask_index = gm.constants.sChest1 + self.sprite_ping = sprite_ping self:interactable_init_name() end) diff --git a/Items/balloon.lua b/Items/balloon.lua index a7b30ea2..07771b5a 100644 --- a/Items/balloon.lua +++ b/Items/balloon.lua @@ -84,7 +84,10 @@ Callback.add(Callback.ON_STEP, function() local b = data.balloons[i] local tx = actor.ghost_x - local ty = actor.ghost_y-50 + local ty = actor.y - 50 + if actor.ghost_y then + ty = actor.ghost_y - 50 + end local ang = math.floor(i * 0.5) * GOLDEN_RATIO local mag = math.sqrt(ang) * 1.8 diff --git a/Items/denizuCrown.lua b/Items/denizuCrown.lua new file mode 100644 index 00000000..859f7eaf --- /dev/null +++ b/Items/denizuCrown.lua @@ -0,0 +1,79 @@ +local sprite = Sprite.new("DenizuCrown", path.combine(PATH, "Sprites/Items/denizuCrown.png"), 1, 16, 16) +local effect = Sprite.new("DenizuCrownEffect", path.combine(PATH, "Sprites/Items/Effects/denizuCrown.png"), 1, 4, 6) + +local crown = Item.new("denizuCrown") +crown:set_sprite(sprite) +crown:set_tier(ItemTier.SPECIAL) +crown.loot_tags = 0 + +local part_ice = Particle.new("denizuCrown") +part_ice:set_sprite(gm.constants.sEFIceCrystal, false, false, true) +part_ice:set_life(5, 10) +part_ice:set_alpha2(0.35, 0) +part_ice:set_scale(0.5, 0.5) + +Callback.add(Callback.ON_STEP, function() + for _, actor in ipairs(crown:get_holding_actors()) do + if Instance.exists(actor) then + local data = Instance.get_data(actor) + + if not data.crystal_time then + data.crystal_time = 0 + elseif data.crystal_time < 78 then + data.crystal_time = data.crystal_time + 1 + else + data.crystal_time = -78 + end + + data.global_time = Global._current_frame + + local yy = actor.y + if actor.sprite_idle then + yy = yy - gm.sprite_get_height(actor.sprite_idle) * 1.33 + else + yy = yy - 20 + end + + yy = yy - math.sin(data.global_time * 0.02) * 5 + + if data.global_time % 3 == 0 then + part_ice:set_orientation(math.sin(data.crystal_time * 0.02) * -15, math.sin(data.crystal_time * 0.02) * -15, 0, 0, false) + part_ice:create(actor.x - math.sin(data.crystal_time * 0.02) * 15, yy + 10 + math.cos((data.crystal_time + 156) / 50) * -3, 1, Particle.System.MIDDLE) + part_ice:set_orientation(math.sin(data.crystal_time * 0.02) * 15, math.sin(data.crystal_time * 0.02) * 15, 0, 0, false) + part_ice:create(actor.x + math.sin(data.crystal_time * 0.02) * 15, yy + 10 + math.cos((data.crystal_time + 156) / 50) * 3, 1, Particle.System.MIDDLE) + end + end + end +end) + +crown.effect_display = EffectDisplay.func(function(actor_unwrapped) + local actor = Instance.wrap(actor_unwrapped) + local crystal_time = Instance.get_data(actor).crystal_time + local global_time = Instance.get_data(actor).global_time + + local yy = actor.y + if actor.sprite_idle then + yy = yy - gm.sprite_get_height(actor.sprite_idle) * 1.33 + else + yy = yy - 20 + end + + yy = yy - math.sin(global_time * 0.02) * 5 + + GM.draw_sprite_ext(gm.constants.sEFIceCrystal, 0, actor.x - math.sin(crystal_time * 0.02) * 15, yy + 10 + math.cos((crystal_time + 156) / 50) * -3, 0.5, 0.5, math.sin(crystal_time * 0.02) * -15, Color.WHITE, 0.80 + math.sin(global_time * 0.02) * -0.2) + GM.draw_sprite_ext(effect, 0, actor.x, yy, 1, 1, 0, Color.WHITE, 0.75 + math.sin(global_time * 0.02) * 0.1) + GM.draw_sprite_ext(gm.constants.sEFIceCrystal, 0, actor.x + math.sin(crystal_time * 0.02) * 15, yy + 10 + math.cos((crystal_time + 156) / 50) * 3, -0.5, 0.5, math.sin(crystal_time * 0.02) * -15, Color.WHITE, 0.80 + math.sin(global_time * 0.02) * -0.2) +end, EffectDisplay.DrawPriority.BODY_POST) + +Callback.add(Callback.ON_STAGE_START, function() + for _, actor in ipairs(Instance.find_all(gm.constants.oP)) do + if actor:item_count(crown) <= 0 then + if (actor.user_name == "-" or actor.user_name_string_escaped == "-") or + (actor.user_name == "_" or actor.user_name_string_escaped == "_") or + (actor.user_name == "Denizu" or actor.user_name_string_escaped == "Denizu") or + (actor.user_name == "denizu" or actor.user_name_string_escaped == "denizu") then + actor:item_give(crown) + end + end + end +end) \ No newline at end of file diff --git a/Items/dormantFungus.lua b/Items/dormantFungus.lua index 9e2d77d2..a74de3df 100644 --- a/Items/dormantFungus.lua +++ b/Items/dormantFungus.lua @@ -11,30 +11,32 @@ ItemLog.new_from_item(dungus) Callback.add(Callback.ON_STEP, function() for _, actor in ipairs(dungus:get_holding_actors()) do - if Instance.exists(actor) then - local stack = actor:item_count(dungus) - - if (math.abs(actor.pHspeed) >= actor.pHmax * 0.98) or actor.pVspeed ~= 0 then - local data = Instance.get_data(actor) + if actor.pHspeed then + if Instance.exists(actor) then + local stack = actor:item_count(dungus) + + if (math.abs(actor.pHspeed) >= actor.pHmax * 0.98) or actor.pVspeed ~= 0 then + local data = Instance.get_data(actor) - if not data.dungusTimer then - data.dungusTimer = 120 - end - if data.dungusTimer <= 0 then - data.dungusTimer = 120 - - if Net.host then - actor:heal(math.ceil(actor.maxhp * (1 - 1 / (0.02 * stack + 1)))) + if not data.dungusTimer then + data.dungusTimer = 120 end - - actor:sound_play(sound, 1, 0.9 + math.random() * 0.2) - - -- copied and pasted from uranium horseshoe basically - if actor:is_grounded() then - ssr_create_fadeout(actor.x, actor.bbox_bottom + 1, 1, sprite_footstep, 0.25, 0.05) + if data.dungusTimer <= 0 then + data.dungusTimer = 120 + + if Net.host then + actor:heal(math.ceil(actor.maxhp * (1 - 1 / (0.02 * stack + 1)))) + end + + actor:sound_play(sound, 1, 0.9 + math.random() * 0.2) + + -- copied and pasted from uranium horseshoe basically + if actor:is_grounded() then + ssr_create_fadeout(actor.x, actor.bbox_bottom + 1, 1, sprite_footstep, 0.25, 0.05) + end + else + data.dungusTimer = data.dungusTimer - 1 end - else - data.dungusTimer = data.dungusTimer - 1 end end end diff --git a/Items/eclipseGummies.lua b/Items/eclipseGummies.lua index f92546eb..7852a6b0 100644 --- a/Items/eclipseGummies.lua +++ b/Items/eclipseGummies.lua @@ -19,14 +19,6 @@ buff.icon_sprite = sprite_buff buff.icon_stack_subimage = true buff.max_stack = 10 buff.is_timed = true - -Callback.add(buff.on_apply, function(actor) - if actor:buff_count(buff) < 9 then - actor:sound_play(sound_buff.value, 3, 1 + 0.05 * actor:buff_count(buff)) - else - actor:sound_play(sound_buff_max.value, 3, 1) - end -end) RecalculateStats.add(function(actor, api) local stack = actor:buff_count(buff) @@ -154,6 +146,13 @@ Callback.add(obj_gummy.on_step, function(self) Instance.get_data(actor).gummy_stack_strength = data.stack actor:buff_apply(buff, 10 * 60) + + if actor:buff_count(buff) < 9 then + actor:sound_play(sound_buff.value, 3, 1 + 0.05 * actor:buff_count(buff)) + else + actor:sound_play(sound_buff_max.value, 3, 1) + end + self:destroy() self:instance_destroy_sync() end @@ -169,6 +168,13 @@ Callback.add(obj_gummy.on_step, function(self) Instance.get_data(actor).gummy_stack_strength = data.stack actor:buff_apply(buff, 10 * 60) + + if actor:buff_count(buff) < 9 then + actor:sound_play(sound_buff.value, 3, 1 + 0.05 * actor:buff_count(buff)) + else + actor:sound_play(sound_buff_max.value, 3, 1) + end + self:destroy() self:instance_destroy_sync() end diff --git a/Items/iceTool.lua b/Items/iceTool.lua index 9af67535..2449b4ea 100644 --- a/Items/iceTool.lua +++ b/Items/iceTool.lua @@ -39,8 +39,12 @@ local deserializer = function(buffer, self) actor.pHspeed = -actor.pHmax * collision_dir actor.image_xscale = -collision_dir - - data.iceTool_jumps = data.iceTool_jumps - 1 + + if not data.iceTool_jumps then + data.iceTool_jumps = 0 + else + data.iceTool_jumps = data.iceTool_jumps - 1 + end if actor:buff_count(buffIceTool) > 0 then GM.set_buff_time_nosync(actor, buffIceTool, 30) @@ -77,6 +81,10 @@ Callback.add(Callback.ON_STEP, function() collision_dir = 1 end + if not data.iceTool_jumps then + data.iceTool_jumps = 0 + end + local can_do_it = not actor:is_grounded() and collision_dir ~= 0 and data.iceTool_jumps > 0 and not actor:is_climbing() -- do some dumb jank to make ice tool take precedence over hopoo feather diff --git a/Items/roulette.lua b/Items/roulette.lua index f51108d7..4ddded17 100644 --- a/Items/roulette.lua +++ b/Items/roulette.lua @@ -88,7 +88,7 @@ Callback.add(rouletteObject.on_step, function(self) self.image_index = self.buff_index self.vspeed = -0.1 - if Net.host and self.parent:item_count(roulette) > 0 then + if Net.host and Instance.exists(self.parent) and self.parent:item_count(roulette) > 0 then roulette_clear_buffs(self.parent) local new_buff = roulette_buffs[self.buff_index] diff --git a/Items/watchMetronome.lua b/Items/watchMetronome.lua index ab4da1fe..c40e2183 100644 --- a/Items/watchMetronome.lua +++ b/Items/watchMetronome.lua @@ -82,6 +82,13 @@ Callback.add(Callback.ON_STEP, function() local stack = actor:item_count(watchMetronome) local data = Instance.get_data(actor) local motion_frac = math.abs(actor.pHspeed) / actor.pHmax + + if not data.chrono_charge then + data.chrono_charge = 0 + end + if not data.chrono_tick then + data.chrono_tick = 0 + end if actor:is_climbing() then motion_frac = 0 diff --git a/Items/x4Stimulant.lua b/Items/x4Stimulant.lua index 4c1f862a..2d530628 100644 --- a/Items/x4Stimulant.lua +++ b/Items/x4Stimulant.lua @@ -19,7 +19,7 @@ RecalculateStats.add(function(actor, api) local stack = actor:buff_count(x4Buff) if stack <= 0 then return end - api.hp_regen_mult(REGEN + REGEN_STACK * (actor:item_count(x4Stimulant) - 1)) + api.hp_regen_add(REGEN + REGEN_STACK * (actor:item_count(x4Stimulant) - 1)) end) RecalculateStats.add(function(actor) @@ -28,9 +28,8 @@ RecalculateStats.add(function(actor) local secondary = actor:get_active_skill(Skill.Slot.SECONDARY) - -- counts in frames. has to be rounded otherwise the cooldown stopwatch breaks ! local mult = 0.9 ^ stack - secondary.cooldown = math.ceil(secondary.cooldown * mult) + api.skill_secondary.cooldown_mult(mult) end) Callback.add(Callback.ON_SKILL_ACTIVATE, function(actor, slot) diff --git a/Language/english.lua b/Language/english.lua index 960590e2..768e7e74 100644 --- a/Language/english.lua +++ b/Language/english.lua @@ -142,7 +142,7 @@ return { description = "Fire a rocket for 1000% damage to a single enemy. Surrounding enemies take 50% damage and are scattered.\nIf used airborne, fire downward at an angle.\nHold up to 2." }, nemesisMercenaryZ = { - name = "Lascerate", + name = "Lacerate", description = "Quickly slash enemies in front of you for 100% damage." }, nemesisMercenaryX = { @@ -171,7 +171,7 @@ return { }, technicianX = { name = "Forced Shutdown", - description = "Toss out a bomb dealing 400% damage on reactivation.\nStuns and passively pulls in enemies when upgraded." + description = "Toss out a bomb dealing 500% damage on reactivation.\nStuns and passively pulls in enemies when upgraded." }, technicianXD = { name = "The Red Button", @@ -433,6 +433,14 @@ return { date = "8/16/2056", story = "Hey Dani! It's Vi, you won't believe what I just found. A box of old Eclipse Gummies! At work we were cleaning out this old ma' and pop convenience store and I found this box unopened in the back. My boss let me keep it since we'd just throw it out otherwise. It has to have been nearly 8 years since I last had one of these. Oh lil' Francesca Frog, Robot Reg and all of you other lil' fruity flavors. For a show that solely existed to sell merch, it sure did leave a mark on my childhood. I'm so glad these gummies taste the same as they did so long ago. Even giving me the same wiggly tingles as back then too. It really makes me think, why did they stop selling such popular gummies? Anyways I can't hog all of these to myself so I'm sending you a bunch to have too. Enjoy :heart:", priority = "Standard" + }, + denizuCrown = { + name = "Crown of Denizu", + pickup = "Fit for a mad king.", + description = "Fit for a mad king.", + destination = "-", + date = "-", + story = "-" } }, @@ -552,7 +560,7 @@ return { enableStages = "Enable Stages", ["enableStages.desc"] = "Enables stages added by Starstorm Returns.", enableBeta = "Enable Unfinished Content", - ["enableBeta.desc"] = "Enables work in progress Starstorm Returns content. \nVERY UNFINISHED", + ["enableBeta.desc"] = "Enables work in progress Starstorm Returns content. Unstable! Restart required.", enableChirrsmas = "Enable Chirrsmas Content", ["enableChirrsmas.desc"] = "Whether Chirrsmas-exclusive content should be present. \nBy default active from December 15th to January 15th. \nRESTART REQUIRED", ["enableChirrsmas.default"] = "Default", diff --git a/Language/koreana.lua b/Language/koreana.lua new file mode 100644 index 00000000..e188c218 --- /dev/null +++ b/Language/koreana.lua @@ -0,0 +1,564 @@ +return { + difficulty = { + typhoon = { + name = "태풍", + description = "최고의 도전.\n행성은 악몽에 휩싸일 것이고, 생존한다는 것은 환상과도 같습니다.\n누구도 감당하지 못할 것입니다.", + }, + }, + + survivor = { + executioner = { + name = "익스큐셔너", + nameUpper = "익스큐셔너", + description = "익스큐셔너는 적의 머릿수를 줄이는 데 특화된 기동형 전사입니다. 이온 투사기를 사용하여 적들을 공포에 질려 달아나게 만드는 환영을 생성하며, 동시에 도끼를 투사하여 가장 강력한 적들을 처단합니다. 이온 버스트와 처형을 연계해 연속 처치를 달성하고 끊임없이 몰아치세요.", + endQuote = "...그렇게 그는 떠났다, 채워지지 않은 살육의 갈망을 품은 채.", + story = "
    승객 세부 정보:\n[군사 등급]\n\n
      수화물 및 장비:\n해당 장교는 EXN 대행관용 탄소 직조 제복, 민간 등급 도금 오버슈트, 지급된 제식 권총을 소지하고 탑승하였음. 군사 검문소에서, 해당 승객의 무장에 추가적인 언더배럴 개조가 이루어진 것으로 확인되었으며, 이를 보안 컨테이너에 보관하기로 합의한 후 통과됨. 또한 승객은 추진구가 장착된 이온 204X 시리즈 배터리 한 개에 대한 반입 허가를 받음. 안전 조치로써 승객의 기술 장비에는 일시적으로 전기식 자동 무력화 장비를 장착한 후 본인에게 반환됨.\n\n[보안 참조 사항]\n
        [노트 E1a] 해당 승객이 보안 검색대 승무원 전체를 불안하게 만든다는 보고가 여러 번 들어옴. 추후 공지가 있을 때까지 가벼운 감시가 필요함.\n
          [노트 E1b] 해당 승객은 범용 수화를 사용하기 전까지 언어를 통한 발화보다 단순한 소리로 응답하는 경우가 잦았음.\n
            [사건 E1] Contracted commando performs security check in Passenger's quarters.\n
              [사건 E1a] 계약 코만도가 해당 승객의 객실로 이어지는 복도에 대해 24시간 전담 감시를 요청함.\n
                [사건 E2] 다른 승객이 기내 보안팀에 공식적인 불만을 제기하자 식사 시간 동안 테이블을 옮겨도 되냐고 질문함.", + id = "Travel ID: 4383354378334FF3D34D", + departure = "출발지:\n올드 알카트라즈,\n러스트버러,\n화성", + arrival = "목적지:\n스틸워터 만\n뉴드레지\n유로파", + }, + mule = { + name = "MULE", + nameUpper = "MULE", + description = "모든 MULE 유닛은 적절하게 무장되어 있으며 임무 수행 준비가 되어 있습니다. 작업 성능을 극대화하기 위해 고품질 재료로 제작되었습니다. 이 모델에는 사냥, 탐험 및 기타 일반 사용자들에게 위험한 작업들에 적합한 개척 도구 세트가 포함되어 있습니다. 초기화하려면 시스템 부팅에 대한 지침을 명시해 주세요.", + endQuote = "...그렇게 그것은 떠났다, 피스톤은 삐걱이고, 지시가 명시되지 않은 채.", + story = "
                  보증 만료일: \n8/16/2041 \n\n입력된 메모: \n(ID: #1244C4F4F5D494) \n알림: MULE - MODEL F \n“함선 자산 무단 개조”로 곤란해지는 건 딱 질색이지만, 최근 이 MULE 유닛을 부팅해서 수리를 좀 해 봤어요. 그냥 거기 방치되어 있길래, 제가 조금 손을 댄다고 해서 딱히 뭐라고 할 사람은 없을 거라고 생각했죠. 이륙하기 전에 내다 버리자는 말들이 들리던데, 이렇게 훌륭한 물건이 그렇게 버려지게 둘 순 없었거든요... 뭐, 확실히 보기만 해도 든든한 녀석인 데다, 인정할 건 인정해야죠, 이건 정말 보기 드문 물건이잖아요! 첫 4족 보행 모델이 대히트를 친 이후로 다목적 유닛은 오랫동안 찬밥 신세였으니까요. 게다가 이런 로봇들이 마음만 먹으면 무슨 일까지 해낼 수 있는지 우리 다 잘 알잖아요? 이런 섀시만 봐도, 이 덩치 큰 녀석이 꽤나 험악한 지형을 누볐을 거라는 건 의심의 여지가 없고요. 일종의 걸어 다니는 타임캡슐 같다고나 할까, 안 그래요?\n필요한 영상 자료는 아래에 다 첨부해 놨고, 뭐 이러쿵저러쿵- 음, 이봐요, 단도직입적으로 말할게요. 그냥... 이 녀석을 계속 데리고 있는 걸 고려해 봐요. 아주 잠깐이라도 좋으니까요. 그 소문들이 사실이든 아니든... 원래 주인도 기뻐할 거에요. 이 녀석이 여전히 쌩쌩하게 잘 돌아가고 있다는 걸 알면 말이죠.\n그저 녀석에게 할 일만 좀 주세요. 딱 한 번만 더 기회를 주자고요.\n\n[정비 보고서]\n
                    [보고 M1] 부팅 시, MULE 유닛은 지원 드론을 배치하라는 구두 명령을 받기 전까지는 20분 동안 완전히 움직이지 않았음.\n
                      [보고 M1a] 지원 드론의 전력 뱅크의 성능 저하가 확인됨. 호환되는 대체품을 찾지 못하였으므로, 충전하여 사용할 것. 배터리 수명 보장 불가.\n
                        [보고 M2] MULE 유닛이 인식되지 않은 정비사를 갑자기 제압하려 시도한 사건 이후, 안면 인식을 통해 콘택트 라이트 호의 승객 및 대원들의 정보를 학습시키는 절차가 진행됨. 현재 대부분의 UES 대원들이 유닛의 메모리에 등록됨.\n
                          [보고 M2a] MULE 유닛의 메모리에 원격으로 접속한 결과, 2036년까지 거슬러 올라가는 데이터베이스의 이전 기록들이 발견됨. 다만 메모리의 초기 기록들은 손상되었거나 완전 말소 상태로 확인됨.", + }, + nemesisCommando = { + name = "네메시스 코만도", + nameUpper = "네메시스 코만도", + description = "네메시스 코만도는 어떤 상황이든 대처할 수 있는 화력을 갖춘 유연한 캐릭터입니다. 종언의 칼날을 사용해 적에게 부상을 입히고, 다른 기술로 막대한 피해를 줄 수 있도록 연계하세요. 전술 구르기로 근접 거리를 자유롭게 넘나들며 가장 위험한 상황조차 당신에게 유리하게 반전시키세요.", + endQuote = "...그렇게 그는 떠났다, 새로운 인간성에 대한 감각을 안은 채로.", + story = "미등록 현장 데이터 로그: 데이터 최종 수정일 [##090??!?]\n[오류 0x00000ce: 데이터 패키지 손상, 복원 지점을 불러오는 중.] \n\n
                            [기록 1] - 정찰대가 캠프에서 몇 마일 떨어진 곳에서 부상당한 낙오자 한 명을 구조했다. 소문에 따르면 그가 \"어디선가 갑자기 나타났다\"고 한다(그 말을 믿으라는 건지 원). 주변엔 그의 흔적을 추적할 만한 게 아무것도 없었으니 말이다. 그 주장의 타당성이 어떻든, 생존자는 생존자니까. 이 글을 쓰는 지금, 우리는 그를 옮기는 중이다. 하지만 장비 무게가 어마어마해서 옮기는 게 보통 일이 아니다. 표준 코만도 아머 리그에 비정통적인 개조를 가한 것 같다. Mk. 1 모델의 초기 보급형처럼 보이는데... (분명 수년 전에 생산이 중단된 걸로 아는데?)\n\n
                              [기록 2] - 업데이트 — 이 친구, 코만도 유닛 치고는 무시무시한 중화기를 갖고 있다. 아직 온기가 남아있는 로켓 런처와, 분명 외계 것이 틀림없는 수류탄들. 맹세컨대 그런 건 한 번도 본 적이 없다. 그는 지금 정신을 잃은 상태인데, 헬멧 너머로 보이는 모습은 엉망진창이다. 왼팔이 유독 뻣뻣해 보이는데, 손이 진동검 손잡이를 꽉 쥐고 놓지 않는다. 마치 주먹이 그 빌어먹을 검에 융합된 것 같다. 그 외에도 몸 전체가 딱딱하게 굳은 검은... 물질로 뒤덮여 있다. 생존자들끼리의 싸움 결과인지, 아니면 어떤 자가 파괴??!0049###\n[판독 가능한 데이터 끝.] \n\n
                                [기록 2a] - 이걸 타이핑하는 지금 내게 시간이 얼마나 남았는지 모르겠다 그게 깨어났고 캠프는 초토화됐다 사람들이 피를 멈추지 않는다 그게 하는 짓을 보면 인간인지조차 모르겠다 다들 어쩔 줄 몰라 하고 있고 그건 곧장 에이드리언에게 달려들었다\n뭐가 그놈을 자극한 거지??? 우리가 뭘 잘못했다고 이런 일을 당해야 하는 거야??? 왜 저 괴물이 우릴 공격하는 거!??!?##$0959090302???!\n[판독 가능한 데이터 끝.]\n\n

                                등?에 떼가 풀?을 뜯는 이 고?귀한 짐?승에게 달려든?다.\n\n그 표?면을 뒤덮은 너?희의 역?병은 이 고단?한 손들?에 의해 사라?지리라.", + }, + nemesisMercenary = { + name = "네메시스 머시너리", + nameUpper = "네메시스 머시너리", + description = "네메시스 머시너리는 비열한 전술과 무자비한 속도로 몰려드는 적들을 제압합니다. 신속한 격발로 적들을 약화시키고, 섬광 슬라이드로 탄약을 보충하며, 절명을 사용해 남은 목표들을 손쉽게 연속 처치하세요.", + endQuote = "...그렇게 그는 떠났다. 피와 황폐함이라는 보수를 두둑이 챙긴 채.", + story = "

                                난 친구 따윈 필요없어\n난 핸드폰도 필요 없어\n잘린 머리 한 봉지와\n그리고 내 방사능 왕좌뿐이야\n

                                  Nuclear Throne OST\nJukio Kallio - Venus Mansion", + }, + technician = { + name = "테크니션", + nameUpper = "테크니션", + description = "테크니션은 적의 접근을 차단하는 구역을 구축하고 유지하는 데 탁월합니다. 강제 가동 중단은 강화 시 해당 구역을 강제로 봉쇄할 수 있습니다. 장치를 강화하면 성능이 비약적으로 향상되지만, 위험한 상황에서 강화 작업을 시도할 때는 주의해야 합니다!", + endQuote = "...그렇게 그는 떠났다. 그 자신조차 수복할 수 없을 만큼 무너진 채.", + story = "
                                    승객 상세 정보:\n[직원 등급]\n\n
                                      직원 상세 정보:\nUES 컨택트 라이트호의 예정된 항해 기간 전체에 걸쳐 현장 근무 계약을 체결한 직원. 함선 내 기계적 결함 발생 시 유지보수를 담당함. 소프트웨어 및 하드웨어 엔지니어링 분야에서 6년의 실무 경력을 갖춘 숙련된 기술자임.\n\n
                                        수하물 및 장비:\n강력한 진공 저항 등급을 받은 듀라렌드 용접용 우주복과 행성 지표면 활동용 가죽 및 천 소재 의복을 소지하고 탑승함. 진공 상태 발생 시 일반 의복은 찢어질 수 있음을 직원에게 고지함. 보안팀은 직원이 소지한 거대한 렌치가 실용성이 떨어지고 위험해 보인다는 이유로 주의 대상으로 분류함. 이에 대해 해당 직원은 \"가장 힘든 작업들을 위해... 직접 제작한 것\"이라고 답변함. 절차에 따라 해당 렌치는 1a 적재 구역의 자동화 보관함으로 이동 조치됨. 나머지 휴대품 검사 결과, 표준 보급형 렌치 여러 개, 색상별로 구분된 USB 3개, 2047년형 GeForm 노트북, 공구 상자, 그리고 용접 도구가 확인됨. USB는 리오바이러스 탐지기 v1.6.2가 설치된 사내 일회용 컴퓨터로 검사함. 악성 코드는 발견되지 않았으며, 저장된 파일은 다양한 장치의 설계도가 담긴 UPG 형식임. 추가 문제 사항이 없어 통과 허가됨.\n\n[보안 기록]\n
                                          [사건 T1] 이륙 준비 중 함선 조종사와 몇 시간 동안 대화를 나눈 뒤, 객실에서 나가기를 거부하여 강제로 퇴거 조치함.\n
                                            [사건 T2] 자판기에서 탄산음료를 훔치는 모습이 포착됨.\n
                                              [사건 T3] 4a 적재 구역에서 발생한 자동 봉쇄 상황을 해당 직원이 해결함.\n
                                                [사건 T4] 함선 요원의 요청으로 탈출 포드 B-08의 결함을 수리하던 중, 상태가 '오류'에서 '경보'로 변경됨. 보안 요원 조사 착수 지시함.\n
                                                  [사건 T1a] \"조종하기 편하게 만들려고\" 객실 제어 패널을 무단 개조한 사실이 추가로 보고됨. 예정된 발사가 지연되었으며, 해당 직원에게 모든 수정 사항을 원상 복구할 것을 지시함.", + id = "Travel ID: 54E4F4C434F59474E454", + departure = "출발지:\nUES 쇼핑 도크 5\n레드뷰\n화성", + arrival = "목적지:\nUES 쇼핑 도크 0\n레드뷰\n화성", + }, + swapNemesis = { + name = "네메시스 생존자", + nameUpper = "네메시스 생존자", + description = "익숙하지만 뒤틀린 네메시스 생존자로 전환합니다.", + }, + swapNormal = { + name = "일반 생존자", + nameUpper = "일반 생존자", + description = "일반 생존자 세트로 전환합니다.", + }, + }, + + skill = { + executionerZ = { + name = "제식 권총", + description = "사격해 100%의 피해를 입힙니다.", + }, + executionerX = { + name = "이온 버스트", + description = "이온화된 탄을 빠르게 속사하여 각각 320%의 피해를 입힙니다.\n적을 처치하여 탄을 얻습니다.", + }, + executionerC = { + name = "군중 해산", + description = "앞으로 돌진하며 주변 적들을 공포에 질리게 합니다.\n돌진하는 동안에는 공격에 적중당하지 않습니다.", + }, + executionerV = { + name = "처형", + description = "공중으로 뛰어오른 뒤 도끼를 투영해 내려찍어 1000%의 피해를 입힙니다.\n처형에 성공할 때마다 재사용 대기 시간이 1초 감소합니다.", + }, + executionerVBoosted = { + name = "군중 처형", + description = "공중으로 뛰어오른 뒤 도끼를 투영해 내려찍어 1000%의 피해를 입히고, 적들을 공포에 질리게 합니다.\n처형에 성공할 때마다 재사용 대기 시간이 1초 감소합니다.", + }, + executionerV2 = { + name = "두개골 분쇄자", + description = "원호를 그리며 날아가는 도끼를 던져 초당 1500%의 피해를 입힙니다. 공포에 질린 적에게는 치명타로 적중합니다.\n처형에 성공할 때마다 재사용 대기 시간이 1초 감소합니다.", + }, + executionerV2Boosted = { + name = "두개골 파괴자", + description = "원호를 그리며 날아가는 도끼 두 개를 던져 초당 1500%의 피해를 입힙니다. 공포에 질린 적에게는 치명타로 적중합니다.\n처형에 성공할 때마다 재사용 대기 시간이 1초 감소합니다.", + }, + muleZ = { + name = "간섭 제거", + description = "펀치를 날려 200%의 피해를 입힙니다. 버튼을 누르고 있으면 충전하며 최대 충전 시 지면을 강타하여 1400%의 피해를 입힙니다.", + }, + muleX = { + name = "부동화", + description = "125%의 피해를 입히는 함정을 발사합니다. 함정은 대상과 대상 인근 최대 5명의 적을 포박합니다.", + }, + muleC = { + name = "토크 보정", + description = "회전하며 전방으로 이동해 4X100%의 피해를 입힙니다. 마지막 타격은 대상을 기절시킵니다.", + }, + muleV = { + name = "페일-세이프 보조", + description = "8초 동안 유지되는 개인용 수리 드론을 배치합니다. 드론은 최대 체력의 5X7% 만큼을 회복시킵니다. 체력이 최대치일 경우, 대신 방벽을 제공합니다.", + }, + muleVBoosted = { + name = "페일-세이프 보조 2.0", + description = "8초 동안 유지되는 치유 드론을 배치합니다. 드론은 최대 체력의 5X10% 만큼을 회복시킵니다. 체력이 최대치일 경우, 대신 방벽을 제공합니다.", + }, + nemesisCommandoZ = { + name = "종언의 칼날", + description = "주변의 적을 베어 120%의 피해를 입히고, 6초 동안 부상을 입힙니다. 중첩이 불가능합니다.\n부상당한 적은 받는 모든 피해가 50% 증가합니다.", + }, + nemesisCommandoX = { + name = "단발 사격", + description = "적을 사격해 200%의 피해를 입힙니다.\n최대 4개까지 소지할 수 있습니다. 구를 때 2발 장전합니다.", + }, + nemesisCommandoX2 = { + name = "머나먼 상처", + description = "일직선으로 참격을 날려 90%의 피해를 입히고, 6초 동안 부상을 입힙니다.", + }, + nemesisCommandoC = { + name = "전술 구르기", + description = "전방으로 빠르게 굴러 짧은 거리를 이동합니다.\n구르는 동안에는 공격에 적중당하지 않습니다.\n최대 2번까지 충전됩니다.", + }, + nemesisCommandoV = { + name = "쓸어버리기", + description = "수류탄을 던져 700%의 피해를 입힙니다. 버튼을 누르고 있으면 투척을 유예할 수 있습니다.\n아래 버튼을 누르고 던지면 조금 더 낮은 각도로 던집니다.", + }, + nemesisCommandoVBoosted = { + name = "집속탄", + description = "수류탄을 던져 700%의 피해를 입히고, 기절시키며 3개의 자탄으로 나뉘어 3x150%의 피해를 입힙니다.\n버튼을 누르고 있으면 투척을 유예할 수 있습니다.\n아래 버튼을 누르고 던지면 조금 더 낮은 각도로 던집니다.", + }, + nemesisCommandoV2 = { + name = "파괴자", + description = "로켓을 발사해 단일 적에게 1000%의 피해를 입힙니다. 주변의 적들에게는 50%의 피해를 입히고 기절시킵니다.\n체공 중일때는 대각선 아래로 발사합니다.", + }, + nemesisCommandoV2Boosted = { + name = "징벌자", + description = "로켓을 발사해 단일 적에게 1000%의 피해를 입힙니다. 주변의 적들에게는 50%의 피해를 입히고 산개시킵니다.\n체공 중일때는 대각선 아래로 발사합니다.\n최대 2개까지 소지할 수 있습니다.", + }, + nemesisMercenaryZ = { + name = "난도질", + description = "전방의 적들을 빠르게 베어 100%의 피해를 입힙니다.", + }, + nemesisMercenaryX = { + name = "신속한 격발", + description = "샷건을 발사하여 적을 기절시키고 400%의 피해를 입힙니다.", + }, + nemesisMercenaryC = { + name = "섬광 슬라이드", + description = "버튼을 길게 눌러 방어 태세를 취한 뒤 전방으로 빠르게 슬라이딩합니다. \n이 태세에서 피격 시 샷건이 재장전됩니다.\n슬라이딩 중에도 공격이 가능합니다.", + }, + nemesisMercenaryV = { + name = "절명", + description = "주변의 가장 약한 적을 목표로 삼아 700%의 피해를 입힙니다. \n기절한 적을 우선시하며 치명타를 입힙니다. \n이 기술로 적 처치 시 기술이 초기화됩니다.", + }, + nemesisMercenaryVBoosted = { + name = "절대적 절명", + description = "주변의 가장 약한 적을 목표로 삼아 700%의 피해를 입힙니다. \n기절한 적을 우선시하며 치명타를 입힙니다. \n체력이 25% 이하인 적을 즉시 처치합니다.", + }, + technicianZ = { + name = "미세 조정", + description = "렌치로 전방을 타격하여 180%의 피해를 입힙니다. \n장치를 3회 타격하면 30초 동안 일시적으로 강화합니다.", + }, + technicianZ2 = { + name = "트러블슈팅", + description = "렌치를 전방으로 던져 최대 3명의 적을 관통하며 180%의 피해를 입힙니다. \n장치를 3회 타격하면 20초 동안 일시적으로 강화합니다.", + }, + technicianX = { + name = "강제 가동 중단", + description = "폭탄을 던져 재가동 시 500%의 피해를 입힙니다.\n강화 시 지속적으로 적을 끌어당기고 폭발 시 기절시킵니다.", + }, + technicianXD = { + name = "붉은 버튼", + description = "폭탄을 점화해 500%의 피해를 입힙니다.\n강화 시 적을 기절시킵니다.", + }, + technicianC = { + name = "25시간 각성", + description = "자판기를 배치하여 이동 및 공격 속도 보너스를 제공합니다.\n강화 시 추가로 치명타 확률이 증가합니다.", + }, + technicianC2 = { + name = "방사형 증폭기", + description = "안테나를 배치하여 공격한 적에게 15%의 추가 피해를 입힙니다.\n강화 시 100%의 치명타 확률을 얻습니다.", + }, + technicianV = { + name = "백업 방화벽", + description = "전방을 공격하는 포탑을 내려놓아 초당 220%의 피해를 입힙니다.\n강화 시 빠르게 사격해 초당 350%의 피해를 입힙니다.", + }, + technicianVBoosted = { + name = "백업 방화벽 2.0", + description = "빠르게 공격하는 포탑을 내려놓아 초당 350%의 피해를 입힙니다.\n강화 시 미사일을 발사해 4x100%의 피해를 입힙니다.", + }, + peace = { + name = "<#a4eae4>평화!", + description = "이 스킬을 사용할 수 없습니다.", + }, + }, + + item = { + armedBackpack = { + name = "무장 가방", + pickup = "뒤로 탄환을 발사할 확률이 생깁니다.", + description = "18.5%(중첩당 +6.5%) 확률로 뒤로 탄환을 발사해 150%의 피해를 입힙니다.", + destination = "오트뉘\n832B\n지구", + date = "11/7/2056", + story = "안전은 언제나 중요한 법이야. 네가 위험에 처하는 건 원치 않으니까, 밖으로 나갈 땐 언제나 이걸 꼭 챙겨 입으렴. 특히 협곡 쪽에는 도둑들이 많으니까 더 조심해야 해!\n올해가 가기 전에 추가 탄약도 좀 보내줄게, 알겠지?", + priority = "표준", + }, + brassKnuckles = { + name = "황동 너클", + pickup = "가까운 거리에 추가 피해를 입힙니다.", + description = "2.8m(중첩당 +1.4m) 내의 적에게 +35%의 추가 피해를 입힙니다.", + destination = "UESPD\nE42\nUES 할버드 B2", + date = "03/01/2056", + story = "범죄 현장에서 발견한 물건입니다. 확보한 다른 증거물들과 DNA 대조 작업이 필요합니다. 그놈들을 놓쳤다는 게 아직도 믿기지 않는군요.\n뒷면에 기묘한 문양이 새겨져 있는데, 어쩌면 단서가 될지도 모르겠습니다. 저는 [삭제됨]의 서쪽으로 향할 예정입니다. 이 사건을 해결하는 데 도움을 줄 만한 사람을 알고 있거든요.", + priority = "표준/생물", + }, + detritiveTrematode = { + name = "부식성 흡충", + pickup = "체력이 낮은 적에게 지속 피해를 입힙니다.", + description = "체력이 15%(중첩당 +5%) 이하인 적을 영구적으로 감염시켜 1초마다 100%의 피해를 입힙니다.", + destination = "네우스 2\n112\n화성", + date = "03/11/2057", + story = "으, 이건 너나 가져.\n절대 다신 이딴 미세 알 부화장같은 거 보내지 마라, 제발.", + priority = "특송/생물", + }, + dormantFungus = { + name = "휴면 버섯", + pickup = "이동 중 체력을 재생합니다.", + description = "이동 중에 2초마다 체력의 2%(중첩당 +2%)만큼 회복합니다.", + destination = "게이트 1\n모듈 13\n기 스테이션", + date = "11/01/2056", + story = "균사 동굴을 탐사하라는 명령을 내리셨을 때, 제가 기대했던 건... 뭐, 당연히 버섯뿐이었습니다. 딱히 기대에 부풀었던 건 아니지만, 이 표본만큼은 제 눈길을 사로잡더군요.\n주로 흐르는 물 주변에서만 자라는 것 같습니다. 그런데 이 샘플을 채집해서 밀봉한 뒤부터, 색깔과 냄새가 순식간에 바래버리더군요.\n당신이 이 표본을 좀 더 자세히 연구해 주셨으면 좋겠습니다.", + priority = "표준", + }, + fork = { + name = "포크", + pickup = "더 많은 피해를 입힙니다.", + description = "기초 피해량3(중첩당 +3) 증가합니다.", + destination = "블로썸 언덕\n앤티마 빌딩 - 지붕\n지구", + date = "09/24/2056", + story = "짠! 서프라이즈! 포크다! 하하하!!!\n어떤 선물이든 다 좋다며? 자, 여기 받아라! 농담은 여기까지 하고, 이 포크 진짜 마법의 포크라니까. 던컨, 나 믿어봐. 나 예전에 이걸로 샐러드 먹은 날에 무려 1센트를 주웠다니까!\n그리고 어... 조만간 우리랑 같이 좀 놀자. SS2에서 네 빌드 박살 내던 때가 그립네. (제발 주캐 좀 바꿨다고 말해줘 ㅋㅋㅋ)", + priority = "표준", + }, + watchMetronome = { + name = "시계 메트로놈", + pickup = "가만히 서 있으면 시계를 충전합니다. 최대 충전 시 이동 속도가 증가합니다.", + description = "가만히 서 있으면 3초간 시계를 충전합니다. 최대 충전 시, 이동 속도가 50% 증가하며, 3(중첩당 +1)초에 걸쳐 충전을 소모합니다.", + destination = "G-44 (지하)\n1번 우리\n지구", + date = "09/05/2056", + story = "할아버지가 과거의 유물이라면서 이걸 주셨어. 우리 고조의 고조의... 아무튼 엄청나게 까마득한 조상님 물건이었다나 봐. 난 골동품이나 집안 가보 같은 데는 눈곱만큼도 관심 없으니까, 그냥 네가 갖는 게 제일 나을 것 같아.\n어차피 딱히 쓸모가 있을 것 같지도 않고 말이야...", + priority = "특송", + }, + wonderHerbs = { + name = "신비한 허브", + pickup = "모든 회복 효과를 약간 증가시킵니다.", + description = "모든 회복 효과가 12%(중첩당 +12%) 증가합니다.", + destination = "플롯 3\n2342\n지구", + date = "11/07/2056", + story = "릿카! 네가 EC랑 같이 새로운 레시피를 만들고 있다고 들었어. 우리 농장에서 아주 특별한 허브들을 키우고 있는데, 네 작업에 꽤 도움이 될 것 같아서 보내. 몸의 상처뿐만 아니라 마음의 상처를 치료하는 데도 정말, 정말 유용하다고 알려진 애들이거든. \n더 필요하면 망설이지 말고 연락해! 사랑을 담아, 에덴이.", + priority = "표준", + }, + coffeeBag = { + name = "커피 봉투", + pickup = "상호작용 물체를 활성화하면 이동과 공격 속도가 증가합니다.", + description = "상호작용 물체를 활성화하면 이동과 공격 속도가 22% 증가합니다. 10(중첩당 +5)초 동안 지속됩니다.", + destination = "수도\nn1\nUES 프라임", + date = "05/22/2056", + story = "자아아아아암꾸러어어어어기이이이이! 커피 왜 싫다는 건지 1도 모르겠다니까. 밤새기엔 진짜 너어어어어무 좋은데 말야. 웅웅, 텐션 올리는 다른 방법들도 많다는 건 나도 아는데... 와, 이건 진짜 네 취향일걸. 내가 제일 좋아하는 거야!!! 나한테 소리부터 지르지 말고 일단 한 번 잡숴봐, 알게찌?", + priority = "표준", + }, + x4Stimulant = { + name = "X4 자극제", + pickup = "보조 스킬의 재사용 대기시간을 감소시키고, 사용 시 체력을 약간 회복합니다.", + description = "보조 스킬의 재사용 대기시간이 10%(중첩당 +10%) 감소합니다. 보조 스킬 사용 시 체력 재생이 증가하여 3초 동안 1초마다 체력을 2(중첩당 +1) 회복합니다.", + destination = "바탕아이 국립공원\n로미오 33\n지구", + date = "4/12/2057", + story = "설명서를 동봉합니다. 기기에서 540번 증상이 나타납니까? 만약 그렇다면 각성제를 100ml 이상 사용하는 것은 피하는 게 좋을 겁니다.\n\n건배.", + }, + moltenCoin = { + name = "녹아내린 동전", + pickup = "적들을 점화시키고 돈을 획득할 확률이 생깁니다.", + description = "공격 적중 시 6% 확률로 6초 동안 적을 불태우고, $1(중첩당 +$1)의 골드를 얻습니다.", + destination = "토에라 2\nB44\n마더 스테이션", + date = "05/22/2056", + story = "저기! 어... 미안, 진짜 정말 미안해... 네가 나더러 이 동전을 꼭 가지고 있어 달라고 했던 건 아는데, 나 더 이상은 책임 못 지겠어...\n그게, 실수로 동전을 플라즈마 용광로 가장자리에 두는 바람에... 음... 옆면이 좀 타버렸거든. 제발 나한테 화내지 마, 알았지?...", + priority = "표준", + }, + crypticSource = { + name = "수수께끼의 근원", + pickup = "방향 전환이 막대한 에너지를 발생시킵니다.", + description = "방향 전환 시 연쇄 번개를 발사해 최대 2명의 적에게 70%(중첩당 +55%)의 피해를 입힙니다.", + destination = "로우 엔드\nO32\n지구", + date = "03/30/2058", + story = "원자부터 의식을 가진 존재에 이르기까지, 모든 것은 에너지에서 비롯됩니다. 하지만 이 수수께끼 같은 물체는 스스로 에너지를 발산하는 것처럼 보입니다. 강한 마찰은 연쇄 반응을 일으켜 이 물체를 극도로 불안정하게 만들지만, 동시에 이것은 제어 가능한 (무한한?) 에너지원이 될 수도 있습니다. 이것이 우리가 갈망하는 유토피아적 미래로 우리를 인도할지는 전혀 알 수 없으나, 우주에 대한 우리의 기존 통찰을 완전히 뒤바꿔 놓았음은 자명합니다.", + priority = "불안정", + }, + huntersSigil = { + name = "사냥꾼의 문장", + pickup = "일정 시간 동안 움직이지 않으면 방어력과 치명타 확률이 증가하는 영역을 생성합니다.", + description = "1초 동안 가만히 서 있으면 작은 영역을 생성해 영역 내 모든 아군에게 15(중첩당 +10)의 방어력과 25%(중첩당 +20%)의 치명타 확률을 제공합니다.", + destination = "벡햄 빌딩\n2East\n지구", + date = "02/02/2056", + story = "이봐 세트, 우리 팀에 온 걸 환영하네. 그동안 적임자를 찾아 헤맸는데, 자네가 합류했으니 이제 다음 시즌 작업을 시작할 수 있겠군. 자네 활약에 기대를 걸겠네.\n\n-아이릭스가.", + priority = "특송", + }, + roulette = { + name = "룰렛", + pickup = "매 분마다 무작위 이로운 효과를 제공합니다.", + description = "매 분마다 변경되는 무작위 이로운 효과를 얻습니다. 등장 가능 효과:\n\n: 최대 체력이 60(중첩당 +24) 증가합니다.\n: 체력 재생이 증가해 1초마다 3.6(중첩당 +1.8)의 체력을 회복합니다.\n: 기초 피해량이 14(중첩당 +5) 증가합니다.\n: 공격 속도가 35%(중첩당 +15.5%) 증가합니다.\n: 치명타 확률이 25%(중첩당 +10%) 증가합니다.\n: 이동 속도가 20%(중첩당 +7%) 증가합니다.\n: 방어력이 35(중첩당 +14) 증가합니다.", + destination = "세크바 카지노\n개인실 3.1\n지구", + date = "7/17/2057", + story = "최근 카지노에서 발생한 사건에 대한 후속 조치로 발송된 교체용 룰렛 모델 144Bella-1입니다. 추가 문의 사항은 당사 대리인이 안내해 드린 전자 연락망으로 연락해 주시기 바랍니다.", + priority = "특송", + }, + judderingEgg = { + name = "떨리는 알", + pickup = "작은 친구를 얻으세요!", + description = "전투를 돕는 1(중첩당 +1)마리의 어린 웜이 부화합니다. 주기적으로 주변의 적들을 공격해 18x80%의 피해를 입힙니다.", + destination = "리 컴파운드\n게이트 B\n지구", + date = "11/21/2056", + story = "사육사한테서 또 하나가 도착했어. 이번 건 정말 기이한 개체군. 극도로 조심해야 할 거야. 제대로 다루지 않으면 새끼라도 불과 몇 초 만에 아주 공격적(그리고 치명적!)으로 변할 수 있다고 들었거든. 부화하기까지 그리 오래 걸리지 않을 테니, 녀석을 가둬둘 시설을 미리 준비해 두는 게 좋을 거야.", + priority = "파손주의", + }, + uraniumHorseshoe = { + name = "우라늄 편자", + pickup = "이동 속도와 점프 높이가 증가합니다.", + description = "이동 속도와 점프 높이가 10%(중첩당 +10%) 증가합니다.", + destination = "\"화성인의 얼굴\" 말 관리 및 농업 용품점\n6900\n화성", + date = "04/20/2056", + story = "어느 날 밤늦게, 우리가 애지중지하던 쇼 전용 말 한 마리가 원인 모를 죽음을 맞이했습니다. 그리고 그 녀석의 발굽에서 이 기괴한 초록색 편자를 발견했죠.\n전담 수의사 말로는 당신들이라면 이 희한한 물건에 대해 뭔가 알지도 모른다고 하더군요. 그냥 손에 쥐고만 있어도 손바닥이 타들어 가는 것 같습니다. 부디 조심히 다루세요.", + priority = "표준", + }, + malice = { + name = "악의", + pickup = "피해가 주변 적에게 확산됩니다.", + description = "공격이

                                                  주변의 적에게 확산되어 4.2m(중첩당 +1m)내 최대 1(중첩당 +1)명의 적에게 총 45%의 피해를 입힙니다.", + destination = "로미오\nP24\n폴-에이 스테이션", + date = "02/11/2056", + story = "수단과 방법을 가리지 말고 격리하십시오. 이 표본은 제대로 통제하지 못할 경우 심각한 재앙이 될 수 있습니다. 녀석을 억제하기 위해 우리가 이미 얼마나 많은 희생을 치렀는지 당신은 짐작조차 못 할 겁니다.", + priority = "

                                                  악의성", + }, + manOWar = { + name = "고깔해파리", + pickup = "처치 시 전기를 방출합니다.", + description = "적 처치 시 연쇄 번개를 발사해 최대 2명의 적에게 100%(중첩당 +40%)의 피해를 입힙니다.", + destination = "크리에이션 산\n숨겨진 구덩이\n금성", + date = "11/20/2056", + story = "얘들아, 내가 얼마 전에 보낸 그 꼬맹이 기억나? 음... 이번 녀석은 그때보다 좀 더 공격적이긴 한데, 그래도 아주 웃긴 친구야! 병 안에서 뱅글뱅글 돌면서 나를 쳐다보는 걸 정말 좋아하거든. 와, 내가 구조 안 했으면 지금쯤 어떤 외계인 뱃속에 들어가 있었을걸.\n이름을 앤이라고 지어줄까 하는데, 다들 어때?", + priority = "특송", + }, + guardingAmulet = { + name = "수호 애뮬릿", + pickup = "뒤에서 받는 피해가 감소합니다.", + description = "뒤에서 받는 피해가 40%(중첩당 +40%) 감소합니다.", + destination = "아쥬르 가든\nC8\n성소", + date = "03/11/2056", + story = "그가 어딘가에 있다는 걸 안다. 네가 그를 찾아낼 거라는 것도... 하지만 포기하지 말고 정진해야 한다. 내 영혼이 이 육신을 떠날 때, 진언이 울려 퍼질 것이며 네가 나의 자리를 대신하게 될 것이다. 그는 네가 나에게 그토록 갈구했던 답으로 향하는 길을 보여줄 유일한 존재다.\n이 아뮬렛을 기꺼이 받아들여라. 너는 이것에 의지하게 될 것이며, 이것은 네가 결코 뒤를 돌아보지 않게 해줄 것이다.", + priority = "표준", + }, + distinctiveStick = { + name = "독특한 막대기", + pickup = "텔레포터 근처에서 회복할 수 있습니다.", + description = "텔레포터 근처에 나무가 자라 10m(중첩당 +3.75m) 내의 아군이 2초마다 체력의 2.2%만큼 회복합니다.", + destination = "테사프트\n드렉 미넬리\n지구", + date = "01/15/2056", + story = "자기야, 당신을 위해 특별한 걸 준비했어..\n지난번 임무 중에 이걸 우연히 발견했지 뭐야. 지금껏 살면서 본 그 어떤 나뭇가지와도 달라서 단번에 내 눈길을 사로잡았어! 이 가지는 아주 묘한 에너지를 뿜어내거든. 오직 이야기 속에서나 가능할 거라고 생각했던 방식으로 내가 자연과 연결되어 있다는 기분을 느끼게 해줬어! 우리 기념일을 기념해서 이걸 당신에게 보낼게.\n더 멋진 선물과 함께 곧 집으로 돌아갈 테니까, 제발 나에 대한 믿음을 잃지 말고 기다려 줘.", + priority = "표준", + }, + balloon = { + name = "풍선", + pickup = "전투 중이 아닐 때 중력이 감소합니다.", + description = "점프 버튼을 누르는 동안 중력이 35%(중첩당 +15%) 감소합니다. 피해를 받으면 터집니다. 위험에서 벗어나고 7초 후 복구됩니다.", + destination = "파레 플라자\n55호\n지구", + date = "06/31/2056", + story = "어릴 때는 풍선을 참 좋아했어. 대기가 있는 곳에서 풍선이 떠다니는 걸 구경하는 건 꽤 즐거운 일이거든. 하지만 이건 나한테 좀 더 특별한 가치가 있는 물건이야. 22년대에 강화 고무로 처음 만들어졌던 초기 모델 중 하나거든. 부디 잘 좀 챙겨줘. 몇 년만 더 지나면 값이 어마어마하게 뛸지도 모르니까 (물론 그때까지 안 터지고 계속 떠 있다면 말이지!)", + priority = "특송/파손주의", + }, + iceTool = { + name = "아이스 툴", + pickup = "벽을 탈 수 있게 됩니다. 더 빨리 오를 수 있습니다.", + description = "벽에 접촉 중일 때 1(중첩당 +1)회의 추가 점프를 얻습니다. 등반 속도가 18%(중첩당 +18%) 증가합니다.", + destination = "솔레이 해안가\n몬의 탑 #33\n지구", + date = "03/12/2056", + story = "안녕, 등산 친구! 지난번에 [삭제됨] 산에 갔을 때 네가 잃어버렸던 아이스 툴을 찾았어. 다음번에는 눈 속에 파묻히지 않게 정신 똑바로 차려야 해!\n그나저나 이 아이스 툴이 아직 쓸만할지 모르겠네. 그동안 고생을 워낙 많이 한 녀석이라 말이야!", + priority = "표준", + }, + needles = { + name = "바늘", + pickup = "확정 치명타를 입히는 표식을 남길 확률이 생깁니다.", + description = "공격 적중 시 3%(중첩당 +2%) 확률로 적에게 3초 동안 표식을 남깁니다. 표식 대상 공격 시 100% 확률로 치명타가 발생합니다.", + destination = "오렌의 고리\nE2\n금성", + date = "[삭제됨]", + story = "

                                                    [자동 번역됨 - 스페인어]\n음... 어머니께서 말씀하시길, 네가 이걸 읽을 수 있다면 자기가 생각했던 것만큼 네가 멍청하진 않은 거라고 하시네. 뭐, 그렇대. 이 바늘들이 너한테 잘 쓰였으면 좋겠어. 네가 부탁한 그 물건은 아닌 것 같아 미안하지만, 내 생각엔 별 차이 없을 것 같거든.\n제대로 포장해서 보냈는지 기억이 잘 안 나네. 조심해서 다뤄.", + priority = "관통형", + }, + + midas = { + name = "M.I.D.A.S", + pickup = "체력의 절반을 골드로 변환합니다.", + description = "체력의 50%를 소모하고 소모한 체력 1당 $1의 골드와 상자 하나만큼의 골드를 추가로 얻습니다.", + destination = "프라임\nR A 5-5\n타이탄", + date = "05/04/2056", + story = "\"신의 기적\"이라니...\n당신은 그 말을 몇 번이고 반복하고 있더군. 제정신이야? 우리는 그저 당신을 구하려고 했던 것뿐인데, 당신은 우리를 아무것도 모르는 무식쟁이 취급만 했지.\n\n부탁이니 이건 그냥 당신이나 가져. 이걸로 뭘 하든 당신 마음대로 해. 더 이상 우리 주변에 얼씬도 하지 않았으면 좋겠어. 당신과 그 ‘물건’ 사이에 무슨 일이 벌어지고 있든, 우린 이제 눈곱만큼도 관여하고 싶지 않으니까.\n\n그게 당신을 탐욕스럽고 영혼 없는 인간으로 만들고 있다는 걸, 제발 당신 스스로 알았으면 좋겠네.", + priority = "불안정", + }, + strangeCan = { + name = "수상한 깡통", + pickup = "깡통을 던져 적에게 표식을 남깁니다. 처치 시 독성 구름을 생성합니다.", + description = "기묘한 캔을 던져 최대 체력이 가장 높은 적을 도취시킵니다. 도취된 적은 사망 시 독성 구름을 방출해 5초에 걸쳐 대상 최대 체력의 50%만큼의 피해를 입힙니다.", + destination = "563\n1530\nA-LC12", + date = "05/22/2056", + story = "내가 말했지, 이거 진짜 맛있다고. 지난번처럼 배송 중에 쩍 하고 갈라지지만 않았으면 좋겠네.\n하... 나도 이제 취직을 좀 해야 할 텐데...", + priority = "불안정", + }, + whiteFlag = { + name = "하얀 깃발", + pickup = "하얀 깃발을 꽂습니다. 영역 내에서는 누구도 공격이 불가능합니다.", + description = "8초 동안 유지되는 하얀 깃발을 꽂습니다. 일정 반경 내의 모든 개체는 스킬을 사용할 수 없습니다.\n드론과 비행형 적에게는 효과가 적용되지 않습니다.", + destination = "2B번 방\n솜누스 호텔\n지구", + date = "10/5/2056", + story = "나 집에 돌아갈 때까지 이거 좀 맡아줘, 결국 쓸 일이 없었거든. 사실, 우리 친구가 됐어! 곧 만나서 이 모든 이야기를 들려주고 싶어 죽겠네. 정말 긴 여정이었고 예상치 못한 일들의 연속이었지. 그들한테 네 이야기도 했더니, 다음번에 너도 꼭 초대하고 싶다더라. 어때, 멋지지? 사랑해.", + priority = "불안정", + }, + eclipseGummies = { + name = "이클립스 구미", + pickup = "적 처치 시 이로운 효과를 제공하는 구미를 떨어트립니다.", + description = "적 처치 시 이로운 효과를 제공하는 구미를 떨어트립니다. 구미는 10초 동안 공격 속도와 이동 속도를 2.5%(중첩당 +2.5%)만큼 증가시키며, 최대 25%(중첩당 +25%)까지 증가합니다.", + destination = "에이브러햄 스트리트\n199번지\n지구", + date = "8/16/2056", + story = "안녕, 다니! 나 비야. 내가 뭘 찾아냈는지 들으면 넌 절대 안 믿길걸. 바로 추억의 ‘이클립스 구미’ 한 박스야! 일하다가 아주 오래된 구멍가게를 정리하고 있었는데, 창고 구석에서 뜯지도 않은 박스를 발견했지 뭐야. 어차피 버릴 물건이라길래 사장님이 그냥 나 가지라고 하셨어.이걸 마지막으로 먹은 게 거의 8년은 된 것 같아. 오, 귀여운 ‘개구리 프란체스카’랑 ‘로봇 레그’, 그리고 다른 과일 맛 녀석들까지! 오로지 굿즈 팔아먹으려고 만든 방송이었지만, 내 어린 시절엔 정말 큰 흔적을 남겼다니까. 이 젤리 맛이 예전이랑 똑같아서 정말 다행이야. 그때처럼 온몸이 꼼지락거리고 찌릿한 느낌까지 그대로라니까.생각해 보면, 이렇게 인기 많던 젤리를 도대체 왜 판매 중단했는지 모르겠어. 아무튼 나 혼자 다 먹을 순 없으니까 너도 좀 먹어보라고 듬뿍 보낼게. 맛있게 먹어! :heart:", + priority = "표준", + }, + }, + + artifact = { + multitude = { + pickupName = "다중의 유물", + name = "다중", + description = "적 군단이 등장합니다.", + approaching = "적 군단이 접근하고 있습니다.", + arriving = "준비하세요...", + }, + displacement = { + pickupName = "변위의 유물", + name = "변위", + description = "스테이지가 뒤섞입니다.", + }, + gathering = { + pickupName = "수집의 유물", + name = "수집", + description = "골드가 두 배로 떨어지지만 직접 주워야 합니다.", + }, + }, + + actor = { + Exploder = { + name = "폭발체", + }, + Mimic = { + name = "보안 상자", + }, + Gatekeeper = { + name = "문지기", + }, + Admonitor = { + name = "항아리 훈계관", + }, + Protector = { + name = "보호자", + text = "유물의 관리자", + }, + }, + + monster = { + admonitor = { + name = "항아리 훈계관", + story = "저 멀리, 익숙한 점토 '인간' 하나가 사원 경내를 터벅터벅 가로질러 가고 있었다. 하지만 겉모습은 비슷할지언정, 이 생명체는 내가 이전에 보았던 것들과 같은 부류가 아니었다. 작은 동족들에 비해 교활함은 부족할지 몰라도, 이 항아리 수호자는 무시무시한 힘으로 꽉 쥐어진 두 개의 위협적인 주먹을 과시하고 있었다. 녀석의 걸음걸이는 거의... 자신만만해 보이기까지 했다. 녀석이 '신념'과 같은 지적인 감정을 가질 수 없다고 단정 짓는 것이 얼마나 어리석은 일인지 나는 잘 안다. 그럼에도 불구하고, 신변의 안위를 생각해서 저 거들먹거리는 기름 덩어리의 기개를 굳이 시험하지 않기로 하고 뒤집힌 유적 속에 몸을 숨겼다.\n\n이 행성에서 살아서 나가고 싶다면, 내 대퇴골 정도는 온전한 상태로 두는 편이 나을 테니까.", + }, + exploder = { + name = "폭발체", + story = "이 생명체들에게 쫓기는 것만큼 질색인 일도 없다. 한 마리씩 있을 땐 상대하기 쉽지만, 무리로 몰려올 때면 도망치는 게 상책이다. 녀석들의 혈관 전체에 끈적거리는 산성 물질이 흐르는 모양인데, 단 한 방울만으로 내 드론 중 하나의 회로를 녹여버렸을 정도니까.\n\n그게 내 피부에 닿으면 어떻게 될지... 정말이지 상상조차 하고 싶지 않다.", + }, + mimic = { + name = "보안 상자", + story = "누가 상자에 보안용 안전장치를 달자는 미친 생각을 한 거야? 해적들을 골탕 먹이려는 속셈이었겠지만, 비상 상황은 전혀 고려하지 않은 게 틀림없어. 자기가 도둑맞았다고 착각해서 도망치는 기계 상자 뒤를 쫓아가는 짓은 평생 익숙해지지 않을 것 같군.\n\n...아니면 내가 아까 먹은 베리 때문에 헛것을 보는 걸지도.", + }, + }, + + interactable = { + MimicInactive = { + text = "...?", + name = "대형 상자?", + }, + ChirrsmasPresent = { + text = "선물을 수령하세요!", + name = "선물 상자", + }, + }, + + elite = { + poison = { + name = "독성의 %s", + }, + empyrean = { + name = "창공의 %s", + text = "심판의 전조", + }, + }, + + stage = { + whistlingBasin = { + name = "휘파람 분지", + subname = "줄어드는 오아시스", + story = "이 행성은 끊임없이 내게 놀라움만을 안겨준다. 이곳에 오기 전 보았던 원주민들의 행태를 생각하면, 그런 생명체들이 이토록 광활하고 탐미적인 건축물을 지었으리라고는 상상도 못 했을 것이다. 지면에서 솟아오른 아름다운 석조 아치와 칠흑같이 어두운 흑단 기둥들에는 정교한 손길로 새겨진 조각들이 장식되어 있다. 벽면 전체에는 겉보기엔 단순해 보이지만 놀라울 정도로 복잡하게 얽힌 문양들이 펼쳐져 있다. 기이할 정도로 선명한 청록색 식생은 구조물의 하단을 은밀하게 타고 오르며 그 형태를 잠식하고 있다. 이 행성에 대해 품고 있던 야만적이라는 선입견이 서서히 옅어지는 듯하다. 그럼에도 불구하고, 나는 여전히 경계를 늦추지 않고 있다. 비명을 지르는 근육이 휴식을 갈구하고 있음에도, 아직 쉬기에는 너무 이르다.", + }, + torridOutlands = { + name = "뜨거운 황무지", + subname = "정적의 열상", + story = "슈트를 입었음에도 불구하고, 이 저주받은 행성의 대기를 굴절시키며 쏟아지는 태양 광선의 맥동이 온몸으로 느껴진다. 이 열기 속에서 정신을 차리고 있기가 점점 더 힘들어지는데, 헬멧 안쪽에 습기까지 차오르며 시야를 가려대니 전혀 도움이 되지 않는다. 하지만 이게 없었더라면, 방랑하며 내 발끝으로 일궈낸 온갖 먼지와 부스러기들로 내 폐의 절반은 가득 찼을 것이다- '불행 중 다행'이라고나 할까. 태양이 중천에 떠 있는 지금, 주변 환경을 편안하게 조사하겠다는 생각 따위는 그저 헛된 꿈에 불과하다. 정신이 혼미한 탓에 선인장과 바위에 부딪히기 일쑤라, 지표면에 널린 거대한 터널과 동굴 속으로 기어 들어가 짧은 휴식을 취하곤 한다. 험난한 지형 때문에 진행마저 더뎌지는 상황에서, 눈가로 흘러내리는 땀방울 따위는 지금 내 처지에서 가장 사소한 걱정거리일 뿐이다.", + }, + verdantWoodland = { + name = "신록의 삼림", + subname = "호흡 과증식", + story = "지금껏 본 적 없는 거대한 나무들이 미로처럼 내 앞에 펼쳐진다. 비늘 같은 껍질과 파편 같은 이빨을 가진, 숨을 조여오는 자연의 경이로움이다. 이 나무 기둥들은 끝없이 솟아올라 이 풍요로운 아크로폴리스를 보호하고 있다. 무성한 수풀을 헤치며 나아가는 동안, 그 압도적인 존재감은 내 행동을 되돌아보게 만든다. 슈트를 긁어대는 이 날카로운 가시덤불을 차마 탓할 수가 없다. 살을 찌르는 듯한 발걸음을 옮길 때마다, 녀석들은 내가 그들의 요새에 들어온 일개 손님일 뿐임을 상기시킨다. 벌레가 득실거리는 둥지에서는 기사들이 쏟아져 나와, 우리 인간이 그러하듯 제 새끼들로부터 나를 멀리 떼어놓으려 한다. 머리 위로 사납게 윙윙거리는 곤충 떼의 소리가 들려온다. 마치 새가 지저귀는 소리 같아 고향을 떠올리게 한다. 이 경이로운 행성이 선사한 무성한 풀밭 위에 그저 눕고 싶은 마음뿐이지만, 나는 계속 움직여야만 한다. 우울한 통증이 가슴 깊은 곳을 찌른다. 전투 의지를 북돋으며 내 혈관을 타고 흐르는 이 끈질긴 독소... 그 존재가 후회스러울 뿐이다.\n\n이 행성이 내 머릿속을 잠식하기 시작한 것 같아 두렵다.", + }, + }, + + ui = { + options = { + ssr = { + header = "STARSTORM RETURNS", + titleReplacement = "타이틀 교체", + ["titleReplacement.desc"] = "게임 타이틀 스크린 로고를 스타스톰의 것으로 바꿉니다.", + enableChars = "생존자 활성화", + ["enableChars.desc"] = "스타스톰 리턴즈에서 추가하는 생존자들을 활성화합니다.", + enableItems = "아이템 활성화", + ["enableItems.desc"] = "스타스톰 리턴즈에서 추가하는 아이템들을 활성화합니다.", + enableEnemies = "적 활성화", + ["enableEnemies.desc"] = "스타스톰 리턴즈에서 추가하는 적들을 활성화합니다.", + enableElites = "엘리트 활성화", + ["enableElites.desc"] = "스타스톰 리턴즈에서 추가하는 엘리트들을 활성화합니다.", + enableTyphoon = "태풍 활성화", + ["enableTyphoon.desc"] = "스타스톰 리턴즈에서 추가하는 태풍 난이도를 활성화합니다.", + enableInteractables = "상호작용 가능 물체 활성화", + ["enableInteractables.desc"] = "스타스톰 리턴즈에서 추가하는 상호작용 가능 물체들을 활성화합니다.", + enableArtifacts = "유물 활성화", + ["enableArtifacts.desc"] = "스타스톰 리턴즈에서 추가하는 유물들을 활성화합니다.", + enableStages = "스테이지 활성화", + ["enableStages.desc"] = "스타스톰 리턴즈에서 추가하는 스테이지들을 활성화합니다.", + enableBeta = "미완성 컨텐츠 활성화", + ["enableBeta.desc"] = "개발 중인 컨텐츠들을 활성화합니다. \n매우 미완성된 상태입니다.", + enableChirrsmas = "크르스마스 컨텐츠 활성화", + ["enableChirrsmas.desc"] = "크르스마스-독점 컨텐츠를 활성화합니다. \n기본적으로 12월 15일부터 1월 15일까지 활성화됩니다. \n재시작이 필요합니다.", + ["enableChirrsmas.default"] = "기본", + ["enableChirrsmas.always"] = "항상", + ["enableChirrsmas.never"] = "비활성", + }, + }, + }, +} diff --git a/Language/russian.lua b/Language/russian.lua index fb34566f..fc55fb54 100644 --- a/Language/russian.lua +++ b/Language/russian.lua @@ -171,11 +171,11 @@ return { }, technicianX = { name = "Принудительное Выключение", - description = "Вы кидаете оглушающую бомбу, нанося 700% урона при активации.\nЗатягивает врагов когда улучшена.", + description = "Вы кидаете оглушающую бомбу, нанося 500% урона при активации.\nЗатягивает врагов когда улучшена.", }, technicianXD = { name = "Красная Кнопка", - description = "Вы взрываете выкинутую бомбу, нанося 700% урона и оглушая врагов.", + description = "Вы взрываете выкинутую бомбу, нанося 500% урона и оглушая врагов.", }, technicianC = { name = "Заряд 24/7", @@ -433,6 +433,14 @@ return { date = "16.8.2056", story = "Привет, Дани! Это Ви, ты не поверишь, что я только что нашла!. Коробка старых Мармеладок Затмение! На работе мы убирались в старом семейном магазине, и я нашла эту нераскрытую коробку на складе. Начальник разрешил мне оставить её, иначе мы бы просто её выбросили. Прошло почти 8 лет с тех пор, как я пробовала их. О, маленькая Франческа Фрог, Робот Рег и все остальные фруктовые вкусы. Для шоу, сделанного исключительно для продажи мерча, оно оставило след в моём детстве. Я так рада, что эти конфеты на вкус такие же, как и тогда. Даже вызывают те же приятные ощущения, что и тогда. Заставляет меня задуматься, почему они перестали продавать такие популярные мармеладки? В любом случае, я не могу забрать все себе, поэтому отправляю немного тебе, чтобы тебе тоже попробовать. Наслаждайся! :heart:", priority = "стандартный" + }, + denizuCrown = { + name = "Корона Denizu", + pickup = "Для безумного короля.", + description = "Для безумного короля.", + destination = "-", + date = "-", + story = "-" } }, diff --git a/Language/schinese.lua b/Language/schinese.lua index c3b5a8ee..12424048 100644 --- a/Language/schinese.lua +++ b/Language/schinese.lua @@ -1,56 +1,54 @@ return { difficulty = { - typhoon = { - name = "台风", - description = "极限挑战。\n这颗星球就是噩梦,生存只是幻象。\n无人能担当此任。", + name = "台风", + description = "极限挑战。\n这颗星球是一场噩梦, 生存只是幻象。\n无人能担当此任。", }, }, + survivor = { executioner = { name = "处刑者", nameUpper = "处刑者", - description = "处刑者是一位机动战士,专精于猎首。使用离子投射器时,处刑者制造幻象使敌人恐惧逃窜,同时投影一把斧头解决最强敌人。务必通过连续使用 离子爆发 和 处决 来保持伤害输出源源不断。", - endQuote = "..于是,他离开了,杀戮欲求仍未餍足。", - story = "
                                                      乘客详情:\n[军职等级]\n\n
                                                        行李与装备:\n军官身着EXN代理军官碳纤维制服、民用级防护外套并携带一把配发勤务手枪登舰。在军事检查站,乘客武器被发现存在额外下挂式改装件。达成存储于安全容器的协议后放行。乘客还携带了一块经改装推进喷口的ION 204X系列电池。作为安全措施,乘客的电子设备被临时安装了电子自抑器后归还。\n\n[安全回溯记录]\n\n
                                                          [备注 E1a] 多份报告称该乘客令整个检查站人员感到不安。在另行通知前需实施轻度监视。\n
                                                            [备注 E1b] 该乘客在改用通用手语前常以发声代替言语。\n
                                                              [事件 E1] 签约突击队员在乘客舱室执行安检。\n
                                                                [事件 E1a] 签约突击队员要求对通往乘客舱室的走廊实施24小时私人监控。\n
                                                                  [事件 E2] 因其他乘客正式投诉,安保要求该乘客在用餐时间更换餐桌位置。", - id = "旅行证件:4383354378334FF3D34D", - departure = "出发地:\n旧阿尔卡特拉斯,\n锈城,\n火星", - arrival = "目的地:\n死水湾,\n新掘镇,\n木卫二", + description = "处刑者是一位机动战士, 专精于猎首。使用离子投射器时, 处刑者制造幻象使敌人恐惧逃窜, 同时投影一把斧头解决最强敌人。务必通过 离子爆发 和 处决 造成连段击杀来使伤害输出源源不断。", + endQuote = "..于是他离开了, 杀戮欲求仍未餍足。", + story = "
                                                                    乘客详情: \n[军规级]\n\n
                                                                      行李与装备: \n军官身着EXN代理军官碳纤维制服、民用级防护外套并携带一把配发勤务手枪登舰。在军事检查站, 乘客武器被发现存在额外下挂式改装件。达成存储于安全容器的协议后放行。乘客还携带了一块经改装推进喷口的ION 204X系列电池。作为安全措施, 乘客的电子设备被临时安装了电子自抑器后归还。\n\n[安全回溯记录]\n\n
                                                                        [备注 E1a] 多份报告称该乘客令整个检查站人员感到不安。在另行通知前需实施轻度监视。\n
                                                                          [备注 E1b] 该乘客在改用通用手语前常以发声代替言语。\n
                                                                            [事件 E1] 签约突击队员在乘客舱室执行安检。\n
                                                                              [事件 E1a] 签约突击队员要求对通往乘客舱室的走廊实施24小时私人监控。\n
                                                                                [事件 E2] 因其他乘客正式投诉, 安保要求该乘客在用餐时间更换餐桌位置。", + id = "旅行证件: 4383354378334FF3D34D", + departure = "出发地: \n旧阿尔卡特拉斯,\n锈城,\n火星", + arrival = "目的地: \n死水湾,\n新掘镇,\n木卫二", }, mule = { name = "骡子", nameUpper = "骡子", - description = "每一台 骡子 单位均配备充足并准备就绪。采用高品质材料打造以实现最佳工作效能。此型号包含 觅食者工具套件,非常适合普通用户执行 狩猎、探索 及其他危险任务。请在系统启动时下达指令以初始化。", - endQuote = "..于是,它离开了,活塞嘎吱作响,指令仍未明示。", - story = "通告:骡子单位既无意识,亦非宠物。称呼它们‘莫莉’不会影响其程序运行。", - id = "", - departure = "", - arrival = "", + description = "每一台 骡子 单位均配备充足并准备就绪。采用高品质材料打造以实现最佳工作效能。此型号包含 觅食者工具套件, 非常适合普通用户执行 狩猎、探索 及其他危险任务。请在系统启动时下达指令以初始化。", + endQuote = "..于是, 它离开了, 活塞嘎吱作响, 指令仍未明示。", + story = "保修期到期: \n2041年8月16日\n\n输入备注: \n(ID: #1244C4F4F5D494)\n备注: MULE - F型,\n我不想因为“擅自改动舰船财产”而惹上麻烦, 但我最近启动了这台MULE设备, 并把它送去维修。它就放在那里, 所以我想如果我稍微修整一下, 应该没人会介意。听说有人想在起飞前把它们扔掉, 但我实在不忍心让这么精良的工艺就此毁掉……它确实让人眼前一亮, 但你不得不承认, 它很新奇!自从第一款四足机器人大获成功以来, 多功能设备已经很久没有被考虑过了。再说, 我们都知道这类机器人能干些什么!带着底盘。这样看来, 我毫不怀疑这家伙肯定经历过不少崎岖地形。它就像一个行走的时光胶囊, 你说呢?\n所有需要的素材都附在下面了, 等等等等——听着, 我跟你说实话。就……考虑一下把它留下来吧。哪怕只是一段时间。不管那些传言是真是假……我想它的主人会很高兴的, 你知道……知道它还能运行。\n就给他们找点事做吧。再给它一次机会。\n\n[维护报告]\n
                                                                                  [报告 M1]启动后, MULE 单元完全静止不动, 直到大约 20 分钟后接到部署支援无人机的语音指令。MULE 单元仅在指令发出后才表现出空闲处理和协议。\n
                                                                                    [报告 M1a]支援无人机的电池组被发现……电池性能下降。找不到兼容的替代品, 只能充电。电池寿命无法保证。\n[报告 M2] MULE 设备在突然试图限制一名它无法识别的机械师后, 通过面部识别技术熟悉了 Contact Light 的乘客和工作人员。目前, 大多数 UES 人员的信息已记录在其内存中。\n[报告 M2a] 远程访问 MULE 设备的内存显示, 其数据库中存在可追溯至 2036 年的条目。内存中的初始条目已被发现损坏或删除。" + }, nemesisCommando = { name = "复仇者突击兵", nameUpper = "复仇者突击兵", - description = "复仇者突击兵是一位多面手,拥有应对各种情况的火力。使用 止息之刃 创伤敌人,为你的其他能力奠定毁灭性打击基础。运用 战术翻滚 在近战范围内穿梭进退,将最危险的局势也扭转为有利态势。", - endQuote = "..于是,他离开了,内心承载着新生的凡人情感。", - story = "未登记现场数据日志:数据最后修改于[##090??!?] \n[错误 0x00000ce:数据包损坏,正在查看还原点。] \n\n
                                                                                      [记录 1] - 巡逻队在营地外几英里处发现一名受伤落单者。传言他“凭空出现”(反正我是不信),周围区域完全无法追溯其来源。无论其说辞真实性如何,幸存者总是幸存者。写此日志时,我们正带他返回。不过他沉重的装备着实让我们不轻松——他携带了一套标准突击兵装甲的非正统改装件。看起来像是(或曾经是)Mk.1型的初始型号(尽管我记得几年前就已停产?)。\n\n
                                                                                        [记录 2] - 更新——这位突击兵伙计带着些吓人的重武器——一把摸起来还温热的火箭筒和几颗几乎肯定是外星产的手榴弹——我敢打赌从未见过此类物品。他此刻仍处于昏迷,透过面罩观察显然伤势严重。其左臂尤其僵硬——手掌紧握震动刀刃手柄握把。刚才我们中有人想仔细查看,但他的拳头似乎与这该死的东西熔铸在一起了。他携带物上布满了这层干涸的黑色..物质。我们不知道这仅是几位幸存者间争斗的结果,还是某种自我防御的证据??!0049### \n[可读数据结束。] \n\n
                                                                                          [记录 2a] - 我不知道还剩多少时间 它苏醒了营地已被摧毁 人们血流不止 甚至无法确认它是否是人类 以它所行之事 无人知晓当下该如何应对 它径直扑向艾德里安\n 我们甚至不知何故触发??? 我们做了什么活该遭此??? 那东西为何攻击我们!??!?##$0959090302???! \n[可读数据结束。] \n\n

                                                                                          苍蝇群缠绕着这高贵的野兽,它正在吃草。\n\n你的灾疠在其表面将被这些辛劳之手抹去。", + description = "复仇者突击兵是一位多面手, 拥有应对各种情况的火力。使用 止息之刃 创伤敌人, 为你的其他能力奠定毁灭性打击基础。运用 战术翻滚 在近战范围内穿梭进退, 将最危险的局势也扭转为有利态势。", + endQuote = "..于是, 他离开了, 内心承载着新生的凡人情感。", + story = "未登记现场数据日志: 数据最后修改于[##090??!?] \n[错误 0x00000ce: 数据包损坏, 正在查看还原点。] \n\n

                                                                                            [记录 1] - 巡逻队在营地外几英里处发现一名受伤落单者。传言他“凭空出现”(反正我是不信), 周围区域完全无法追溯其来源。无论其说辞真实性如何, 幸存者总是幸存者。写此日志时, 我们正带他返回。不过他沉重的装备着实让我们不轻松——他携带了一套标准突击兵装甲的非正统改装件。看起来像是(或曾经是)Mk.1型的初始型号(尽管我记得几年前就已停产?)。\n\n
                                                                                              [记录 2] - 更新——这位突击兵伙计带着些吓人的重武器——一把摸起来还温热的火箭筒和几颗几乎肯定是外星产的手榴弹——我敢打赌从未见过此类物品。他此刻仍处于昏迷, 透过面罩观察显然伤势严重。其左臂尤其僵硬——手掌紧握震动刀刃手柄握把。刚才我们中有人想仔细查看, 但他的拳头似乎与这该死的东西熔铸在一起了。他携带物上布满了这层干涸的黑色..物质。我们不知道这仅是几位幸存者间争斗的结果, 还是某种自我防御的证据??!0049### \n[可读数据结束。] \n\n
                                                                                                [记录 2a] - 我不知道还剩多少时间 它苏醒了营地已被摧毁 人们血流不止 甚至无法确认它是否是人类 以它所行之事 无人知晓当下该如何应对 它径直扑向艾德里安\n 我们甚至不知何故触发??? 我们做了什么活该遭此??? 那东西为何攻击我们!??!?##$0959090302???! \n[可读数据结束。] \n\n

                                                                                                苍?群缠绕着这?贵的?兽, 它正在?草。\n\n你的?疠在其表面将被这些?劳之手抹?。", }, nemesisMercenary = { name = "复仇者佣兵", nameUpper = "复仇者佣兵", - description = "复仇者佣兵生来就拥有特殊力量。", - endQuote = "..于是,他离开了,满载而去。", - story = "

                                                                                                我无需朋友\n我无需电话\n只需一袋断首\n与我那核武王座", + description = "复仇者佣兵 擅长使用卑鄙的战术和冷酷的速度来压制来犯之敌。他能用快速扳机削弱对手, 用盲目滑行恢复弹药, 并用削弱轻松连续击杀剩余目标。", + endQuote = "..于是, 他离开了, 满载鲜血与荒芜而去。", + story = "

                                                                                                ♪我无需朋友♪\n♪我无需电话♪\n♪只需一袋断首♪\n♪与我那核武王座♪\n 《Venus Mansion》from Nuclear Throne OST", }, technician = { name = "技师", nameUpper = "技师", - description = "技师极其擅长建立并维持敌区封锁。强制关机在升级后能 强行封锁一片区域。升级装置能提高其效能,但在险境中升级时需小心谨慎!", - endQuote = "..于是,他离开了,方法是将飞船关闭再重启。", - story = "

                                                                                                  乘客详情:\n[雇员等级]\n\n
                                                                                                    雇员详情:\n该雇员签约在整个UES光明接触号飞船的预定航程期间进行现场维护,以在飞船出现技术问题时维修机器设备。雇员拥有6年软硬件工程实践操作经验资质。\n\n
                                                                                                      行李与装备:\n雇员携带一套具备高耐真空性的Durarend焊接太空服登舰,另有供行星穿着的皮革和织物服装。雇员被告知衣物可能在真空事件中撕裂。安保注意到其所持的巨大扳手因看似不实用且具潜在危险性而被标记。经询问,雇员表示它是“为最艰巨任务……量身定制的”。按规程,该扳手被移至1a号装载区的自动锁箱。对其随身行李的进一步检查发现了数把标准扳手、3个彩色编码U盘、一台2047款GeForm笔记本电脑、工具箱及一把焊接工具。U盘在公司配备装有ReoVirus Detector v1.6.2的QPuting一次性电脑上检查。未检测到恶意软件痕迹,所存文件为包含各种装置蓝图的UPG格式。雇员获准通行,未遇更多困难。\n\n[安全回溯记录]\n
                                                                                                        [事件 T1] 在起飞准备期间,雇员因与飞船驾驶员交谈数小时后拒绝离开客舱而被强制请出。\n
                                                                                                          [事件 T2] 观察到雇员从自动售货机偷取苏打水。\n
                                                                                                            [事件 T3] 源起4a号装载区的自动封锁被该雇员解决。\n
                                                                                                              [事件 T4] 在飞船工作人员要求雇员排除故障后,逃生舱B-08状态由错误转为警报。指示安保人员调查。\n
                                                                                                                [事件 T1a] 雇员被额外报告称其篡改了客舱控制面板,使飞船“更便于巡航”。预定发射延迟,雇员受命还原所有修改。", - id = "旅行证件:54E4F4C434F59474E454", - departure = "出发地:\nUES 5号船坞,\n红景镇,\n火星", - arrival = "目的地:\nUES 0号船坞,\n红景镇,\n火星", + description = "技师极其擅长建立并维持敌区封锁。强制关机在升级后能 强行封锁一片区域。升级装置能提高其效能, 但在险境中升级时需小心谨慎!", + endQuote = "……于是他离开了, 一切都无法挽回。", + story = "
                                                                                                                  乘客详情: \n[雇员级]\n\n
                                                                                                                    雇员详情: \n该雇员签约在整个UES触点之光号飞船的整个预定航程期间驻船工作, 负责在飞船上出现技术问题时进行机械维护。该雇员拥有6年软件和硬件工程方面的实操经验。\n\n
                                                                                                                      行李与装备: \n雇员携带一套具备高耐真空性的Durarend焊接太空服登舰, 另有供行星穿着的皮革和织物服装。雇员被告知衣物可能在真空事件中撕裂。安保注意到其所持的巨大扳手因看似不实用且具潜在危险性而被标记。经询问, 雇员表示它是“为最艰巨任务……量身定制的”。按规程, 该扳手被移至1a号装载区的自动锁箱。对其随身行李的进一步检查发现了数把标准扳手、3个彩色编码U盘、一台2047款GeForm笔记本电脑、工具箱及一把焊接工具。U盘在公司配备装有ReoVirus Detector v1.6.2的QPuting一次性电脑上检查。未检测到恶意软件痕迹, 所存文件为包含各种装置蓝图的UPG格式。雇员获准通行, 未遇更多困难。\n\n[安全回溯记录]\n
                                                                                                                        [事件 T1] 在起飞准备期间, 雇员因与飞船驾驶员交谈数小时后拒绝离开客舱而被强制请出。\n
                                                                                                                          [事件 T2] 观察到雇员从自动售货机偷取苏打水。\n
                                                                                                                            [事件 T3] 源起4a号装载区的自动封锁被该雇员解决。\n
                                                                                                                              [事件 T4] 在飞船工作人员要求雇员排除故障后, 逃生舱B-08状态由错误转为警报。已指示安保人员调查。\n
                                                                                                                                [事件 T1a] 雇员被额外报告称其篡改了客舱控制面板, 使飞船“更便于巡航”。预定发射延迟, 雇员受命还原所有修改。", + id = "旅行证件: 54E4F4C434F59474E454", + departure = "出发地: \nUES 5号船坞,\n红景镇,\n火星", + arrival = "目的地: \nUES 0号船坞,\n红景镇,\n火星", }, swapNemesis = { name = "复仇者幸存者", @@ -63,6 +61,7 @@ return { description = "切换回标准幸存者集合。", }, }, + skill = { executionerZ = { name = "勤务手枪", @@ -70,27 +69,27 @@ return { }, executionerX = { name = "离子爆发", - description = "快速射出离子化子弹,每发造成 320% 伤害。\n通过击杀敌人获取子弹。" + description = "快速射出离子化子弹, 每发造成 320% 伤害。\n通过击杀敌人获取子弹。" }, executionerC = { name = "驱散人群", - description = "向前冲刺,使附近敌人恐惧。\n冲刺期间 无法被击中。", + description = "向前冲刺, 使附近敌人恐惧。\n冲刺期间 无法被击中。", }, executionerV = { name = "处决", - description = "跃至空中,用投影巨斧猛击地面,造成 1000% 伤害。\n每次成功处决 使所有技能冷却缩减一秒。", + description = "跃至空中, 用投影巨斧猛击地面, 造成 1000% 伤害。\n每次成功处决 使所有技能冷却缩减一秒。", }, executionerVBoosted = { name = "群体处决", - description = "跃至空中,用投影巨斧猛击地面,造成 1500% 伤害, 并使敌人恐惧。\n每次成功处决 使所有技能冷却缩减一秒。", + description = "跃至空中, 用投影巨斧猛击地面, 造成 1500% 伤害, 并使敌人恐惧。\n每次成功处决 使所有技能冷却缩减一秒。", }, executionerV2 = { name = "裂颅者", - description = "投掷一把沿弧形轨迹飞行的投影巨斧,每秒造成 1500% 伤害。对 恐惧 敌人造成 暴击。\n每次成功处决 使所有技能冷却缩减一秒。", + description = "投掷一把沿弧形轨迹飞行的投影巨斧, 每秒造成 1500% 伤害。对 恐惧 敌人造成 暴击。\n每次成功处决 使所有技能冷却缩减一秒。", }, executionerV2Boosted = { name = "碎颅者", - description = "投掷两把沿弧形轨迹飞行的投影巨斧,每秒造成 1500% 伤害。对 恐惧 敌人造成 暴击。\n每次成功处决 使所有技能冷却缩减一秒。", + description = "投掷两把沿弧形轨迹飞行的投影巨斧, 每秒造成 1500% 伤害。对 恐惧 敌人造成 暴击。\n每次成功处决 使所有技能冷却缩减一秒。", }, muleZ = { name = "排除干扰", @@ -106,15 +105,15 @@ return { }, muleV = { name = "失效保护援助", - description = "部署持续8秒的个人维修无人机。该机每秒 治疗你总生命值的5X7%。生命值全满时,改为提供护盾。", + description = "部署持续8秒的个人维修无人机。该机每秒 治疗你总生命值的5X7%。生命值全满时, 改为提供护盾。", }, muleVBoosted = { name = "失效保护援助 2.0", - description = "发射一架持续8秒的治疗无人机。该机 治疗你总生命值的5X10%。生命值全满时,改为提供护盾。", + description = "发射一架持续8秒的治疗无人机。该机 治疗你总生命值的5X10%。生命值全满时, 改为提供护盾。", }, nemesisCommandoZ = { name = "止息之刃", - description = "切割附近敌人造成 120% 伤害,并使其 受创 6秒。不可叠加。\n受创 敌人从 所有来源 承受额外 50% 伤害。", + description = "切割附近敌人造成 120% 伤害, 并使其 受创 6秒。不可叠加。\n受创 敌人从 所有来源 承受额外 50% 伤害。", }, nemesisCommandoX = { name = "单发射击", @@ -122,7 +121,7 @@ return { }, nemesisCommandoX2 = { name = "遥切", - description = "向前挥砍一条直线,造成 90% 伤害,使敌人 受创 6秒。", + description = "向前挥砍一条直线, 造成 90% 伤害, 使敌人 受创 6秒。", }, nemesisCommandoC = { name = "战术翻滚", @@ -134,71 +133,67 @@ return { }, nemesisCommandoVBoosted = { name = "集束炸弹", - description = "投掷一颗 手雷 造成 700% 伤害,击晕敌人并 分裂为3颗手雷,每颗造成 3x150% 伤害。\n按住可 预热 手雷。按住 下方向键 可改为以 低抛物线投掷。", + description = "投掷一颗 手雷 造成 700% 伤害, 击晕敌人并 分裂为3颗手雷, 每颗造成 3x150% 伤害。\n按住可 预热 手雷。按住 下方向键 可改为以 低抛物线投掷。", }, nemesisCommandoV2 = { name = "毁灭者", - description = "对单个敌人发射火箭造成 1000% 伤害。周围敌人承受 50% 伤害并被 击晕。\n若在 空中使用,则向下倾斜发射。", + description = "对单个敌人发射火箭造成 1000% 伤害。周围敌人承受 50% 伤害并被 击晕。\n若在 空中使用, 则向下倾斜发射。", }, nemesisCommandoV2Boosted = { name = "惩戒者", - description = "对单个敌人发射火箭造成 1000% 伤害。周围敌人承受 50% 伤害并被 击退。\n若在 空中使用,则向下倾斜发射。\n最多储存2次。", + description = "对单个敌人发射火箭造成 1000% 伤害。周围敌人承受 50% 伤害并被 击退。\n若在 空中使用, 则向下倾斜发射。\n最多储存2次。", }, nemesisMercenaryZ = { name = "撕裂", - description = "用霰弹枪配件撕裂敌人,造成 130% 伤害。", + description = "快速攻击面前的敌人,造成100%伤害。", }, nemesisMercenaryX = { - name = "快拔", - description = "发射霰弹枪,击晕 并攻击附近敌人,造成 600% 伤害。", + name = "快速扳机", + description = "开枪射击,击晕并对敌人造成400%伤害。", }, nemesisMercenaryC = { - name = "致盲滑铲", - description = "快速向前滑行。滑行初始被击中会重新装填霰弹枪。\n滑行时可进行攻击。", + name = "盲目滑行", + description = "按住进入防御姿态,然后迅速向前滑行。\n在此姿态下受到攻击会重新装填霰弹枪。\n你可以在滑行时进行攻击。", }, nemesisMercenaryV = { name = "生命夺取", - description = "瞄准前方最弱敌人进行攻击,造成 850% 伤害,对 击晕 敌人造成额外 +50% 总伤害。\n技能持续期间无法被击中。", + description = "锁定附近最弱的敌人,造成700%伤害。\n优先攻击并暴击眩晕的敌人。\n使用此技能击杀敌人会刷新该技能\n技能持续期间无法被击中\n满足条件时长按可连续释放该技能。", }, nemesisMercenaryVBoosted = { - name = "绝对生命汲取", - description = "瞄准前方最弱敌人进行攻击,造成 1100% 伤害,对 击晕 敌人造成额外 +50% 总伤害。\n技能持续期间无法被击中。", + name = "生命夺取·极", + description = "锁定附近最弱的敌人,造成700%伤害。\n优先并暴击眩晕的敌人。\n立即击杀生命值低于25%的敌人。\n技能持续期间无法被击中。\n满足条件时长按可连续释放该技能。", }, technicianZ = { name = "微调", - description = "用扳手向前攻击,造成 180% 伤害。\n击中装置 3次可 暂时升级 它们30秒。", + description = "用扳手向前攻击, 造成 180% 伤害。\n击中装置 3次可 暂时升级 它们30秒。", }, technicianZ2 = { name = "故障排查", - description = "向前投掷扳手,穿透最多3名敌人,造成 180% 伤害。\n击中装置 3次可 暂时升级 它们20秒。", + description = "向前投掷扳手, 穿透最多3名敌人, 造成 180% 伤害。\n击中装置 3次可 暂时升级 它们20秒。", }, technicianX = { name = "强制关机", - description = "掷出一个炸弹,激活时造成 400% 伤害。\n升级后击晕 并被动牵引敌人。", + description = "掷出一个炸弹, 再次激活造成 500% 伤害。\n升级后击晕 并被动牵引敌人。", }, technicianXD = { name = "红色按钮", - description = "引爆炸弹,造成 500% 伤害。\n升级后 可击晕 敌人。", - }, - technicianX2 = { - name = "", - description = "", + description = "引爆炸弹, 造成 500% 伤害。\n升级后 可击晕 敌人。", }, technicianC = { name = "全天候能量", - description = "部署一台 自动售货机,提供 移动速度 和 攻击速度加成。\n升级后额外提升 暴击率。", + description = "部署一台 自动售货机, 提供 移动速度 和 攻击速度加成。\n升级后额外提升 暴击率。", }, technicianC2 = { - name = "辐射放大器", - description = "部署一根 天线,对被攻击敌人造成 15% 额外伤害。\n升级后拥有 100% 暴击率。", + name = "径向放大器", + description = "部署一根 天线, 对被攻击敌人造成 15% 额外伤害。\n升级后拥有 100% 暴击率。", }, technicianV = { name = "后备防火墙", - description = "放置一座朝前射击的炮台,每秒造成 220% 伤害。\n升级后每秒快速造成 350% 伤害。", + description = "放置一座朝前射击的炮台, 每秒造成 220% 伤害。\n升级后每秒快速造成 350% 伤害。", }, technicianVBoosted = { name = "后备防火墙 2.0", - description = "放置一座炮台快速射击,每秒造成 350% 伤害。\n升级后发射导弹,造成 4x100% 伤害。", + description = "放置一座炮台快速射击, 每秒造成 350% 伤害。\n升级后发射导弹, 造成 4x100% 伤害。", }, peace = { name = "<#a4eae4>和平!", @@ -210,10 +205,10 @@ return { armedBackpack = { name = "武装背包", pickup = "概率向身后发射子弹。", - description = "攻击时 18.5% (每层+6.5%) 概率 向身后发射一颗子弹,造成 150% 伤害。", + description = "攻击时 18.5% (每层+6.5%) 概率 向身后发射一颗子弹, 造成 150% 伤害。", destination = "832B区,\n霍特努特,\n地球", date = "2056/11/7", - story = "保持警惕总是很重要。我不想你惹上麻烦,所以每次外出请务必佩戴它。特别是那些峡谷,那里有很多小偷!\n今年晚些时候我会再给你寄些额外的弹药,好吗?", + story = "保持警惕总是很重要。我不想你惹上麻烦, 所以每次外出请务必佩戴它。特别是那些峡谷, 那里有很多小偷!\n今年晚些时候我会再给你寄些额外的弹药, 好吗?", priority = "标准", }, brassKnuckles = { @@ -222,25 +217,25 @@ return { description = "对 2.8米 (每层+1.4米) 范围内敌人造成 +35% 伤害。", destination = "UESPD,\nE42区,\nUES 长戟号 B2", date = "2056/3/1", - story = "我们在犯罪现场发现此物。我们需要针对其他证据核查DNA。我仍不敢相信他们逃脱了。\n背面有某种标记,或许能提供线索。我将前往[信息删除]西部,我知道有人能帮我们破案。", + story = "我们在犯罪现场发现此物。我们需要针对其他证据核查DNA。我仍不敢相信他们逃脱了。\n背面有某种标记, 或许能提供线索。我将前往[信息删除]西部, 我知道有人能帮我们破案。", priority = "标准/生物", }, detritiveTrematode = { name = "食屑吸虫", pickup = "低生命值敌人承受持续伤害。", - description = "生命值 低于15% (每层+5%) 的 敌人会永久 感染,每秒承受 100% 伤害。", + description = "生命值 低于15% (每层+5%) 的 敌人会永久 感染, 每秒承受 100% 伤害。", destination = "112区,\n尼乌斯2号,\n火星", date = "2057/3/11", - story = "嘿,这是你的东西。\n请别再寄那种诡异的微缩卵解孵装置了,拜托。", + story = "呃, 这是你的东西。\n请别再寄那种诡异的微缩卵解孵装置了, 拜托。", priority = "优先/生物", }, dormantFungus = { name = "蛰伏菌簇", pickup = "移动时恢复生命。", description = "移动时 每两秒恢复 2% (每层+2%) 生命值。", - destination = "1号闸门,\n13号模块,\n盖亚空间站", + destination = "1号闸门,\n13单元,\n盖亚空间站", date = "2056/11/1", - story = "你命令我探索菌类洞穴时,我本以为只会找到菌类。虽说兴致不高,但这个标本吸引了我。\n它似乎只在流动水域旁生长。自我采集并封存样本后,其色泽与气味都迅速消褪。\n\n希望你能深入研究它。", + story = "你命令我探索菌类洞穴时, 我本以为只会找到菌类。虽说兴致不高, 但这个标本吸引了我。\n它似乎只在流动水域旁生长。自我采集并封存样本后, 其色泽与气味都迅速消褪。\n\n希望你能深入研究它。", priority = "标准", }, fork = { @@ -249,16 +244,16 @@ return { description = "基础伤害 增加 3点 (每层+3点)。", destination = "安蒂玛大厦 - 屋顶,\n繁花山丘,\n地球", date = "2056/9/24", - story = "惊喜!一把叉子!哈哈哈!!!\n你说过任何礼物都是好礼物,喏,给你!开玩笑啦,这叉子其实挺神奇。相信我邓肯,我曾用它吃过沙拉,然后当天就捡到一分钱!\n对了,有空来找我们玩呗,可想在SS2里锤爆你的构筑了(拜托告诉我你换了主玩角色,哈哈)。", + story = "惊喜!一把叉子!哈哈哈!!!\n你说过任何礼物都是好礼物, 喏, 给你!开玩笑啦, 这叉子其实挺神奇。相信我邓肯, 我曾用它吃过沙拉, 然后当天就捡到一分钱!\n对了, 有空来找我们玩呗, 可想在SS2里锤爆你的构筑了(拜托告诉我你换了主玩角色, 哈哈)。", priority = "标准", }, watchMetronome = { name = "腕表节拍器", pickup = "站立不动为腕表充能。满充时移动更快。", - description = "站立不动可为腕表充能,需时 3 秒。满充时提升 移动速度 50%,充能在 3 (每层+1秒) 秒 内消耗殆尽。", + description = "站立不动可为腕表充能, 需时 3 秒。满充时提升 移动速度 50%, 充能在 3 (每层+1秒) 秒 内消耗殆尽。", destination = "1号笼区,\nG-44(地下),\n地球", date = "2056/9/5", - story = "祖父将此物作为过去时代的遗物交予我。他说这是六世祖父的遗物。我对古董和家族物品毫无兴趣,所以认为还是交给你为佳。\n无论如何它已无任何用处..", + story = "祖父将此物作为过去时代的遗物交予我。他说这是六世祖父的遗物。我对古董和家族物品毫无兴趣, 所以认为还是交给你为佳。\n无论如何它已无任何用处..", priority = "优先", }, wonderHerbs = { @@ -267,70 +262,70 @@ return { description = "所有来源的 治疗 效果提升 12% (每层+12%)。", destination = "2342区,\n3号地块,\n地球", date = "2056/11/7", - story = "莉卡!听说你在与EC合作研发新配方。我们农场在培植一些特殊药草,或许能派上用场。它们以治疗身心创伤奇效而闻名。\n若需更多,请随时来电!拥抱吻安\n- 伊甸", + story = "莉卡!听说你在与EC合作研发新配方。我们农场在培植一些特殊药草, 或许能派上用场。它们以治疗身心创伤奇效而闻名。\n若需更多, 请随时来电!拥抱吻安\n- 伊甸", priority = "标准", }, coffeeBag = { name = "咖啡袋", pickup = "激活可交互物提升移动和攻击速度。", - description = "激活可交互物 提升移动速度和攻击速度 22%,持续 10 (每层+5秒) 秒。", + description = "激活可交互物 提升移动速度和攻击速度 22%, 持续 10 (每层+5秒) 秒。", destination = "n1区,\n首府区,\nUES 主星", date = "2056/5/22", - story = "瞌睡虫~~~ 我不知道你为什么说不喜欢咖啡 提神它可是杠杠滴。呃呃 我知道还有别的方法可以嗨 不过兄弟 我想你会爱上这个 我的最爱!!!先试试再骂我 行不?", + story = "瞌睡虫~~~我不知道你为什么说你不喜欢咖啡,它可是提神醒脑的好东西。我知道我知道还有其他提神的方法,但是老兄,我觉得你会喜欢这个的,这可是我最喜欢的!!!骂我前先试试,好吗?", priority = "标准", }, x4Stimulant = { name = "X4兴奋剂", - pickup = "减少次要技能冷却时间,使用次要技能时略微恢复生命。", - description = "次要技能冷却时间 减少 10% (每层+10%)。使用次要技能提升 生命恢复 为每秒 2点 (每层+1点) 生命值,持续3秒。", + pickup = "减少次要技能冷却时间, 使用次要技能时略微恢复生命。", + description = "次要技能冷却时间 减少 10% (每层+10%)。使用次要技能提升 生命恢复 为每秒 2点 (每层+1点) 生命值, 持续3秒。", destination = "罗密欧33区,\n巴塘艾国家公园,\n地球", date = "2057/4/12", - story = "内含说明书封装。机器是否出现540型症状?如是,应避免使用超过100毫升兴奋剂。\n\n祝好。", + story = "盒内含说明书。机器是否出现540型症状?如是, 应避免使用超过100毫升兴奋剂。\n\n祝好。", priority = "标准", }, moltenCoin = { name = "熔融硬币", pickup = "概率点燃敌人并获得金币", - description = "6% 概率击中时 灼烧敌人6秒,掉落 $1金币 (每层+$1)。", + description = "6% 概率击中时 灼烧敌人6秒, 掉落 $1金币 (每层+$1)。", destination = "托伊拉2区,\nB44区,\n母站", date = "2056/5/22", - story = "嘿!就如我说的那样美味。只是希望别再像上次那样在路上开裂。\n我该去找份工作……", + story = "嘿!呃,对不起,真的对不起……我知道你很想让我保管这枚硬币,但我真的无法承担这份责任了……你看,我不小心把硬币放在等离子炉边缘了,所以……嗯……它侧面有点烧化了,请不要生我的气……", priority = "标准", }, crypticSource = { name = "秘源", pickup = "改变方向时释放能量脉冲。", - description = "改变移动方向发射 连锁闪电,对最多 2 个目标造成 70% (每层+55%) 伤害。", + description = "改变移动方向发射 连锁闪电, 对最多 2 个目标造成 70% (每层+55%) 伤害。", destination = "O32区,\n底层区,\n地球", date = "2058/3/30", - story = "从原子到智慧生命,万物皆源于能量。然而,这件神秘物品似乎自行散发着能量。剧烈摩擦似乎会引发连锁反应,使其极不稳定。但它也可能是(无限的?)可控能量源。这能否引领我们走向渴求的乌托邦未来完全未知,但这彻底改变了我们先前对宇宙的认知。", + story = "从原子到有感知能力的生命,万物皆源于能量。然而,这个颇为神秘的物体似乎能够自行散发能量。高强度的摩擦似乎会引发链式反应,使其极不稳定。然而,它也可能是一个可操控的(无限?)能量源。这是否能引领我们走向梦寐以求的乌托邦未来尚不确定,但这无疑彻底改变了我们以往对宇宙的认知。", priority = "不稳定", }, huntersSigil = { name = "猎者符印", - pickup = "站立不动产生增益区域,提升护甲和暴击率。", - description = "站立不动1秒后,生成一个 小型区域,为你和盟友提供 15 (每层+10) 点护甲 和 25% (每层+20%) 暴击率 增益。", + pickup = "站立不动产生一个能够提升护甲和暴击率的区域。", + description = "站立不动1秒后, 生成一个 小型区域, 为你和盟友提供 15 (每层+10) 点护甲 和 25% (每层+20%) 暴击率 增益。", destination = "东2区,\n贝克汉姆大厦,\n地球", date = "2056/2/2", - story = "嘿,赛特,欢迎入会。我们一直在寻觅人选,既然你来了,我们下季就能开工。我们指望你了。\n\n- 艾瑞克斯 启", + story = "嘿, 赛特, 欢迎入会。我们一直在寻觅人选, 既然你来了, 我们下季就能开工。我们指望你了。\n\n- 艾瑞克斯 启", priority = "优先", }, roulette = { name = "轮盘", - pickup = "每分钟获取随机增益。", - description = "获得 一种随机增益,每 分钟 重新轮换一次。可能增益如下:\n\n最大生命值 提升 60 (每层+24)。\n生命恢复 提升 3.6 (每层+1.8) 生命值 每秒。\n基础伤害 提升 14 (每层+5)。\n攻击速度 提升 35% (每层+15.5%)。\n暴击率 提升 25% (每层+10%)。\n移动速度 提升 20% (每层+7%)。\n护甲 提升 35 (每层+14)。", + pickup = "每分钟抽取随机增益。", + description = "获得 一种随机增益, 每 分钟 重新轮换一次。可能增益如下: \n\n: 最大生命值 提升 60 (每层+24)。\n: 生命恢复 提升 3.6 (每层+1.8) 生命值 每秒。\n: 基础伤害 提升 14 (每层+5)。\n: 攻击速度 提升 35% (每层+15.5%)。\n: 暴击率 提升 25% (每层+10%)。\n: 移动速度 提升 20% (每层+7%)。\n: 护甲 提升 35 (每层+14)。", destination = "3.1号贵宾厅,\n赛卡赌场,\n地球", date = "2057/7/17", - story = "144贝拉-1型替换轮盘,以应对赌场近期发生的事件。如需进一步咨询,请联系我方代表提供的E向地址。", + story = "144贝拉-1型替换轮盘, 以应对赌场近期发生的事件。如需进一步咨询, 请联系我方代表提供的E向地址。", priority = "优先", }, judderingEgg = { name = "颤栗之卵", pickup = "获得一个小朋友!", - description = "孵化 1条 (每层+1)幼生蠕虫 为你而战,间歇性 攻击周围敌人,共造成 18x80% 伤害。", + description = "孵化 1条 (每层+1)幼生蠕虫 为你而战, 间歇性 攻击周围敌人, 共造成 18x80% 伤害。", destination = "B闸门,\n李氏庄园,\n地球", date = "2056/11/21", - story = "又一份来自饲育者的样本,这次是个非常奇特的种。\n极度谨慎,我听说幼体若处理不当,可在几秒内变得极具攻击性(甚至致命!)。距其孵化应不久,你最好准备好安置构造。", + story = "又一份来自饲育者的样本, 这次是个非常奇特的种。\n极度谨慎, 我听说幼体若处理不当, 可在几秒内变得极具攻击性(甚至致命!)。距其孵化应不久, 你最好准备好安置构造。", priority = "易碎", }, uraniumHorseshoe = { @@ -339,22 +334,13 @@ return { description = "移动速度 和 跳跃高度 提升 10% (每层+10%)", destination = "6900号,\n“火星人脸”马具与农场用品店,\n火星", date = "2056/4/20", - story = "我们在一匹珍贵表演马的蹄上发现这件古怪的绿色马蹄铁,此前它某晚神秘死亡。\n马医认为你们可能了解这个奇怪马蹄铁。光是拿着它就让我手掌灼痛。请谨慎处理。", + story = "一天深夜,我们一匹珍贵的表演马神秘死亡,之后我们在它的蹄子上发现了一个奇怪的绿色马蹄铁。\n我们的马医生说你们或许知道这枚奇怪的马蹄铁是什么。我摸着它手都觉得灼痛。请小心轻放。", priority = "标准", }, - blastKnuckles = { - name = "爆裂指虎", - pickup = "你的攻击在近距离引发爆炸!", - description = "击中 4.5米 范围内敌人时,同时 在其身后引发爆炸,造成 220% (每层+220%) 伤害。最多储存 5次。每 3秒 获得一次使用次数。", - destination = "todo", - date = "todo", - story = "todo", - priority = "优先", - }, malice = { name = "恶意", pickup = "伤害扩散至附近敌人。", - description = "攻击

                                                                                                                                扩散至附近敌人,在 4.2米 (每层+1米) 范围内对最多 1 (每层+1) 个目标 造成 50% 总伤害。", + description = "攻击

                                                                                                                                扩散至附近敌人, 在 4.2米 (每层+1米) 范围内对最多 1 (每层+1) 个目标 造成 50% 总伤害。", destination = "P24区,\n罗密欧,\n波尔-A空间站", date = "2056/2/11", story = "不惜一切代价收容。此样本如处理不当将成为巨大威胁。你不知我们为遏制它已付出多少代价。", @@ -363,10 +349,10 @@ return { manOWar = { name = "僧帽水母", pickup = "击杀时产生电涌。", - description = "击杀敌人释放 连锁闪电,对最多 2 个目标造成 100% (每层+40%) 伤害。", + description = "击杀敌人释放 连锁闪电, 对最多 2 个目标造成 100% (每层+40%) 伤害。", destination = "隐秘隔间,\n创世山,\n金星", date = "2056/11/20", - story = "兄弟们,还记得我上次寄的小家伙吗?嗯..这只攻击性更强..虽然是个有趣的小家伙!它喜欢在瓶子里转圈圈看着我。要不是我救了它,它早就进了外星生物的肚子里。\n我想给她取名安,觉得如何?", + story = "兄弟们, 还记得我上次寄的小家伙吗?嗯..这只攻击性更强..虽然是个有趣的小家伙!它喜欢在瓶子里转圈圈看着我。要不是我救了它, 它早就进了外星生物的肚子里。\n我想给她取名安, 各位觉得如何?", priority = "优先", }, guardingAmulet = { @@ -375,16 +361,16 @@ return { description = "身后 承受的伤害减少 40% (每层+40%)。", destination = "C8区,\n蔚蓝花园,\n圣所", date = "2056/3/11", - story = "我知道他在某处,我知道你能找到他..但你必须坚持不懈。待吾灵魂脱壳之时,箴言将启,你应继吾位。他将是那个向你揭示你对我所有疑问答案的人。\n接受此护符;你将依赖它,它将使你永不回首。", + story = "我知道他在某处, 我知道你能找到他..但你必须坚持不懈。待吾灵魂脱壳之时, 箴言将启, 你应继吾位。他将是那个向你揭示你对我所有疑问答案的人。\n接受此护符;你将依赖它, 它将使你永不回首。", priority = "标准", }, distinctiveStick = { name = "奇木之杖", - pickup = "在传送器附近治疗。", - description = "在传送器附近生长一棵树,治疗 10米 (每层+3.75米) 范围内盟友,每2秒 恢复 2.2% 其 生命值。", + pickup = "在传送器附近获得治疗。", + description = "在传送器附近生长一棵树, 治疗 10米 (每层+3.75米) 范围内盟友, 每2秒 恢复 2.2% 其 生命值。", destination = "德雷克·米内利,\n泰萨夫特,\n地球", date = "2056/1/15", - story = "亲爱的,我有件特别的东西给你..\n前几日执行任务时,我遇见了此物。它吸引了我,因与我此生所见任何枝桠都不同!这根树枝散发着奇特能量,让我感觉与自然的联系超乎想象,曾以为只存在于故事中!值此周年,我将其赠你。\n我很快就到家,还有一份更棒礼物。请,不要失去信念。", + story = "亲爱的,我为你准备了一份特别的礼物。\n前几天出差的时候,我偶然发现了这个。它一下子就吸引了我的目光,因为它和我以往见过的任何树枝都不一样!这根树枝散发着一种奇特的能量,让我感受到一种与自然的连接,这种感觉我以前只在故事里才能体会到!为了庆祝我们的周年纪念日,我把它送给你。\n我很快就会带着一份更棒的礼物回家。请不要失去信念。", priority = "标准", }, balloon = { @@ -393,44 +379,44 @@ return { description = "按住跳跃键时 重力 降低 35% (每层-15%)。被击中时爆破。在安全区持续 7 秒后恢复。", destination = "55大道,\n帕尔广场,\n地球", date = "2056/6/31", - story = "年少时我喜爱气球。在存在大气的场所观赏它们十分有趣。但此球对我意义非凡,它是由强化橡胶制成的最早一批气球之一,可追溯至22年代。望君善加保管,再过几年它可能价值连城(当然,前提是它仍飘在空中!)。", + story = "年少时我喜爱气球。在存在大气的场所观赏它们十分有趣。但此球对我意义非凡, 它是由强化橡胶制成的最早一批气球之一, 可追溯至22年代。望君善加保管, 再过几年它可能价值连城(当然, 前提是它仍飘在空中!)。", priority = "优先/易碎", }, iceTool = { name = "冰镐", - pickup = "获得蹬墙跳能力。更快攀爬。", + pickup = "获得蹬墙跳能力。攀爬更快。", description = "接触墙壁时获得 1次 (每层+1)额外跳跃。攀爬速度提升 18% (每层+18%)。", destination = "33号蒙塔,\n索莱海岸,\n地球", date = "2056/3/12", - story = "徒步好友日安,我找到你上次去[信息删除]山时丢失的冰镐。下次请留意积雪!\n不知冰镐还能否使用,它可是历经沧桑!", + story = "日安,亲爱的登山伙伴!我找到了你上次去[已编辑]山时丢的冰镐。下次去的时候一定要留意积雪!不过,不知道这冰镐还能不能用,它经历了这么多风雨!", priority = "标准" }, needles = { name = "刺针", - pickup = "概率标记敌人,使其承受必然暴击。", - description = "3% (每层+2%) 概率击中时 标记敌人,使其在3秒内承受针对其的 100% 暴击率。", + pickup = "概率标记敌人, 使其承受必然暴击。", + description = "3% (每层+2%) 概率击中时 标记敌人, 使其在3秒内承受针对其的 100% 暴击率。", destination = "E2区,\n奥伦回环,\n金星", date = "[信息删除]", - story = "呃..母亲说若你能读到此信,说明你不似她所想那般笨拙。我们希望这些刺针于你有用。恐怕这不是你订的那种,但我想差别不大。\n不记得是否妥善打包寄出。请务必小心。", + story = "(法语)呃……妈妈说如果你能读懂这个,说明你没她想象的那么笨手笨脚,嗯,就这些了。希望这些针对你有用。恐怕它们不是你订的那种,不过我觉得也没什么大不了的。\n我不记得我们有没有好好包装了。小心点。", priority = "穿刺", }, midas = { name = "M.I.D.A.S", pickup = "将一半生命值转化为金币。", - description = "失去 50%生命值,转化为每点生命值获得 $1金币,外加一个 宝箱 的价值。", + description = "失去 50%生命值, 转化为每点生命值获得 $1金币, 外加一个 宝箱 的价值。", destination = "R A 5-5区,\n主星,\n土卫六", date = "2056/5/4", - story = "\"众神的奇迹..\"\n你反复絮叨着。你疯了吗?我们只想救你,你却视我们如无物。\n\n帮个忙,收下它。随你怎么处置,我们不想在这附近看到你。我们不想卷入你和此物之间的任何事端。\n\n它使你变成了贪婪无魂之人,愿你有自知之明。", + story = "\"众神的奇迹..\"\n你反复絮叨着。你疯了吗?我们只想救你, 你却视我们如无物。\n\n帮个忙, 收下它。随你怎么处置, 我们不想在这附近看到你。我们不想卷入你和此物之间的任何事端。\n\n它使你变成了贪婪无魂之人, 愿你有自知之明。", priority = "不稳定", }, strangeCan = { - name = "异样罐头", + name = "古怪罐头", pickup = "投掷罐头标记敌人。击杀后释放毒云。", - description = "扔出一个 奇特罐头,污染 最大生命值最高的敌人。 被污染 敌人死亡时释放一团 毒云,在5秒内造成相当于该敌人 50% 最大生命值的伤害。", + description = "扔出一个 奇特罐头, 污染 最大生命值最高的敌人。 被污染 敌人死亡时释放一团 毒云, 在5秒内造成相当于该敌人 50% 最大生命值的伤害。", destination = "1530区,\n563区,\nA-LC12", date = "2056/5/22", - story = "如我所言,非常美味。只希望别再像上次那样在路上裂开。\n我该找份工作了...", + story = "如我所言,这些东西非常美味。我只希望它别像上次那样在路上裂开了。\n我应该找份工作……", priority = "不稳定", }, whiteFlag = { @@ -439,17 +425,28 @@ return { description = "放置一面持续 8 秒的白旗。白旗半径内 所有人 技能被禁用。\n不影响无人机和飞行敌人。", destination = "2B房,\n索姆纳斯酒店,\n地球", date = "2056/10/5", - story = "替我保管此物直到归家,我并未使用。实际上我们成了朋友!等不及要告诉你了。旅途漫长且经历了一系列意外事件。我向他们提及过你,他们希望下次能邀你前来。意下如何?爱你。", + story = "替我保管此物直到归家, 我并未使用。实际上我们成了朋友!等不及要告诉你了。旅途漫长且经历了一系列意外事件。我向他们提及过你, 他们希望下次能邀你前来。意下如何?爱你。", priority = "不稳定", }, + eclipseGummies = { + name = "日蚀软糖", + pickup = "击杀敌人掉落能提供增益的软糖.", + description = "击杀一个敌人 掉落一个能提供增益的软糖。 软糖能够提升 攻击 a和 移动 速度 2.5% (每层+2.5% ) 最高 25% (+25% 每层) 持续 10 秒.", + destination = "199区\n亚伯拉罕路.\n地球", + date = "8/16/2056", + story = "嗨, 丹妮!我是蔚, 你绝对想不到我刚刚发现了什么!一盒老版的Eclipse软糖!在店里, 我们正在清理一家老式的夫妻便利店, 我在仓库里发现了这盒未开封的软糖。老板让我留着, 不然我们只能扔掉了。我上次吃这种软糖已经是快八年前的事了。哦, 小弗朗西斯卡青蛙、机器人雷吉, 还有你们这些水果味的小家伙们。虽然这部动画片存在的唯一目的就是卖周边, 但它确实在我的童年记忆里留下了深刻的印记。我很高兴这些软糖的味道和以前一样, 甚至连那种酥麻的感觉都和以前一样。这真的让我很纳闷, 为什么他们会停产这么受欢迎的软糖呢?总之, 我不能把这些都独占, 所以我也给你寄了一些。好好享用♥", + priority = "标准" + } }, + + artifact = { multitude = { - pickupName = "群体神器", - name = "群体", - description = "敌人大规模成群结队。", - approaching = "成群的敌人正在逼近。", + pickupName = "众生神器", + name = "集群", + description = "敌人成群结队而来。", + approaching = "一大波敌人正在接近。", arriving = "做好迎战准备……", }, displacement = { @@ -459,7 +456,7 @@ return { }, gathering = { pickupName = "集聚神器", - name = "集聚", + name = "采集", description = "金币掉落翻倍但必须手动拾取。", }, }, @@ -470,7 +467,7 @@ return { name = "爆破者" }, Mimic = { - name = "安保宝箱" + name = "安全箱" }, Gatekeeper = { name = "守门人" @@ -487,7 +484,15 @@ return { monster = { admonitor = { name = "陶土训诫者", - story = "远处,一个熟悉的陶土'人'在神殿地面上艰难跋涉。然而,尽管外观相似,这个生物与我之前见过的类型不同。与它较小的同类不同,这个盆栽守护者缺乏狡诈,却拥有两个潜伏的拳头,紧握成钳状。它迈出的步伐几乎让它看起来...自信。我知道如果假设它无法产生诸如信念这样的智能情感,我就是个傻瓜。尽管如此,出于对我整体健康的担忧,我选择不测试这个趾高气扬的油滑家伙的勇气,而是躲在一座翻倒的废墟里。\n\n如果我要活着离开这个星球,我希望我的股骨保持完整。" + story = "远处, 一个熟悉的陶土'人'在神殿地面上艰难跋涉。然而, 尽管外观相似, 这个生物与我之前见过的类型不同。与它较小的同类不同, 这个盆栽守护者缺乏狡诈, 却拥有两个潜伏的拳头, 紧握成钳状。它迈出的步伐几乎让它看起来...自信。我知道如果假设它无法产生诸如信念这样的智能情感, 我就是个傻瓜。尽管如此, 出于对我整体健康的担忧, 我选择不测试这个趾高气扬的油滑家伙的勇气, 而是躲在一座翻倒的废墟里。\n\n如果我要活着离开这个星球, 我希望我的股骨保持完整。" + }, + exploder = { + name = "爆破者", + story = "我最恨的就是被这些家伙追赶。虽然单独对付它们很容易,但只要它们成群结队出现,我最好还是赶紧逃跑。它们好像全身的血液都充满了那种粘稠的酸性物质,一滴就能溶解我无人机的电路。\n\n我……绝对不想知道它会对我的皮肤造成什么伤害。" + }, + mimic = { + name = "安全箱", + story = "到底是谁想出这么个馊主意, 给箱子加个故障保护机制?我知道他们想增加海盗的作案难度, 但他们大概没考虑到紧急情况吧。\n我永远也习惯不了追着一个机械箱子跑, 就因为它觉得我偷了东西。\n\n……或许是因为我吃了浆果吧。" } }, @@ -495,6 +500,10 @@ return { MimicInactive = { text = "..?", name = "大宝箱?" + }, + ChirrsmasPresent = { + text = "收礼物咯!", + name = "礼盒" } }, @@ -503,9 +512,8 @@ return { name = "剧毒 %s" }, empyrean = { - name = "天界 %s", + name = "至高天 %s", text = "审判先驱", - worm = "棱镜利维坦" } }, @@ -513,12 +521,50 @@ return { whistlingBasin = { name = "啸风盆地", subname = "渐涸绿洲", - story = "这颗星球持续带给我意外之惊奇。鉴于其原住民之前的行径,我从未想过这般颓败而奢华的建筑竟能由这等生灵所造。令人惊叹的深黑立柱与优美石料构成的拱门拔地而起,尽由匠心之手雕琢装饰。遍布墙壁的是这些绝妙复杂、表象简朴的装饰。奇异的蓝绿色植被侵袭着建筑,悄沿其基攀爬。看来我对这颗星球持有的野蛮成见正在消散。即便如此,我仍高度戒备。尽管酸痛的肌肉在抗议,但此刻休息对我而言为时尚早。" + story = "这颗星球持续带给我意外之惊奇。鉴于其原住民之前的行径, 我从未想过这般颓败而奢华的建筑竟能由这等生灵所造。令人惊叹的深黑立柱与优美石料构成的拱门拔地而起, 尽由匠心之手雕琢装饰。遍布墙壁的是这些绝妙复杂、表象简朴的装饰。奇异的蓝绿色植被侵袭着建筑, 悄沿其基攀爬。看来我对这颗星球持有的野蛮成见正在消散。即便如此, 我仍高度戒备。尽管酸痛的肌肉在抗议, 但此刻休息对我而言为时尚早。" }, torridOutlands = { name = "焦热荒地", subname = "死寂灼痕", - story = "即便有防护服,我也能感受到脉动的太阳射线直射而下,扭曲着这颗背弃之行星的大气层。高温使我难以保持清醒,凝结在头盔内壁的水汽更是于事无补。不过,若没有它,在游荡中踢起的灰尘碎屑恐怕已半填满我的肺腑——算是“寻找一线光明”聊以自慰吧。烈日当空,哪怕仅仅是轻松勘察周围环境的想法也不过是白日梦。神志恍惚间,我极易踉跄绊入仙人掌和巨石丛中,只能暂时躲进遍布地表的蜿蜒隧道与洞穴中稍作喘息。崎岖地势拖慢脚步,顺眉滴入眼中的汗水终将成为我最小忧虑之一。" + story = "即便有防护服, 我也能感受到脉动的太阳射线直射而下, 扭曲着这颗背弃之行星的大气层。高温使我难以保持清醒, 凝结在头盔内壁的水汽更是于事无补。不过, 若没有它, 在游荡中踢起的灰尘碎屑恐怕已半填满我的肺腑——算是“寻找一线光明”聊以自慰吧。烈日当空, 哪怕仅仅是轻松勘察周围环境的想法也不过是白日梦。神志恍惚间, 我极易踉跄绊入仙人掌和巨石丛中, 只能暂时躲进遍布地表的蜿蜒隧道与洞穴中稍作喘息。崎岖地势拖慢脚步, 顺眉滴入眼中的汗水终将成为我最小忧虑之一。" + }, + verdantWoodland = { + name = "葱茏林地", + subname = "吐纳孳长", + story = "眼前是一片由我见过的最大树木组成的迷宫,令人窒息的自然奇观,树皮鳞片密布,树梢如同尖刺。这些木柱绵延不绝,守护着这座富饶的卫城——它们压倒性的存在让我反思自己的所作所为,同时我也在茂密的植被中艰难前行。我很难责怪这些刺穿我衣服的尖锐荆棘。每一步都像被荆棘刺穿,提醒我,我只是它们堡垒中的一位客人。密密麻麻的虫巢里涌出它们的骑士,像你我守护自己的孩子一样,引导我远离它们的幼虫。我能听到头顶上成群的昆虫发出嗡嗡的鸣叫,如同鸟儿的歌声。这让我想起了家。我多么想躺在这颗神奇星球上柔软的草地上,但我必须继续前行。一股淡淡的忧伤刺痛着我的内心。这股在我血管中奔涌的斗志,赋予我继续战斗的意志……我不禁后悔它的存在。\n\n我害怕这颗星球开始让我迷失方向。" + } + }, + + ui = { + options = { + ssr = { + header = "STARSTORM RETURNS", + titleReplacement = "替换标题", + ["titleReplacement.desc"] = "游戏标题画面是否替换成 Starstorm的", + enableChars = "添加幸存者", + ["enableChars.desc"] = "添加STARSTORM RETURNS新增的的幸存者们。", + enableItems = "添加物品", + ["enableItems.desc"] = "添加STARSTORM RETURNS新增的物品。", + enableEnemies = "添加敌人", + ["enableEnemies.desc"] = "添加STARSTORM RETURNS新增的敌人。", + enableElites = "添加精英", + ["enableElites.desc"] = "添加STARSTORM RETURNS新增的精英。", + enableTyphoon = "添加台风", + ["enableTyphoon.desc"] = "添加STARSTORM RETURNS新增的台风难度。", + enableInteractables = "添加交互物品", + ["enableInteractables.desc"] = "添加STARSTORM RETURNS新增的交互物品。", + enableArtifacts = "添加神器", + ["enableArtifacts.desc"] = "添加STARSTORM RETURNS新增的神器。", + enableStages = "添加关卡", + ["enableStages.desc"] = "添加STARSTORM RETURNS新增的关卡", + enableBeta = "添加未完成内容", + ["enableBeta.desc"] = "启用 Starstorm Returns开发中的内容. \n完成度极低!", + enableChirrsmas = "启用圣诞内容", + ["enableChirrsmas.desc"] = "是否展示圣诞节专属内容。默认情况下,该内容将于12月15日至1月15日期间生效。 \n需重启游戏", + ["enableChirrsmas.default"] = "默认", + ["enableChirrsmas.always"] = "总是", + ["enableChirrsmas.never"] = "从不" + } } } -} +} \ No newline at end of file diff --git a/Language/spanish.lua b/Language/spanish.lua index a909280d..7c7b6629 100644 --- a/Language/spanish.lua +++ b/Language/spanish.lua @@ -188,7 +188,7 @@ return { }, technicianX2 = { name = "El Botón Rojo", - description = "Detona la bomba lanzada inflingiendo 700% de daño y aturde a los enemigos.", + description = "Detona la bomba lanzada inflingiendo 500% de daño y aturde a los enemigos.", }, technicianC = { name = "Energia Refrescante", diff --git a/Misc/config.lua b/Misc/config.lua index 5dd6ffc5..7d00fd89 100644 --- a/Misc/config.lua +++ b/Misc/config.lua @@ -102,18 +102,17 @@ -- saved_settings:write(settings) -- end) --- -- beta content --- settings.enable_beta = false --- local enable_beta_checkbox = options:add_checkbox("enableBeta") +-- beta content +local enable_beta_checkbox = Options:add_checkbox("enableBeta") --- enable_beta_checkbox:add_getter(function() - -- return settings.beta_stages --- end) +enable_beta_checkbox:add_getter(function() + return Settings.enable_beta +end) --- enable_beta_checkbox:add_setter(function(value) - -- settings.enable_beta = value - -- saved_settings:write(settings) --- end) +enable_beta_checkbox:add_setter(function(value) + Settings.enable_beta = value + SettingsFile:write(Settings) +end) -- chirrsmas local enable_chirrsmas_checkbox = Options:add_dropdown("enableChirrsmas") diff --git a/Misc/library.lua b/Misc/library.lua index 88be5460..a1af64e1 100644 --- a/Misc/library.lua +++ b/Misc/library.lua @@ -43,18 +43,6 @@ function ssr_create_monster_log(identifier) return monster_log end --- ELITES -function ssr_create_elite(identifier) - -- check if monster_log already exists - local elite = Elite.find(identifier) - if elite then return elite end - - -- create monster_log - elite = Elite.wrap(gm.elite_type_create("ssr", identifier)) - - return elite -end - -- END OF TEMPORARY RETURNS API UNFINISHED THINGS -- -- play animation and then fade it out object diff --git a/README.md b/README.md index 1996287b..57bf5c6f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![SSR Title](https://github.com/WinslowRoR/SSR-PromoStuff/blob/main/README%20Stuff/SSR_Logo.png?raw=true) -**Starstorm Returns** is a **work-in-progress** mod for Risk of Rain Returns that re-imagines the original Risk of Rain mod "Starstorm". It currently features **five** survivors, **three** stages, **three** monsters, and over **20** new items to help reshape your runs. +**Starstorm Returns** is a **work-in-progress** mod for Risk of Rain Returns that re-imagines the original Risk of Rain mod "Starstorm". It currently features **four** survivors, **three** stages, **three** monsters, and over **20** new items to help reshape your runs. ![New_Environments_Header](https://github.com/WinslowRoR/testing_grounds1/blob/main/PromoFiles/SSR_Environments.gif?raw=true) @@ -27,7 +27,7 @@ Descend to Petrichor V with reworked, polished and incredibly unique characters. * **MULE**: The MULE is adequately equipped and ready for duty, packing a rueful piston punch (despite its weathered appearance). -* **Technician**: With his complex gadgets and steel wrench in tow, the Technician is the man for the industrial job. +* **Technician**: With his complex gadgets and steel wrench in tow, the Technician is the man for the industrial job. (BETA ONLY!) * **???**: Old and eroded, twisted and deceptive- familiar faces all the same. @@ -55,12 +55,11 @@ Should be! Please report any issues you find. **Credits** - - Neik: Creator of Starstorm 1 - Hobart: Morale support - Bread: Github Detective - Buns: Project management -- [Azuline](https://bsky.app/profile/azulineskye.bsky.social): Programmer +- [Azuline](https://boosty.to/azulineskye/donate): Programmer - Battery: Programmer - [TRYAGAIN211](https://rainfusion.net/mod/ccf124a5-a412-4106-86bb-9b89645d6b31/): Writer, Programmer & Pixel Artist - EarthZebra: Programmer @@ -69,7 +68,7 @@ Should be! Please report any issues you find. - Altzeus: Music & Programmer - Redacted: Writer & Lead Pixel Artist - DigBug: Writer & Pixel Artist -- [Winslow](https://bsky.app/profile/winslowror.bsky.social): Pixel Artist +- [Winslow](https://bsky.app/profile/winslowror.bsky.social): Pixel Artist & Sound Designer - isDahMaster: Pixel Artist - [Beebo](https://bsky.app/profile/beebogreebo.bsky.social): Pixel Artist - [TangoKnight](https://bsky.app/profile/tangoknight.bsky.social): Writer & Pixel Artist @@ -90,4 +89,6 @@ Should be! Please report any issues you find. - Kris for their previous work on SSR - Khlerik, iDeathHD, and other RoRR Modding Toolkit contributors for their work on making modding possible - Risk of Rain Discord, and RoRRModcord for playtesting and feedback -- SwedishFish75 for Spanish Translation \ No newline at end of file +- SwedishFish75 for Spanish Translation +- pixelvoxel for Korean Translation +- Eskevor for Chinese Translation \ No newline at end of file diff --git a/Sprites/Actors/Admonitor/ping.png b/Sprites/Actors/Admonitor/ping.png new file mode 100644 index 00000000..47d8ccd0 Binary files /dev/null and b/Sprites/Actors/Admonitor/ping.png differ diff --git a/Sprites/Actors/Exploder/ping.png b/Sprites/Actors/Exploder/ping.png new file mode 100644 index 00000000..b9350d58 Binary files /dev/null and b/Sprites/Actors/Exploder/ping.png differ diff --git a/Sprites/Actors/Mimic/ping.png b/Sprites/Actors/Mimic/ping.png new file mode 100644 index 00000000..368b4a05 Binary files /dev/null and b/Sprites/Actors/Mimic/ping.png differ diff --git a/Sprites/Interactables/ChirrsmasPresent/ping.png b/Sprites/Interactables/ChirrsmasPresent/ping.png new file mode 100644 index 00000000..245b0372 Binary files /dev/null and b/Sprites/Interactables/ChirrsmasPresent/ping.png differ diff --git a/Sprites/Items/Effects/denizuCrown.png b/Sprites/Items/Effects/denizuCrown.png new file mode 100644 index 00000000..b9590969 Binary files /dev/null and b/Sprites/Items/Effects/denizuCrown.png differ diff --git a/Sprites/Items/denizuCrown.png b/Sprites/Items/denizuCrown.png new file mode 100644 index 00000000..51e90c0c Binary files /dev/null and b/Sprites/Items/denizuCrown.png differ diff --git a/Sprites/Survivors/Executioner/palette.png b/Sprites/Survivors/Executioner/palette.png index 2b1cddc9..3de48996 100644 Binary files a/Sprites/Survivors/Executioner/palette.png and b/Sprites/Survivors/Executioner/palette.png differ diff --git a/Sprites/Survivors/Executioner/palette1.png b/Sprites/Survivors/Executioner/palette1.png new file mode 100644 index 00000000..c2c3ea62 Binary files /dev/null and b/Sprites/Survivors/Executioner/palette1.png differ diff --git a/Sprites/Survivors/Executioner/palette2.png b/Sprites/Survivors/Executioner/palette2.png new file mode 100644 index 00000000..ec3b85e5 Binary files /dev/null and b/Sprites/Survivors/Executioner/palette2.png differ diff --git a/Sprites/Survivors/Executioner/palette3.png b/Sprites/Survivors/Executioner/palette3.png new file mode 100644 index 00000000..c7d0f02c Binary files /dev/null and b/Sprites/Survivors/Executioner/palette3.png differ diff --git a/Sprites/Survivors/Executioner/portrait2.png b/Sprites/Survivors/Executioner/portrait2.png deleted file mode 100644 index c02f480e..00000000 Binary files a/Sprites/Survivors/Executioner/portrait2.png and /dev/null differ diff --git a/Sprites/Survivors/Executioner/portrait3.png b/Sprites/Survivors/Executioner/portrait3.png deleted file mode 100644 index 84c12207..00000000 Binary files a/Sprites/Survivors/Executioner/portrait3.png and /dev/null differ diff --git a/Sprites/Survivors/Executioner/portrait4.png b/Sprites/Survivors/Executioner/portrait4.png deleted file mode 100644 index 55128568..00000000 Binary files a/Sprites/Survivors/Executioner/portrait4.png and /dev/null differ diff --git a/Sprites/Survivors/Executioner/portraitSmall2.png b/Sprites/Survivors/Executioner/portraitSmall2.png deleted file mode 100644 index b36934cc..00000000 Binary files a/Sprites/Survivors/Executioner/portraitSmall2.png and /dev/null differ diff --git a/Sprites/Survivors/Executioner/portraitSmall3.png b/Sprites/Survivors/Executioner/portraitSmall3.png deleted file mode 100644 index 52fc0cbb..00000000 Binary files a/Sprites/Survivors/Executioner/portraitSmall3.png and /dev/null differ diff --git a/Sprites/Survivors/Executioner/portraitSmall4.png b/Sprites/Survivors/Executioner/portraitSmall4.png deleted file mode 100644 index 64c26010..00000000 Binary files a/Sprites/Survivors/Executioner/portraitSmall4.png and /dev/null differ diff --git a/Sprites/Survivors/Executioner/select.png b/Sprites/Survivors/Executioner/select.png index fd83eff4..f98a5428 100644 Binary files a/Sprites/Survivors/Executioner/select.png and b/Sprites/Survivors/Executioner/select.png differ diff --git a/Sprites/Survivors/Executioner/select2.png b/Sprites/Survivors/Executioner/select2.png deleted file mode 100644 index 848ebe05..00000000 Binary files a/Sprites/Survivors/Executioner/select2.png and /dev/null differ diff --git a/Sprites/Survivors/Executioner/select3.png b/Sprites/Survivors/Executioner/select3.png deleted file mode 100644 index fa27bd0f..00000000 Binary files a/Sprites/Survivors/Executioner/select3.png and /dev/null differ diff --git a/Sprites/Survivors/Executioner/select4.png b/Sprites/Survivors/Executioner/select4.png deleted file mode 100644 index 432ff686..00000000 Binary files a/Sprites/Survivors/Executioner/select4.png and /dev/null differ diff --git a/Sprites/Survivors/MULE/palette.png b/Sprites/Survivors/MULE/palette.png index 9cccd8e3..2de86bd1 100644 Binary files a/Sprites/Survivors/MULE/palette.png and b/Sprites/Survivors/MULE/palette.png differ diff --git a/Sprites/Survivors/MULE/palette1.png b/Sprites/Survivors/MULE/palette1.png new file mode 100644 index 00000000..053146f2 Binary files /dev/null and b/Sprites/Survivors/MULE/palette1.png differ diff --git a/Sprites/Survivors/MULE/palette2.png b/Sprites/Survivors/MULE/palette2.png new file mode 100644 index 00000000..d4fe106e Binary files /dev/null and b/Sprites/Survivors/MULE/palette2.png differ diff --git a/Sprites/Survivors/MULE/palette3.png b/Sprites/Survivors/MULE/palette3.png new file mode 100644 index 00000000..3786c714 Binary files /dev/null and b/Sprites/Survivors/MULE/palette3.png differ diff --git a/Sprites/Survivors/MULE/palette4.png b/Sprites/Survivors/MULE/palette4.png new file mode 100644 index 00000000..79905b96 Binary files /dev/null and b/Sprites/Survivors/MULE/palette4.png differ diff --git a/Sprites/Survivors/MULE/portrait2.png b/Sprites/Survivors/MULE/portrait2.png deleted file mode 100644 index d0578a4c..00000000 Binary files a/Sprites/Survivors/MULE/portrait2.png and /dev/null differ diff --git a/Sprites/Survivors/MULE/portrait3.png b/Sprites/Survivors/MULE/portrait3.png deleted file mode 100644 index a262c0ca..00000000 Binary files a/Sprites/Survivors/MULE/portrait3.png and /dev/null differ diff --git a/Sprites/Survivors/MULE/portrait4.png b/Sprites/Survivors/MULE/portrait4.png deleted file mode 100644 index e2a192a3..00000000 Binary files a/Sprites/Survivors/MULE/portrait4.png and /dev/null differ diff --git a/Sprites/Survivors/MULE/portrait5.png b/Sprites/Survivors/MULE/portrait5.png deleted file mode 100644 index db8e0e2b..00000000 Binary files a/Sprites/Survivors/MULE/portrait5.png and /dev/null differ diff --git a/Sprites/Survivors/MULE/portraitSmall2.png b/Sprites/Survivors/MULE/portraitSmall2.png deleted file mode 100644 index e4aeafeb..00000000 Binary files a/Sprites/Survivors/MULE/portraitSmall2.png and /dev/null differ diff --git a/Sprites/Survivors/MULE/portraitSmall3.png b/Sprites/Survivors/MULE/portraitSmall3.png deleted file mode 100644 index f2d96868..00000000 Binary files a/Sprites/Survivors/MULE/portraitSmall3.png and /dev/null differ diff --git a/Sprites/Survivors/MULE/portraitSmall4.png b/Sprites/Survivors/MULE/portraitSmall4.png deleted file mode 100644 index 1e063738..00000000 Binary files a/Sprites/Survivors/MULE/portraitSmall4.png and /dev/null differ diff --git a/Sprites/Survivors/MULE/portraitSmall5.png b/Sprites/Survivors/MULE/portraitSmall5.png deleted file mode 100644 index 98813e2a..00000000 Binary files a/Sprites/Survivors/MULE/portraitSmall5.png and /dev/null differ diff --git a/Sprites/Survivors/MULE/select2.png b/Sprites/Survivors/MULE/select2.png deleted file mode 100644 index 0c4dba55..00000000 Binary files a/Sprites/Survivors/MULE/select2.png and /dev/null differ diff --git a/Sprites/Survivors/MULE/select3.png b/Sprites/Survivors/MULE/select3.png deleted file mode 100644 index d4bbc1c8..00000000 Binary files a/Sprites/Survivors/MULE/select3.png and /dev/null differ diff --git a/Sprites/Survivors/MULE/select4.png b/Sprites/Survivors/MULE/select4.png deleted file mode 100644 index c6c72a63..00000000 Binary files a/Sprites/Survivors/MULE/select4.png and /dev/null differ diff --git a/Sprites/Survivors/MULE/select5.png b/Sprites/Survivors/MULE/select5.png deleted file mode 100644 index 36b947ff..00000000 Binary files a/Sprites/Survivors/MULE/select5.png and /dev/null differ diff --git a/Sprites/Survivors/NemesisCommando/palette.png b/Sprites/Survivors/NemesisCommando/palette.png index 6d393ca5..fd022b70 100644 Binary files a/Sprites/Survivors/NemesisCommando/palette.png and b/Sprites/Survivors/NemesisCommando/palette.png differ diff --git a/Sprites/Survivors/NemesisCommando/palette1.png b/Sprites/Survivors/NemesisCommando/palette1.png new file mode 100644 index 00000000..fcd31f22 Binary files /dev/null and b/Sprites/Survivors/NemesisCommando/palette1.png differ diff --git a/Sprites/Survivors/NemesisCommando/palette2.png b/Sprites/Survivors/NemesisCommando/palette2.png new file mode 100644 index 00000000..6d3b81b4 Binary files /dev/null and b/Sprites/Survivors/NemesisCommando/palette2.png differ diff --git a/Sprites/Survivors/NemesisCommando/palette3.png b/Sprites/Survivors/NemesisCommando/palette3.png new file mode 100644 index 00000000..6a63dadb Binary files /dev/null and b/Sprites/Survivors/NemesisCommando/palette3.png differ diff --git a/Sprites/Survivors/NemesisCommando/palette4.png b/Sprites/Survivors/NemesisCommando/palette4.png new file mode 100644 index 00000000..b5e3e17c Binary files /dev/null and b/Sprites/Survivors/NemesisCommando/palette4.png differ diff --git a/Sprites/Survivors/NemesisCommando/portrait2.png b/Sprites/Survivors/NemesisCommando/portrait2.png deleted file mode 100644 index 11c4251d..00000000 Binary files a/Sprites/Survivors/NemesisCommando/portrait2.png and /dev/null differ diff --git a/Sprites/Survivors/NemesisCommando/portrait3.png b/Sprites/Survivors/NemesisCommando/portrait3.png deleted file mode 100644 index 12cab2b4..00000000 Binary files a/Sprites/Survivors/NemesisCommando/portrait3.png and /dev/null differ diff --git a/Sprites/Survivors/NemesisCommando/portrait4.png b/Sprites/Survivors/NemesisCommando/portrait4.png deleted file mode 100644 index 3ee5404f..00000000 Binary files a/Sprites/Survivors/NemesisCommando/portrait4.png and /dev/null differ diff --git a/Sprites/Survivors/NemesisCommando/portrait5.png b/Sprites/Survivors/NemesisCommando/portrait5.png deleted file mode 100644 index 364f9003..00000000 Binary files a/Sprites/Survivors/NemesisCommando/portrait5.png and /dev/null differ diff --git a/Sprites/Survivors/NemesisCommando/portraitTiny2.png b/Sprites/Survivors/NemesisCommando/portraitTiny2.png deleted file mode 100644 index ab428ceb..00000000 Binary files a/Sprites/Survivors/NemesisCommando/portraitTiny2.png and /dev/null differ diff --git a/Sprites/Survivors/NemesisCommando/portraitTiny3.png b/Sprites/Survivors/NemesisCommando/portraitTiny3.png deleted file mode 100644 index 3492a738..00000000 Binary files a/Sprites/Survivors/NemesisCommando/portraitTiny3.png and /dev/null differ diff --git a/Sprites/Survivors/NemesisCommando/portraitTiny4.png b/Sprites/Survivors/NemesisCommando/portraitTiny4.png deleted file mode 100644 index 06a1d1e8..00000000 Binary files a/Sprites/Survivors/NemesisCommando/portraitTiny4.png and /dev/null differ diff --git a/Sprites/Survivors/NemesisCommando/portraitTiny5.png b/Sprites/Survivors/NemesisCommando/portraitTiny5.png deleted file mode 100644 index 8dad8038..00000000 Binary files a/Sprites/Survivors/NemesisCommando/portraitTiny5.png and /dev/null differ diff --git a/Sprites/Survivors/NemesisCommando/select.png b/Sprites/Survivors/NemesisCommando/select.png index 7144e65c..416d2df8 100644 Binary files a/Sprites/Survivors/NemesisCommando/select.png and b/Sprites/Survivors/NemesisCommando/select.png differ diff --git a/Sprites/Survivors/NemesisCommando/select2.png b/Sprites/Survivors/NemesisCommando/select2.png deleted file mode 100644 index eb1a636d..00000000 Binary files a/Sprites/Survivors/NemesisCommando/select2.png and /dev/null differ diff --git a/Sprites/Survivors/NemesisCommando/select3.png b/Sprites/Survivors/NemesisCommando/select3.png deleted file mode 100644 index 2c43149d..00000000 Binary files a/Sprites/Survivors/NemesisCommando/select3.png and /dev/null differ diff --git a/Sprites/Survivors/NemesisCommando/select4.png b/Sprites/Survivors/NemesisCommando/select4.png deleted file mode 100644 index fd7f11f9..00000000 Binary files a/Sprites/Survivors/NemesisCommando/select4.png and /dev/null differ diff --git a/Sprites/Survivors/NemesisCommando/select5.png b/Sprites/Survivors/NemesisCommando/select5.png deleted file mode 100644 index 4cb5e369..00000000 Binary files a/Sprites/Survivors/NemesisCommando/select5.png and /dev/null differ diff --git a/Sprites/Survivors/NemesisMercenary/palette.png b/Sprites/Survivors/NemesisMercenary/palette.png index b66d9e36..e0686bbf 100644 Binary files a/Sprites/Survivors/NemesisMercenary/palette.png and b/Sprites/Survivors/NemesisMercenary/palette.png differ diff --git a/Sprites/Survivors/NemesisMercenary/palette1.png b/Sprites/Survivors/NemesisMercenary/palette1.png new file mode 100644 index 00000000..e59d7680 Binary files /dev/null and b/Sprites/Survivors/NemesisMercenary/palette1.png differ diff --git a/Sprites/Survivors/NemesisMercenary/palette2.png b/Sprites/Survivors/NemesisMercenary/palette2.png new file mode 100644 index 00000000..710145b9 Binary files /dev/null and b/Sprites/Survivors/NemesisMercenary/palette2.png differ diff --git a/Sprites/Survivors/NemesisMercenary/palette3.png b/Sprites/Survivors/NemesisMercenary/palette3.png new file mode 100644 index 00000000..0c3836c6 Binary files /dev/null and b/Sprites/Survivors/NemesisMercenary/palette3.png differ diff --git a/Sprites/Survivors/NemesisMercenary/palette4.png b/Sprites/Survivors/NemesisMercenary/palette4.png new file mode 100644 index 00000000..d14be5bc Binary files /dev/null and b/Sprites/Survivors/NemesisMercenary/palette4.png differ diff --git a/Sprites/Survivors/NemesisMercenary/select.png b/Sprites/Survivors/NemesisMercenary/select.png index 4ac56ef3..e8a4196b 100644 Binary files a/Sprites/Survivors/NemesisMercenary/select.png and b/Sprites/Survivors/NemesisMercenary/select.png differ diff --git a/Sprites/Survivors/Technician/portraitPROV.png b/Sprites/Survivors/Technician/portraitPROV.png deleted file mode 100644 index b475b1be..00000000 Binary files a/Sprites/Survivors/Technician/portraitPROV.png and /dev/null differ diff --git a/Sprites/Survivors/Technician/portraitS1.png b/Sprites/Survivors/Technician/portraitS1.png deleted file mode 100644 index 20891252..00000000 Binary files a/Sprites/Survivors/Technician/portraitS1.png and /dev/null differ diff --git a/Sprites/Survivors/Technician/portraitS2.png b/Sprites/Survivors/Technician/portraitS2.png deleted file mode 100644 index fa759de9..00000000 Binary files a/Sprites/Survivors/Technician/portraitS2.png and /dev/null differ diff --git a/Sprites/Survivors/Technician/portraitS3.png b/Sprites/Survivors/Technician/portraitS3.png deleted file mode 100644 index c24d5bba..00000000 Binary files a/Sprites/Survivors/Technician/portraitS3.png and /dev/null differ diff --git a/Sprites/Survivors/Technician/portraitS4.png b/Sprites/Survivors/Technician/portraitS4.png deleted file mode 100644 index bb456e66..00000000 Binary files a/Sprites/Survivors/Technician/portraitS4.png and /dev/null differ diff --git a/Sprites/Survivors/Technician/portraitSmallPROV.png b/Sprites/Survivors/Technician/portraitSmallPROV.png deleted file mode 100644 index b6eb796c..00000000 Binary files a/Sprites/Survivors/Technician/portraitSmallPROV.png and /dev/null differ diff --git a/Sprites/Survivors/Technician/portraitSmallS1.png b/Sprites/Survivors/Technician/portraitSmallS1.png deleted file mode 100644 index d833ff37..00000000 Binary files a/Sprites/Survivors/Technician/portraitSmallS1.png and /dev/null differ diff --git a/Sprites/Survivors/Technician/portraitSmallS2.png b/Sprites/Survivors/Technician/portraitSmallS2.png deleted file mode 100644 index e0990716..00000000 Binary files a/Sprites/Survivors/Technician/portraitSmallS2.png and /dev/null differ diff --git a/Sprites/Survivors/Technician/portraitSmallS3.png b/Sprites/Survivors/Technician/portraitSmallS3.png deleted file mode 100644 index 8c46940f..00000000 Binary files a/Sprites/Survivors/Technician/portraitSmallS3.png and /dev/null differ diff --git a/Sprites/Survivors/Technician/portraitSmallS4.png b/Sprites/Survivors/Technician/portraitSmallS4.png deleted file mode 100644 index a28cdb6c..00000000 Binary files a/Sprites/Survivors/Technician/portraitSmallS4.png and /dev/null differ diff --git a/Sprites/Survivors/Technician/selectPROV.png b/Sprites/Survivors/Technician/selectPROV.png deleted file mode 100644 index 42137d50..00000000 Binary files a/Sprites/Survivors/Technician/selectPROV.png and /dev/null differ diff --git a/Sprites/Survivors/Technician/selectS1.png b/Sprites/Survivors/Technician/selectS1.png deleted file mode 100644 index 26e72961..00000000 Binary files a/Sprites/Survivors/Technician/selectS1.png and /dev/null differ diff --git a/Sprites/Survivors/Technician/selectS2.png b/Sprites/Survivors/Technician/selectS2.png deleted file mode 100644 index f2b6304e..00000000 Binary files a/Sprites/Survivors/Technician/selectS2.png and /dev/null differ diff --git a/Sprites/Survivors/Technician/selectS3.png b/Sprites/Survivors/Technician/selectS3.png deleted file mode 100644 index 0245c45b..00000000 Binary files a/Sprites/Survivors/Technician/selectS3.png and /dev/null differ diff --git a/Sprites/Survivors/Technician/selectS4.png b/Sprites/Survivors/Technician/selectS4.png deleted file mode 100644 index 4d63cc98..00000000 Binary files a/Sprites/Survivors/Technician/selectS4.png and /dev/null differ diff --git a/Survivors/executioner.lua b/Survivors/executioner.lua index 15bf8da6..ecbcba72 100644 --- a/Survivors/executioner.lua +++ b/Survivors/executioner.lua @@ -2,7 +2,7 @@ local SPRITE_PATH = path.combine(PATH, "Sprites/Survivors/Executioner") local SOUND_PATH = path.combine(PATH, "Sounds/Survivors/Executioner") -- sprites. -local sprite_loadout = Sprite.new("ExecutionerSelect", path.combine(SPRITE_PATH, "select.png"), 23, 28, 0) +local sprite_loadout = Sprite.new("ExecutionerSelect", path.combine(SPRITE_PATH, "select.png"), 25, 28, 0) local sprite_portrait = Sprite.new("ExecutionerPortrait", path.combine(SPRITE_PATH, "portrait.png"), 3) local sprite_portrait_small = Sprite.new("ExecutionerPortraitSmall", path.combine(SPRITE_PATH, "portraitSmall.png")) local sprite_skills = Sprite.new("ExecutionerSkills", path.combine(SPRITE_PATH, "skills.png"), 11) @@ -22,7 +22,6 @@ local sprite_fall_half = Sprite.new("ExecutionerFallHalf", path.combine(SPRITE_ local sprite_climb = Sprite.new("ExecutionerClimb", path.combine(SPRITE_PATH, "climb.png"), 6, 12, 18) local sprite_death = Sprite.new("ExecutionerDeath", path.combine(SPRITE_PATH, "death.png"), 11, 38, 17) local sprite_decoy = Sprite.new("ExecutionerDecoy", path.combine(SPRITE_PATH, "decoy.png"), 1, 16, 18) -local sprite_palette = Sprite.new("ExecutionerPalette", path.combine(SPRITE_PATH, "palette.png")) local sprite_shoot1 = Sprite.new("ExecutionerShoot1", path.combine(SPRITE_PATH, "shoot1.png"), 5, 10, 17) local sprite_shoot1_half = Sprite.new("ExecutionerShoot1Half", path.combine(SPRITE_PATH, "shoot1Half.png"), 5, 10, 17) @@ -48,6 +47,11 @@ local sprite_axe_projectileS= Sprite.new("ExecutionerAxeProjectileS", path.combi local sprite_drone_idle = Sprite.new("DronePlayerExecutionerIdle", path.combine(SPRITE_PATH, "droneIdle.png"), 5, 11, 14) local sprite_drone_shoot = Sprite.new("DronePlayerExecutionerShoot", path.combine(SPRITE_PATH, "droneShoot.png"), 5, 33, 13) +local sprite_palette = Sprite.new("ExecutionerPalette", path.combine(SPRITE_PATH, "palette.png")) +local sprite_palette1 = Sprite.new("ExecutionerPalette1", path.combine(SPRITE_PATH, "palette1.png")) +local sprite_palette2 = Sprite.new("ExecutionerPalette2", path.combine(SPRITE_PATH, "palette2.png")) +local sprite_palette3 = Sprite.new("ExecutionerPalette3", path.combine(SPRITE_PATH, "palette3.png")) + local sprite_ion_sparks = Sprite.new("ExecutionerIonSparks", path.combine(SPRITE_PATH, "ionSparks.png"), 4, 24, 14) local sprite_ion_sparks2 = Sprite.new("ExecutionerIonSparks2s", path.combine(SPRITE_PATH, "ionSparks2.png"), 4, 21, 21) local sprite_ion_tracer = Sprite.new("ExecutionerIonTracer", path.combine(SPRITE_PATH, "ionTracer.png"), 5, 0, 2) @@ -123,27 +127,13 @@ executioner.sprite_idle = sprite_idle -- used by skin systen for idle sprite executioner.sprite_title = sprite_walk -- also used by skin system for walk sprite executioner.sprite_credits = sprite_credits -executioner.sprite_palette = sprite_palette -executioner.sprite_portrait_palette = sprite_palette -executioner.sprite_loadout_palette = sprite_palette - executioner.select_sound_id = sound_select executioner.cape_offset = Array.new({0, -8, 0, -5}) ---[[ ---skins -executioner:add_skin("Grass Green", 1, Sprite.new("ExecutionerSelect2", path.combine(SPRITE_PATH, "select2.png"), 23, 28, 0), -Sprite.new("ExecutionerPortrait2", path.combine(SPRITE_PATH, "portrait2.png"), 3), -Sprite.new("ExecutionerPortraitSmall2", path.combine(SPRITE_PATH, "portraitSmall2.png"))) - -executioner:add_skin("Blood Red", 2, Sprite.new("ExecutionerSelect3", path.combine(SPRITE_PATH, "select3.png"), 23, 28, 0), -Sprite.new("ExecutionerPortrait3", path.combine(SPRITE_PATH, "portrait3.png"), 3), -Sprite.new("ExecutionerPortraitSmall3", path.combine(SPRITE_PATH, "portraitSmall3.png"))) - -executioner:add_skin("Royal Purple", 3, Sprite.new("ExecutionerSelect4", path.combine(SPRITE_PATH, "select4.png"), 23, 28, 0), -Sprite.new("ExecutionerPortrait4", path.combine(SPRITE_PATH, "portrait4.png"), 3), -Sprite.new("ExecutionerPortraitSmall4", path.combine(SPRITE_PATH, "portraitSmall4.png"))) -]]-- +executioner:add_skin("0", sprite_palette, sprite_palette, sprite_palette) +executioner:add_skin("1", sprite_palette1, sprite_palette1, sprite_palette1) +executioner:add_skin("2", sprite_palette2, sprite_palette2, sprite_palette2) +executioner:add_skin("3", sprite_palette3, sprite_palette3, sprite_palette3) Callback.add(executioner.on_init, function(actor) -- setup half-sprite nonsense diff --git a/Survivors/mule.lua b/Survivors/mule.lua index 60b5538a..c466ac78 100644 --- a/Survivors/mule.lua +++ b/Survivors/mule.lua @@ -4,7 +4,6 @@ local SOUND_PATH = path.combine(PATH, "Sounds/Survivors/MULE") local sprite_loadout = Sprite.new("MuleSelect", path.combine(SPRITE_PATH, "select.png"), 15, 56, 0) local sprite_portrait = Sprite.new("MulePortrait", path.combine(SPRITE_PATH, "portrait.png"), 4) local sprite_portrait_small = Sprite.new("MulePortraitSmall", path.combine(SPRITE_PATH, "portraitSmall.png")) -local sprite_palette = Sprite.new("MulePalette", path.combine(SPRITE_PATH, "palette.png")) local sprite_skills = Sprite.new("MuleSkills", path.combine(SPRITE_PATH, "skills.png"), 5) local sprite_credits = Sprite.new("MuleCredits", path.combine(SPRITE_PATH, "credits.png"), 1, 12, 22) local sprite_log = Sprite.new("MuleLog", path.combine(SPRITE_PATH, "log.png"), 1) @@ -45,6 +44,12 @@ local sprite_sparks1 = Sprite.new("MuleSparks1", path.combine(SPRITE_PATH, "sp local sprite_sparks2 = Sprite.new("MuleSparks2", path.combine(SPRITE_PATH, "sparks2.png"), 4, 27, 24) local sprite_sparks3 = Sprite.new("MuleSparks3", path.combine(SPRITE_PATH, "sparks3.png"), 4, 22, 16) +local sprite_palette = Sprite.new("MulePalette", path.combine(SPRITE_PATH, "palette.png")) +local sprite_palette1 = Sprite.new("MulePalette1", path.combine(SPRITE_PATH, "palette1.png")) +local sprite_palette2 = Sprite.new("MulePalette2", path.combine(SPRITE_PATH, "palette2.png")) +local sprite_palette3 = Sprite.new("MulePalette3", path.combine(SPRITE_PATH, "palette3.png")) +local sprite_palette4 = Sprite.new("MulePalette4", path.combine(SPRITE_PATH, "palette4.png")) + local sound_select = Sound.new("MuleSelect", path.combine(SOUND_PATH, "select.ogg")) local sound_shoot1a = Sound.new("MuleShoot1a", path.combine(SOUND_PATH, "skill1a.ogg")) local sound_shoot1b = Sound.new("MuleShoot1b", path.combine(SOUND_PATH, "skill1b.ogg")) @@ -109,24 +114,11 @@ mule.sprite_loadout_palette = sprite_palette mule.select_sound_id = sound_select mule.cape_offset = Array.new({0, -14, 0, -18}) ---[[ ---skins -mule:add_skin("Yellow Rose", 1, Sprite.new("MuleSelect2", path.combine(SPRITE_PATH, "select2.png"), 15, 56, 0), -Sprite.new("MulePortrait2", path.combine(SPRITE_PATH, "portrait2.png"), 4), -Sprite.new("MulePortraitSmall2", path.combine(SPRITE_PATH, "portraitSmall2.png"))) - -mule:add_skin("Steel Soul", 2, Sprite.new("MuleSelect3", path.combine(SPRITE_PATH, "select3.png"), 15, 56, 0), -Sprite.new("MulePortrait3", path.combine(SPRITE_PATH, "portrait3.png"), 4), -Sprite.new("MulePortraitSmall3", path.combine(SPRITE_PATH, "portraitSmall3.png"))) - -mule:add_skin("Automated Hunter", 3, Sprite.new("MuleSelect4", path.combine(SPRITE_PATH, "select4.png"), 15, 56, 0), -Sprite.new("MulePortrait4", path.combine(SPRITE_PATH, "portrait4.png"), 4), -Sprite.new("MulePortraitSmall4", path.combine(SPRITE_PATH, "portraitSmall4.png"))) - -mule:add_skin("Military Grade", 4, Sprite.new("MuleSelect5", path.combine(SPRITE_PATH, "select5.png"), 15, 56, 0), -Sprite.new("MulePortrait5", path.combine(SPRITE_PATH, "portrait5.png"), 4), -Sprite.new("MulePortraitSmall5", path.combine(SPRITE_PATH, "portraitSmall5.png"))) -]] +mule:add_skin("0", sprite_palette, sprite_palette, sprite_palette) +mule:add_skin("1", sprite_palette1, sprite_palette1, sprite_palette1) +mule:add_skin("2", sprite_palette2, sprite_palette2, sprite_palette2) +mule:add_skin("3", sprite_palette3, sprite_palette3, sprite_palette3) +mule:add_skin("4", sprite_palette4, sprite_palette4, sprite_palette4) Callback.add(mule.on_init, function(actor) actor.sprite_idle_half = Array.new({sprite_idle, sprite_idle_half, 0}) diff --git a/Survivors/nemesisCommando.lua b/Survivors/nemesisCommando.lua index 2e58da20..fb3e14f3 100644 --- a/Survivors/nemesisCommando.lua +++ b/Survivors/nemesisCommando.lua @@ -42,6 +42,12 @@ local sprite_decoy = Sprite.new("NemCommandoDecoy", path.combine(SPRITE_PATH, local sprite_drone_idle = Sprite.new("DronePlayerNemCommandoIdle", path.combine(SPRITE_PATH, "drone_idle.png"), 5, 15, 13) local sprite_drone_shoot = Sprite.new("DronePlayerNemCommandoShoot", path.combine(SPRITE_PATH, "drone_shoot.png"), 5, 33, 13) +local sprite_palette = Sprite.new("NemCommandoPalette", path.combine(SPRITE_PATH, "palette.png")) +local sprite_palette1 = Sprite.new("NemCommandoPalette1", path.combine(SPRITE_PATH, "palette1.png")) +local sprite_palette2 = Sprite.new("NemCommandoPalette2", path.combine(SPRITE_PATH, "palette2.png")) +local sprite_palette3 = Sprite.new("NemCommandoPalette3", path.combine(SPRITE_PATH, "palette3.png")) +local sprite_palette4 = Sprite.new("NemCommandoPalette4", path.combine(SPRITE_PATH, "palette4.png")) + local sprite_skills = Sprite.new("NemCommandoSkills", path.combine(SPRITE_PATH, "skills.png"), 8, 0, 0) local sprite_gash = Sprite.new("NemCommandoGash", path.combine(SPRITE_PATH, "gash.png"), 4, 25, 25) local sprite_dust = Sprite.new("NemCommandoDust", path.combine(SPRITE_PATH, "dust.png"), 3, 21, 12) @@ -141,24 +147,11 @@ nemmando.sprite_loadout_palette = sprite_palette nemmando.select_sound_id = sound_select nemmando.cape_offset = Array.new({0, -8, 0, -5}) ---[[ ---skins -nemmando:add_skin("Mk. II", 1, Sprite.new("NemCommandoSelect2", path.combine(SPRITE_PATH, "select2.png"), 34, 28, 0), -Sprite.new("NemCommandoPortrait2", path.combine(SPRITE_PATH, "portrait2.png"), 3), -Sprite.new("NemCommandoPortraitSmall2", path.combine(SPRITE_PATH, "portraitTiny2.png"))) - -nemmando:add_skin("Ice Blade", 2, Sprite.new("NemCommandoSelect3", path.combine(SPRITE_PATH, "select3.png"), 34, 28, 0), -Sprite.new("NemCommandoPortrait3", path.combine(SPRITE_PATH, "portrait3.png"), 3), -Sprite.new("NemCommandoPortraitSmall3", path.combine(SPRITE_PATH, "portraitTiny3.png"))) - -nemmando:add_skin("Nature's Gift", 3, Sprite.new("NemCommandoSelect4", path.combine(SPRITE_PATH, "select4.png"), 34, 28, 0), -Sprite.new("NemCommandoPortrait4", path.combine(SPRITE_PATH, "portrait4.png"), 3), -Sprite.new("NemCommandoPortraitSmall4", path.combine(SPRITE_PATH, "portraitTiny4.png"))) - -nemmando:add_skin("Callback", 4, Sprite.new("NemCommandoSelect5", path.combine(SPRITE_PATH, "select5.png"), 34, 28, 0), -Sprite.new("NemCommandoPortrait5", path.combine(SPRITE_PATH, "portrait5.png"), 3), -Sprite.new("NemCommandoPortraitSmall5", path.combine(SPRITE_PATH, "portraitTiny5.png"))) -]]-- +nemmando:add_skin("0", sprite_palette, sprite_palette, sprite_palette) +nemmando:add_skin("1", sprite_palette1, sprite_palette1, sprite_palette1) +nemmando:add_skin("2", sprite_palette2, sprite_palette2, sprite_palette2) +nemmando:add_skin("3", sprite_palette3, sprite_palette3, sprite_palette3) +nemmando:add_skin("4", sprite_palette4, sprite_palette4, sprite_palette4) -- utility function for updating his basic sprites depending on if his last skill was the gun local function nemmando_update_sprites(actor, has_gun) diff --git a/Survivors/nemesisMercenary.lua b/Survivors/nemesisMercenary.lua index 33fdedc2..08105f5e 100644 --- a/Survivors/nemesisMercenary.lua +++ b/Survivors/nemesisMercenary.lua @@ -1,7 +1,7 @@ local SPRITE_PATH = path.combine(PATH, "Sprites/Survivors/NemesisMercenary") local SOUND_PATH = path.combine(PATH, "Sounds/Survivors/NemesisMercenary") -local sprite_loadout = Sprite.new("NemesisMercenarySelect", path.combine(SPRITE_PATH, "select.png"), 4, 28, 0) +local sprite_loadout = Sprite.new("NemesisMercenarySelect", path.combine(SPRITE_PATH, "select.png"), 20, 28, 0) local sprite_portrait = Sprite.new("NemesisMercenaryPortrait", path.combine(SPRITE_PATH, "portrait.png"), 3) local sprite_portrait_small = Sprite.new("NemesisMercenaryPortraitSmall", path.combine(SPRITE_PATH, "portraitSmall.png")) local sprite_skills = Sprite.new("NemesisMercenarySkills", path.combine(SPRITE_PATH, "skills.png"), 5) @@ -20,7 +20,12 @@ local sprite_death = Sprite.new("NemesisMercenaryDeath", path.combine(SPRITE_P local sprite_decoy = Sprite.new("NemesisMercenaryDecoy", path.combine(SPRITE_PATH, "decoy.png"), 1, 22, 18) local sprite_drone_idle = Sprite.new("DronePlayerNemesisMercenaryIdle", path.combine(SPRITE_PATH, "drone_idle.png"), 5, 22, 13) local sprite_drone_shoot = Sprite.new("DronePlayerNemesisMercenaryShoot", path.combine(SPRITE_PATH, "drone_shoot.png"), 5, 30, 12) + local sprite_palette = Sprite.new("NemesisMercenaryPalette", path.combine(SPRITE_PATH, "palette.png")) +local sprite_palette1 = Sprite.new("NemesisMercenaryPalette1", path.combine(SPRITE_PATH, "palette1.png")) +local sprite_palette2 = Sprite.new("NemesisMercenaryPalette2", path.combine(SPRITE_PATH, "palette2.png")) +local sprite_palette3 = Sprite.new("NemesisMercenaryPalette3", path.combine(SPRITE_PATH, "palette3.png")) +local sprite_palette4 = Sprite.new("NemesisMercenaryPalette4", path.combine(SPRITE_PATH, "palette4.png")) local sprite_shoot1_1a = Sprite.new("NemesisMercenaryShoot1_1a", path.combine(SPRITE_PATH, "shoot1_1a.png"), 5, 17, 37) local sprite_shoot1_2a = Sprite.new("NemesisMercenaryShoot1_2a", path.combine(SPRITE_PATH, "shoot1_2a.png"), 5, 21, 16) @@ -104,9 +109,11 @@ nemmerc.sprite_idle = sprite_idle -- used by skin systen for idle sprite nemmerc.sprite_title = sprite_walk -- also used by skin system for walk sprite nemmerc.sprite_credits = sprite_credits -nemmerc.sprite_palette = sprite_palette -nemmerc.sprite_portrait_palette = sprite_palette -nemmerc.sprite_loadout_palette = sprite_palette +nemmerc:add_skin("0", sprite_palette, sprite_palette, sprite_palette) +nemmerc:add_skin("1", sprite_palette1, sprite_palette1, sprite_palette1) +nemmerc:add_skin("2", sprite_palette2, sprite_palette2, sprite_palette2) +nemmerc:add_skin("3", sprite_palette3, sprite_palette3, sprite_palette3) +nemmerc:add_skin("4", sprite_palette4, sprite_palette4, sprite_palette4) --nemmerc.select_sound_id = sound_select nemmerc.cape_offset = Array.new({-3, -8, 0, -5}) @@ -304,7 +311,7 @@ local utility = nemmerc:get_skills(Skill.Slot.UTILITY)[1] local special = nemmerc:get_skills(Skill.Slot.SPECIAL)[1] local specialS = Skill.new("nemesisMercenaryVBoosted") --- Lascerate +-- Lacerate primary.sprite = sprite_skills primary.subimage = 0 primary.damage = 0.8 @@ -681,6 +688,7 @@ Callback.add(stateUtility.on_get_interrupt_priority, function(actor, data) end) DamageDodge.add(function(api, current_dodge) + if not api.hit then return end if not Instance.exists(api.hit) then return end local data = Instance.get_data(api.hit) @@ -987,6 +995,8 @@ Callback.add(stateSpecial.on_step, function(actor, data) if Net.online then devitalize_packet:send_to_all(actor, data.slash) end + else + data.slash = 1 -- set this as a backup to prevent crashes in high ping multiplayer end end diff --git a/Survivors/technician.lua b/Survivors/technician.lua index eb0f2aa7..47db1cb7 100644 --- a/Survivors/technician.lua +++ b/Survivors/technician.lua @@ -1,3 +1,7 @@ +-- die +if HOTLOADING then return end +if Settings.enable_beta == false then return end -- only enable if beta is enabled + local SPRITE_PATH = path.combine(PATH, "Sprites/Survivors/Technician") local SOUND_PATH = path.combine(PATH, "Sounds/Survivors/Technician") diff --git a/main.lua b/main.lua index 237bec2f..456e4814 100644 --- a/main.lua +++ b/main.lua @@ -12,6 +12,7 @@ Options = ModOptions.new("ssr") -- or config options are missing due to a new update adding more) Settings = { + enable_beta = false, title_replacement = true, chirrsmas = 0, } diff --git a/manifest.json b/manifest.json index 4e4ee88a..b21b6d4a 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,6 @@ { "name": "StarstormReturns", - "version_number": "0.1.7", + "version_number": "0.1.8", "website_url": "https://discord.gg/fGShMVEayr", "description": "A reimagining of Starstorm 1, adding new survivors, items, artifacts, stages, enemies and much more to Risk of Rain Returns.", "dependencies": [