From e04f53c5d072c1e91c8b1618bde81dea73ed2fd3 Mon Sep 17 00:00:00 2001 From: Ashley Baldock Date: Fri, 7 Jul 2023 00:26:04 +0100 Subject: [PATCH 1/5] Beta --- .eslintignore | 4 +- .gitignore | 1 + README.md | 34 +- package.json | 3 +- .../ui_gfx/gun_actions/2_cards_on_death.png | Bin .../ui_gfx/gun_actions/3_cards_on_death.png | Bin .../data/ui_gfx/gun_actions/_unidentified.png | Bin .../ui_gfx/gun_actions/accelerating_shot.png | Bin public/data/ui_gfx/gun_actions/acid.png | Bin public/data/ui_gfx/gun_actions/acid_trail.png | Bin .../gun_actions/acid_trail_unidentified.png | Bin public/data/ui_gfx/gun_actions/acidshot.png | Bin .../gun_actions/acidshot_unidentified.png | Bin public/data/ui_gfx/gun_actions/air_bullet.png | Bin .../gun_actions/air_bullet_unidentified.png | Bin .../data/ui_gfx/gun_actions/alcohol_blast.png | Bin public/data/ui_gfx/gun_actions/all_acid.png | Bin .../ui_gfx/gun_actions/all_blackholes.png | Bin .../ui_gfx/gun_actions/all_deathcrosses.png | Bin public/data/ui_gfx/gun_actions/all_discs.png | Bin public/data/ui_gfx/gun_actions/all_nukes.png | Bin .../data/ui_gfx/gun_actions/all_rockets.png | Bin public/data/ui_gfx/gun_actions/all_spells.png | Bin public/data/ui_gfx/gun_actions/alpha.png | Bin .../data/ui_gfx/gun_actions/anti_homing.png | Bin 0 -> 392 bytes .../data/ui_gfx/gun_actions/arc_electric.png | Bin .../gun_actions/arc_electric_unidentified.png | Bin public/data/ui_gfx/gun_actions/arc_fire.png | Bin .../gun_actions/arc_fire_unidentified.png | Bin .../data/ui_gfx/gun_actions/arc_gunpowder.png | Bin public/data/ui_gfx/gun_actions/arc_poison.png | Bin .../data/ui_gfx/gun_actions/area_damage.png | Bin public/data/ui_gfx/gun_actions/arrow.png | Bin .../ui_gfx/gun_actions/arrow_unidentified.png | Bin public/data/ui_gfx/gun_actions/autoaim.png | Bin .../data/ui_gfx/gun_actions/avoiding_arc.png | Bin public/data/ui_gfx/gun_actions/baab_all.png | Bin public/data/ui_gfx/gun_actions/baab_empty.png | Bin public/data/ui_gfx/gun_actions/baab_is.png | Bin public/data/ui_gfx/gun_actions/baab_lava.png | Bin public/data/ui_gfx/gun_actions/baab_love.png | Bin public/data/ui_gfx/gun_actions/baab_poop.png | Bin public/data/ui_gfx/gun_actions/baab_water.png | Bin .../ui_gfx/gun_actions/ball_lightning.png | Bin public/data/ui_gfx/gun_actions/bee.png | Bin public/data/ui_gfx/gun_actions/berserk.png | Bin .../data/ui_gfx/gun_actions/berserk_field.png | Bin .../berserk_field_unidentified.png | Bin .../ui_gfx/gun_actions/big_magic_shield.png | Bin public/data/ui_gfx/gun_actions/black_hole.png | Bin .../ui_gfx/gun_actions/black_hole_big.png | Bin .../black_hole_big_unidentified.png | Bin .../ui_gfx/gun_actions/black_hole_giga.png | Bin .../ui_gfx/gun_actions/black_hole_timer.png | Bin .../gun_actions/black_hole_unidentified.png | Bin public/data/ui_gfx/gun_actions/blindness.png | Bin .../data/ui_gfx/gun_actions/blood_magic.png | Bin .../data/ui_gfx/gun_actions/blood_punch.png | Bin .../data/ui_gfx/gun_actions/blood_to_acid.png | Bin .../data/ui_gfx/gun_actions/blood_trail.png | Bin public/data/ui_gfx/gun_actions/bloodlust.png | Bin .../data/ui_gfx/gun_actions/bloodtentacle.png | Bin public/data/ui_gfx/gun_actions/bloomshot.png | Bin public/data/ui_gfx/gun_actions/bomb.png | Bin public/data/ui_gfx/gun_actions/bomb_cart.png | Bin public/data/ui_gfx/gun_actions/bomb_holy.png | Bin .../ui_gfx/gun_actions/bomb_holy_giga.png | Bin .../data/ui_gfx/gun_actions/bomb_trailer.png | Bin .../ui_gfx/gun_actions/bomb_unidentified.png | Bin public/data/ui_gfx/gun_actions/bounce.png | Bin .../ui_gfx/gun_actions/bounce_explosion.png | Bin .../data/ui_gfx/gun_actions/bounce_hole.png | Bin 0 -> 169 bytes .../data/ui_gfx/gun_actions/bounce_larpa.png | Bin .../data/ui_gfx/gun_actions/bounce_laser.png | Bin .../gun_actions/bounce_laser_emitter.png | Bin .../ui_gfx/gun_actions/bounce_lightning.png | Bin 0 -> 266 bytes .../gun_actions/bounce_small_explosion.png | Bin 0 -> 256 bytes .../data/ui_gfx/gun_actions/bounce_spark.png | Bin .../gun_actions/bounce_unidentified.png | Bin public/data/ui_gfx/gun_actions/bouncy_orb.png | Bin .../ui_gfx/gun_actions/bouncy_orb_timer.png | Bin .../ui_gfx/gun_actions/bouncy_orb_timer_2.png | Bin .../data/ui_gfx/gun_actions/broken_spell.png | Bin public/data/ui_gfx/gun_actions/bubbleshot.png | Bin .../ui_gfx/gun_actions/bubbleshot_trigger.png | Bin .../bubbleshot_trigger_unidentified.png | Bin .../gun_actions/bubbleshot_unidentified.png | Bin public/data/ui_gfx/gun_actions/buckshot.png | Bin .../gun_actions/building_back_wall_rock.png | Bin .../gun_actions/building_board_wood.png | Bin .../building_physics_templedoor.png | Bin .../gun_actions/building_pressure_plate.png | Bin public/data/ui_gfx/gun_actions/bullet.png | Bin .../data/ui_gfx/gun_actions/bullet_timer.png | Bin .../gun_actions/bullet_timer_unidentified.png | Bin .../ui_gfx/gun_actions/bullet_trigger.png | Bin .../bullet_trigger_unidentified.png | Bin .../gun_actions/bullet_unidentified.png | Bin public/data/ui_gfx/gun_actions/burn_trail.png | Bin .../gun_actions/burn_trail_unidentified.png | Bin .../ui_gfx/gun_actions/burning_critical.png | Bin public/data/ui_gfx/gun_actions/burst_2.png | Bin .../gun_actions/burst_2_unidentified.png | Bin public/data/ui_gfx/gun_actions/burst_3.png | Bin .../gun_actions/burst_3_unidentified.png | Bin public/data/ui_gfx/gun_actions/burst_4.png | Bin .../gun_actions/burst_4_unidentified.png | Bin public/data/ui_gfx/gun_actions/burst_8.png | Bin public/data/ui_gfx/gun_actions/burst_x.png | Bin .../data/ui_gfx/gun_actions/caster_cast.png | Bin 0 -> 165 bytes public/data/ui_gfx/gun_actions/cement.png | Bin public/data/ui_gfx/gun_actions/chain_bolt.png | Bin public/data/ui_gfx/gun_actions/chain_shot.png | Bin public/data/ui_gfx/gun_actions/chainsaw.png | Bin .../gun_actions/chainsaw_unidentified.png | Bin .../gun_actions/chaos_polymorph_field.png | Bin .../chaos_polymorph_field_unidentified.png | Bin .../data/ui_gfx/gun_actions/chaotic_arc.png | Bin public/data/ui_gfx/gun_actions/charm.png | Bin .../data/ui_gfx/gun_actions/charm_field.png | Bin .../ui_gfx/gun_actions/charm_on_burning.png | Bin .../ui_gfx/gun_actions/charm_on_toxic.png | Bin .../data/ui_gfx/gun_actions/circle_acid.png | Bin .../data/ui_gfx/gun_actions/circle_fire.png | Bin public/data/ui_gfx/gun_actions/circle_oil.png | Bin .../data/ui_gfx/gun_actions/circle_shape.png | Bin .../gun_actions/circle_shape_unidentified.png | Bin .../data/ui_gfx/gun_actions/circle_water.png | Bin .../data/ui_gfx/gun_actions/cleaning_tool.png | Bin .../data/ui_gfx/gun_actions/clipping_shot.png | Bin public/data/ui_gfx/gun_actions/cloud_acid.png | Bin .../data/ui_gfx/gun_actions/cloud_blood.png | Bin public/data/ui_gfx/gun_actions/cloud_oil.png | Bin .../data/ui_gfx/gun_actions/cloud_thunder.png | Bin .../data/ui_gfx/gun_actions/cloud_water.png | Bin .../gun_actions/cloud_water_unidentified.png | Bin .../data/ui_gfx/gun_actions/colour_blue.png | Bin .../data/ui_gfx/gun_actions/colour_green.png | Bin .../data/ui_gfx/gun_actions/colour_invis.png | Bin .../data/ui_gfx/gun_actions/colour_orange.png | Bin .../data/ui_gfx/gun_actions/colour_purple.png | Bin .../ui_gfx/gun_actions/colour_rainbow.png | Bin public/data/ui_gfx/gun_actions/colour_red.png | Bin .../data/ui_gfx/gun_actions/colour_yellow.png | Bin .../ui_gfx/gun_actions/commander_bullet.png | Bin .../ui_gfx/gun_actions/critical_blood.png | Bin .../data/ui_gfx/gun_actions/critical_hit.png | Bin .../data/ui_gfx/gun_actions/critical_oil.png | Bin .../ui_gfx/gun_actions/critical_water.png | Bin .../data/ui_gfx/gun_actions/critical_wet.png | Bin .../ui_gfx/gun_actions/crumbling_earth.png | Bin .../crumbling_earth_projectile.png | Bin public/data/ui_gfx/gun_actions/curse.png | Bin .../gun_actions/curse_wither_electricity.png | Bin .../gun_actions/curse_wither_explosion.png | Bin .../ui_gfx/gun_actions/curse_wither_melee.png | Bin .../gun_actions/curse_wither_projectile.png | Bin public/data/ui_gfx/gun_actions/cursed_orb.png | Bin public/data/ui_gfx/gun_actions/damage.png | Bin .../ui_gfx/gun_actions/damage_forever.png | Bin .../ui_gfx/gun_actions/damage_friendly.png | Bin .../damage_friendly_unidentified.png | Bin .../data/ui_gfx/gun_actions/damage_random.png | Bin .../gun_actions/damage_unidentified.png | Bin public/data/ui_gfx/gun_actions/damage_x2.png | Bin .../gun_actions/damage_x2_unidentified.png | Bin public/data/ui_gfx/gun_actions/damage_x5.png | Bin public/data/ui_gfx/gun_actions/darkflame.png | Bin .../gun_actions/darkflame_unidentified.png | Bin .../data/ui_gfx/gun_actions/death_cross.png | Bin .../ui_gfx/gun_actions/death_cross_big.png | Bin .../gun_actions/death_cross_unidentified.png | Bin .../data/ui_gfx/gun_actions/death_trigger.png | Bin .../ui_gfx/gun_actions/decelerating_shot.png | Bin public/data/ui_gfx/gun_actions/decoy.png | Bin .../data/ui_gfx/gun_actions/decoy_trigger.png | Bin .../decoy_trigger_unidentified.png | Bin .../ui_gfx/gun_actions/decoy_unidentified.png | Bin .../data/ui_gfx/gun_actions/delayed_spell.png | Bin .../data/ui_gfx/gun_actions/destruction.png | Bin public/data/ui_gfx/gun_actions/digger.png | Bin .../gun_actions/digger_unidentified.png | Bin .../data/ui_gfx/gun_actions/disc_bullet.png | Bin .../ui_gfx/gun_actions/disc_bullet_big.png | Bin .../gun_actions/disc_bullet_unidentified.png | Bin public/data/ui_gfx/gun_actions/divide_10.png | Bin public/data/ui_gfx/gun_actions/divide_2.png | Bin public/data/ui_gfx/gun_actions/divide_3.png | Bin public/data/ui_gfx/gun_actions/divide_4.png | Bin .../data/ui_gfx/gun_actions/draw_3_random.png | Bin .../data/ui_gfx/gun_actions/draw_random.png | Bin .../ui_gfx/gun_actions/draw_random_x3.png | Bin public/data/ui_gfx/gun_actions/drone.png | Bin public/data/ui_gfx/gun_actions/duck.png | Bin public/data/ui_gfx/gun_actions/duck_2.png | Bin public/data/ui_gfx/gun_actions/duplicate.png | Bin .../ui_gfx/gun_actions/duplicate_on_death.png | Bin public/data/ui_gfx/gun_actions/dynamite.png | Bin .../gun_actions/dynamite_unidentified.png | Bin .../ui_gfx/gun_actions/electric_charge.png | Bin .../electric_charge_unidentified.png | Bin .../gun_actions/electrocution_field.png | Bin .../electrocution_field_unidentified.png | Bin public/data/ui_gfx/gun_actions/empty.png | Bin .../data/ui_gfx/gun_actions/energy_shield.png | Bin .../gun_actions/energy_shield_sector.png | Bin .../energy_shield_sector_unidentified.png | Bin .../ui_gfx/gun_actions/energy_shield_shot.png | Bin .../energy_shield_unidentified.png | Bin public/data/ui_gfx/gun_actions/enlarge.png | Bin .../ui_gfx/gun_actions/essence_to_power.png | Bin .../data/ui_gfx/gun_actions/expanding_orb.png | Bin .../ui_gfx/gun_actions/explode_on_alcohol.png | Bin .../gun_actions/explode_on_alcohol_giga.png | Bin .../ui_gfx/gun_actions/explode_on_slime.png | Bin .../gun_actions/explode_on_slime_giga.png | Bin .../ui_gfx/gun_actions/exploding_deer.png | Bin .../exploding_deer_unidentified.png | Bin public/data/ui_gfx/gun_actions/explosion.png | Bin .../ui_gfx/gun_actions/explosion_light.png | Bin .../ui_gfx/gun_actions/explosion_remove.png | Bin .../ui_gfx/gun_actions/explosion_tiny.png | Bin .../gun_actions/explosion_unidentified.png | Bin .../gun_actions/explosive_projectile.png | Bin .../explosive_projectile_unidentified.png | Bin public/data/ui_gfx/gun_actions/fire_blast.png | Bin .../gun_actions/fire_blast_unidentified.png | Bin public/data/ui_gfx/gun_actions/fire_trail.png | Bin .../gun_actions/fire_trail_unidentified.png | Bin public/data/ui_gfx/gun_actions/fireball.png | Bin .../data/ui_gfx/gun_actions/fireball_ray.png | Bin .../ui_gfx/gun_actions/fireball_ray_enemy.png | Bin .../ui_gfx/gun_actions/fireball_ray_line.png | Bin .../gun_actions/fireball_unidentified.png | Bin public/data/ui_gfx/gun_actions/firebomb.png | Bin .../gun_actions/firebomb_unidentified.png | Bin public/data/ui_gfx/gun_actions/fireworks.png | Bin public/data/ui_gfx/gun_actions/fish.png | Bin 0 -> 270 bytes public/data/ui_gfx/gun_actions/fizzle.png | Bin .../data/ui_gfx/gun_actions/flamethrower.png | Bin .../gun_actions/flamethrower_unidentified.png | Bin .../data/ui_gfx/gun_actions/floating_arc.png | Bin public/data/ui_gfx/gun_actions/flowershot.png | Bin .../data/ui_gfx/gun_actions/fly_downwards.png | Bin .../data/ui_gfx/gun_actions/fly_upwards.png | Bin public/data/ui_gfx/gun_actions/freeze.png | Bin public/data/ui_gfx/gun_actions/freeze_alt.png | Bin .../data/ui_gfx/gun_actions/freeze_field.png | Bin .../gun_actions/freeze_field_unidentified.png | Bin .../gun_actions/freeze_unidentified.png | Bin .../data/ui_gfx/gun_actions/freezing_gaze.png | Bin public/data/ui_gfx/gun_actions/friend_fly.png | Bin public/data/ui_gfx/gun_actions/gamma.png | Bin .../gun_actions/generate_random_deck_5.png | Bin .../data/ui_gfx/gun_actions/glitter_bomb.png | Bin .../data/ui_gfx/gun_actions/glowing_bolt.png | Bin public/data/ui_gfx/gun_actions/glue_shot.png | Bin .../data/ui_gfx/gun_actions/golden_punch.png | Bin public/data/ui_gfx/gun_actions/gore.png | Bin public/data/ui_gfx/gun_actions/gravity.png | Bin .../data/ui_gfx/gun_actions/gravity_anti.png | Bin .../gun_actions/gravity_field_enemy.png | Bin public/data/ui_gfx/gun_actions/grenade.png | Bin .../data/ui_gfx/gun_actions/grenade_anti.png | Bin .../data/ui_gfx/gun_actions/grenade_large.png | Bin .../ui_gfx/gun_actions/grenade_tier_2.png | Bin .../ui_gfx/gun_actions/grenade_tier_3.png | Bin .../ui_gfx/gun_actions/grenade_trigger.png | Bin .../grenade_trigger_unidentified.png | Bin .../gun_actions/grenade_unidentified.png | Bin public/data/ui_gfx/gun_actions/gun.png | Bin .../ui_gfx/gun_actions/gunpowder_trail.png | Bin .../data/ui_gfx/gun_actions/heal_bullet.png | Bin .../gun_actions/heal_bullet_unidentified.png | Bin .../data/ui_gfx/gun_actions/heavy_bullet.png | Bin .../ui_gfx/gun_actions/heavy_bullet_timer.png | Bin .../heavy_bullet_timer_unidentified.png | Bin .../gun_actions/heavy_bullet_trigger.png | Bin .../heavy_bullet_trigger_unidentified.png | Bin .../gun_actions/heavy_bullet_unidentified.png | Bin public/data/ui_gfx/gun_actions/heavy_shot.png | Bin .../gun_actions/heavy_shot_unidentified.png | Bin .../data/ui_gfx/gun_actions/heavy_spread.png | Bin .../ui_gfx/gun_actions/high_explosive.png | Bin public/data/ui_gfx/gun_actions/homing.png | Bin .../gun_actions/homing_accelerating.png | Bin .../data/ui_gfx/gun_actions/homing_area.png | Bin .../data/ui_gfx/gun_actions/homing_cursor.png | Bin .../ui_gfx/gun_actions/homing_projectile.png | Bin .../data/ui_gfx/gun_actions/homing_rotate.png | Bin .../ui_gfx/gun_actions/homing_shooter.png | Bin .../data/ui_gfx/gun_actions/homing_short.png | Bin .../gun_actions/homing_unidentified.png | Bin .../data/ui_gfx/gun_actions/homing_wand.png | Bin 0 -> 307 bytes public/data/ui_gfx/gun_actions/hook.png | Bin 0 -> 139 bytes .../ui_gfx/gun_actions/horizontal_arc.png | Bin public/data/ui_gfx/gun_actions/i-shape.png | Bin public/data/ui_gfx/gun_actions/i_shape.png | Bin .../gun_actions/i_shape_unidentified.png | Bin public/data/ui_gfx/gun_actions/iceball.png | Bin public/data/ui_gfx/gun_actions/icecircle.png | Bin public/data/ui_gfx/gun_actions/icethrower.png | Bin public/data/ui_gfx/gun_actions/if_else.png | Bin public/data/ui_gfx/gun_actions/if_end.png | Bin public/data/ui_gfx/gun_actions/if_enemy.png | Bin public/data/ui_gfx/gun_actions/if_half.png | Bin public/data/ui_gfx/gun_actions/if_hp.png | Bin .../data/ui_gfx/gun_actions/if_projectile.png | Bin .../data/ui_gfx/gun_actions/inebriation.png | Bin .../data/ui_gfx/gun_actions/infestation.png | Bin public/data/ui_gfx/gun_actions/kantele_a.png | Bin public/data/ui_gfx/gun_actions/kantele_a2.png | Bin public/data/ui_gfx/gun_actions/kantele_b.png | Bin public/data/ui_gfx/gun_actions/kantele_c.png | Bin public/data/ui_gfx/gun_actions/kantele_d.png | Bin .../data/ui_gfx/gun_actions/kantele_dis.png | Bin public/data/ui_gfx/gun_actions/kantele_e.png | Bin public/data/ui_gfx/gun_actions/kantele_f.png | Bin public/data/ui_gfx/gun_actions/kantele_g.png | Bin .../ui_gfx/gun_actions/kantele_gsharp.png | Bin public/data/ui_gfx/gun_actions/keyshot.png | Bin public/data/ui_gfx/gun_actions/knife.png | Bin public/data/ui_gfx/gun_actions/knockback.png | Bin .../gun_actions/knockback_unidentified.png | Bin public/data/ui_gfx/gun_actions/lance.png | Bin .../ui_gfx/gun_actions/lance_unidentified.png | Bin .../data/ui_gfx/gun_actions/larpa_chaos.png | Bin .../data/ui_gfx/gun_actions/larpa_chaos_2.png | Bin .../data/ui_gfx/gun_actions/larpa_death.png | Bin .../ui_gfx/gun_actions/larpa_downwards.png | Bin .../data/ui_gfx/gun_actions/larpa_upwards.png | Bin public/data/ui_gfx/gun_actions/laser.png | Bin .../data/ui_gfx/gun_actions/laser_emitter.png | Bin .../gun_actions/laser_emitter_cutter.png | Bin .../ui_gfx/gun_actions/laser_emitter_four.png | Bin .../ui_gfx/gun_actions/laser_emitter_ray.png | Bin .../gun_actions/laser_emitter_wider.png | Bin .../ui_gfx/gun_actions/laser_unidentified.png | Bin .../data/ui_gfx/gun_actions/lava_to_blood.png | Bin .../ui_gfx/gun_actions/levitation_field.png | Bin .../levitation_field_unidentified.png | Bin .../gun_actions/levitation_projectile.png | Bin public/data/ui_gfx/gun_actions/lifetime.png | Bin .../data/ui_gfx/gun_actions/lifetime_down.png | Bin .../ui_gfx/gun_actions/lifetime_infinite.png | Bin public/data/ui_gfx/gun_actions/light.png | Bin .../data/ui_gfx/gun_actions/light_bullet.png | Bin .../ui_gfx/gun_actions/light_bullet_timer.png | Bin .../light_bullet_timer_unidentified.png | Bin .../gun_actions/light_bullet_trigger.png | Bin .../gun_actions/light_bullet_trigger_2.png | Bin .../light_bullet_trigger_2_unidentified.png | Bin .../light_bullet_trigger_timer.png | Bin .../light_bullet_trigger_unidentified.png | Bin .../gun_actions/light_bullet_unidentified.png | Bin public/data/ui_gfx/gun_actions/light_shot.png | Bin public/data/ui_gfx/gun_actions/lightning.png | Bin .../data/ui_gfx/gun_actions/lightning_ray.png | Bin .../gun_actions/lightning_ray_enemy.png | Bin .../gun_actions/lightning_unidentified.png | Bin public/data/ui_gfx/gun_actions/line_arc.png | Bin .../gun_actions/liquid_to_explosion.png | Bin .../ui_gfx/gun_actions/long_distance_cast.png | Bin .../ui_gfx/gun_actions/luminous_drill.png | Bin .../gun_actions/luminous_drill_timer.png | Bin .../ui_gfx/gun_actions/machinegun_bullet.png | Bin .../data/ui_gfx/gun_actions/magic_shield.png | Bin public/data/ui_gfx/gun_actions/mana.png | Bin .../data/ui_gfx/gun_actions/mana_recharge.png | Bin .../data/ui_gfx/gun_actions/material_acid.png | Bin .../material_acid_unidentified.png | Bin .../ui_gfx/gun_actions/material_blood.png | Bin .../material_blood_unidentified.png | Bin .../ui_gfx/gun_actions/material_cement.png | Bin .../ui_gfx/gun_actions/material_debug.png | Bin .../data/ui_gfx/gun_actions/material_dirt.png | Bin .../material_gunpowder_explosive.png | Bin .../data/ui_gfx/gun_actions/material_lava.png | Bin .../ui_gfx/gun_actions/material_liquid.png | Bin .../data/ui_gfx/gun_actions/material_oil.png | Bin .../gun_actions/material_oil_unidentified.png | Bin .../ui_gfx/gun_actions/material_water.png | Bin .../material_water_unidentified.png | Bin .../data/ui_gfx/gun_actions/matter_eater.png | Bin public/data/ui_gfx/gun_actions/megalaser.png | Bin public/data/ui_gfx/gun_actions/meteor.png | Bin .../data/ui_gfx/gun_actions/meteor_rain.png | Bin .../gun_actions/meteor_unidentified.png | Bin public/data/ui_gfx/gun_actions/midas.png | Bin public/data/ui_gfx/gun_actions/mine.png | Bin .../ui_gfx/gun_actions/mine_death_trigger.png | Bin .../mine_death_trigger_unidentified.png | Bin .../ui_gfx/gun_actions/mine_unidentified.png | Bin public/data/ui_gfx/gun_actions/misfire.png | Bin .../ui_gfx/gun_actions/misfire_critical.png | Bin public/data/ui_gfx/gun_actions/missile.png | Bin .../data/ui_gfx/gun_actions/mist_alcohol.png | Bin public/data/ui_gfx/gun_actions/mist_blood.png | Bin .../ui_gfx/gun_actions/mist_radioactive.png | Bin public/data/ui_gfx/gun_actions/mist_slime.png | Bin public/data/ui_gfx/gun_actions/mu.png | Bin public/data/ui_gfx/gun_actions/necromancy.png | Bin public/data/ui_gfx/gun_actions/nolla.png | Bin public/data/ui_gfx/gun_actions/nuke.png | Bin public/data/ui_gfx/gun_actions/nuke_giga.png | Bin .../ui_gfx/gun_actions/nuke_unidentified.png | Bin public/data/ui_gfx/gun_actions/ocarina_a.png | Bin public/data/ui_gfx/gun_actions/ocarina_a2.png | Bin public/data/ui_gfx/gun_actions/ocarina_b.png | Bin public/data/ui_gfx/gun_actions/ocarina_c.png | Bin public/data/ui_gfx/gun_actions/ocarina_d.png | Bin public/data/ui_gfx/gun_actions/ocarina_e.png | Bin public/data/ui_gfx/gun_actions/ocarina_f.png | Bin .../ui_gfx/gun_actions/ocarina_gsharp.png | Bin public/data/ui_gfx/gun_actions/oil_trail.png | Bin .../gun_actions/oil_trail_unindentified.png | Bin .../ui_gfx/gun_actions/oiled_4x_damage.png | Bin .../data/ui_gfx/gun_actions/oiled_freeze.png | Bin public/data/ui_gfx/gun_actions/omega.png | Bin .../ui_gfx/gun_actions/omega_disc_bullet.png | Bin .../data/ui_gfx/gun_actions/orbit_discs.png | Bin .../ui_gfx/gun_actions/orbit_fireballs.png | Bin .../data/ui_gfx/gun_actions/orbit_larpa.png | Bin .../data/ui_gfx/gun_actions/orbit_lasers.png | Bin .../data/ui_gfx/gun_actions/orbit_nukes.png | Bin public/data/ui_gfx/gun_actions/orbit_shot.png | Bin public/data/ui_gfx/gun_actions/pebble.png | Bin .../gun_actions/pebble_unidentified.png | Bin .../ui_gfx/gun_actions/penetrate_walls.png | Bin .../ui_gfx/gun_actions/pentagram_shape.png | Bin .../pentagram_shape_unidentified.png | Bin public/data/ui_gfx/gun_actions/petrify.png | Bin .../data/ui_gfx/gun_actions/phantomshot_a.png | Bin .../data/ui_gfx/gun_actions/phantomshot_b.png | Bin .../data/ui_gfx/gun_actions/phasing_arc.png | Bin public/data/ui_gfx/gun_actions/phi.png | Bin .../data/ui_gfx/gun_actions/piercing_shot.png | Bin .../data/ui_gfx/gun_actions/pingpong_path.png | Bin public/data/ui_gfx/gun_actions/pink_orb.png | Bin public/data/ui_gfx/gun_actions/pipe_bomb.png | Bin .../gun_actions/pipe_bomb_death_trigger.png | Bin .../pipe_bomb_death_trigger_unidentified.png | Bin .../gun_actions/pipe_bomb_detonator.png | Bin .../pipe_bomb_detonator_unidentified.png | Bin .../gun_actions/pipe_bomb_unidentified.png | Bin .../data/ui_gfx/gun_actions/plasma_flare.png | Bin .../data/ui_gfx/gun_actions/poison_blast.png | Bin .../gun_actions/poison_blast_unidentified.png | Bin .../data/ui_gfx/gun_actions/poison_trail.png | Bin .../gun_actions/poison_trail_unidentified.png | Bin public/data/ui_gfx/gun_actions/pollen.png | Bin public/data/ui_gfx/gun_actions/polymorph.png | Bin .../ui_gfx/gun_actions/polymorph_field.png | Bin .../polymorph_field_unidentified.png | Bin public/data/ui_gfx/gun_actions/poo_trail.png | Bin .../data/ui_gfx/gun_actions/powerdigger.png | Bin .../gun_actions/powerdigger_unidentified.png | Bin .../gun_actions/projectile_gravity_field.png | Bin .../gun_actions/projectile_thunder_field.png | Bin .../projectile_transmutation_field.png | Bin .../data/ui_gfx/gun_actions/propane_tank.png | Bin .../gun_actions/purple_explosion_field.png | Bin .../data/ui_gfx/gun_actions/quantum_split.png | Bin .../data/ui_gfx/gun_actions/rainbow_trail.png | Bin .../ui_gfx/gun_actions/random_explosion.png | Bin .../ui_gfx/gun_actions/random_modifier.png | Bin .../ui_gfx/gun_actions/random_projectile.png | Bin .../data/ui_gfx/gun_actions/random_spell.png | Bin .../gun_actions/random_static_projectile.png | Bin public/data/ui_gfx/gun_actions/recharge.png | Bin public/data/ui_gfx/gun_actions/recoil.png | Bin .../data/ui_gfx/gun_actions/recoil_damper.png | Bin .../recoil_damper_unidentified.png | Bin .../gun_actions/recoil_unidentified.png | Bin .../ui_gfx/gun_actions/regeneration_field.png | Bin .../regeneration_field_unidentified.png | Bin .../data/ui_gfx/gun_actions/remove_bounce.png | Bin public/data/ui_gfx/gun_actions/reset.png | Bin public/data/ui_gfx/gun_actions/rocket.png | Bin .../ui_gfx/gun_actions/rocket_downwards.png | Bin .../ui_gfx/gun_actions/rocket_octagon.png | Bin .../data/ui_gfx/gun_actions/rocket_tier_2.png | Bin .../data/ui_gfx/gun_actions/rocket_tier_3.png | Bin .../gun_actions/rocket_unidentified.png | Bin .../data/ui_gfx/gun_actions/rubber_ball.png | Bin .../ui_gfx/gun_actions/rubber_ball_timer.png | Bin .../gun_actions/rubber_ball_trigger.png | Bin .../gun_actions/rubber_ball_unidentified.png | Bin public/data/ui_gfx/gun_actions/scatter_2.png | Bin .../gun_actions/scatter_2_unidentified.png | Bin public/data/ui_gfx/gun_actions/scatter_3.png | Bin .../gun_actions/scatter_3_unidentified.png | Bin public/data/ui_gfx/gun_actions/scatter_4.png | Bin .../gun_actions/scatter_4_unidentified.png | Bin .../data/ui_gfx/gun_actions/scattershot.png | Bin public/data/ui_gfx/gun_actions/sea_acid.png | Bin .../data/ui_gfx/gun_actions/sea_acid_gas.png | Bin .../gun_actions/sea_acid_unidentified.png | Bin .../data/ui_gfx/gun_actions/sea_alcohol.png | Bin public/data/ui_gfx/gun_actions/sea_lava.png | Bin .../gun_actions/sea_lava_unidentified.png | Bin public/data/ui_gfx/gun_actions/sea_oil.png | Bin .../gun_actions/sea_oil_unidentified.png | Bin public/data/ui_gfx/gun_actions/sea_swamp.png | Bin 0 -> 358 bytes public/data/ui_gfx/gun_actions/sea_water.png | Bin .../gun_actions/sea_water_unidentified.png | Bin public/data/ui_gfx/gun_actions/sheep.png | Bin .../data/ui_gfx/gun_actions/shield_field.png | Bin .../gun_actions/shield_field_unidentified.png | Bin .../ui_gfx/gun_actions/shortlived_shot.png | Bin public/data/ui_gfx/gun_actions/sigma.png | Bin public/data/ui_gfx/gun_actions/sinewave.png | Bin .../gun_actions/sinewave_unidentified.png | Bin public/data/ui_gfx/gun_actions/skull.png | Bin public/data/ui_gfx/gun_actions/slimeball.png | Bin .../gun_actions/slimeball_unidentified.png | Bin .../data/ui_gfx/gun_actions/slow_bullet.png | Bin .../ui_gfx/gun_actions/slow_bullet_timer.png | Bin .../gun_actions/slow_bullet_timer_2.png | Bin .../slow_bullet_timer_unidentified.png | Bin .../gun_actions/slow_bullet_trigger.png | Bin .../slow_bullet_trigger_unidentified.png | Bin .../gun_actions/slow_bullet_unidentified.png | Bin .../ui_gfx/gun_actions/slow_but_steady.png | Bin public/data/ui_gfx/gun_actions/smg_bullet.png | Bin public/data/ui_gfx/gun_actions/soil.png | Bin public/data/ui_gfx/gun_actions/speed.png | Bin .../ui_gfx/gun_actions/speed_unidentified.png | Bin .../ui_gfx/gun_actions/spells_to_power.png | Bin .../data/ui_gfx/gun_actions/spiral_shot.png | Bin .../gun_actions/spiral_shot_unidentified.png | Bin .../ui_gfx/gun_actions/spiraling_shot.png | Bin public/data/ui_gfx/gun_actions/spitter.png | Bin .../data/ui_gfx/gun_actions/spitter_green.png | Bin .../gun_actions/spitter_green_timer.png | Bin .../ui_gfx/gun_actions/spitter_purple.png | Bin .../gun_actions/spitter_purple_timer.png | Bin .../data/ui_gfx/gun_actions/spitter_timer.png | Bin .../spitter_timer_unidentified.png | Bin .../gun_actions/spitter_unidentified.png | Bin public/data/ui_gfx/gun_actions/spore_pod.png | Bin .../data/ui_gfx/gun_actions/spread_reduce.png | Bin .../spread_reduce_unidentified.png | Bin .../ui_gfx/gun_actions/static_to_sand.png | Bin public/data/ui_gfx/gun_actions/summon_egg.png | Bin .../ui_gfx/gun_actions/summon_hollow_egg.png | Bin .../data/ui_gfx/gun_actions/summon_portal.png | Bin .../data/ui_gfx/gun_actions/summon_rock.png | Bin .../ui_gfx/gun_actions/summon_wandghost.png | Bin public/data/ui_gfx/gun_actions/sun.png | Bin .../gun_actions/super_teleport_cast.png | Bin .../ui_gfx/gun_actions/swapper_projectile.png | Bin .../data/ui_gfx/gun_actions/swarm_firebug.png | Bin public/data/ui_gfx/gun_actions/swarm_fly.png | Bin public/data/ui_gfx/gun_actions/swarm_wasp.png | Bin public/data/ui_gfx/gun_actions/t_shape.png | Bin .../gun_actions/t_shape_unidentified.png | Bin public/data/ui_gfx/gun_actions/tau.png | Bin public/data/ui_gfx/gun_actions/telepathy.png | Bin .../ui_gfx/gun_actions/telepathy_field.png | Bin .../telepathy_field_unidentified.png | Bin .../data/ui_gfx/gun_actions/teleport_cast.png | Bin .../data/ui_gfx/gun_actions/teleport_home.png | Bin .../gun_actions/teleport_projectile.png | Bin .../teleport_projectile_closer.png | Bin .../gun_actions/teleport_projectile_short.png | Bin .../teleport_projectile_static.png | Bin .../teleport_projectile_unidentified.png | Bin .../data/ui_gfx/gun_actions/teleportation.png | Bin .../gun_actions/teleportation_field.png | Bin .../teleportation_field_unidentified.png | Bin .../ui_gfx/gun_actions/temporary_platform.png | Bin .../ui_gfx/gun_actions/temporary_wall.png | Bin public/data/ui_gfx/gun_actions/tentacle.png | Bin .../ui_gfx/gun_actions/tentacle_portal.png | Bin .../data/ui_gfx/gun_actions/tentacle_ray.png | Bin .../ui_gfx/gun_actions/tentacle_ray_enemy.png | Bin .../ui_gfx/gun_actions/tentacle_timer.png | Bin .../tentacle_timer_unidentified.png | Bin .../gun_actions/tentacle_unidentified.png | Bin .../data/ui_gfx/gun_actions/thunder_blast.png | Bin .../thunder_blast_unidentified.png | Bin .../data/ui_gfx/gun_actions/thunderball.png | Bin .../gun_actions/thunderball_unidentified.png | Bin public/data/ui_gfx/gun_actions/timer.png | Bin public/data/ui_gfx/gun_actions/tiny_ghost.png | Bin public/data/ui_gfx/gun_actions/tntbox.png | Bin public/data/ui_gfx/gun_actions/tntbox_big.png | Bin public/data/ui_gfx/gun_actions/torch.png | Bin .../ui_gfx/gun_actions/torch_electric.png | Bin .../ui_gfx/gun_actions/torch_unidentified.png | Bin .../data/ui_gfx/gun_actions/touch_alcohol.png | Bin .../data/ui_gfx/gun_actions/touch_blood.png | Bin public/data/ui_gfx/gun_actions/touch_gold.png | Bin public/data/ui_gfx/gun_actions/touch_oil.png | Bin .../data/ui_gfx/gun_actions/touch_smoke.png | Bin .../data/ui_gfx/gun_actions/touch_water.png | Bin .../data/ui_gfx/gun_actions/toxic_to_acid.png | Bin .../data/ui_gfx/gun_actions/transmutation.png | Bin public/data/ui_gfx/gun_actions/trigger.png | Bin .../ui_gfx/gun_actions/trigger_hit_entity.png | Bin .../ui_gfx/gun_actions/trigger_hit_world.png | Bin .../ui_gfx/gun_actions/trigger_timer_5.png | Bin public/data/ui_gfx/gun_actions/true_orbit.png | Bin 0 -> 215 bytes .../data/ui_gfx/gun_actions/unidentified.png | Bin .../ui_gfx/gun_actions/unstable_gunpowder.png | Bin .../unstable_gunpowder_unidentified.png | Bin .../ui_gfx/gun_actions/vacuum_entities.png | Bin .../data/ui_gfx/gun_actions/vacuum_liquid.png | Bin .../data/ui_gfx/gun_actions/vacuum_powder.png | Bin public/data/ui_gfx/gun_actions/w_shape.png | Bin .../gun_actions/w_shape_unidentified.png | Bin .../ui_gfx/gun_actions/wall_horizontal.png | Bin .../data/ui_gfx/gun_actions/wall_square.png | Bin .../data/ui_gfx/gun_actions/wall_vertical.png | Bin .../ui_gfx/gun_actions/water_to_poison.png | Bin .../data/ui_gfx/gun_actions/water_trail.png | Bin .../ui_gfx/gun_actions/white_hole_big.png | Bin 0 -> 271 bytes public/data/ui_gfx/gun_actions/worm.png | Bin public/data/ui_gfx/gun_actions/worm_rain.png | Bin public/data/ui_gfx/gun_actions/x_ray.png | Bin .../ui_gfx/gun_actions/x_ray_unidentified.png | Bin public/data/ui_gfx/gun_actions/y_shape.png | Bin .../gun_actions/y_shape_unidentified.png | Bin .../data/ui_gfx/gun_actions/zero_damage.png | Bin 0 -> 285 bytes public/data/ui_gfx/gun_actions/zeta.png | Bin scripts/generate_entity_map.py | 109 +- scripts/generate_gun_actions.py | 78 +- scripts/generate_translations.py | 14 +- .../__generated__/entityProjectileMap.beta.ts | 201 + .../calc/__generated__/entityProjectileMap.ts | 159 +- .../calc/__generated__/gun_actions.beta.ts | 9419 +++++++++++++++++ src/app/calc/__generated__/gun_actions.ts | 3 - .../calc/__generated__/translations.beta.ts | 3479 ++++++ src/app/calc/__generated__/translations.ts | 7518 ++++++------- src/app/calc/entityProjectileMap.ts | 7 + src/app/calc/eval/lookups.ts | 4 +- src/app/calc/eval/util.ts | 2 +- src/app/calc/extra/types.ts | 2 + src/app/calc/gun.ts | 2 +- src/app/calc/gun_actions.ts | 7 + src/app/calc/gunaction_generated.ts | 2 + src/app/components/SpellSelector.tsx | 2 +- 643 files changed, 16803 insertions(+), 4247 deletions(-) mode change 100755 => 100644 public/data/ui_gfx/gun_actions/2_cards_on_death.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/3_cards_on_death.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/accelerating_shot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/acid.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/acid_trail.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/acid_trail_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/acidshot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/acidshot_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/air_bullet.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/air_bullet_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/alcohol_blast.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/all_acid.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/all_blackholes.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/all_deathcrosses.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/all_discs.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/all_nukes.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/all_rockets.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/all_spells.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/alpha.png create mode 100644 public/data/ui_gfx/gun_actions/anti_homing.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/arc_electric.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/arc_electric_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/arc_fire.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/arc_fire_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/arc_gunpowder.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/arc_poison.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/area_damage.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/arrow.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/arrow_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/autoaim.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/avoiding_arc.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/baab_all.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/baab_empty.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/baab_is.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/baab_lava.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/baab_love.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/baab_poop.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/baab_water.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/ball_lightning.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bee.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/berserk.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/berserk_field.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/berserk_field_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/big_magic_shield.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/black_hole.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/black_hole_big.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/black_hole_big_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/black_hole_giga.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/black_hole_timer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/black_hole_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/blindness.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/blood_magic.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/blood_punch.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/blood_to_acid.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/blood_trail.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bloodlust.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bloodtentacle.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bloomshot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bomb.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bomb_cart.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bomb_holy.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bomb_holy_giga.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bomb_trailer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bomb_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bounce.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bounce_explosion.png create mode 100644 public/data/ui_gfx/gun_actions/bounce_hole.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bounce_larpa.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bounce_laser.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bounce_laser_emitter.png create mode 100644 public/data/ui_gfx/gun_actions/bounce_lightning.png create mode 100644 public/data/ui_gfx/gun_actions/bounce_small_explosion.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bounce_spark.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bounce_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bouncy_orb.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bouncy_orb_timer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bouncy_orb_timer_2.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/broken_spell.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bubbleshot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bubbleshot_trigger.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bubbleshot_trigger_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bubbleshot_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/buckshot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/building_back_wall_rock.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/building_board_wood.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/building_physics_templedoor.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/building_pressure_plate.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bullet.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bullet_timer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bullet_timer_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bullet_trigger.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bullet_trigger_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/bullet_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/burn_trail.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/burn_trail_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/burning_critical.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/burst_2.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/burst_2_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/burst_3.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/burst_3_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/burst_4.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/burst_4_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/burst_8.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/burst_x.png create mode 100644 public/data/ui_gfx/gun_actions/caster_cast.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/cement.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/chain_bolt.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/chain_shot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/chainsaw.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/chainsaw_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/chaos_polymorph_field.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/chaos_polymorph_field_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/chaotic_arc.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/charm.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/charm_field.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/charm_on_burning.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/charm_on_toxic.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/circle_acid.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/circle_fire.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/circle_oil.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/circle_shape.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/circle_shape_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/circle_water.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/cleaning_tool.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/clipping_shot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/cloud_acid.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/cloud_blood.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/cloud_oil.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/cloud_thunder.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/cloud_water.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/cloud_water_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/colour_blue.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/colour_green.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/colour_invis.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/colour_orange.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/colour_purple.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/colour_rainbow.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/colour_red.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/colour_yellow.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/commander_bullet.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/critical_blood.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/critical_hit.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/critical_oil.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/critical_water.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/critical_wet.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/crumbling_earth.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/crumbling_earth_projectile.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/curse.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/curse_wither_electricity.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/curse_wither_explosion.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/curse_wither_melee.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/curse_wither_projectile.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/cursed_orb.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/damage.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/damage_forever.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/damage_friendly.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/damage_friendly_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/damage_random.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/damage_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/damage_x2.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/damage_x2_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/damage_x5.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/darkflame.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/darkflame_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/death_cross.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/death_cross_big.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/death_cross_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/death_trigger.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/decelerating_shot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/decoy.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/decoy_trigger.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/decoy_trigger_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/decoy_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/delayed_spell.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/destruction.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/digger.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/digger_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/disc_bullet.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/disc_bullet_big.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/disc_bullet_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/divide_10.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/divide_2.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/divide_3.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/divide_4.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/draw_3_random.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/draw_random.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/draw_random_x3.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/drone.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/duck.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/duck_2.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/duplicate.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/duplicate_on_death.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/dynamite.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/dynamite_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/electric_charge.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/electric_charge_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/electrocution_field.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/electrocution_field_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/empty.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/energy_shield.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/energy_shield_sector.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/energy_shield_sector_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/energy_shield_shot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/energy_shield_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/enlarge.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/essence_to_power.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/expanding_orb.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/explode_on_alcohol.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/explode_on_alcohol_giga.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/explode_on_slime.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/explode_on_slime_giga.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/exploding_deer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/exploding_deer_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/explosion.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/explosion_light.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/explosion_remove.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/explosion_tiny.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/explosion_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/explosive_projectile.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/explosive_projectile_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/fire_blast.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/fire_blast_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/fire_trail.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/fire_trail_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/fireball.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/fireball_ray.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/fireball_ray_enemy.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/fireball_ray_line.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/fireball_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/firebomb.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/firebomb_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/fireworks.png create mode 100644 public/data/ui_gfx/gun_actions/fish.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/fizzle.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/flamethrower.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/flamethrower_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/floating_arc.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/flowershot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/fly_downwards.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/fly_upwards.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/freeze.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/freeze_alt.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/freeze_field.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/freeze_field_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/freeze_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/freezing_gaze.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/friend_fly.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/gamma.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/generate_random_deck_5.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/glitter_bomb.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/glowing_bolt.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/glue_shot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/golden_punch.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/gore.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/gravity.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/gravity_anti.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/gravity_field_enemy.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/grenade.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/grenade_anti.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/grenade_large.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/grenade_tier_2.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/grenade_tier_3.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/grenade_trigger.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/grenade_trigger_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/grenade_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/gun.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/gunpowder_trail.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/heal_bullet.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/heal_bullet_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/heavy_bullet.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/heavy_bullet_timer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/heavy_bullet_timer_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/heavy_bullet_trigger.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/heavy_bullet_trigger_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/heavy_bullet_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/heavy_shot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/heavy_shot_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/heavy_spread.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/high_explosive.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/homing.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/homing_accelerating.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/homing_area.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/homing_cursor.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/homing_projectile.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/homing_rotate.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/homing_shooter.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/homing_short.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/homing_unidentified.png create mode 100644 public/data/ui_gfx/gun_actions/homing_wand.png create mode 100644 public/data/ui_gfx/gun_actions/hook.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/horizontal_arc.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/i-shape.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/i_shape.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/i_shape_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/iceball.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/icecircle.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/icethrower.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/if_else.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/if_end.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/if_enemy.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/if_half.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/if_hp.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/if_projectile.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/inebriation.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/infestation.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/kantele_a.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/kantele_a2.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/kantele_b.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/kantele_c.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/kantele_d.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/kantele_dis.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/kantele_e.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/kantele_f.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/kantele_g.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/kantele_gsharp.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/keyshot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/knife.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/knockback.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/knockback_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/lance.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/lance_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/larpa_chaos.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/larpa_chaos_2.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/larpa_death.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/larpa_downwards.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/larpa_upwards.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/laser.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/laser_emitter.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/laser_emitter_cutter.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/laser_emitter_four.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/laser_emitter_ray.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/laser_emitter_wider.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/laser_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/lava_to_blood.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/levitation_field.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/levitation_field_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/levitation_projectile.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/lifetime.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/lifetime_down.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/lifetime_infinite.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/light.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/light_bullet.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/light_bullet_timer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/light_bullet_timer_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/light_bullet_trigger.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/light_bullet_trigger_2.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/light_bullet_trigger_2_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/light_bullet_trigger_timer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/light_bullet_trigger_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/light_bullet_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/light_shot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/lightning.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/lightning_ray.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/lightning_ray_enemy.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/lightning_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/line_arc.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/liquid_to_explosion.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/long_distance_cast.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/luminous_drill.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/luminous_drill_timer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/machinegun_bullet.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/magic_shield.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/mana.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/mana_recharge.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/material_acid.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/material_acid_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/material_blood.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/material_blood_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/material_cement.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/material_debug.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/material_dirt.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/material_gunpowder_explosive.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/material_lava.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/material_liquid.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/material_oil.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/material_oil_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/material_water.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/material_water_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/matter_eater.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/megalaser.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/meteor.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/meteor_rain.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/meteor_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/midas.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/mine.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/mine_death_trigger.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/mine_death_trigger_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/mine_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/misfire.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/misfire_critical.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/missile.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/mist_alcohol.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/mist_blood.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/mist_radioactive.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/mist_slime.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/mu.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/necromancy.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/nolla.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/nuke.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/nuke_giga.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/nuke_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/ocarina_a.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/ocarina_a2.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/ocarina_b.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/ocarina_c.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/ocarina_d.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/ocarina_e.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/ocarina_f.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/ocarina_gsharp.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/oil_trail.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/oil_trail_unindentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/oiled_4x_damage.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/oiled_freeze.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/omega.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/omega_disc_bullet.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/orbit_discs.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/orbit_fireballs.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/orbit_larpa.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/orbit_lasers.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/orbit_nukes.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/orbit_shot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/pebble.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/pebble_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/penetrate_walls.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/pentagram_shape.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/pentagram_shape_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/petrify.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/phantomshot_a.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/phantomshot_b.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/phasing_arc.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/phi.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/piercing_shot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/pingpong_path.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/pink_orb.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/pipe_bomb.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/pipe_bomb_death_trigger.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/pipe_bomb_death_trigger_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/pipe_bomb_detonator.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/pipe_bomb_detonator_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/pipe_bomb_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/plasma_flare.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/poison_blast.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/poison_blast_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/poison_trail.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/poison_trail_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/pollen.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/polymorph.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/polymorph_field.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/polymorph_field_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/poo_trail.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/powerdigger.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/powerdigger_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/projectile_gravity_field.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/projectile_thunder_field.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/projectile_transmutation_field.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/propane_tank.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/purple_explosion_field.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/quantum_split.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/rainbow_trail.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/random_explosion.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/random_modifier.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/random_projectile.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/random_spell.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/random_static_projectile.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/recharge.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/recoil.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/recoil_damper.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/recoil_damper_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/recoil_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/regeneration_field.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/regeneration_field_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/remove_bounce.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/reset.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/rocket.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/rocket_downwards.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/rocket_octagon.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/rocket_tier_2.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/rocket_tier_3.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/rocket_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/rubber_ball.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/rubber_ball_timer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/rubber_ball_trigger.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/rubber_ball_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/scatter_2.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/scatter_2_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/scatter_3.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/scatter_3_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/scatter_4.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/scatter_4_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/scattershot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/sea_acid.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/sea_acid_gas.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/sea_acid_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/sea_alcohol.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/sea_lava.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/sea_lava_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/sea_oil.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/sea_oil_unidentified.png create mode 100644 public/data/ui_gfx/gun_actions/sea_swamp.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/sea_water.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/sea_water_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/sheep.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/shield_field.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/shield_field_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/shortlived_shot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/sigma.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/sinewave.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/sinewave_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/skull.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/slimeball.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/slimeball_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/slow_bullet.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/slow_bullet_timer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/slow_bullet_timer_2.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/slow_bullet_timer_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/slow_bullet_trigger.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/slow_bullet_trigger_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/slow_bullet_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/slow_but_steady.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/smg_bullet.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/soil.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/speed.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/speed_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/spells_to_power.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/spiral_shot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/spiral_shot_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/spiraling_shot.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/spitter.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/spitter_green.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/spitter_green_timer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/spitter_purple.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/spitter_purple_timer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/spitter_timer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/spitter_timer_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/spitter_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/spore_pod.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/spread_reduce.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/spread_reduce_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/static_to_sand.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/summon_egg.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/summon_hollow_egg.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/summon_portal.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/summon_rock.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/summon_wandghost.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/sun.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/super_teleport_cast.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/swapper_projectile.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/swarm_firebug.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/swarm_fly.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/swarm_wasp.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/t_shape.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/t_shape_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/tau.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/telepathy.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/telepathy_field.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/telepathy_field_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/teleport_cast.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/teleport_home.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/teleport_projectile.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/teleport_projectile_closer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/teleport_projectile_short.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/teleport_projectile_static.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/teleport_projectile_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/teleportation.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/teleportation_field.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/teleportation_field_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/temporary_platform.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/temporary_wall.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/tentacle.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/tentacle_portal.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/tentacle_ray.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/tentacle_ray_enemy.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/tentacle_timer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/tentacle_timer_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/tentacle_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/thunder_blast.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/thunder_blast_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/thunderball.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/thunderball_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/timer.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/tiny_ghost.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/tntbox.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/tntbox_big.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/torch.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/torch_electric.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/torch_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/touch_alcohol.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/touch_blood.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/touch_gold.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/touch_oil.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/touch_smoke.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/touch_water.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/toxic_to_acid.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/transmutation.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/trigger.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/trigger_hit_entity.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/trigger_hit_world.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/trigger_timer_5.png create mode 100644 public/data/ui_gfx/gun_actions/true_orbit.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/unstable_gunpowder.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/unstable_gunpowder_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/vacuum_entities.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/vacuum_liquid.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/vacuum_powder.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/w_shape.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/w_shape_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/wall_horizontal.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/wall_square.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/wall_vertical.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/water_to_poison.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/water_trail.png create mode 100644 public/data/ui_gfx/gun_actions/white_hole_big.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/worm.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/worm_rain.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/x_ray.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/x_ray_unidentified.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/y_shape.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/y_shape_unidentified.png create mode 100644 public/data/ui_gfx/gun_actions/zero_damage.png mode change 100755 => 100644 public/data/ui_gfx/gun_actions/zeta.png create mode 100644 src/app/calc/__generated__/entityProjectileMap.beta.ts create mode 100644 src/app/calc/__generated__/gun_actions.beta.ts create mode 100644 src/app/calc/__generated__/translations.beta.ts create mode 100644 src/app/calc/entityProjectileMap.ts create mode 100644 src/app/calc/gun_actions.ts diff --git a/.eslintignore b/.eslintignore index 2d66acd..5d02d1d 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1 +1,3 @@ -src/app/calc/evaluate_lua/__generated__ \ No newline at end of file +src/app/calc/evaluate_lua/__generated__ + +src/app/calc/__generated__/*.ts diff --git a/.gitignore b/.gitignore index 8879bc5..9485d45 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ # misc .DS_Store +**/.DS_Store .env.local .env.development.local .env.test.local diff --git a/README.md b/README.md index f224f8a..9bf83f1 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ## Branches -* `master` is deployed to https://noita-wand-simulator.salinecitrine.com/ -* `develop` is deployed to https://beta.noita-wand-simulator.salinecitrine.com/ +- `master` is deployed to https://noita-wand-simulator.salinecitrine.com/ +- `develop` is deployed to https://beta.noita-wand-simulator.salinecitrine.com/ ## Available Scripts @@ -30,6 +30,36 @@ Your app is ready to be deployed! See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. +## Automatic code generation + +These scripts convert the files the game uses into forms easily consumed by TypeScript. Uses the following files: + +From the main game files: + +``` +data_base/translations/common.csv +``` + +From the modding data export: + +``` +data/scripts/gun/gun_actions.lua +``` + +If versions of these files containing the 'beta' suffix are found, the additional spells are included behind a 'beta content' toggle in the sim. E.g.: + +``` +data_base/translations/common.beta.csv +data/scripts/gun/gun_actions.beta.lua +``` + +Get a diff of release and beta with: + +``` +diff --suppress-common-lines -trb gun_actions.ts gun_actions.beta.ts +diff --suppress-common-lines -trb -I 'spawn_' gun_actions.ts gun_actions.beta.ts +``` + ### `generate-actions` Generate Typescript spell functions from the source Lua code. This requires that you have 'data/scripts/gun/gun_actions.lua' present. diff --git a/package.json b/package.json index 5696ccb..ea0941b 100644 --- a/package.json +++ b/package.json @@ -28,11 +28,12 @@ "web-vitals": "^2.1.0" }, "scripts": { - "start": "BROWSER=none react-scripts --openssl-legacy-provider start", + "start": "BROWSER=none react-scripts start", "build": "CI= react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject", "serve": "npx serve -s build", + "generate": "yarn generate-actions && yarn generate-entity-map && yarn generate-translations", "generate-actions": "python scripts/generate_gun_actions.py", "generate-translations": "python scripts/generate_translations.py", "generate-entity-map": "python scripts/generate_entity_map.py" diff --git a/public/data/ui_gfx/gun_actions/2_cards_on_death.png b/public/data/ui_gfx/gun_actions/2_cards_on_death.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/3_cards_on_death.png b/public/data/ui_gfx/gun_actions/3_cards_on_death.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/_unidentified.png b/public/data/ui_gfx/gun_actions/_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/accelerating_shot.png b/public/data/ui_gfx/gun_actions/accelerating_shot.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/acid.png b/public/data/ui_gfx/gun_actions/acid.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/acid_trail.png b/public/data/ui_gfx/gun_actions/acid_trail.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/acid_trail_unidentified.png b/public/data/ui_gfx/gun_actions/acid_trail_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/acidshot.png b/public/data/ui_gfx/gun_actions/acidshot.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/acidshot_unidentified.png b/public/data/ui_gfx/gun_actions/acidshot_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/air_bullet.png b/public/data/ui_gfx/gun_actions/air_bullet.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/air_bullet_unidentified.png b/public/data/ui_gfx/gun_actions/air_bullet_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/alcohol_blast.png b/public/data/ui_gfx/gun_actions/alcohol_blast.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/all_acid.png b/public/data/ui_gfx/gun_actions/all_acid.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/all_blackholes.png b/public/data/ui_gfx/gun_actions/all_blackholes.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/all_deathcrosses.png b/public/data/ui_gfx/gun_actions/all_deathcrosses.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/all_discs.png b/public/data/ui_gfx/gun_actions/all_discs.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/all_nukes.png b/public/data/ui_gfx/gun_actions/all_nukes.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/all_rockets.png b/public/data/ui_gfx/gun_actions/all_rockets.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/all_spells.png b/public/data/ui_gfx/gun_actions/all_spells.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/alpha.png b/public/data/ui_gfx/gun_actions/alpha.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/anti_homing.png b/public/data/ui_gfx/gun_actions/anti_homing.png new file mode 100644 index 0000000000000000000000000000000000000000..5d7bac4f9faf5c082aca169b1ba3217f4bf823ba GIT binary patch literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+AuIMN_o0ChE&{2`tkq2Ju^?dzQ&LK zGwN*2ECR|M7LQ;3n$O5lQBoqYFJ>oGlF^Je_s*VhU}4};P?KO@))>)iz#!nzqmX{s zLhA3|9&;}4z#lC{8dpA3vgTr@f^x{95NJhLI^t5aLwyC4I3 zg@%qIMvVinnhzZ`Yi^jhlqrVQfx+b1!0U zPhx8?VlLY>zbafbDtcZ2Gj|0QhCh5?9acAAEwHqCIDOh4uWK&lj|#4qB&+VSZmecB z{48Sp+(&u&S;hluO0t5^gQu&X%Q~loCIFU>JA(iK literal 0 HcmV?d00001 diff --git a/public/data/ui_gfx/gun_actions/bounce_larpa.png b/public/data/ui_gfx/gun_actions/bounce_larpa.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/bounce_laser.png b/public/data/ui_gfx/gun_actions/bounce_laser.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/bounce_laser_emitter.png b/public/data/ui_gfx/gun_actions/bounce_laser_emitter.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/bounce_lightning.png b/public/data/ui_gfx/gun_actions/bounce_lightning.png new file mode 100644 index 0000000000000000000000000000000000000000..b9550d42fde72874120e8d6f7f5f189d7efd1fa2 GIT binary patch literal 266 zcmV+l0rmcgP)h(Pid@0qm7h4jJ4>qQIZ<@!)d- zB<;>&09|Gj{W#&1jT0Cin^F9Jixq6l`0 Qs{jB107*qoM6N<$f`znl5dZ)H literal 0 HcmV?d00001 diff --git a/public/data/ui_gfx/gun_actions/bounce_small_explosion.png b/public/data/ui_gfx/gun_actions/bounce_small_explosion.png new file mode 100644 index 0000000000000000000000000000000000000000..2d4fa650cb9eef0e18e1611ef5057ddcdcda46bc GIT binary patch literal 256 zcmV+b0ssDqP)&CHcYu}5kUYd7>DpH^9G_|4`+oXf z3;Z>l28BI(BN8WxUv(*RNqAE1*MrT;KM@k4iMx61ZEPNUOMXZyVDSXLdAuCb`*UA4 z*qof69^B`{Ag4isGiST~RBX0D*Wh_QL);!%9}($ARaMahro2z)54r~CRInRlZQDjo z0|`?$vk8C#oK`5M*awnQ&T7sK02$l;VhFKXq)MQ!Yw-diRh0`@rz#`>0000gTe~DWM4f2a+>~ literal 0 HcmV?d00001 diff --git a/public/data/ui_gfx/gun_actions/cement.png b/public/data/ui_gfx/gun_actions/cement.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/chain_bolt.png b/public/data/ui_gfx/gun_actions/chain_bolt.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/chain_shot.png b/public/data/ui_gfx/gun_actions/chain_shot.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/chainsaw.png b/public/data/ui_gfx/gun_actions/chainsaw.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/chainsaw_unidentified.png b/public/data/ui_gfx/gun_actions/chainsaw_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/chaos_polymorph_field.png b/public/data/ui_gfx/gun_actions/chaos_polymorph_field.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/chaos_polymorph_field_unidentified.png b/public/data/ui_gfx/gun_actions/chaos_polymorph_field_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/chaotic_arc.png b/public/data/ui_gfx/gun_actions/chaotic_arc.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/charm.png b/public/data/ui_gfx/gun_actions/charm.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/charm_field.png b/public/data/ui_gfx/gun_actions/charm_field.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/charm_on_burning.png b/public/data/ui_gfx/gun_actions/charm_on_burning.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/charm_on_toxic.png b/public/data/ui_gfx/gun_actions/charm_on_toxic.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/circle_acid.png b/public/data/ui_gfx/gun_actions/circle_acid.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/circle_fire.png b/public/data/ui_gfx/gun_actions/circle_fire.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/circle_oil.png b/public/data/ui_gfx/gun_actions/circle_oil.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/circle_shape.png b/public/data/ui_gfx/gun_actions/circle_shape.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/circle_shape_unidentified.png b/public/data/ui_gfx/gun_actions/circle_shape_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/circle_water.png b/public/data/ui_gfx/gun_actions/circle_water.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/cleaning_tool.png b/public/data/ui_gfx/gun_actions/cleaning_tool.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/clipping_shot.png b/public/data/ui_gfx/gun_actions/clipping_shot.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/cloud_acid.png b/public/data/ui_gfx/gun_actions/cloud_acid.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/cloud_blood.png b/public/data/ui_gfx/gun_actions/cloud_blood.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/cloud_oil.png b/public/data/ui_gfx/gun_actions/cloud_oil.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/cloud_thunder.png b/public/data/ui_gfx/gun_actions/cloud_thunder.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/cloud_water.png b/public/data/ui_gfx/gun_actions/cloud_water.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/cloud_water_unidentified.png b/public/data/ui_gfx/gun_actions/cloud_water_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/colour_blue.png b/public/data/ui_gfx/gun_actions/colour_blue.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/colour_green.png b/public/data/ui_gfx/gun_actions/colour_green.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/colour_invis.png b/public/data/ui_gfx/gun_actions/colour_invis.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/colour_orange.png b/public/data/ui_gfx/gun_actions/colour_orange.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/colour_purple.png b/public/data/ui_gfx/gun_actions/colour_purple.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/colour_rainbow.png b/public/data/ui_gfx/gun_actions/colour_rainbow.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/colour_red.png b/public/data/ui_gfx/gun_actions/colour_red.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/colour_yellow.png b/public/data/ui_gfx/gun_actions/colour_yellow.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/commander_bullet.png b/public/data/ui_gfx/gun_actions/commander_bullet.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/critical_blood.png b/public/data/ui_gfx/gun_actions/critical_blood.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/critical_hit.png b/public/data/ui_gfx/gun_actions/critical_hit.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/critical_oil.png b/public/data/ui_gfx/gun_actions/critical_oil.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/critical_water.png b/public/data/ui_gfx/gun_actions/critical_water.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/critical_wet.png b/public/data/ui_gfx/gun_actions/critical_wet.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/crumbling_earth.png b/public/data/ui_gfx/gun_actions/crumbling_earth.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/crumbling_earth_projectile.png b/public/data/ui_gfx/gun_actions/crumbling_earth_projectile.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/curse.png b/public/data/ui_gfx/gun_actions/curse.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/curse_wither_electricity.png b/public/data/ui_gfx/gun_actions/curse_wither_electricity.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/curse_wither_explosion.png b/public/data/ui_gfx/gun_actions/curse_wither_explosion.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/curse_wither_melee.png b/public/data/ui_gfx/gun_actions/curse_wither_melee.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/curse_wither_projectile.png b/public/data/ui_gfx/gun_actions/curse_wither_projectile.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/cursed_orb.png b/public/data/ui_gfx/gun_actions/cursed_orb.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/damage.png b/public/data/ui_gfx/gun_actions/damage.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/damage_forever.png b/public/data/ui_gfx/gun_actions/damage_forever.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/damage_friendly.png b/public/data/ui_gfx/gun_actions/damage_friendly.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/damage_friendly_unidentified.png b/public/data/ui_gfx/gun_actions/damage_friendly_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/damage_random.png b/public/data/ui_gfx/gun_actions/damage_random.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/damage_unidentified.png b/public/data/ui_gfx/gun_actions/damage_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/damage_x2.png b/public/data/ui_gfx/gun_actions/damage_x2.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/damage_x2_unidentified.png b/public/data/ui_gfx/gun_actions/damage_x2_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/damage_x5.png b/public/data/ui_gfx/gun_actions/damage_x5.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/darkflame.png b/public/data/ui_gfx/gun_actions/darkflame.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/darkflame_unidentified.png b/public/data/ui_gfx/gun_actions/darkflame_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/death_cross.png b/public/data/ui_gfx/gun_actions/death_cross.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/death_cross_big.png b/public/data/ui_gfx/gun_actions/death_cross_big.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/death_cross_unidentified.png b/public/data/ui_gfx/gun_actions/death_cross_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/death_trigger.png b/public/data/ui_gfx/gun_actions/death_trigger.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/decelerating_shot.png b/public/data/ui_gfx/gun_actions/decelerating_shot.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/decoy.png b/public/data/ui_gfx/gun_actions/decoy.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/decoy_trigger.png b/public/data/ui_gfx/gun_actions/decoy_trigger.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/decoy_trigger_unidentified.png b/public/data/ui_gfx/gun_actions/decoy_trigger_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/decoy_unidentified.png b/public/data/ui_gfx/gun_actions/decoy_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/delayed_spell.png b/public/data/ui_gfx/gun_actions/delayed_spell.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/destruction.png b/public/data/ui_gfx/gun_actions/destruction.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/digger.png b/public/data/ui_gfx/gun_actions/digger.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/digger_unidentified.png b/public/data/ui_gfx/gun_actions/digger_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/disc_bullet.png b/public/data/ui_gfx/gun_actions/disc_bullet.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/disc_bullet_big.png b/public/data/ui_gfx/gun_actions/disc_bullet_big.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/disc_bullet_unidentified.png b/public/data/ui_gfx/gun_actions/disc_bullet_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/divide_10.png b/public/data/ui_gfx/gun_actions/divide_10.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/divide_2.png b/public/data/ui_gfx/gun_actions/divide_2.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/divide_3.png b/public/data/ui_gfx/gun_actions/divide_3.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/divide_4.png b/public/data/ui_gfx/gun_actions/divide_4.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/draw_3_random.png b/public/data/ui_gfx/gun_actions/draw_3_random.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/draw_random.png b/public/data/ui_gfx/gun_actions/draw_random.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/draw_random_x3.png b/public/data/ui_gfx/gun_actions/draw_random_x3.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/drone.png b/public/data/ui_gfx/gun_actions/drone.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/duck.png b/public/data/ui_gfx/gun_actions/duck.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/duck_2.png b/public/data/ui_gfx/gun_actions/duck_2.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/duplicate.png b/public/data/ui_gfx/gun_actions/duplicate.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/duplicate_on_death.png b/public/data/ui_gfx/gun_actions/duplicate_on_death.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/dynamite.png b/public/data/ui_gfx/gun_actions/dynamite.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/dynamite_unidentified.png b/public/data/ui_gfx/gun_actions/dynamite_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/electric_charge.png b/public/data/ui_gfx/gun_actions/electric_charge.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/electric_charge_unidentified.png b/public/data/ui_gfx/gun_actions/electric_charge_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/electrocution_field.png b/public/data/ui_gfx/gun_actions/electrocution_field.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/electrocution_field_unidentified.png b/public/data/ui_gfx/gun_actions/electrocution_field_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/empty.png b/public/data/ui_gfx/gun_actions/empty.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/energy_shield.png b/public/data/ui_gfx/gun_actions/energy_shield.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/energy_shield_sector.png b/public/data/ui_gfx/gun_actions/energy_shield_sector.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/energy_shield_sector_unidentified.png b/public/data/ui_gfx/gun_actions/energy_shield_sector_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/energy_shield_shot.png b/public/data/ui_gfx/gun_actions/energy_shield_shot.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/energy_shield_unidentified.png b/public/data/ui_gfx/gun_actions/energy_shield_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/enlarge.png b/public/data/ui_gfx/gun_actions/enlarge.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/essence_to_power.png b/public/data/ui_gfx/gun_actions/essence_to_power.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/expanding_orb.png b/public/data/ui_gfx/gun_actions/expanding_orb.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/explode_on_alcohol.png b/public/data/ui_gfx/gun_actions/explode_on_alcohol.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/explode_on_alcohol_giga.png b/public/data/ui_gfx/gun_actions/explode_on_alcohol_giga.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/explode_on_slime.png b/public/data/ui_gfx/gun_actions/explode_on_slime.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/explode_on_slime_giga.png b/public/data/ui_gfx/gun_actions/explode_on_slime_giga.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/exploding_deer.png b/public/data/ui_gfx/gun_actions/exploding_deer.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/exploding_deer_unidentified.png b/public/data/ui_gfx/gun_actions/exploding_deer_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/explosion.png b/public/data/ui_gfx/gun_actions/explosion.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/explosion_light.png b/public/data/ui_gfx/gun_actions/explosion_light.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/explosion_remove.png b/public/data/ui_gfx/gun_actions/explosion_remove.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/explosion_tiny.png b/public/data/ui_gfx/gun_actions/explosion_tiny.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/explosion_unidentified.png b/public/data/ui_gfx/gun_actions/explosion_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/explosive_projectile.png b/public/data/ui_gfx/gun_actions/explosive_projectile.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/explosive_projectile_unidentified.png b/public/data/ui_gfx/gun_actions/explosive_projectile_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/fire_blast.png b/public/data/ui_gfx/gun_actions/fire_blast.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/fire_blast_unidentified.png b/public/data/ui_gfx/gun_actions/fire_blast_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/fire_trail.png b/public/data/ui_gfx/gun_actions/fire_trail.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/fire_trail_unidentified.png b/public/data/ui_gfx/gun_actions/fire_trail_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/fireball.png b/public/data/ui_gfx/gun_actions/fireball.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/fireball_ray.png b/public/data/ui_gfx/gun_actions/fireball_ray.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/fireball_ray_enemy.png b/public/data/ui_gfx/gun_actions/fireball_ray_enemy.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/fireball_ray_line.png b/public/data/ui_gfx/gun_actions/fireball_ray_line.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/fireball_unidentified.png b/public/data/ui_gfx/gun_actions/fireball_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/firebomb.png b/public/data/ui_gfx/gun_actions/firebomb.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/firebomb_unidentified.png b/public/data/ui_gfx/gun_actions/firebomb_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/fireworks.png b/public/data/ui_gfx/gun_actions/fireworks.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/fish.png b/public/data/ui_gfx/gun_actions/fish.png new file mode 100644 index 0000000000000000000000000000000000000000..ec06cd9ce6aad8fe025c62bc731fc3694fa25551 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5ip4-h8YqX zEDVe;8yT?^E!P=-e>(S{^RwQ=-t-2BB!;ETB{KHkAJt3TUbp74y^*{uGmC)ox)zpA zu@5-;yKb2Lw&hu8Y-bc>y}e&hjZMIzVsF9kUr`2aj3s9k7z7+x_A-2C)6-`FYFb*! nsL-I%=hncm=mrCnU}kuDpmv&wY3>`KTNylE{an^LB{Ts5%Rg0a literal 0 HcmV?d00001 diff --git a/public/data/ui_gfx/gun_actions/fizzle.png b/public/data/ui_gfx/gun_actions/fizzle.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/flamethrower.png b/public/data/ui_gfx/gun_actions/flamethrower.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/flamethrower_unidentified.png b/public/data/ui_gfx/gun_actions/flamethrower_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/floating_arc.png b/public/data/ui_gfx/gun_actions/floating_arc.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/flowershot.png b/public/data/ui_gfx/gun_actions/flowershot.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/fly_downwards.png b/public/data/ui_gfx/gun_actions/fly_downwards.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/fly_upwards.png b/public/data/ui_gfx/gun_actions/fly_upwards.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/freeze.png b/public/data/ui_gfx/gun_actions/freeze.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/freeze_alt.png b/public/data/ui_gfx/gun_actions/freeze_alt.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/freeze_field.png b/public/data/ui_gfx/gun_actions/freeze_field.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/freeze_field_unidentified.png b/public/data/ui_gfx/gun_actions/freeze_field_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/freeze_unidentified.png b/public/data/ui_gfx/gun_actions/freeze_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/freezing_gaze.png b/public/data/ui_gfx/gun_actions/freezing_gaze.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/friend_fly.png b/public/data/ui_gfx/gun_actions/friend_fly.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/gamma.png b/public/data/ui_gfx/gun_actions/gamma.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/generate_random_deck_5.png b/public/data/ui_gfx/gun_actions/generate_random_deck_5.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/glitter_bomb.png b/public/data/ui_gfx/gun_actions/glitter_bomb.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/glowing_bolt.png b/public/data/ui_gfx/gun_actions/glowing_bolt.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/glue_shot.png b/public/data/ui_gfx/gun_actions/glue_shot.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/golden_punch.png b/public/data/ui_gfx/gun_actions/golden_punch.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/gore.png b/public/data/ui_gfx/gun_actions/gore.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/gravity.png b/public/data/ui_gfx/gun_actions/gravity.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/gravity_anti.png b/public/data/ui_gfx/gun_actions/gravity_anti.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/gravity_field_enemy.png b/public/data/ui_gfx/gun_actions/gravity_field_enemy.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/grenade.png b/public/data/ui_gfx/gun_actions/grenade.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/grenade_anti.png b/public/data/ui_gfx/gun_actions/grenade_anti.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/grenade_large.png b/public/data/ui_gfx/gun_actions/grenade_large.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/grenade_tier_2.png b/public/data/ui_gfx/gun_actions/grenade_tier_2.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/grenade_tier_3.png b/public/data/ui_gfx/gun_actions/grenade_tier_3.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/grenade_trigger.png b/public/data/ui_gfx/gun_actions/grenade_trigger.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/grenade_trigger_unidentified.png b/public/data/ui_gfx/gun_actions/grenade_trigger_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/grenade_unidentified.png b/public/data/ui_gfx/gun_actions/grenade_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/gun.png b/public/data/ui_gfx/gun_actions/gun.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/gunpowder_trail.png b/public/data/ui_gfx/gun_actions/gunpowder_trail.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/heal_bullet.png b/public/data/ui_gfx/gun_actions/heal_bullet.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/heal_bullet_unidentified.png b/public/data/ui_gfx/gun_actions/heal_bullet_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/heavy_bullet.png b/public/data/ui_gfx/gun_actions/heavy_bullet.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/heavy_bullet_timer.png b/public/data/ui_gfx/gun_actions/heavy_bullet_timer.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/heavy_bullet_timer_unidentified.png b/public/data/ui_gfx/gun_actions/heavy_bullet_timer_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/heavy_bullet_trigger.png b/public/data/ui_gfx/gun_actions/heavy_bullet_trigger.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/heavy_bullet_trigger_unidentified.png b/public/data/ui_gfx/gun_actions/heavy_bullet_trigger_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/heavy_bullet_unidentified.png b/public/data/ui_gfx/gun_actions/heavy_bullet_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/heavy_shot.png b/public/data/ui_gfx/gun_actions/heavy_shot.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/heavy_shot_unidentified.png b/public/data/ui_gfx/gun_actions/heavy_shot_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/heavy_spread.png b/public/data/ui_gfx/gun_actions/heavy_spread.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/high_explosive.png b/public/data/ui_gfx/gun_actions/high_explosive.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/homing.png b/public/data/ui_gfx/gun_actions/homing.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/homing_accelerating.png b/public/data/ui_gfx/gun_actions/homing_accelerating.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/homing_area.png b/public/data/ui_gfx/gun_actions/homing_area.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/homing_cursor.png b/public/data/ui_gfx/gun_actions/homing_cursor.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/homing_projectile.png b/public/data/ui_gfx/gun_actions/homing_projectile.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/homing_rotate.png b/public/data/ui_gfx/gun_actions/homing_rotate.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/homing_shooter.png b/public/data/ui_gfx/gun_actions/homing_shooter.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/homing_short.png b/public/data/ui_gfx/gun_actions/homing_short.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/homing_unidentified.png b/public/data/ui_gfx/gun_actions/homing_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/homing_wand.png b/public/data/ui_gfx/gun_actions/homing_wand.png new file mode 100644 index 0000000000000000000000000000000000000000..7bb4aa12708b968b63a2cdf9c3d764f232affa7f GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5ilFzskoK&rNB=KA{rE6Ywq=dPv-~FxF5CHHSri%`1h$`L-Ld$Ke2fgx zoFv9&k}ks1+zgB@rxZ1L6xK0tC>;C$|G#kn69ZF6=Zc0yi`f(!G|Ctq7z_nvV=ay_ sGI6vs_VlcfN-*(}VFap4(q~|iVAyBlvP(&<9TW--p00i_>zopr0DfI$D*ylh literal 0 HcmV?d00001 diff --git a/public/data/ui_gfx/gun_actions/hook.png b/public/data/ui_gfx/gun_actions/hook.png new file mode 100644 index 0000000000000000000000000000000000000000..a2702b3582acef3f9dbb018d745df88b76a3505c GIT binary patch literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`L7py-Ar`&K2@*yM^_JiNKYl;? zzkL1tKl63Yp7`_s|NqH(97YPKMMEz7Y`fgQ-~XR~fU(XLpg8~XkBqN&H%K^$I%{;X mZsJ|&<>k_+I?41gGlP|WPUh#6!i#~XGkCiCxvX(@N{tuskoK&=l_3uW>p4-h8YqX zEDVe;8yOiGk1%|4N?Oa?Wq;x4jUx^<6XF^en4}l1JNHk18H0=R=Z&3>8MU=~8$c>K zluS%44hV%MF5`J_Hn;h9(vx(SW&LZdc$ZmP%s7~&VAoOm@KCs01A~(xgGvYYpC2E^ zb@&%0J~-AZ-viX%;;XnxNkaZ+L5i6J!^2+Il;#OPPdoxjG@YG!Bj*q+15*d*?4%sC zhejem7k*$BD_W3f%)=RDtcXQP+rZZ^75_RvZDv~dc41{9yIOT_wQB8l3V6f3CGK8buZ38J$WI} Or3{{~elF{r5}E*g^;6IQ literal 0 HcmV?d00001 diff --git a/public/data/ui_gfx/gun_actions/unidentified.png b/public/data/ui_gfx/gun_actions/unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/unstable_gunpowder.png b/public/data/ui_gfx/gun_actions/unstable_gunpowder.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/unstable_gunpowder_unidentified.png b/public/data/ui_gfx/gun_actions/unstable_gunpowder_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/vacuum_entities.png b/public/data/ui_gfx/gun_actions/vacuum_entities.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/vacuum_liquid.png b/public/data/ui_gfx/gun_actions/vacuum_liquid.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/vacuum_powder.png b/public/data/ui_gfx/gun_actions/vacuum_powder.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/w_shape.png b/public/data/ui_gfx/gun_actions/w_shape.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/w_shape_unidentified.png b/public/data/ui_gfx/gun_actions/w_shape_unidentified.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/wall_horizontal.png b/public/data/ui_gfx/gun_actions/wall_horizontal.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/wall_square.png b/public/data/ui_gfx/gun_actions/wall_square.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/wall_vertical.png b/public/data/ui_gfx/gun_actions/wall_vertical.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/water_to_poison.png b/public/data/ui_gfx/gun_actions/water_to_poison.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/water_trail.png b/public/data/ui_gfx/gun_actions/water_trail.png old mode 100755 new mode 100644 diff --git a/public/data/ui_gfx/gun_actions/white_hole_big.png b/public/data/ui_gfx/gun_actions/white_hole_big.png new file mode 100644 index 0000000000000000000000000000000000000000..bc193b7dc8dc9104d3f1f727c5cbe436b48cd10e GIT binary patch literal 271 zcmV+q0r38bP)t(c(1DjE2_cmnhqB2mi3z zfXCDPG(;OS#I7l*9xC&J56(wD2z%iB*K;_lEUhuGIjd}&0RCgrQN?4Dj5yLce*hkU VWQ`H#?92cF002ovPDHLkV1g9vZ>q1evr#F9W}4|i)-C@ z(r83}fWA<0Mv)&t8jWk+c>SLByNj~zPy)!q9g0c;&s-YqbUgrAy8s}KMjq|}07a#6 z+-{tJm9zRoI00qbA@Tzhl^Qsi4X|gnw(Vfcw)+gQJG%xZjmG&9WAYjWXLLTqugSaO jbiX+v%b)V%&$J{S4Zny+MHT{{00000NkvXXu0mjfoDX!L literal 0 HcmV?d00001 diff --git a/public/data/ui_gfx/gun_actions/zeta.png b/public/data/ui_gfx/gun_actions/zeta.png old mode 100755 new mode 100644 diff --git a/scripts/generate_entity_map.py b/scripts/generate_entity_map.py index 7adad06..f51e505 100644 --- a/scripts/generate_entity_map.py +++ b/scripts/generate_entity_map.py @@ -2,67 +2,102 @@ from collections import OrderedDict srcFile = "data/scripts/gun/gun_actions.lua" +srcFileBeta = "data/scripts/gun/gun_actions.beta.lua" dstFile = "./src/app/calc/__generated__/entityProjectileMap.ts" +dstFileBeta = "./src/app/calc/__generated__/entityProjectileMap.beta.ts" multiline_comment_pattern = r'--\[\[.*?]]--' singleline_comment_pattern = r'--.*?$' action_pattern = r'(\t+){\s*id\s*=\s*\"(\w+)\".*?\1}' proj_pattern = r'add_projectile(?:|_trigger_hit_world|_trigger_timer|_trigger_death)\(\"([\w/.]+)\"' +related_pattern = r'related_projectiles\s*=\s*\{([\s\w/.,"]*)\}' +related_proj_pattern = r'\s*\"([\w/.]*)\"' -with open(srcFile) as inFile: - content = inFile.read() -# remove comments -content = re.sub(multiline_comment_pattern, lambda m: '', content, flags=re.DOTALL) -content = re.sub(singleline_comment_pattern, '', content, flags=re.MULTILINE) +def processFile(srcFile, dstFile): + with open(srcFile) as inFile: + content = inFile.read() -entity_map = dict() + # remove comments + content = re.sub(multiline_comment_pattern, lambda m: '', content, flags=re.DOTALL) + content = re.sub(singleline_comment_pattern, '', content, flags=re.MULTILINE) -exceptions = [ - 'SUMMON_EGG', - 'FIREWORK', -] + exceptions = [ + 'SUMMON_EGG', + 'FIREWORK', + 'WORM_RAIN' + ] + entity_map = dict() -def add_entity_action(entity_path, action_id, force=False): - if not force and action_id in exceptions: - return + def add_entity_action(entity_path, action_id, force=False): + if not force and action_id in exceptions: + return - if not entity_path.endswith('.xml'): - print(f'warning: invalid entity path: {entity_path} ({action_id})') + if not entity_path.endswith('.xml'): + print(f'warning: invalid entity path: {entity_path} ({action_id})') - if entity_path not in entity_map: - entity_map[entity_path] = list() + if entity_path not in entity_map: + entity_map[entity_path] = list() - entity_map[entity_path].append(action_id) + entity_map[entity_path].append(action_id) + projectile_mismatch_errors = [] -for action_m in re.finditer(action_pattern, content, re.DOTALL): - action_id = action_m.group(2) + for action_m in re.finditer(action_pattern, content, re.DOTALL): + action_id = action_m.group(2) - match_count = 0 - for proj_m in re.finditer(proj_pattern, action_m.group(0)): - match_count += 1 - entity_path = proj_m.group(1) + related_projectiles = [] + for related_m in re.finditer(related_pattern, action_m.group(0)): + for related_proj_m in re.finditer(related_proj_pattern, related_m.group(0)): + related_projectiles.append(related_proj_m.group(1)) - add_entity_action(entity_path, action_id) + match_count = 0 + for proj_m in re.finditer(proj_pattern, action_m.group(0)): + match_count += 1 + entity_path = proj_m.group(1) + if not entity_path in related_projectiles: + projectile_mismatch_errors.append([action_id, entity_path, related_projectiles]) -# hardcode some dynamically generated entity paths -for types in ['pink', 'green', 'blue', 'orange']: - add_entity_action(f'data/entities/projectiles/deck/fireworks/firework_{types}.xml', 'FIREWORK', True) + add_entity_action(entity_path, action_id) -for types in ["monster", "slime", "red", "fire"]: - add_entity_action(f'data/entities/items/pickup/egg_{types}.xml', 'SUMMON_EGG', True) + print('---') + print('These actions have projectiles added, but empty related_projectiles:') + for mismatch in projectile_mismatch_errors: + if len(mismatch[2]) == 0: + print(f'{mismatch[0]}, \`{mismatch[1]}\`, {mismatch[2]}') -lines = list() -lines.append('export const entityToActionId: {[key: string]: string[]} = {') + print('---') + print('These actions have projectiles that do not appear in related_projectiles:') + for mismatch in projectile_mismatch_errors: + if len(mismatch[2]) > 0: + print(f'{mismatch[0]}, \`{mismatch[1]}\`, {mismatch[2]}') -for k, vs in entity_map.items(): - v_str = ','.join([f'\'{v}\'' for v in list(OrderedDict.fromkeys(vs))]) - lines.append(f' \'{k}\': [{v_str}],') + # hardcode the buggy spells which have a different related_projectile + add_entity_action(f'data/entities/projectiles/deck/worm_rain.xml', 'WORM_RAIN', True); + add_entity_action(f'data/entities/projectiles/deck/worm_big.xml', 'WORM_RAIN', True); -lines.append('}') + # hardcode some dynamically generated entity paths + for types in ['pink', 'green', 'blue', 'orange']: + add_entity_action(f'data/entities/projectiles/deck/fireworks/firework_{types}.xml', 'FIREWORK', True) + + for types in ["monster", "slime", "red", "fire"]: + add_entity_action(f'data/entities/items/pickup/egg_{types}.xml', 'SUMMON_EGG', True) + + lines = list() + lines.append('export const entityToActionId: {[key: string]: string[]} = {') + + for k, vs in entity_map.items(): + v_str = ','.join([f'\'{v}\'' for v in list(OrderedDict.fromkeys(vs))]) + lines.append(f' \'{k}\': [{v_str}],') + + lines.append('}') + + return '\n'.join(lines) with open(dstFile, 'w') as outFile: - outFile.write('\n'.join(lines)) + outFile.write(processFiles(srcFile)) + +with open(dstFileBeta, 'w') as outFile: + outFile.write(processFiles(srcFileBeta)) diff --git a/scripts/generate_gun_actions.py b/scripts/generate_gun_actions.py index 4586f6a..36ab15e 100644 --- a/scripts/generate_gun_actions.py +++ b/scripts/generate_gun_actions.py @@ -4,7 +4,9 @@ from re import Match srcFile = 'data/scripts/gun/gun_actions.lua' +srcFileBeta = 'data/scripts/gun/gun_actions.beta.lua' dstFile = 'src/app/calc/__generated__/gun_actions.ts' +dstFileBeta = 'src/app/calc/__generated__/gun_actions.beta.ts' os.makedirs(os.path.dirname(dstFile), exist_ok=True) @@ -153,30 +155,6 @@ class PatternReplace: PatternReplace(r'i <= hand_count', r'i < hand_count', flags=re.MULTILINE), ] -with open(srcFile) as inFile: - content = inFile.read() - -# fix array syntax for top level actions -content = re.sub(bracketArrayPattern.pattern, bracketArrayPattern.replace, content, flags=bracketArrayPattern.flags) - -# remove comments -content = re.sub( - multiLineCommentPattern.pattern, - multiLineCommentPattern.replace, content, - flags=multiLineCommentPattern.flags -) -content = re.sub( - singleLineCommentPattern.pattern, - singleLineCommentPattern.replace, content, - flags=singleLineCommentPattern.flags -) - -# fix array syntax for related projectiles -content = re.sub(relatedPattern.pattern, relatedPattern.replace, content, flags=relatedPattern.flags) - -# convert object fields to ts -content = re.sub(propertiesPattern.pattern, propertiesPattern.replace, content, flags=propertiesPattern.flags) - # convert action function to ts+commented lua # action\s*=\s*function\((.*?)\)(\s*)(.*?)end,(\s*},) # action: (c: C, \1) => {\1\1},\1 @@ -185,7 +163,6 @@ class PatternReplace: 'iteration': ['number', 1], } - def actionReplaceFn(m: Match): argsString = 'c: GunActionState' extraArgs = [s.strip() for s in m.group(1).split(',')] @@ -198,18 +175,47 @@ def actionReplaceFn(m: Match): return f'action: ({argsString}) => {{{m.group(2)}{m.group(3)}}},{m.group(4)}' -content = re.sub(actionPattern.pattern, actionReplaceFn, content, flags=actionPattern.flags) +def processFile(srcFile): + with open(srcFile) as inFile: + content = inFile.read() -for pattern in syntaxPatterns: - content = re.sub(pattern.pattern, pattern.replace, content, flags=pattern.flags) - if pattern.repeat: - oldContent = '' - while oldContent != content: - oldContent = content - content = re.sub(pattern.pattern, pattern.replace, content, flags=pattern.flags) + # fix array syntax for top level actions + content = re.sub(bracketArrayPattern.pattern, bracketArrayPattern.replace, content, flags=bracketArrayPattern.flags) + + # remove comments + content = re.sub( + multiLineCommentPattern.pattern, + multiLineCommentPattern.replace, content, + flags=multiLineCommentPattern.flags + ) + content = re.sub( + singleLineCommentPattern.pattern, + singleLineCommentPattern.replace, content, + flags=singleLineCommentPattern.flags + ) + + # fix array syntax for related projectiles + content = re.sub(relatedPattern.pattern, relatedPattern.replace, content, flags=relatedPattern.flags) + + # convert object fields to ts + content = re.sub(propertiesPattern.pattern, propertiesPattern.replace, content, flags=propertiesPattern.flags) + + content = re.sub(actionPattern.pattern, actionReplaceFn, content, flags=actionPattern.flags) + + for pattern in syntaxPatterns: + content = re.sub(pattern.pattern, pattern.replace, content, flags=pattern.flags) + if pattern.repeat: + oldContent = '' + while oldContent != content: + oldContent = content + content = re.sub(pattern.pattern, pattern.replace, content, flags=pattern.flags) + + # insert imports + content = imports + content -# insert imports -content = imports + content with open(dstFile, 'w') as outFile: - outFile.write(content) + outFile.write(processFiles(srcFile)) + +with open(dstFileBeta, 'w') as outFile: + outFile.write(processFiles(srcFileBeta)) diff --git a/scripts/generate_translations.py b/scripts/generate_translations.py index c20182b..4e48b6f 100644 --- a/scripts/generate_translations.py +++ b/scripts/generate_translations.py @@ -1,9 +1,12 @@ import csv +# You may need to add 'key' to the first column in common.csv srcFile = "./data_base/translations/common.csv" +srcFileBeta = "./data_base/translations/common.beta.csv" dstFile = "./src/app/calc/__generated__/translations.ts" translations = {} +translationsBeta = {} language = 'en' @@ -12,9 +15,18 @@ for row in reader: translations[row['key']] = row[language] +try: + inFileBeta = open(srcFileBeta) +except IOError: + print('beta translations not found, skipping') +with inFileBeta: + reader = csv.DictReader(inFileBeta) + for row in reader: + translations[row['key']] = row[language] + with open(dstFile, 'w') as outFile: outFile.write('export const translations = {\n') for k, t in translations.items(): - outFile.write('\t"' + k + "\": \"" + t + "\",\n") + outFile.write(' "' + k + "\": \"" + t + "\",\n") outFile.write('};\n') diff --git a/src/app/calc/__generated__/entityProjectileMap.beta.ts b/src/app/calc/__generated__/entityProjectileMap.beta.ts new file mode 100644 index 0000000..9cae498 --- /dev/null +++ b/src/app/calc/__generated__/entityProjectileMap.beta.ts @@ -0,0 +1,201 @@ +export const entityToActionId: {[key: string]: string[]} = { + 'data/entities/projectiles/bomb.xml': ['BOMB'], + 'data/entities/projectiles/deck/light_bullet.xml': ['LIGHT_BULLET','LIGHT_BULLET_TRIGGER','LIGHT_BULLET_TIMER'], + 'data/entities/projectiles/deck/light_bullet_blue.xml': ['LIGHT_BULLET_TRIGGER_2'], + 'data/entities/projectiles/deck/bullet.xml': ['BULLET','BULLET_TRIGGER','BULLET_TIMER'], + 'data/entities/projectiles/deck/bullet_heavy.xml': ['HEAVY_BULLET','HEAVY_BULLET_TRIGGER','HEAVY_BULLET_TIMER'], + 'data/entities/projectiles/deck/light_bullet_air.xml': ['AIR_BULLET'], + 'data/entities/projectiles/deck/bullet_slow.xml': ['SLOW_BULLET','SLOW_BULLET_TRIGGER','SLOW_BULLET_TIMER'], + 'data/entities/projectiles/deck/hook.xml': ['HOOK'], + 'data/entities/projectiles/deck/black_hole.xml': ['BLACK_HOLE','BLACK_HOLE_DEATH_TRIGGER'], + 'data/entities/projectiles/deck/black_hole_big.xml': ['BLACK_HOLE_BIG'], + 'data/entities/projectiles/deck/white_hole_big.xml': ['WHITE_HOLE_BIG'], + 'data/entities/projectiles/deck/black_hole_giga.xml': ['BLACK_HOLE_GIGA'], + 'data/entities/projectiles/deck/tentacle_portal.xml': ['TENTACLE_PORTAL'], + 'data/entities/projectiles/deck/spitter.xml': ['SPITTER','SPITTER_TIMER'], + 'data/entities/projectiles/deck/spitter_tier_2.xml': ['SPITTER_TIER_2','SPITTER_TIER_2_TIMER'], + 'data/entities/projectiles/deck/spitter_tier_3.xml': ['SPITTER_TIER_3','SPITTER_TIER_3_TIMER'], + 'data/entities/projectiles/deck/bubbleshot.xml': ['BUBBLESHOT','BUBBLESHOT_TRIGGER'], + 'data/entities/projectiles/deck/disc_bullet.xml': ['DISC_BULLET'], + 'data/entities/projectiles/deck/disc_bullet_big.xml': ['DISC_BULLET_BIG'], + 'data/entities/projectiles/deck/disc_bullet_bigger.xml': ['DISC_BULLET_BIGGER'], + 'data/entities/projectiles/deck/bouncy_orb.xml': ['BOUNCY_ORB','BOUNCY_ORB_TIMER'], + 'data/entities/projectiles/deck/rubber_ball.xml': ['RUBBER_BALL'], + 'data/entities/projectiles/deck/arrow.xml': ['ARROW'], + 'data/entities/projectiles/deck/pollen.xml': ['POLLEN'], + 'data/entities/projectiles/deck/lance.xml': ['LANCE'], + 'data/entities/projectiles/deck/rocket.xml': ['ROCKET'], + 'data/entities/projectiles/deck/rocket_tier_2.xml': ['ROCKET_TIER_2'], + 'data/entities/projectiles/deck/rocket_tier_3.xml': ['ROCKET_TIER_3'], + 'data/entities/projectiles/deck/grenade.xml': ['GRENADE','GRENADE_TRIGGER'], + 'data/entities/projectiles/deck/grenade_tier_2.xml': ['GRENADE_TIER_2'], + 'data/entities/projectiles/deck/grenade_tier_3.xml': ['GRENADE_TIER_3'], + 'data/entities/projectiles/deck/grenade_anti.xml': ['GRENADE_ANTI'], + 'data/entities/projectiles/deck/grenade_large.xml': ['GRENADE_LARGE'], + 'data/entities/projectiles/deck/mine.xml': ['MINE','MINE_DEATH_TRIGGER'], + 'data/entities/projectiles/deck/pipe_bomb.xml': ['PIPE_BOMB','PIPE_BOMB_DEATH_TRIGGER'], + 'data/entities/projectiles/deck/fish.xml': ['FISH'], + 'data/entities/projectiles/deck/exploding_deer.xml': ['EXPLODING_DEER'], + 'data/entities/projectiles/deck/duck.xml': ['EXPLODING_DUCKS'], + 'data/entities/projectiles/deck/worm_shot.xml': ['WORM_SHOT'], + 'data/entities/projectiles/deck/bomb_detonator.xml': ['BOMB_DETONATOR'], + 'data/entities/projectiles/deck/laser.xml': ['LASER'], + 'data/entities/projectiles/deck/megalaser_beam.xml': ['MEGALASER'], + 'data/entities/projectiles/deck/megalaser.xml': ['MEGALASER'], + 'data/entities/projectiles/deck/lightning.xml': ['LIGHTNING'], + 'data/entities/projectiles/deck/ball_lightning.xml': ['BALL_LIGHTNING'], + 'data/entities/projectiles/deck/orb_laseremitter.xml': ['LASER_EMITTER'], + 'data/entities/projectiles/deck/orb_laseremitter_four.xml': ['LASER_EMITTER_FOUR'], + 'data/entities/projectiles/deck/orb_laseremitter_cutter.xml': ['LASER_EMITTER_CUTTER'], + 'data/entities/projectiles/deck/digger.xml': ['DIGGER'], + 'data/entities/projectiles/deck/powerdigger.xml': ['POWERDIGGER'], + 'data/entities/projectiles/deck/chainsaw.xml': ['CHAINSAW'], + 'data/entities/projectiles/deck/luminous_drill.xml': ['LUMINOUS_DRILL','LASER_LUMINOUS_DRILL'], + 'data/entities/projectiles/deck/tentacle.xml': ['TENTACLE','TENTACLE_TIMER'], + 'data/entities/projectiles/deck/heal_bullet.xml': ['HEAL_BULLET'], + 'data/entities/projectiles/deck/spiral_shot.xml': ['SPIRAL_SHOT'], + 'data/entities/projectiles/deck/magic_shield_start.xml': ['MAGIC_SHIELD'], + 'data/entities/projectiles/deck/big_magic_shield_start.xml': ['BIG_MAGIC_SHIELD'], + 'data/entities/projectiles/deck/chain_bolt.xml': ['CHAIN_BOLT'], + 'data/entities/projectiles/deck/fireball.xml': ['FIREBALL'], + 'data/entities/projectiles/deck/meteor.xml': ['METEOR'], + 'data/entities/projectiles/deck/flamethrower.xml': ['FLAMETHROWER'], + 'data/entities/projectiles/deck/iceball.xml': ['ICEBALL'], + 'data/entities/projectiles/deck/slime.xml': ['SLIMEBALL'], + 'data/entities/projectiles/darkflame.xml': ['DARKFLAME'], + 'data/entities/projectiles/deck/rocket_player.xml': ['MISSILE'], + 'data/entities/projectiles/deck/machinegun_bullet.xml': ['FUNKY_SPELL'], + 'data/entities/projectiles/deck/pebble_player.xml': ['PEBBLE'], + 'data/entities/projectiles/deck/tnt.xml': ['DYNAMITE'], + 'data/entities/projectiles/deck/glitter_bomb.xml': ['GLITTER_BOMB'], + 'data/entities/projectiles/deck/buckshot_player.xml': ['BUCKSHOT'], + 'data/entities/projectiles/deck/freezing_gaze_beam.xml': ['FREEZING_GAZE'], + 'data/entities/projectiles/deck/glowing_bolt.xml': ['GLOWING_BOLT'], + 'data/entities/projectiles/deck/spore_pod.xml': ['SPORE_POD'], + 'data/entities/projectiles/deck/glue_shot.xml': ['GLUE_SHOT'], + 'data/entities/projectiles/bomb_holy.xml': ['BOMB_HOLY'], + 'data/entities/projectiles/bomb_holy_giga.xml': ['BOMB_HOLY_GIGA'], + 'data/entities/projectiles/propane_tank.xml': ['PROPANE_TANK'], + 'data/entities/projectiles/bomb_cart.xml': ['BOMB_CART'], + 'data/entities/projectiles/orb_cursed.xml': ['CURSED_ORB'], + 'data/entities/projectiles/orb_expanding.xml': ['EXPANDING_ORB'], + 'data/entities/projectiles/deck/crumbling_earth.xml': ['CRUMBLING_EARTH'], + 'data/entities/projectiles/deck/rock.xml': ['SUMMON_ROCK'], + 'data/entities/items/pickup/egg_hollow.xml': ['SUMMON_HOLLOW_EGG'], + 'data/entities/projectiles/deck/tntbox.xml': ['TNTBOX'], + 'data/entities/projectiles/deck/tntbox_big.xml': ['TNTBOX_BIG'], + 'data/entities/projectiles/deck/swarm_fly.xml': ['SWARM_FLY'], + 'data/entities/projectiles/deck/swarm_firebug.xml': ['SWARM_FIREBUG'], + 'data/entities/projectiles/deck/swarm_wasp.xml': ['SWARM_WASP'], + 'data/entities/projectiles/deck/friend_fly.xml': ['FRIEND_FLY'], + 'data/entities/projectiles/deck/acidshot.xml': ['ACIDSHOT'], + 'data/entities/projectiles/thunderball.xml': ['THUNDERBALL'], + 'data/entities/projectiles/deck/firebomb.xml': ['FIREBOMB'], + 'data/entities/projectiles/chunk_of_soil.xml': ['SOILBALL'], + 'data/entities/projectiles/deck/death_cross.xml': ['DEATH_CROSS'], + 'data/entities/projectiles/deck/death_cross_big.xml': ['DEATH_CROSS_BIG'], + 'data/entities/projectiles/deck/infestation.xml': ['INFESTATION'], + 'data/entities/projectiles/deck/wall_horizontal.xml': ['WALL_HORIZONTAL'], + 'data/entities/projectiles/deck/wall_vertical.xml': ['WALL_VERTICAL'], + 'data/entities/projectiles/deck/wall_square.xml': ['WALL_SQUARE'], + 'data/entities/projectiles/deck/temporary_wall.xml': ['TEMPORARY_WALL'], + 'data/entities/projectiles/deck/temporary_platform.xml': ['TEMPORARY_PLATFORM'], + 'data/entities/projectiles/deck/purple_explosion_field.xml': ['PURPLE_EXPLOSION_FIELD'], + 'data/entities/projectiles/deck/delayed_spell.xml': ['DELAYED_SPELL'], + 'data/entities/projectiles/deck/long_distance_cast.xml': ['LONG_DISTANCE_CAST'], + 'data/entities/projectiles/deck/teleport_cast.xml': ['TELEPORT_CAST'], + 'data/entities/projectiles/deck/super_teleport_cast.xml': ['SUPER_TELEPORT_CAST'], + 'data/entities/projectiles/deck/mist_radioactive.xml': ['MIST_RADIOACTIVE'], + 'data/entities/projectiles/deck/mist_alcohol.xml': ['MIST_ALCOHOL'], + 'data/entities/projectiles/deck/mist_slime.xml': ['MIST_SLIME'], + 'data/entities/projectiles/deck/mist_blood.xml': ['MIST_BLOOD'], + 'data/entities/projectiles/deck/circle_fire.xml': ['CIRCLE_FIRE'], + 'data/entities/projectiles/deck/circle_acid.xml': ['CIRCLE_ACID'], + 'data/entities/projectiles/deck/circle_oil.xml': ['CIRCLE_OIL'], + 'data/entities/projectiles/deck/circle_water.xml': ['CIRCLE_WATER'], + 'data/entities/projectiles/deck/material_water.xml': ['MATERIAL_WATER'], + 'data/entities/projectiles/deck/material_oil.xml': ['MATERIAL_OIL'], + 'data/entities/projectiles/deck/material_blood.xml': ['MATERIAL_BLOOD'], + 'data/entities/projectiles/deck/material_acid.xml': ['MATERIAL_ACID'], + 'data/entities/projectiles/deck/material_cement.xml': ['MATERIAL_CEMENT'], + 'data/entities/projectiles/deck/teleport_projectile.xml': ['TELEPORT_PROJECTILE'], + 'data/entities/projectiles/deck/teleport_projectile_short.xml': ['TELEPORT_PROJECTILE_SHORT'], + 'data/entities/projectiles/deck/teleport_projectile_static.xml': ['TELEPORT_PROJECTILE_STATIC'], + 'data/entities/projectiles/deck/swapper.xml': ['SWAPPER_PROJECTILE'], + 'data/entities/projectiles/deck/teleport_projectile_closer.xml': ['TELEPORT_PROJECTILE_CLOSER'], + 'data/entities/projectiles/deck/nuke.xml': ['NUKE'], + 'data/entities/projectiles/deck/nuke_giga.xml': ['NUKE_GIGA'], + 'data/entities/projectiles/deck/wand_ghost_player.xml': ['SUMMON_WANDGHOST'], + 'data/entities/particles/image_emitters/wand_effect.xml': ['SUMMON_WANDGHOST'], + 'data/entities/projectiles/deck/touch_gold.xml': ['TOUCH_GOLD'], + 'data/entities/projectiles/deck/touch_water.xml': ['TOUCH_WATER'], + 'data/entities/projectiles/deck/touch_oil.xml': ['TOUCH_OIL'], + 'data/entities/projectiles/deck/touch_alcohol.xml': ['TOUCH_ALCOHOL'], + 'data/entities/projectiles/deck/touch_blood.xml': ['TOUCH_BLOOD'], + 'data/entities/projectiles/deck/touch_smoke.xml': ['TOUCH_SMOKE'], + 'data/entities/projectiles/deck/destruction.xml': ['DESTRUCTION'], + 'data/entities/projectiles/deck/explosion.xml': ['EXPLOSION'], + 'data/entities/projectiles/deck/explosion_light.xml': ['EXPLOSION_LIGHT'], + 'data/entities/projectiles/deck/fireblast.xml': ['FIRE_BLAST'], + 'data/entities/projectiles/deck/poison_blast.xml': ['POISON_BLAST'], + 'data/entities/projectiles/deck/alcohol_blast.xml': ['ALCOHOL_BLAST'], + 'data/entities/projectiles/deck/thunder_blast.xml': ['THUNDER_BLAST'], + 'data/entities/projectiles/deck/berserk_field.xml': ['BERSERK_FIELD'], + 'data/entities/projectiles/deck/polymorph_field.xml': ['POLYMORPH_FIELD'], + 'data/entities/projectiles/deck/chaos_polymorph_field.xml': ['CHAOS_POLYMORPH_FIELD'], + 'data/entities/projectiles/deck/electrocution_field.xml': ['ELECTROCUTION_FIELD'], + 'data/entities/projectiles/deck/freeze_field.xml': ['FREEZE_FIELD'], + 'data/entities/projectiles/deck/regeneration_field.xml': ['REGENERATION_FIELD'], + 'data/entities/projectiles/deck/teleportation_field.xml': ['TELEPORTATION_FIELD'], + 'data/entities/projectiles/deck/levitation_field.xml': ['LEVITATION_FIELD'], + 'data/entities/projectiles/deck/shield_field.xml': ['SHIELD_FIELD'], + 'data/entities/projectiles/deck/projectile_transmutation_field.xml': ['PROJECTILE_TRANSMUTATION_FIELD'], + 'data/entities/projectiles/deck/projectile_thunder_field.xml': ['PROJECTILE_THUNDER_FIELD'], + 'data/entities/projectiles/deck/projectile_gravity_field.xml': ['PROJECTILE_GRAVITY_FIELD'], + 'data/entities/projectiles/deck/vacuum_powder.xml': ['VACUUM_POWDER'], + 'data/entities/projectiles/deck/vacuum_liquid.xml': ['VACUUM_LIQUID'], + 'data/entities/projectiles/deck/vacuum_entities.xml': ['VACUUM_ENTITIES'], + 'data/entities/projectiles/deck/sea_lava.xml': ['SEA_LAVA'], + 'data/entities/projectiles/deck/sea_alcohol.xml': ['SEA_ALCOHOL'], + 'data/entities/projectiles/deck/sea_oil.xml': ['SEA_OIL'], + 'data/entities/projectiles/deck/sea_water.xml': ['SEA_WATER'], + 'data/entities/projectiles/deck/sea_swamp.xml': ['SEA_SWAMP'], + 'data/entities/projectiles/deck/sea_acid.xml': ['SEA_ACID'], + 'data/entities/projectiles/deck/sea_acid_gas.xml': ['SEA_ACID_GAS'], + 'data/entities/projectiles/deck/cloud_water.xml': ['CLOUD_WATER'], + 'data/entities/projectiles/deck/cloud_oil.xml': ['CLOUD_OIL'], + 'data/entities/projectiles/deck/cloud_blood.xml': ['CLOUD_BLOOD'], + 'data/entities/projectiles/deck/cloud_acid.xml': ['CLOUD_ACID'], + 'data/entities/projectiles/deck/cloud_thunder.xml': ['CLOUD_THUNDER'], + 'data/entities/projectiles/deck/xray.xml': ['X_RAY'], + 'data/entities/projectiles/deck/ocarina/ocarina_a.xml': ['OCARINA_A'], + 'data/entities/projectiles/deck/ocarina/ocarina_b.xml': ['OCARINA_B'], + 'data/entities/projectiles/deck/ocarina/ocarina_c.xml': ['OCARINA_C'], + 'data/entities/projectiles/deck/ocarina/ocarina_d.xml': ['OCARINA_D'], + 'data/entities/projectiles/deck/ocarina/ocarina_e.xml': ['OCARINA_E'], + 'data/entities/projectiles/deck/ocarina/ocarina_f.xml': ['OCARINA_F'], + 'data/entities/projectiles/deck/ocarina/ocarina_gsharp.xml': ['OCARINA_GSHARP'], + 'data/entities/projectiles/deck/ocarina/ocarina_a2.xml': ['OCARINA_A2'], + 'data/entities/projectiles/deck/kantele/kantele_a.xml': ['KANTELE_A'], + 'data/entities/projectiles/deck/kantele/kantele_d.xml': ['KANTELE_D'], + 'data/entities/projectiles/deck/kantele/kantele_dis.xml': ['KANTELE_DIS'], + 'data/entities/projectiles/deck/kantele/kantele_e.xml': ['KANTELE_E'], + 'data/entities/projectiles/deck/kantele/kantele_g.xml': ['KANTELE_G'], + 'data/entities/projectiles/deck/all_nukes.xml': ['ALL_NUKES'], + 'data/entities/projectiles/deck/all_discs.xml': ['ALL_DISCS'], + 'data/entities/projectiles/deck/all_rockets.xml': ['ALL_ROCKETS'], + 'data/entities/projectiles/deck/all_deathcrosses.xml': ['ALL_DEATHCROSSES'], + 'data/entities/projectiles/deck/all_blackholes.xml': ['ALL_BLACKHOLES'], + 'data/entities/projectiles/deck/all_acid.xml': ['ALL_ACID'], + 'data/entities/projectiles/deck/summon_portal.xml': ['SUMMON_PORTAL'], + 'data/entities/projectiles/deck/meteor_rain.xml': ['METEOR_RAIN'], + 'data/entities/projectiles/deck/worm_rain.xml': ['WORM_RAIN'], + 'data/entities/projectiles/deck/fireworks/firework_pink.xml': ['FIREWORK'], + 'data/entities/projectiles/deck/fireworks/firework_green.xml': ['FIREWORK'], + 'data/entities/projectiles/deck/fireworks/firework_blue.xml': ['FIREWORK'], + 'data/entities/projectiles/deck/fireworks/firework_orange.xml': ['FIREWORK'], + 'data/entities/items/pickup/egg_monster.xml': ['SUMMON_EGG'], + 'data/entities/items/pickup/egg_slime.xml': ['SUMMON_EGG'], + 'data/entities/items/pickup/egg_red.xml': ['SUMMON_EGG'], + 'data/entities/items/pickup/egg_fire.xml': ['SUMMON_EGG'], +} \ No newline at end of file diff --git a/src/app/calc/__generated__/entityProjectileMap.ts b/src/app/calc/__generated__/entityProjectileMap.ts index f70d4b2..c74f783 100644 --- a/src/app/calc/__generated__/entityProjectileMap.ts +++ b/src/app/calc/__generated__/entityProjectileMap.ts @@ -1,58 +1,23 @@ -export const entityToActionId: { [key: string]: string[] } = { +export const entityToActionId: {[key: string]: string[]} = { 'data/entities/projectiles/bomb.xml': ['BOMB'], - 'data/entities/projectiles/deck/light_bullet.xml': [ - 'LIGHT_BULLET', - 'LIGHT_BULLET_TRIGGER', - 'LIGHT_BULLET_TIMER', - ], - 'data/entities/projectiles/deck/light_bullet_blue.xml': [ - 'LIGHT_BULLET_TRIGGER_2', - ], - 'data/entities/projectiles/deck/bullet.xml': [ - 'BULLET', - 'BULLET_TRIGGER', - 'BULLET_TIMER', - ], - 'data/entities/projectiles/deck/bullet_heavy.xml': [ - 'HEAVY_BULLET', - 'HEAVY_BULLET_TRIGGER', - 'HEAVY_BULLET_TIMER', - ], + 'data/entities/projectiles/deck/light_bullet.xml': ['LIGHT_BULLET','LIGHT_BULLET_TRIGGER','LIGHT_BULLET_TIMER'], + 'data/entities/projectiles/deck/light_bullet_blue.xml': ['LIGHT_BULLET_TRIGGER_2'], + 'data/entities/projectiles/deck/bullet.xml': ['BULLET','BULLET_TRIGGER','BULLET_TIMER'], + 'data/entities/projectiles/deck/bullet_heavy.xml': ['HEAVY_BULLET','HEAVY_BULLET_TRIGGER','HEAVY_BULLET_TIMER'], 'data/entities/projectiles/deck/light_bullet_air.xml': ['AIR_BULLET'], - 'data/entities/projectiles/deck/bullet_slow.xml': [ - 'SLOW_BULLET', - 'SLOW_BULLET_TRIGGER', - 'SLOW_BULLET_TIMER', - ], - 'data/entities/projectiles/deck/black_hole.xml': [ - 'BLACK_HOLE', - 'BLACK_HOLE_DEATH_TRIGGER', - ], + 'data/entities/projectiles/deck/bullet_slow.xml': ['SLOW_BULLET','SLOW_BULLET_TRIGGER','SLOW_BULLET_TIMER'], + 'data/entities/projectiles/deck/black_hole.xml': ['BLACK_HOLE','BLACK_HOLE_DEATH_TRIGGER'], 'data/entities/projectiles/deck/black_hole_big.xml': ['BLACK_HOLE_BIG'], 'data/entities/projectiles/deck/black_hole_giga.xml': ['BLACK_HOLE_GIGA'], 'data/entities/projectiles/deck/tentacle_portal.xml': ['TENTACLE_PORTAL'], - 'data/entities/projectiles/deck/spitter.xml': ['SPITTER', 'SPITTER_TIMER'], - 'data/entities/projectiles/deck/spitter_tier_2.xml': [ - 'SPITTER_TIER_2', - 'SPITTER_TIER_2_TIMER', - ], - 'data/entities/projectiles/deck/spitter_tier_3.xml': [ - 'SPITTER_TIER_3', - 'SPITTER_TIER_3_TIMER', - ], - 'data/entities/projectiles/deck/bubbleshot.xml': [ - 'BUBBLESHOT', - 'BUBBLESHOT_TRIGGER', - ], + 'data/entities/projectiles/deck/spitter.xml': ['SPITTER','SPITTER_TIMER'], + 'data/entities/projectiles/deck/spitter_tier_2.xml': ['SPITTER_TIER_2','SPITTER_TIER_2_TIMER'], + 'data/entities/projectiles/deck/spitter_tier_3.xml': ['SPITTER_TIER_3','SPITTER_TIER_3_TIMER'], + 'data/entities/projectiles/deck/bubbleshot.xml': ['BUBBLESHOT','BUBBLESHOT_TRIGGER'], 'data/entities/projectiles/deck/disc_bullet.xml': ['DISC_BULLET'], 'data/entities/projectiles/deck/disc_bullet_big.xml': ['DISC_BULLET_BIG'], - 'data/entities/projectiles/deck/disc_bullet_bigger.xml': [ - 'DISC_BULLET_BIGGER', - ], - 'data/entities/projectiles/deck/bouncy_orb.xml': [ - 'BOUNCY_ORB', - 'BOUNCY_ORB_TIMER', - ], + 'data/entities/projectiles/deck/disc_bullet_bigger.xml': ['DISC_BULLET_BIGGER'], + 'data/entities/projectiles/deck/bouncy_orb.xml': ['BOUNCY_ORB','BOUNCY_ORB_TIMER'], 'data/entities/projectiles/deck/rubber_ball.xml': ['RUBBER_BALL'], 'data/entities/projectiles/deck/arrow.xml': ['ARROW'], 'data/entities/projectiles/deck/pollen.xml': ['POLLEN'], @@ -60,16 +25,13 @@ export const entityToActionId: { [key: string]: string[] } = { 'data/entities/projectiles/deck/rocket.xml': ['ROCKET'], 'data/entities/projectiles/deck/rocket_tier_2.xml': ['ROCKET_TIER_2'], 'data/entities/projectiles/deck/rocket_tier_3.xml': ['ROCKET_TIER_3'], - 'data/entities/projectiles/deck/grenade.xml': ['GRENADE', 'GRENADE_TRIGGER'], + 'data/entities/projectiles/deck/grenade.xml': ['GRENADE','GRENADE_TRIGGER'], 'data/entities/projectiles/deck/grenade_tier_2.xml': ['GRENADE_TIER_2'], 'data/entities/projectiles/deck/grenade_tier_3.xml': ['GRENADE_TIER_3'], 'data/entities/projectiles/deck/grenade_anti.xml': ['GRENADE_ANTI'], 'data/entities/projectiles/deck/grenade_large.xml': ['GRENADE_LARGE'], - 'data/entities/projectiles/deck/mine.xml': ['MINE', 'MINE_DEATH_TRIGGER'], - 'data/entities/projectiles/deck/pipe_bomb.xml': [ - 'PIPE_BOMB', - 'PIPE_BOMB_DEATH_TRIGGER', - ], + 'data/entities/projectiles/deck/mine.xml': ['MINE','MINE_DEATH_TRIGGER'], + 'data/entities/projectiles/deck/pipe_bomb.xml': ['PIPE_BOMB','PIPE_BOMB_DEATH_TRIGGER'], 'data/entities/projectiles/deck/exploding_deer.xml': ['EXPLODING_DEER'], 'data/entities/projectiles/deck/duck.xml': ['EXPLODING_DUCKS'], 'data/entities/projectiles/deck/worm_shot.xml': ['WORM_SHOT'], @@ -80,26 +42,17 @@ export const entityToActionId: { [key: string]: string[] } = { 'data/entities/projectiles/deck/lightning.xml': ['LIGHTNING'], 'data/entities/projectiles/deck/ball_lightning.xml': ['BALL_LIGHTNING'], 'data/entities/projectiles/deck/orb_laseremitter.xml': ['LASER_EMITTER'], - 'data/entities/projectiles/deck/orb_laseremitter_four.xml': [ - 'LASER_EMITTER_FOUR', - ], - 'data/entities/projectiles/deck/orb_laseremitter_cutter.xml': [ - 'LASER_EMITTER_CUTTER', - ], + 'data/entities/projectiles/deck/orb_laseremitter_four.xml': ['LASER_EMITTER_FOUR'], + 'data/entities/projectiles/deck/orb_laseremitter_cutter.xml': ['LASER_EMITTER_CUTTER'], 'data/entities/projectiles/deck/digger.xml': ['DIGGER'], 'data/entities/projectiles/deck/powerdigger.xml': ['POWERDIGGER'], 'data/entities/projectiles/deck/chainsaw.xml': ['CHAINSAW'], - 'data/entities/projectiles/deck/luminous_drill.xml': [ - 'LUMINOUS_DRILL', - 'LASER_LUMINOUS_DRILL', - ], - 'data/entities/projectiles/deck/tentacle.xml': ['TENTACLE', 'TENTACLE_TIMER'], + 'data/entities/projectiles/deck/luminous_drill.xml': ['LUMINOUS_DRILL','LASER_LUMINOUS_DRILL'], + 'data/entities/projectiles/deck/tentacle.xml': ['TENTACLE','TENTACLE_TIMER'], 'data/entities/projectiles/deck/heal_bullet.xml': ['HEAL_BULLET'], 'data/entities/projectiles/deck/spiral_shot.xml': ['SPIRAL_SHOT'], 'data/entities/projectiles/deck/magic_shield_start.xml': ['MAGIC_SHIELD'], - 'data/entities/projectiles/deck/big_magic_shield_start.xml': [ - 'BIG_MAGIC_SHIELD', - ], + 'data/entities/projectiles/deck/big_magic_shield_start.xml': ['BIG_MAGIC_SHIELD'], 'data/entities/projectiles/deck/chain_bolt.xml': ['CHAIN_BOLT'], 'data/entities/projectiles/deck/fireball.xml': ['FIREBALL'], 'data/entities/projectiles/deck/meteor.xml': ['METEOR'], @@ -143,20 +96,12 @@ export const entityToActionId: { [key: string]: string[] } = { 'data/entities/projectiles/deck/wall_vertical.xml': ['WALL_VERTICAL'], 'data/entities/projectiles/deck/wall_square.xml': ['WALL_SQUARE'], 'data/entities/projectiles/deck/temporary_wall.xml': ['TEMPORARY_WALL'], - 'data/entities/projectiles/deck/temporary_platform.xml': [ - 'TEMPORARY_PLATFORM', - ], - 'data/entities/projectiles/deck/purple_explosion_field.xml': [ - 'PURPLE_EXPLOSION_FIELD', - ], + 'data/entities/projectiles/deck/temporary_platform.xml': ['TEMPORARY_PLATFORM'], + 'data/entities/projectiles/deck/purple_explosion_field.xml': ['PURPLE_EXPLOSION_FIELD'], 'data/entities/projectiles/deck/delayed_spell.xml': ['DELAYED_SPELL'], - 'data/entities/projectiles/deck/long_distance_cast.xml': [ - 'LONG_DISTANCE_CAST', - ], + 'data/entities/projectiles/deck/long_distance_cast.xml': ['LONG_DISTANCE_CAST'], 'data/entities/projectiles/deck/teleport_cast.xml': ['TELEPORT_CAST'], - 'data/entities/projectiles/deck/super_teleport_cast.xml': [ - 'SUPER_TELEPORT_CAST', - ], + 'data/entities/projectiles/deck/super_teleport_cast.xml': ['SUPER_TELEPORT_CAST'], 'data/entities/projectiles/deck/mist_radioactive.xml': ['MIST_RADIOACTIVE'], 'data/entities/projectiles/deck/mist_alcohol.xml': ['MIST_ALCOHOL'], 'data/entities/projectiles/deck/mist_slime.xml': ['MIST_SLIME'], @@ -170,25 +115,15 @@ export const entityToActionId: { [key: string]: string[] } = { 'data/entities/projectiles/deck/material_blood.xml': ['MATERIAL_BLOOD'], 'data/entities/projectiles/deck/material_acid.xml': ['MATERIAL_ACID'], 'data/entities/projectiles/deck/material_cement.xml': ['MATERIAL_CEMENT'], - 'data/entities/projectiles/deck/teleport_projectile.xml': [ - 'TELEPORT_PROJECTILE', - ], - 'data/entities/projectiles/deck/teleport_projectile_short.xml': [ - 'TELEPORT_PROJECTILE_SHORT', - ], - 'data/entities/projectiles/deck/teleport_projectile_static.xml': [ - 'TELEPORT_PROJECTILE_STATIC', - ], + 'data/entities/projectiles/deck/teleport_projectile.xml': ['TELEPORT_PROJECTILE'], + 'data/entities/projectiles/deck/teleport_projectile_short.xml': ['TELEPORT_PROJECTILE_SHORT'], + 'data/entities/projectiles/deck/teleport_projectile_static.xml': ['TELEPORT_PROJECTILE_STATIC'], 'data/entities/projectiles/deck/swapper.xml': ['SWAPPER_PROJECTILE'], - 'data/entities/projectiles/deck/teleport_projectile_closer.xml': [ - 'TELEPORT_PROJECTILE_CLOSER', - ], + 'data/entities/projectiles/deck/teleport_projectile_closer.xml': ['TELEPORT_PROJECTILE_CLOSER'], 'data/entities/projectiles/deck/nuke.xml': ['NUKE'], 'data/entities/projectiles/deck/nuke_giga.xml': ['NUKE_GIGA'], 'data/entities/projectiles/deck/wand_ghost_player.xml': ['SUMMON_WANDGHOST'], - 'data/entities/particles/image_emitters/wand_effect.xml': [ - 'SUMMON_WANDGHOST', - ], + 'data/entities/particles/image_emitters/wand_effect.xml': ['SUMMON_WANDGHOST'], 'data/entities/projectiles/deck/touch_gold.xml': ['TOUCH_GOLD'], 'data/entities/projectiles/deck/touch_water.xml': ['TOUCH_WATER'], 'data/entities/projectiles/deck/touch_oil.xml': ['TOUCH_OIL'], @@ -204,30 +139,16 @@ export const entityToActionId: { [key: string]: string[] } = { 'data/entities/projectiles/deck/thunder_blast.xml': ['THUNDER_BLAST'], 'data/entities/projectiles/deck/berserk_field.xml': ['BERSERK_FIELD'], 'data/entities/projectiles/deck/polymorph_field.xml': ['POLYMORPH_FIELD'], - 'data/entities/projectiles/deck/chaos_polymorph_field.xml': [ - 'CHAOS_POLYMORPH_FIELD', - ], - 'data/entities/projectiles/deck/electrocution_field.xml': [ - 'ELECTROCUTION_FIELD', - ], + 'data/entities/projectiles/deck/chaos_polymorph_field.xml': ['CHAOS_POLYMORPH_FIELD'], + 'data/entities/projectiles/deck/electrocution_field.xml': ['ELECTROCUTION_FIELD'], 'data/entities/projectiles/deck/freeze_field.xml': ['FREEZE_FIELD'], - 'data/entities/projectiles/deck/regeneration_field.xml': [ - 'REGENERATION_FIELD', - ], - 'data/entities/projectiles/deck/teleportation_field.xml': [ - 'TELEPORTATION_FIELD', - ], + 'data/entities/projectiles/deck/regeneration_field.xml': ['REGENERATION_FIELD'], + 'data/entities/projectiles/deck/teleportation_field.xml': ['TELEPORTATION_FIELD'], 'data/entities/projectiles/deck/levitation_field.xml': ['LEVITATION_FIELD'], 'data/entities/projectiles/deck/shield_field.xml': ['SHIELD_FIELD'], - 'data/entities/projectiles/deck/projectile_transmutation_field.xml': [ - 'PROJECTILE_TRANSMUTATION_FIELD', - ], - 'data/entities/projectiles/deck/projectile_thunder_field.xml': [ - 'PROJECTILE_THUNDER_FIELD', - ], - 'data/entities/projectiles/deck/projectile_gravity_field.xml': [ - 'PROJECTILE_GRAVITY_FIELD', - ], + 'data/entities/projectiles/deck/projectile_transmutation_field.xml': ['PROJECTILE_TRANSMUTATION_FIELD'], + 'data/entities/projectiles/deck/projectile_thunder_field.xml': ['PROJECTILE_THUNDER_FIELD'], + 'data/entities/projectiles/deck/projectile_gravity_field.xml': ['PROJECTILE_GRAVITY_FIELD'], 'data/entities/projectiles/deck/vacuum_powder.xml': ['VACUUM_POWDER'], 'data/entities/projectiles/deck/vacuum_liquid.xml': ['VACUUM_LIQUID'], 'data/entities/projectiles/deck/vacuum_entities.xml': ['VACUUM_ENTITIES'], @@ -249,9 +170,7 @@ export const entityToActionId: { [key: string]: string[] } = { 'data/entities/projectiles/deck/ocarina/ocarina_d.xml': ['OCARINA_D'], 'data/entities/projectiles/deck/ocarina/ocarina_e.xml': ['OCARINA_E'], 'data/entities/projectiles/deck/ocarina/ocarina_f.xml': ['OCARINA_F'], - 'data/entities/projectiles/deck/ocarina/ocarina_gsharp.xml': [ - 'OCARINA_GSHARP', - ], + 'data/entities/projectiles/deck/ocarina/ocarina_gsharp.xml': ['OCARINA_GSHARP'], 'data/entities/projectiles/deck/ocarina/ocarina_a2.xml': ['OCARINA_A2'], 'data/entities/projectiles/deck/kantele/kantele_a.xml': ['KANTELE_A'], 'data/entities/projectiles/deck/kantele/kantele_d.xml': ['KANTELE_D'], @@ -275,4 +194,4 @@ export const entityToActionId: { [key: string]: string[] } = { 'data/entities/items/pickup/egg_slime.xml': ['SUMMON_EGG'], 'data/entities/items/pickup/egg_red.xml': ['SUMMON_EGG'], 'data/entities/items/pickup/egg_fire.xml': ['SUMMON_EGG'], -}; +} \ No newline at end of file diff --git a/src/app/calc/__generated__/gun_actions.beta.ts b/src/app/calc/__generated__/gun_actions.beta.ts new file mode 100644 index 0000000..12591f9 --- /dev/null +++ b/src/app/calc/__generated__/gun_actions.beta.ts @@ -0,0 +1,9419 @@ + +import {GunActionState, Action} from "../extra/types"; +import { + ACTION_TYPE_PROJECTILE, + ACTION_TYPE_STATIC_PROJECTILE, + ACTION_TYPE_MODIFIER, + ACTION_TYPE_DRAW_MANY, + ACTION_TYPE_MATERIAL, + ACTION_TYPE_OTHER, + ACTION_TYPE_UTILITY, + ACTION_TYPE_PASSIVE, +} from "../gun_enums"; +import { + hand, + deck, + discarded, + shot_effects, + current_reload_time, + setCurrentReloadTime, + mana, + setMana, + setDontDrawActions, + force_stop_draws, + setForceStopDraws, + clearDiscarded, + clearHand, + clearDeck, + add_projectile, + add_projectile_trigger_hit_world, + add_projectile_trigger_timer, + add_projectile_trigger_death, + draw_actions, + check_recursion, + ACTION_DRAW_RELOAD_TIME_INCREASE, + move_discarded_to_deck, + order_deck, + reflecting, + call_action, +} from "../gun"; +import { + EntityGetWithTag, + GetUpdatedEntityID, + EntityGetComponent, + EntityGetFirstComponent, + ComponentGetValue2, + ComponentSetValue2, + EntityInflictDamage, + ActionUsesRemainingChanged, + EntityGetTransform, + EntityLoad, + EntityGetAllChildren, + EntityGetName, + EntityHasTag, + EntityGetFirstComponentIncludingDisabled, + EntityGetInRadiusWithTag, + GlobalsGetValue, + GlobalsSetValue, +} from "../extra/ext_functions"; +import { Random, SetRandomSeed, GameGetFrameNum } from "../extra/util"; +import { ActionSource } from "../eval/types"; + + +export const actions: Action[] = [ + + + { + id: "BOMB", + name: "$action_bomb", + description: "$actiondesc_bomb", + sprite: "data/ui_gfx/gun_actions/bomb.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bomb_unidentified.png", + related_projectiles: ["data/entities/projectiles/bomb.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,3,4,5,6", + spawn_probability: "1,1,1,1,0.5,0.5,0.1", + price: 200, + mana: 25, + max_uses: 3, + custom_xml_file: "data/entities/misc/custom_cards/bomb.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/bomb.xml") + c.fire_rate_wait = c.fire_rate_wait + 100 + }, + }, + { + id: "LIGHT_BULLET", + name: "$action_light_bullet", + description: "$actiondesc_light_bullet", + sprite: "data/ui_gfx/gun_actions/light_bullet.png", + sprite_unidentified: "data/ui_gfx/gun_actions/light_bullet_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/light_bullet.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2", + spawn_probability: "2,1,0.5", + price: 100, + mana: 5, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/light_bullet.xml") + c.fire_rate_wait = c.fire_rate_wait + 3 + c.screenshake = c.screenshake + 0.5 + c.spread_degrees = c.spread_degrees - 1.0 + c.damage_critical_chance = c.damage_critical_chance + 5 + }, + }, + { + id: "LIGHT_BULLET_TRIGGER", + name: "$action_light_bullet_trigger", + description: "$actiondesc_light_bullet_trigger", + sprite: "data/ui_gfx/gun_actions/light_bullet_trigger.png", + sprite_unidentified: "data/ui_gfx/gun_actions/light_bullet_trigger_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/light_bullet.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,3", + spawn_probability: "1,0.5,0.5,0.5", + price: 140, + mana: 10, + + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 3 + c.screenshake = c.screenshake + 0.5 + c.damage_critical_chance = c.damage_critical_chance + 5 + add_projectile_trigger_hit_world("data/entities/projectiles/deck/light_bullet.xml", 1) + }, + }, + { + id: "LIGHT_BULLET_TRIGGER_2", + name: "$action_light_bullet_trigger_2", + description: "$actiondesc_light_bullet_trigger_2", + sprite: "data/ui_gfx/gun_actions/light_bullet_trigger_2.png", + related_projectiles: ["data/entities/projectiles/deck/light_bullet_blue.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,5,6,10", + spawn_probability: "1,0.5,1,1,0.2", + price: 250, + mana: 15, + + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 4 + c.screenshake = c.screenshake + 1 + c.damage_critical_chance = c.damage_critical_chance + 5 + add_projectile_trigger_hit_world("data/entities/projectiles/deck/light_bullet_blue.xml", 2) + }, + }, + { + id: "LIGHT_BULLET_TIMER", + name: "$action_light_bullet_timer", + description: "$actiondesc_light_bullet_timer", + sprite: "data/ui_gfx/gun_actions/light_bullet_timer.png", + sprite_unidentified: "data/ui_gfx/gun_actions/light_bullet_timer_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/light_bullet.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3", + spawn_probability: "0.5,0.5,0.75", + price: 140, + mana: 10, + + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 3 + c.screenshake = c.screenshake + 0.5 + c.damage_critical_chance = c.damage_critical_chance + 5 + add_projectile_trigger_timer("data/entities/projectiles/deck/light_bullet.xml", 10, 1) + }, + }, + { + id: "BULLET", + name: "$action_bullet", + description: "$actiondesc_bullet", + sprite: "data/ui_gfx/gun_actions/bullet.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bullet_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/bullet.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4,5", + spawn_probability: "1,1,1,0.8,0.5", + price: 150, + mana: 20, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/bullet.xml") + c.fire_rate_wait = c.fire_rate_wait + 4 + c.screenshake = c.screenshake + 2 + c.spread_degrees = c.spread_degrees + 2.0 + c.damage_critical_chance = c.damage_critical_chance + 5 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 23.0 + }, + }, + { + id: "BULLET_TRIGGER", + name: "$action_bullet_trigger", + description: "$actiondesc_bullet_trigger", + sprite: "data/ui_gfx/gun_actions/bullet_trigger.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bullet_trigger_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/bullet.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.5,0.5,0.5,0.6,0.5", + price: 190, + mana: 35, + + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 4 + c.screenshake = c.screenshake + 2 + c.spread_degrees = c.spread_degrees + 2.0 + c.damage_critical_chance = c.damage_critical_chance + 5 + add_projectile_trigger_hit_world("data/entities/projectiles/deck/bullet.xml", 1) + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 23.0 + }, + }, + { + id: "BULLET_TIMER", + name: "$action_bullet_timer", + description: "$actiondesc_bullet_timer", + sprite: "data/ui_gfx/gun_actions/bullet_timer.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bullet_timer_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/bullet.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.5,0.5,0.5,0.5,0.6", + price: 190, + mana: 35, + + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 4 + c.screenshake = c.screenshake + 2 + c.spread_degrees = c.spread_degrees + 2.0 + c.damage_critical_chance = c.damage_critical_chance + 5 + add_projectile_trigger_timer("data/entities/projectiles/deck/bullet.xml", 10, 1) + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 23.0 + }, + }, + { + id: "HEAVY_BULLET", + name: "$action_heavy_bullet", + description: "$actiondesc_heavy_bullet", + sprite: "data/ui_gfx/gun_actions/heavy_bullet.png", + sprite_unidentified: "data/ui_gfx/gun_actions/heavy_bullet_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/bullet_heavy.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "0.5,1,1,1,1,1", + price: 200, + mana: 30, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/bullet_heavy.xml") + c.fire_rate_wait = c.fire_rate_wait + 7 + c.screenshake = c.screenshake + 2.5 + c.spread_degrees = c.spread_degrees + 5.0 + c.damage_critical_chance = c.damage_critical_chance + 5 + + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 50.0 + }, + }, + { + id: "HEAVY_BULLET_TRIGGER", + name: "$action_heavy_bullet_trigger", + description: "$actiondesc_heavy_bullet_trigger", + sprite: "data/ui_gfx/gun_actions/heavy_bullet_trigger.png", + sprite_unidentified: "data/ui_gfx/gun_actions/heavy_bullet_trigger_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/bullet_heavy.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.5,0.5,0.5,0.7,0.5", + price: 240, + mana: 40, + + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 7 + c.screenshake = c.screenshake + 2.5 + c.spread_degrees = c.spread_degrees + 5.0 + c.damage_critical_chance = c.damage_critical_chance + 5 + + add_projectile_trigger_hit_world("data/entities/projectiles/deck/bullet_heavy.xml", 1) + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 50.0 + }, + }, + { + id: "HEAVY_BULLET_TIMER", + name: "$action_heavy_bullet_timer", + description: "$actiondesc_heavy_bullet_timer", + sprite: "data/ui_gfx/gun_actions/heavy_bullet_timer.png", + sprite_unidentified: "data/ui_gfx/gun_actions/heavy_bullet_timer_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/bullet_heavy.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.5,0.5,0.5,0.5,0.7", + price: 240, + mana: 40, + + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 7 + c.screenshake = c.screenshake + 2.5 + c.spread_degrees = c.spread_degrees + 5.0 + c.damage_critical_chance = c.damage_critical_chance + 5 + + add_projectile_trigger_timer("data/entities/projectiles/deck/bullet_heavy.xml", 10, 1) + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 50.0 + }, + }, + { + id: "AIR_BULLET", + name: "$action_air_bullet", + description: "$actiondesc_air_bullet", + sprite: "data/ui_gfx/gun_actions/air_bullet.png", + sprite_unidentified: "data/ui_gfx/gun_actions/air_bullet_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/light_bullet_air.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2", + spawn_probability: "1,1", + price: 80, + mana: 5, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/light_bullet_air.xml") + c.fire_rate_wait = c.fire_rate_wait + 3 + + c.spread_degrees = c.spread_degrees - 2.0 + + }, + }, + { + id: "SLOW_BULLET", + name: "$action_slow_bullet", + description: "$actiondesc_slow_bullet", + sprite: "data/ui_gfx/gun_actions/slow_bullet.png", + sprite_unidentified: "data/ui_gfx/gun_actions/slow_bullet_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/bullet_slow.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4", + spawn_probability: "1,1,1,1", + price: 160, + mana: 30, + + custom_xml_file: "data/entities/misc/custom_cards/bullet_slow.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/bullet_slow.xml") + c.fire_rate_wait = c.fire_rate_wait + 6 + c.screenshake = c.screenshake + 2 + c.spread_degrees = c.spread_degrees + 3.6 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 20.0 + }, + }, + { + id: "SLOW_BULLET_TRIGGER", + name: "$action_slow_bullet_trigger", + description: "$actiondesc_slow_bullet_trigger", + sprite: "data/ui_gfx/gun_actions/slow_bullet_trigger.png", + sprite_unidentified: "data/ui_gfx/gun_actions/slow_bullet_trigger_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/bullet_slow.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.5,0.5,0.5,0.5,1", + price: 200, + mana: 50, + + custom_xml_file: "data/entities/misc/custom_cards/bullet_slow.xml", + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 25 + c.screenshake = c.screenshake + 2 + c.spread_degrees = c.spread_degrees + 10 + add_projectile_trigger_hit_world("data/entities/projectiles/deck/bullet_slow.xml", 1) + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 20.0 + }, + }, + { + id: "SLOW_BULLET_TIMER", + name: "$action_slow_bullet_timer", + description: "$actiondesc_slow_bullet_timer", + sprite: "data/ui_gfx/gun_actions/slow_bullet_timer.png", + sprite_unidentified: "data/ui_gfx/gun_actions/slow_bullet_timer_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/bullet_slow.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "0.5,0.5,0.5,0.5,1,1", + price: 200, + mana: 50, + + custom_xml_file: "data/entities/misc/custom_cards/bullet_slow.xml", + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 6 + c.screenshake = c.screenshake + 2 + c.spread_degrees = c.spread_degrees + 3.6 + add_projectile_trigger_timer("data/entities/projectiles/deck/bullet_slow.xml", 100, 1) + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 20.0 + }, + }, + { + id: "HOOK", + name: "$action_hook", + description: "$actiondesc_hook", + sprite: "data/ui_gfx/gun_actions/hook.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bullet_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/hook.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.1,0.3,0.4,0.2,0.1", + price: 120, + mana: 30, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/hook.xml") + c.fire_rate_wait = c.fire_rate_wait + 12 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 10.0 + }, + }, + { + id: "BLACK_HOLE", + name: "$action_black_hole", + description: "$actiondesc_black_hole", + sprite: "data/ui_gfx/gun_actions/black_hole.png", + sprite_unidentified: "data/ui_gfx/gun_actions/black_hole_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/black_hole.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,2,4,5", + spawn_probability: "0.8,0.8,0.8,0.8", + price: 200, + mana: 180, + max_uses: 3, + never_unlimited: true, + custom_xml_file: "data/entities/misc/custom_cards/black_hole.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/black_hole.xml") + c.fire_rate_wait = c.fire_rate_wait + 80 + c.screenshake = c.screenshake + 20 + }, + }, + { + id: "BLACK_HOLE_DEATH_TRIGGER", + name: "$action_black_hole_death_trigger", + description: "$actiondesc_black_hole_death_trigger", + sprite: "data/ui_gfx/gun_actions/black_hole_timer.png", + sprite_unidentified: "data/ui_gfx/gun_actions/black_hole_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/black_hole.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,4,5,6", + spawn_probability: "0.5,0.5,0.5,0.5", + price: 220, + mana: 200, + max_uses: 3, + never_unlimited: true, + custom_xml_file: "data/entities/misc/custom_cards/black_hole.xml", + action: (c: GunActionState) => { + add_projectile_trigger_death("data/entities/projectiles/deck/black_hole.xml", 1) + c.fire_rate_wait = c.fire_rate_wait + 90 + c.screenshake = c.screenshake + 20 + }, + }, + { + id: "BLACK_HOLE_BIG", + name: "$action_black_hole_big", + description: "$actiondesc_black_hole_big", + sprite: "data/ui_gfx/gun_actions/black_hole_big.png", + sprite_unidentified: "data/ui_gfx/gun_actions/black_hole_big_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/black_hole_big.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "1,3,5,6,10", + spawn_probability: "0.8,0.8,0.8,0.8,0.5", + price: 320, + mana: 240, + max_uses: 6, + custom_xml_file: "data/entities/misc/custom_cards/black_hole_big.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/black_hole_big.xml") + c.fire_rate_wait = c.fire_rate_wait + 80 + c.screenshake = c.screenshake + 10 + }, + }, + { + id: "WHITE_HOLE_BIG", + name: "$action_white_hole_big", + description: "$actiondesc_white_hole_big", + sprite: "data/ui_gfx/gun_actions/white_hole_big.png", + sprite_unidentified: "data/ui_gfx/gun_actions/black_hole_big_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/white_hole_big.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "1,3,5,6,10", + spawn_probability: "0.1,0.1,0.1,0.4,0.2", + price: 320, + mana: 240, + max_uses: 6, + custom_xml_file: "data/entities/misc/custom_cards/white_hole_big.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/white_hole_big.xml") + c.fire_rate_wait = c.fire_rate_wait + 80 + c.screenshake = c.screenshake + 10 + }, + }, + { + id: "BLACK_HOLE_GIGA", + name: "$action_black_hole_giga", + description: "$actiondesc_black_hole_giga", + sprite: "data/ui_gfx/gun_actions/black_hole_giga.png", + sprite_unidentified: "data/ui_gfx/gun_actions/black_hole_big_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/black_hole_giga.xml"], + spawn_requires_flag: "card_unlocked_black_hole", + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "10", + spawn_probability: "1", + price: 600, + mana: 500, + max_uses: 6, + never_unlimited: true, + custom_xml_file: "data/entities/misc/custom_cards/black_hole_giga.xml", + action: (c: GunActionState) => { + let black_holes = EntityGetWithTag( "black_hole_giga" ) + + if ( black_holes.length < 3 ) { + add_projectile("data/entities/projectiles/deck/black_hole_giga.xml") + c.fire_rate_wait = c.fire_rate_wait + 120 + setCurrentReloadTime(current_reload_time + 100) + c.screenshake = c.screenshake + 40 + } + }, + }, + { + id: "TENTACLE_PORTAL", + name: "$action_tentacle_portal", + description: "$actiondesc_tentacle_portal", + sprite: "data/ui_gfx/gun_actions/tentacle_portal.png", + sprite_unidentified: "data/ui_gfx/gun_actions/slimeball_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/tentacle_portal.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4,10", + spawn_probability: "0.4,0.4,0.4,0.5,0.2", + price: 220, + mana: 140, + max_uses: 5, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/tentacle_portal.xml") + c.fire_rate_wait = c.fire_rate_wait + 30 + }, + }, + + { + id: "SPITTER", + name: "$action_spitter", + description: "$actiondesc_spitter", + sprite: "data/ui_gfx/gun_actions/spitter.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spitter_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/spitter.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,3", + spawn_probability: "1,1,1,0.5", + price: 110, + mana: 5, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/spitter.xml") + + c.fire_rate_wait = c.fire_rate_wait - 1 + c.screenshake = c.screenshake + 0.1 + c.dampening = 0.1 + c.spread_degrees = c.spread_degrees + 6.0 + }, + }, + { + id: "SPITTER_TIMER", + name: "$action_spitter_timer", + description: "$actiondesc_spitter_timer", + sprite: "data/ui_gfx/gun_actions/spitter_timer.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spitter_timer_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/spitter.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,3", + spawn_probability: "0.5,0.5,0.5,1", + price: 140, + mana: 10, + + action: (c: GunActionState) => { + + c.fire_rate_wait = c.fire_rate_wait - 1 + c.screenshake = c.screenshake + 0.1 + c.dampening = 0.1 + c.spread_degrees = c.spread_degrees + 6.0 + add_projectile_trigger_timer("data/entities/projectiles/deck/spitter.xml", 40, 1) + }, + }, + { + id: "SPITTER_TIER_2", + name: "$action_spitter_tier_2", + description: "$actiondesc_spitter_tier_2", + sprite: "data/ui_gfx/gun_actions/spitter_green.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spitter_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/spitter_tier_2.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,5", + spawn_probability: "1,1,1,0.5", + price: 190, + mana: 25, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/spitter_tier_2.xml") + + c.fire_rate_wait = c.fire_rate_wait - 2 + c.screenshake = c.screenshake + 1.1 + c.dampening = 0.2 + c.spread_degrees = c.spread_degrees + 7.5 + }, + }, + { + id: "SPITTER_TIER_2_TIMER", + name: "$action_spitter_tier_2_timer", + description: "$actiondesc_spitter_tier_2_timer", + sprite: "data/ui_gfx/gun_actions/spitter_green_timer.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spitter_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/spitter_tier_2.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,5", + spawn_probability: "0.5,0.5,0.5,1", + price: 220, + mana: 30, + + action: (c: GunActionState) => { + add_projectile_trigger_timer("data/entities/projectiles/deck/spitter_tier_2.xml", 40, 1) + + c.fire_rate_wait = c.fire_rate_wait - 2 + c.screenshake = c.screenshake + 1.1 + c.dampening = 0.2 + c.spread_degrees = c.spread_degrees + 7.5 + }, + }, + { + id: "SPITTER_TIER_3", + name: "$action_spitter_tier_3", + description: "$actiondesc_spitter_tier_3", + sprite: "data/ui_gfx/gun_actions/spitter_purple.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spitter_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/spitter_tier_3.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "3,4,5,6", + spawn_probability: "0.8,0.8,1,1", + price: 240, + mana: 40, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/spitter_tier_3.xml") + + c.fire_rate_wait = c.fire_rate_wait - 4 + c.screenshake = c.screenshake + 3.1 + c.dampening = 0.3 + c.spread_degrees = c.spread_degrees + 9.0 + }, + }, + { + id: "SPITTER_TIER_3_TIMER", + name: "$action_spitter_tier_3_timer", + description: "$actiondesc_spitter_tier_3_timer", + sprite: "data/ui_gfx/gun_actions/spitter_purple_timer.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spitter_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/spitter_tier_3.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "4,5,6", + spawn_probability: "0.5,0.65,0.5", + price: 260, + mana: 45, + + action: (c: GunActionState) => { + add_projectile_trigger_timer("data/entities/projectiles/deck/spitter_tier_3.xml", 40, 1) + + c.fire_rate_wait = c.fire_rate_wait - 4 + c.screenshake = c.screenshake + 3.1 + c.dampening = 0.3 + c.spread_degrees = c.spread_degrees + 9.0 + }, + }, + { + id: "BUBBLESHOT", + name: "$action_bubbleshot", + description: "$actiondesc_bubbleshot", + sprite: "data/ui_gfx/gun_actions/bubbleshot.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bubbleshot_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/bubbleshot.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,3", + spawn_probability: "1,0.6,1,0.5", + price: 100, + mana: 5, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/bubbleshot.xml") + + c.fire_rate_wait = c.fire_rate_wait - 5 + c.dampening = 0.1 + }, + }, + { + id: "BUBBLESHOT_TRIGGER", + name: "$action_bubbleshot_trigger", + description: "$actiondesc_bubbleshot_trigger", + sprite: "data/ui_gfx/gun_actions/bubbleshot_trigger.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bubbleshot_trigger_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/bubbleshot.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3", + spawn_probability: "0.5,0.5,1", + price: 120, + mana: 16, + + action: (c: GunActionState) => { + + c.fire_rate_wait = c.fire_rate_wait - 5 + c.dampening = 0.1 + add_projectile_trigger_hit_world("data/entities/projectiles/deck/bubbleshot.xml", 1) + }, + }, + { + id: "DISC_BULLET", + name: "$action_disc_bullet", + description: "$actiondesc_disc_bullet", + sprite: "data/ui_gfx/gun_actions/disc_bullet.png", + sprite_unidentified: "data/ui_gfx/gun_actions/disc_bullet_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/disc_bullet.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,2,4", + spawn_probability: "1,1,0.6", + price: 120, + mana: 20, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/disc_bullet.xml") + + c.fire_rate_wait = c.fire_rate_wait + 10 + c.spread_degrees = c.spread_degrees + 2.0 + shot_effects.recoil_knockback = 20.0 + }, + }, + { + id: "DISC_BULLET_BIG", + name: "$action_disc_bullet_big", + description: "$actiondesc_disc_bullet_big", + sprite: "data/ui_gfx/gun_actions/disc_bullet_big.png", + sprite_unidentified: "data/ui_gfx/gun_actions/disc_bullet_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/disc_bullet_big.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,2,4", + spawn_probability: "0.6,0.7,0.8", + price: 180, + mana: 38, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/disc_bullet_big.xml") + + c.fire_rate_wait = c.fire_rate_wait + 20 + c.spread_degrees = c.spread_degrees + 3.4 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 20.0 + }, + }, + { + id: "DISC_BULLET_BIGGER", + name: "$action_omega_disc_bullet", + description: "$actiondesc_omega_disc_bullet", + sprite: "data/ui_gfx/gun_actions/omega_disc_bullet.png", + sprite_unidentified: "data/ui_gfx/gun_actions/disc_bullet_unidentified.png", + spawn_requires_flag: "card_unlocked_everything", + related_projectiles: ["data/entities/projectiles/deck/disc_bullet_bigger.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,5,10", + spawn_probability: "0.1,0.6,1,0.4", + price: 270, + mana: 70, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/disc_bullet_bigger.xml") + + c.fire_rate_wait = c.fire_rate_wait + 40 + c.spread_degrees = c.spread_degrees + 6.4 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 30.0 + c.damage_projectile_add = c.damage_projectile_add + 0.2 + }, + }, + { + id: "BOUNCY_ORB", + name: "$action_bouncy_orb", + description: "$actiondesc_bouncy_orb", + sprite: "data/ui_gfx/gun_actions/bouncy_orb.png", + sprite_unidentified: "data/ui_gfx/gun_actions/disc_bullet_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/bouncy_orb.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,2,4", + spawn_probability: "1,1,1", + price: 120, + mana: 20, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/bouncy_orb.xml") + + c.fire_rate_wait = c.fire_rate_wait + 10 + shot_effects.recoil_knockback = 20.0 + }, + }, + { + id: "BOUNCY_ORB_TIMER", + name: "$action_bouncy_orb_timer", + description: "$actiondesc_bouncy_orb_timer", + sprite: "data/ui_gfx/gun_actions/bouncy_orb_timer.png", + sprite_unidentified: "data/ui_gfx/gun_actions/disc_bullet_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/bouncy_orb.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,2,4", + spawn_probability: "0.5,0.5,0.5", + price: 150, + mana: 50, + + action: (c: GunActionState) => { + add_projectile_trigger_timer("data/entities/projectiles/deck/bouncy_orb.xml",200,1) + + c.fire_rate_wait = c.fire_rate_wait + 10 + shot_effects.recoil_knockback = 20.0 + }, + }, + { + id: "RUBBER_BALL", + name: "$action_rubber_ball", + description: "$actiondesc_rubber_ball", + sprite: "data/ui_gfx/gun_actions/rubber_ball.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rubber_ball_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/rubber_ball.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,6", + spawn_probability: "1,1,0.2", + price: 60, + mana: 5, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/rubber_ball.xml") + + c.fire_rate_wait = c.fire_rate_wait - 2 + c.spread_degrees = c.spread_degrees - 1.0 + }, + }, + { + id: "ARROW", + name: "$action_arrow", + description: "$actiondesc_arrow", + sprite: "data/ui_gfx/gun_actions/arrow.png", + sprite_unidentified: "data/ui_gfx/gun_actions/arrow_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/arrow.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,4,5", + spawn_probability: "1,1,0.6,0.3", + price: 140, + mana: 15, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/arrow.xml") + + c.fire_rate_wait = c.fire_rate_wait + 10 + c.spread_degrees = c.spread_degrees - 20 + shot_effects.recoil_knockback = 30.0 + }, + }, + { + id: "POLLEN", + name: "$action_pollen", + description: "$actiondesc_pollen", + sprite: "data/ui_gfx/gun_actions/pollen.png", + sprite_unidentified: "data/ui_gfx/gun_actions/arrow_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/pollen.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,3,4", + spawn_probability: "0.6,1,1,0.6", + price: 110, + mana: 10, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/pollen.xml") + + c.fire_rate_wait = c.fire_rate_wait + 2 + c.spread_degrees = c.spread_degrees + 20 + }, + }, + { + id: "LANCE", + name: "$action_lance", + description: "$actiondesc_lance", + sprite: "data/ui_gfx/gun_actions/lance.png", + sprite_unidentified: "data/ui_gfx/gun_actions/lance_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/lance.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,5,6", + spawn_probability: "0.9,1,0.8,1", + price: 180, + mana: 30, + + custom_xml_file: "data/entities/misc/custom_cards/lance.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/lance.xml") + + c.fire_rate_wait = c.fire_rate_wait + 20 + c.spread_degrees = c.spread_degrees - 20 + shot_effects.recoil_knockback = 60.0 + }, + }, + { + id: "ROCKET", + name: "$action_rocket", + description: "$actiondesc_rocket", + sprite: "data/ui_gfx/gun_actions/rocket.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/rocket.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4,5", + spawn_probability: "1,1,1,0.5,0.3", + price: 220, + mana: 70, + max_uses: 10, + custom_xml_file: "data/entities/misc/custom_cards/rocket.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/rocket.xml") + c.fire_rate_wait = c.fire_rate_wait + 60 + + c.ragdoll_fx = 2 + shot_effects.recoil_knockback = 120.0 + }, + }, + { + id: "ROCKET_TIER_2", + name: "$action_rocket_tier_2", + description: "$actiondesc_rocket_tier_2", + sprite: "data/ui_gfx/gun_actions/rocket_tier_2.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/rocket_tier_2.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.5,1,1,0.8,0.5", + price: 240, + mana: 90, + max_uses: 8, + custom_xml_file: "data/entities/misc/custom_cards/rocket_tier_2.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/rocket_tier_2.xml") + c.fire_rate_wait = c.fire_rate_wait + 90 + + c.ragdoll_fx = 2 + shot_effects.recoil_knockback = 160.0 + }, + }, + { + id: "ROCKET_TIER_3", + name: "$action_rocket_tier_3", + description: "$actiondesc_rocket_tier_3", + sprite: "data/ui_gfx/gun_actions/rocket_tier_3.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/rocket_tier_3.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.25,0.5,1,1,1", + price: 250, + mana: 120, + max_uses: 6, + custom_xml_file: "data/entities/misc/custom_cards/rocket_tier_3.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/rocket_tier_3.xml") + c.fire_rate_wait = c.fire_rate_wait + 120 + + c.ragdoll_fx = 2 + shot_effects.recoil_knockback = 180.0 + }, + }, + { + id: "GRENADE", + name: "$action_grenade", + description: "$actiondesc_grenade", + sprite: "data/ui_gfx/gun_actions/grenade.png", + sprite_unidentified: "data/ui_gfx/gun_actions/grenade_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/grenade.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,3,4", + spawn_probability: "1,1,0.5,0.25,0.2", + price: 170, + mana: 50, + max_uses: 25, + custom_xml_file: "data/entities/misc/custom_cards/grenade.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/grenade.xml") + c.fire_rate_wait = c.fire_rate_wait + 30 + c.screenshake = c.screenshake + 4.0 + c.child_speed_multiplier = c.child_speed_multiplier * 0.75 + + shot_effects.recoil_knockback = 80.0 + }, + }, + { + id: "GRENADE_TRIGGER", + name: "$action_grenade_trigger", + description: "$actiondesc_grenade_trigger", + sprite: "data/ui_gfx/gun_actions/grenade_trigger.png", + sprite_unidentified: "data/ui_gfx/gun_actions/grenade_trigger_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/grenade.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,3,4,5", + spawn_probability: "0.5,0.5,0.2,0.5,0.5,1", + price: 210, + max_uses: 25, + custom_xml_file: "data/entities/misc/custom_cards/grenade_trigger.xml", + mana: 50, + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 30 + c.screenshake = c.screenshake + 4.0 + + c.child_speed_multiplier = c.child_speed_multiplier * 0.75 + add_projectile_trigger_hit_world("data/entities/projectiles/deck/grenade.xml", 1) + shot_effects.recoil_knockback = 80.0 + }, + }, + { + id: "GRENADE_TIER_2", + name: "$action_grenade_tier_2", + description: "$actiondesc_grenade_tier_2", + sprite: "data/ui_gfx/gun_actions/grenade_tier_2.png", + sprite_unidentified: "data/ui_gfx/gun_actions/grenade_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/grenade_tier_2.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.5,1,1,1,0.5", + price: 220, + mana: 90, + max_uses: 20, + custom_xml_file: "data/entities/misc/custom_cards/grenade_tier_2.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/grenade_tier_2.xml") + c.fire_rate_wait = c.fire_rate_wait + 50 + c.screenshake = c.screenshake + 8.0 + c.child_speed_multiplier = c.child_speed_multiplier * 0.75 + + shot_effects.recoil_knockback = 120.0 + }, + }, + { + id: "GRENADE_TIER_3", + name: "$action_grenade_tier_3", + description: "$actiondesc_grenade_tier_3", + sprite: "data/ui_gfx/gun_actions/grenade_tier_3.png", + sprite_unidentified: "data/ui_gfx/gun_actions/grenade_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/grenade_tier_3.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.25,0.5,0.75,1,1", + price: 220, + mana: 90, + max_uses: 20, + custom_xml_file: "data/entities/misc/custom_cards/grenade_tier_3.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/grenade_tier_3.xml") + c.fire_rate_wait = c.fire_rate_wait + 80 + c.screenshake = c.screenshake + 15.0 + c.child_speed_multiplier = c.child_speed_multiplier * 0.9 + + shot_effects.recoil_knockback = 140.0 + }, + }, + { + id: "GRENADE_ANTI", + name: "$action_grenade_anti", + description: "$actiondesc_grenade_anti", + sprite: "data/ui_gfx/gun_actions/grenade_anti.png", + sprite_unidentified: "data/ui_gfx/gun_actions/grenade_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/grenade_anti.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,3,4,5", + spawn_probability: "0.4,0.4,0.7,0.4,0.4,0.4", + price: 170, + mana: 50, + max_uses: 25, + custom_xml_file: "data/entities/misc/custom_cards/grenade.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/grenade_anti.xml") + c.fire_rate_wait = c.fire_rate_wait + 30 + c.screenshake = c.screenshake + 4.0 + c.child_speed_multiplier = c.child_speed_multiplier * 0.75 + + shot_effects.recoil_knockback = 80.0 + }, + }, + { + id: "GRENADE_LARGE", + name: "$action_grenade_large", + description: "$actiondesc_grenade_large", + sprite: "data/ui_gfx/gun_actions/grenade_large.png", + sprite_unidentified: "data/ui_gfx/gun_actions/grenade_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/grenade_large.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,3,4,5", + spawn_probability: "0.4,0.4,0.4,0.4,0.4,0.4", + price: 150, + mana: 80, + max_uses: 35, + custom_xml_file: "data/entities/misc/custom_cards/grenade.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/grenade_large.xml") + c.fire_rate_wait = c.fire_rate_wait + 40 + c.screenshake = c.screenshake + 5.0 + c.child_speed_multiplier = c.child_speed_multiplier * 0.75 + + shot_effects.recoil_knockback = 80.0 + }, + }, + { + id: "MINE", + name: "$action_mine", + description: "$actiondesc_mine", + sprite: "data/ui_gfx/gun_actions/mine.png", + sprite_unidentified: "data/ui_gfx/gun_actions/mine_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/mine.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,3,4,6", + spawn_probability: "1,0.75,1,0.5", + price: 200, + mana: 20, + max_uses: 15, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/mine.xml") + c.fire_rate_wait = c.fire_rate_wait + 30 + c.child_speed_multiplier = c.child_speed_multiplier * 0.75 + c.speed_multiplier = c.speed_multiplier * 0.75 + shot_effects.recoil_knockback = 60.0 + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + }, + }, + { + id: "MINE_DEATH_TRIGGER", + name: "$action_mine_death_trigger", + description: "$actiondesc_mine_death_trigger", + sprite: "data/ui_gfx/gun_actions/mine_death_trigger.png", + sprite_unidentified: "data/ui_gfx/gun_actions/mine_death_trigger_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/mine.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,6", + spawn_probability: "1,1", + price: 240, + mana: 20, + max_uses: 15, + action: (c: GunActionState) => { + add_projectile_trigger_death("data/entities/projectiles/deck/mine.xml", 1) + c.fire_rate_wait = c.fire_rate_wait + 30 + c.child_speed_multiplier = c.child_speed_multiplier * 0.75 + c.speed_multiplier = c.speed_multiplier * 0.75 + shot_effects.recoil_knockback = 60.0 + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + }, + }, + { + id: "PIPE_BOMB", + name: "$action_pipe_bomb", + description: "$actiondesc_pipe_bomb", + sprite: "data/ui_gfx/gun_actions/pipe_bomb.png", + sprite_unidentified: "data/ui_gfx/gun_actions/pipe_bomb_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/pipe_bomb.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4", + spawn_probability: "1,1,0.6", + price: 200, + mana: 20, + max_uses: 20, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/pipe_bomb.xml") + c.fire_rate_wait = c.fire_rate_wait + 30 + c.child_speed_multiplier = c.child_speed_multiplier * 0.75 + c.speed_multiplier = c.speed_multiplier * 0.75 + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + }, + }, + { + id: "PIPE_BOMB_DEATH_TRIGGER", + name: "$action_pipe_bomb_death_trigger", + description: "$actiondesc_pipe_bomb_death_trigger", + sprite: "data/ui_gfx/gun_actions/pipe_bomb_death_trigger.png", + sprite_unidentified: "data/ui_gfx/gun_actions/pipe_bomb_death_trigger_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/pipe_bomb.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,5", + spawn_probability: "0.6,0.8,1,0.8", + price: 230, + mana: 20, + max_uses: 20, + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 30 + c.child_speed_multiplier = c.child_speed_multiplier * 0.75 + c.speed_multiplier = c.speed_multiplier * 0.75 + add_projectile_trigger_death("data/entities/projectiles/deck/pipe_bomb.xml", 1) + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 60.0 + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + }, + }, + { + id: "FISH", + name: "$action_fish", + description: "$actiondesc_fish", + spawn_requires_flag: "card_unlocked_fish", + sprite: "data/ui_gfx/gun_actions/fish.png", + sprite_unidentified: "data/ui_gfx/gun_actions/fish_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/fish.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "3,4,5", + spawn_probability: "0.01,0.01,0.01", + price: 250, + mana: 90, + max_uses: 20, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/fish.xml") + c.fire_rate_wait = c.fire_rate_wait + 80 + }, + }, + { + id: "EXPLODING_DEER", + name: "$action_exploding_deer", + description: "$actiondesc_exploding_deer", + spawn_requires_flag: "card_unlocked_exploding_deer", + sprite: "data/ui_gfx/gun_actions/exploding_deer.png", + sprite_unidentified: "data/ui_gfx/gun_actions/exploding_deer_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/exploding_deer.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "3,4,5", + spawn_probability: "0.6,0.6,0.6", + price: 170, + mana: 120, + max_uses: 10, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/exploding_deer.xml") + c.fire_rate_wait = c.fire_rate_wait + 80 + }, + }, + { + id: "EXPLODING_DUCKS", + name: "$action_exploding_ducks", + description: "$actiondesc_exploding_ducks", + spawn_requires_flag: "card_unlocked_exploding_deer", + sprite: "data/ui_gfx/gun_actions/duck_2.png", + sprite_unidentified: "data/ui_gfx/gun_actions/exploding_deer_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/duck.xml", 3], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "3,4,5", + spawn_probability: "0.8,0.5,0.6", + price: 200, + mana: 100, + max_uses: 20, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/duck.xml") + add_projectile("data/entities/projectiles/deck/duck.xml") + add_projectile("data/entities/projectiles/deck/duck.xml") + c.fire_rate_wait = c.fire_rate_wait + 60 + setCurrentReloadTime(current_reload_time + 20) + }, + }, + { + id: "WORM_SHOT", + name: "$action_worm_shot", + description: "$actiondesc_worm_shot", + spawn_requires_flag: "card_unlocked_exploding_deer", + sprite: "data/ui_gfx/gun_actions/worm.png", + sprite_unidentified: "data/ui_gfx/gun_actions/exploding_deer_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/worm_shot.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "3,4,5,6,10", + spawn_probability: "0.6,0.8,0.6,0.4,0.6", + price: 200, + mana: 150, + max_uses: 10, + never_unlimited: true, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/worm_shot.xml") + c.fire_rate_wait = c.fire_rate_wait + 80 + setCurrentReloadTime(current_reload_time + 40) + c.spread_degrees = c.spread_degrees + 20 + }, + }, + + { + id: "BOMB_DETONATOR", + name: "$action_bomb_detonator", + description: "$actiondesc_bomb_detonator", + sprite: "data/ui_gfx/gun_actions/pipe_bomb_detonator.png", + sprite_unidentified: "data/ui_gfx/gun_actions/meteor_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/bomb_detonator.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.5,1,0.4,0.5,1", + price: 120, + mana: 50, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/bomb_detonator.xml") + }, + }, + { + id: "LASER", + name: "$action_laser", + description: "$actiondesc_laser", + sprite: "data/ui_gfx/gun_actions/laser.png", + sprite_unidentified: "data/ui_gfx/gun_actions/laser_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/laser.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,4", + spawn_probability: "1,1,1", + price: 180, + mana: 30, + + custom_xml_file: "data/entities/misc/custom_cards/laser.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/laser.xml") + c.fire_rate_wait = c.fire_rate_wait - 22 + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_disintegrated.xml," + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 20.0 + }, + }, + { + id: "MEGALASER", + name: "$action_megalaser", + description: "$actiondesc_megalaser", + sprite: "data/ui_gfx/gun_actions/megalaser.png", + sprite_unidentified: "data/ui_gfx/gun_actions/megalaser_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/megalaser.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "3,4,5,6,10", + spawn_probability: "0.6,0.6,0.8,0.6,0.3", + price: 300, + mana: 110, + action: (c: GunActionState) => { + + add_projectile("data/entities/projectiles/deck/megalaser_beam.xml") + add_projectile("data/entities/projectiles/deck/megalaser_beam.xml") + add_projectile("data/entities/projectiles/deck/megalaser_beam.xml") + add_projectile("data/entities/projectiles/deck/megalaser_beam.xml") + add_projectile("data/entities/projectiles/deck/megalaser_beam.xml") + + add_projectile("data/entities/projectiles/deck/megalaser.xml") + c.fire_rate_wait = c.fire_rate_wait + 90 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 20.0 + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_disintegrated.xml," + }, + }, + { + id: "LIGHTNING", + name: "$action_lightning", + description: "$actiondesc_lightning", + sprite: "data/ui_gfx/gun_actions/lightning.png", + sprite_unidentified: "data/ui_gfx/gun_actions/lightning_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/lightning.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,5,6", + spawn_probability: "1,0.9,0.7,1", + price: 250, + mana: 70, + + custom_xml_file: "data/entities/misc/custom_cards/electric_charge.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/lightning.xml") + c.fire_rate_wait = c.fire_rate_wait + 50 + shot_effects.recoil_knockback = 180.0 + }, + }, + { + id: "BALL_LIGHTNING", + name: "$action_ball_lightning", + description: "$actiondesc_ball_lightning", + sprite: "data/ui_gfx/gun_actions/ball_lightning.png", + sprite_unidentified: "data/ui_gfx/gun_actions/lightning_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/ball_lightning.xml",3], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,4,5", + spawn_probability: "0.2,0.4,1,1", + price: 250, + mana: 70, + custom_xml_file: "data/entities/misc/custom_cards/electric_charge.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/ball_lightning.xml") + add_projectile("data/entities/projectiles/deck/ball_lightning.xml") + add_projectile("data/entities/projectiles/deck/ball_lightning.xml") + c.fire_rate_wait = c.fire_rate_wait + 50 + shot_effects.recoil_knockback = 120.0 + }, + }, + { + id: "LASER_EMITTER", + name: "$action_laser_emitter", + description: "$actiondesc_laser_emitter", + sprite: "data/ui_gfx/gun_actions/laser_emitter.png", + sprite_unidentified: "data/ui_gfx/gun_actions/laser_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/orb_laseremitter.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4", + spawn_probability: "0.2,0.8,1,0.5", + price: 180, + mana: 60, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/orb_laseremitter.xml") + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 20.0 + c.fire_rate_wait = c.fire_rate_wait + 6 + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_disintegrated.xml," + }, + }, + { + id: "LASER_EMITTER_FOUR", + name: "$action_laser_emitter_four", + description: "$actiondesc_laser_emitter_four", + sprite: "data/ui_gfx/gun_actions/laser_emitter_four.png", + sprite_unidentified: "data/ui_gfx/gun_actions/laser_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/orb_laseremitter.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.2,0.9,0.3,0.5,1", + price: 200, + mana: 80, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/orb_laseremitter_four.xml") + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 30.0 + c.fire_rate_wait = c.fire_rate_wait + 15 + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_disintegrated.xml," + }, + }, + { + id: "LASER_EMITTER_CUTTER", + name: "$action_laser_emitter_cutter", + description: "$actiondesc_laser_emitter_cutter", + sprite: "data/ui_gfx/gun_actions/laser_emitter_cutter.png", + sprite_unidentified: "data/ui_gfx/gun_actions/laser_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/orb_laseremitter_cutter.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,3,4", + spawn_probability: "0.2,0.3,1,0.5,0.1", + price: 120, + mana: 40, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/orb_laseremitter_cutter.xml") + setCurrentReloadTime(current_reload_time + 10) + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_disintegrated.xml," + }, + }, + { + id: "DIGGER", + name: "$action_digger", + description: "$actiondesc_digger", + sprite: "data/ui_gfx/gun_actions/digger.png", + sprite_unidentified: "data/ui_gfx/gun_actions/digger_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/digger.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2", + spawn_probability: "1,0.5", + price: 70, + mana: 0, + sound_loop_tag: "sound_digger", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/digger.xml") + c.fire_rate_wait = c.fire_rate_wait + 1 + setCurrentReloadTime(current_reload_time - ACTION_DRAW_RELOAD_TIME_INCREASE - 10 ) + }, + }, + { + id: "POWERDIGGER", + name: "$action_powerdigger", + description: "$actiondesc_powerdigger", + sprite: "data/ui_gfx/gun_actions/powerdigger.png", + sprite_unidentified: "data/ui_gfx/gun_actions/powerdigger_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/powerdigger.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4", + spawn_probability: "0.5,1,0.8", + price: 110, + mana: 0, + sound_loop_tag: "sound_digger", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/powerdigger.xml") + c.fire_rate_wait = c.fire_rate_wait + 1 + setCurrentReloadTime(current_reload_time - ACTION_DRAW_RELOAD_TIME_INCREASE - 10 ) + }, + }, + { + id: "CHAINSAW", + name: "$action_chainsaw", + description: "$actiondesc_chainsaw", + sprite: "data/ui_gfx/gun_actions/chainsaw.png", + sprite_unidentified: "data/ui_gfx/gun_actions/chainsaw_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/chainsaw.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,2", + spawn_probability: "1,1", + price: 80, + mana: 1, + + sound_loop_tag: "sound_chainsaw", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/chainsaw.xml") + c.fire_rate_wait = 0 + c.spread_degrees = c.spread_degrees + 6.0 + setCurrentReloadTime(current_reload_time - ACTION_DRAW_RELOAD_TIME_INCREASE - 10 ) + }, + }, + { + id: "LUMINOUS_DRILL", + name: "$action_luminous_drill", + description: "$actiondesc_luminous_drill", + sprite: "data/ui_gfx/gun_actions/luminous_drill.png", + sprite_unidentified: "data/ui_gfx/gun_actions/chainsaw_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/luminous_drill.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,2,10", + spawn_probability: "1,1,0.1", + price: 150, + mana: 10, + + sound_loop_tag: "sound_digger", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/luminous_drill.xml") + c.fire_rate_wait = c.fire_rate_wait - 35 + setCurrentReloadTime(current_reload_time - ACTION_DRAW_RELOAD_TIME_INCREASE - 10 ) + }, + }, + { + id: "LASER_LUMINOUS_DRILL", + name: "$action_luminous_drill_timer", + description: "$actiondesc_luminous_drill_timer", + sprite: "data/ui_gfx/gun_actions/luminous_drill_timer.png", + sprite_unidentified: "data/ui_gfx/gun_actions/chainsaw_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/luminous_drill.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,2,6,10", + spawn_probability: "1,1,0.2,0.1", + price: 220, + mana: 30, + + sound_loop_tag: "sound_digger", + action: (c: GunActionState) => { + add_projectile_trigger_timer("data/entities/projectiles/deck/luminous_drill.xml",4,1) + c.fire_rate_wait = c.fire_rate_wait - 35 + setCurrentReloadTime(current_reload_time - ACTION_DRAW_RELOAD_TIME_INCREASE - 10 ) + }, + }, + { + id: "TENTACLE", + name: "$action_tentacle", + description: "$actiondesc_tentacle", + spawn_requires_flag: "card_unlocked_tentacle", + sprite: "data/ui_gfx/gun_actions/tentacle.png", + sprite_unidentified: "data/ui_gfx/gun_actions/tentacle_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/tentacle.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "3,4,5,6", + spawn_probability: "1,0.5,1,0.8", + price: 200, + mana: 20, + + custom_xml_file: "data/entities/misc/custom_cards/tentacle.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/tentacle.xml") + c.fire_rate_wait = c.fire_rate_wait + 40 + }, + }, + { + id: "TENTACLE_TIMER", + name: "$action_tentacle_timer", + description: "$actiondesc_tentacle_timer", + spawn_requires_flag: "card_unlocked_tentacle", + sprite: "data/ui_gfx/gun_actions/tentacle_timer.png", + sprite_unidentified: "data/ui_gfx/gun_actions/tentacle_timer_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/tentacle.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "3,4,5,6", + spawn_probability: "0.6,0.8,0.6,0.7", + price: 250, + mana: 20, + + custom_xml_file: "data/entities/misc/custom_cards/tentacle_timer.xml", + action: (c: GunActionState) => { + add_projectile_trigger_timer("data/entities/projectiles/deck/tentacle.xml",20,1) + c.fire_rate_wait = c.fire_rate_wait + 40 + }, + }, + + { + id: "HEAL_BULLET", + name: "$action_heal_bullet", + description: "$actiondesc_heal_bullet", + sprite: "data/ui_gfx/gun_actions/heal_bullet.png", + sprite_unidentified: "data/ui_gfx/gun_actions/heal_bullet_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/heal_bullet.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4", + spawn_probability: "1,1,0.6", + price: 60, + mana: 15, + max_uses: 20, + never_unlimited: true, + custom_xml_file: "data/entities/misc/custom_cards/heal_bullet.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/heal_bullet.xml") + c.fire_rate_wait = c.fire_rate_wait + 4 + c.spread_degrees = c.spread_degrees + 2.0 + }, + }, + { + id: "SPIRAL_SHOT", + name: "$action_spiral_shot", + description: "$actiondesc_spiral_shot", + spawn_requires_flag: "card_unlocked_spiral_shot", + sprite: "data/ui_gfx/gun_actions/spiral_shot.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spiral_shot_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/spiral_shot.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "4,5,6", + spawn_probability: "0.7,0.8,0.7", + price: 190, + mana: 50, + max_uses: 15, + custom_xml_file: "data/entities/misc/custom_cards/spiral_shot.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/spiral_shot.xml") + c.fire_rate_wait = c.fire_rate_wait + 20 + }, + }, + { + id: "MAGIC_SHIELD", + name: "$action_magic_shield", + description: "$actiondesc_magic_shield", + sprite: "data/ui_gfx/gun_actions/magic_shield.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spiral_shot_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/magic_shield_start.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,4,5,6", + spawn_probability: "0.5,0.6,0.7,1", + price: 100, + mana: 40, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/magic_shield_start.xml") + c.fire_rate_wait = c.fire_rate_wait + 20 + }, + }, + { + id: "BIG_MAGIC_SHIELD", + name: "$action_big_magic_shield", + description: "$actiondesc_big_magic_shield", + sprite: "data/ui_gfx/gun_actions/big_magic_shield.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spiral_shot_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/big_magic_shield_start.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,4,5,6,10", + spawn_probability: "0.2,0.4,0.5,0.6,0.2", + price: 120, + mana: 60, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/big_magic_shield_start.xml") + c.fire_rate_wait = c.fire_rate_wait + 30 + }, + }, + { + id: "CHAIN_BOLT", + name: "$action_chain_bolt", + description: "$actiondesc_chain_bolt", + sprite: "data/ui_gfx/gun_actions/chain_bolt.png", + related_projectiles: ["data/entities/projectiles/deck/chain_bolt.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,4,5,6", + spawn_probability: "0.75,1,0.8,0.6", + price: 240, + mana: 80, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/chain_bolt.xml") + c.spread_degrees = c.spread_degrees + 14.0 + c.fire_rate_wait = c.fire_rate_wait + 45 + }, + }, + { + id: "FIREBALL", + name: "$action_fireball", + description: "$actiondesc_fireball", + sprite: "data/ui_gfx/gun_actions/fireball.png", + sprite_unidentified: "data/ui_gfx/gun_actions/fireball_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/fireball.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,3,4,6", + spawn_probability: "1,0.7,1,0.5", + price: 220, + mana: 70, + max_uses: 15, + custom_xml_file: "data/entities/misc/custom_cards/fireball.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/fireball.xml") + c.spread_degrees = c.spread_degrees + 4.0 + c.fire_rate_wait = c.fire_rate_wait + 50 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 20.0 + }, + }, + { + id: "METEOR", + name: "$action_meteor", + description: "$actiondesc_meteor", + sprite: "data/ui_gfx/gun_actions/meteor.png", + sprite_unidentified: "data/ui_gfx/gun_actions/meteor_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/meteor.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "4,5,6,10", + spawn_probability: "0.6,0.6,0.7,0.5", + price: 280, + mana: 150, + max_uses: 10, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/meteor.xml") + }, + }, + { + id: "FLAMETHROWER", + name: "$action_flamethrower", + description: "$actiondesc_flamethrower", + sprite: "data/ui_gfx/gun_actions/flamethrower.png", + sprite_unidentified: "data/ui_gfx/gun_actions/flamethrower_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/flamethrower.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,6", + spawn_probability: "0.8,0.9,0.9,0.6", + price: 220, + mana: 20, + max_uses: 60, + custom_xml_file: "data/entities/misc/custom_cards/flamethrower.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/flamethrower.xml") + c.spread_degrees = c.spread_degrees + 4.0 + }, + }, + { + id: "ICEBALL", + name: "$action_iceball", + description: "$actiondesc_iceball", + sprite: "data/ui_gfx/gun_actions/iceball.png", + sprite_unidentified: "data/ui_gfx/gun_actions/fireball_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/iceball.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,6", + spawn_probability: "0.8,0.9,0.9,0.6", + price: 260, + mana: 90, + max_uses: 15, + custom_xml_file: "data/entities/misc/custom_cards/iceball.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/iceball.xml") + c.spread_degrees = c.spread_degrees + 8.0 + c.fire_rate_wait = c.fire_rate_wait + 80 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 20.0 + }, + }, + + { + id: "SLIMEBALL", + name: "$action_slimeball", + description: "$actiondesc_slimeball", + sprite: "data/ui_gfx/gun_actions/slimeball.png", + sprite_unidentified: "data/ui_gfx/gun_actions/slimeball_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/slime.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,3,4", + spawn_probability: "1,1,0.7", + price: 130, + mana: 20, + + custom_xml_file: "data/entities/misc/custom_cards/slimeball.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/slime.xml") + c.spread_degrees = c.spread_degrees + 4.0 + c.fire_rate_wait = c.fire_rate_wait + 10 + c.speed_multiplier = c.speed_multiplier * 1.1 + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + }, + }, + { + id: "DARKFLAME", + name: "$action_darkflame", + description: "$actiondesc_darkflame", + sprite: "data/ui_gfx/gun_actions/darkflame.png", + sprite_unidentified: "data/ui_gfx/gun_actions/darkflame_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/darkflame.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "3,5,6", + spawn_probability: "1,0.9,0.8", + price: 180, + mana: 90, + custom_xml_file: "data/entities/misc/custom_cards/darkflame.xml", + max_uses: 60, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/darkflame.xml") + c.fire_rate_wait = c.fire_rate_wait + 20 + }, + }, + { + id: "MISSILE", + name: "$action_missile", + description: "$actiondesc_missile", + sprite: "data/ui_gfx/gun_actions/missile.png", + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,5", + spawn_probability: "0.5,0.5,1,1", + price: 200, + mana: 60, + max_uses: 20, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/rocket_player.xml") + setCurrentReloadTime(current_reload_time + 30) + c.spread_degrees = c.spread_degrees + 3.0 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 60.0 + }, + }, + { + id: "FUNKY_SPELL", + name: "???", + description: "???", + sprite: "data/ui_gfx/gun_actions/machinegun_bullet.png", + sprite_unidentified: "data/ui_gfx/gun_actions/light_bullet_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/machinegun_bullet.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_requires_flag: "card_unlocked_funky", + spawn_level: "6,10", + spawn_probability: "0.1,0.1", + price: 50, + mana: 5, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/machinegun_bullet.xml") + c.fire_rate_wait = c.fire_rate_wait - 3 + c.screenshake = c.screenshake + 0.2 + c.spread_degrees = c.spread_degrees + 2.0 + c.damage_critical_chance = c.damage_critical_chance + 1 + }, + }, + { + id: "PEBBLE", + name: "$action_pebble", + description: "$actiondesc_pebble", + sprite: "data/ui_gfx/gun_actions/pebble.png", + sprite_unidentified: "data/ui_gfx/gun_actions/pebble_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/pebble_player.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,4,6", + spawn_probability: "0.9,1,0.9,0.6", + price: 200, + mana: 120, + max_uses: 10, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/pebble_player.xml") + c.fire_rate_wait = c.fire_rate_wait + 80 + }, + }, + { + id: "DYNAMITE", + name: "$action_dynamite", + description: "$actiondesc_dynamite", + sprite: "data/ui_gfx/gun_actions/dynamite.png", + sprite_unidentified: "data/ui_gfx/gun_actions/dynamite_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/tnt.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,3,4", + spawn_probability: "1,0.9,0.8,0.7,0.6", + price: 160, + mana: 50, + max_uses: 16, + custom_xml_file: "data/entities/misc/custom_cards/tnt.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/tnt.xml") + c.fire_rate_wait = c.fire_rate_wait + 50 + c.spread_degrees = c.spread_degrees + 6.0 + }, + }, + { + id: "GLITTER_BOMB", + name: "$action_glitter_bomb", + description: "$actiondesc_glitter_bomb", + sprite: "data/ui_gfx/gun_actions/glitter_bomb.png", + sprite_unidentified: "data/ui_gfx/gun_actions/dynamite_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/glitter_bomb.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,3,4", + spawn_probability: "0.8,0.9,0.8,0.7,0.6", + price: 200, + mana: 70, + max_uses: 16, + custom_xml_file: "data/entities/misc/custom_cards/glitter_bomb.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/glitter_bomb.xml") + c.fire_rate_wait = c.fire_rate_wait + 50 + c.spread_degrees = c.spread_degrees + 12.0 + }, + }, + { + id: "BUCKSHOT", + name: "$action_buckshot", + description: "$actiondesc_buckshot", + sprite: "data/ui_gfx/gun_actions/buckshot.png", + sprite_unidentified: "data/ui_gfx/gun_actions/dynamite_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/buckshot_player.xml",3], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,3,4", + spawn_probability: "1,1,0.9,0.9,0.6", + price: 160, + mana: 25, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/buckshot_player.xml") + add_projectile("data/entities/projectiles/deck/buckshot_player.xml") + add_projectile("data/entities/projectiles/deck/buckshot_player.xml") + c.fire_rate_wait = c.fire_rate_wait + 8 + c.spread_degrees = c.spread_degrees + 14.0 + }, + }, + { + id: "FREEZING_GAZE", + name: "$action_freezing_gaze", + description: "$actiondesc_freezing_gaze", + sprite: "data/ui_gfx/gun_actions/freezing_gaze.png", + sprite_unidentified: "data/ui_gfx/gun_actions/dynamite_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/freezing_gaze_beam.xml",12], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4", + spawn_probability: "0.9,1,1", + price: 180, + mana: 45, + max_uses: 20, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/freezing_gaze_beam.xml") + add_projectile("data/entities/projectiles/deck/freezing_gaze_beam.xml") + add_projectile("data/entities/projectiles/deck/freezing_gaze_beam.xml") + add_projectile("data/entities/projectiles/deck/freezing_gaze_beam.xml") + add_projectile("data/entities/projectiles/deck/freezing_gaze_beam.xml") + add_projectile("data/entities/projectiles/deck/freezing_gaze_beam.xml") + add_projectile("data/entities/projectiles/deck/freezing_gaze_beam.xml") + add_projectile("data/entities/projectiles/deck/freezing_gaze_beam.xml") + add_projectile("data/entities/projectiles/deck/freezing_gaze_beam.xml") + add_projectile("data/entities/projectiles/deck/freezing_gaze_beam.xml") + add_projectile("data/entities/projectiles/deck/freezing_gaze_beam.xml") + add_projectile("data/entities/projectiles/deck/freezing_gaze_beam.xml") + c.pattern_degrees = 30 + c.fire_rate_wait = c.fire_rate_wait + 20 + }, + }, + { + id: "GLOWING_BOLT", + name: "$action_glowing_bolt", + description: "$actiondesc_glowing_bolt", + sprite: "data/ui_gfx/gun_actions/glowing_bolt.png", + sprite_unidentified: "data/ui_gfx/gun_actions/dynamite_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/glowing_bolt.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "3,4,5,10", + spawn_probability: "0.8,0.9,1,0.1", + price: 220, + mana: 65, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/glowing_bolt.xml") + c.fire_rate_wait = c.fire_rate_wait + 40 + c.spread_degrees = c.spread_degrees + 6.0 + }, + }, + + { + id: "SPORE_POD", + name: "$action_spore_pod", + description: "$actiondesc_spore_pod", + sprite: "data/ui_gfx/gun_actions/spore_pod.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spore_pod_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/spore_pod.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.7,0.8,0.9,0.8,0.6", + price: 200, + mana: 20, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/spore_pod.xml") + c.fire_rate_wait = c.fire_rate_wait + 40 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 30.0 + }, + }, + { + id: "GLUE_SHOT", + name: "$action_glue_shot", + description: "$actiondesc_glue_shot", + sprite: "data/ui_gfx/gun_actions/glue_shot.png", + sprite_unidentified: "data/ui_gfx/gun_actions/dynamite_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/glue_shot.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,5", + spawn_probability: "0.7,0.4,0.2,0.5", + price: 140, + mana: 25, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/glue_shot.xml") + c.fire_rate_wait = c.fire_rate_wait + 30 + c.spread_degrees = c.spread_degrees + 5.0 + }, + }, + { + id: "BOMB_HOLY", + name: "$action_bomb_holy", + description: "$actiondesc_bomb_holy", + spawn_requires_flag: "card_unlocked_bomb_holy", + sprite: "data/ui_gfx/gun_actions/bomb_holy.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bomb_unidentified.png", + related_projectiles: ["data/entities/projectiles/bomb_holy.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,5,6,10", + spawn_probability: "0.2,0.2,0.2,0.2,0.2,0.5", + price: 400, + mana: 300, + max_uses: 2, + custom_xml_file: "data/entities/misc/custom_cards/bomb_holy.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/bomb_holy.xml") + setCurrentReloadTime(current_reload_time + 80) + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 100.0 + c.fire_rate_wait = c.fire_rate_wait + 40 + }, + }, + { + id: "BOMB_HOLY_GIGA", + name: "$action_bomb_holy_giga", + description: "$actiondesc_bomb_holy_giga", + spawn_requires_flag: "card_unlocked_bomb_holy_giga", + sprite: "data/ui_gfx/gun_actions/bomb_holy_giga.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bomb_unidentified.png", + related_projectiles: ["data/entities/projectiles/bomb_holy_giga.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "10", + spawn_probability: "1", + price: 600, + mana: 600, + max_uses: 2, + never_unlimited: true, + custom_xml_file: "data/entities/misc/custom_cards/bomb_holy_giga.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/bomb_holy_giga.xml") + setCurrentReloadTime(current_reload_time + 160) + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 100.0 + c.fire_rate_wait = c.fire_rate_wait + 120 + }, + }, + { + id: "PROPANE_TANK", + name: "$action_propane_tank", + description: "$actiondesc_propane_tank", + sprite: "data/ui_gfx/gun_actions/propane_tank.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bomb_unidentified.png", + related_projectiles: ["data/entities/projectiles/propane_tank.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,5,6", + spawn_probability: "1,1,0.8,0.8,0.7", + price: 200, + mana: 75, + max_uses: 10, + custom_xml_file: "data/entities/misc/custom_cards/propane_tank.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/propane_tank.xml") + c.fire_rate_wait = c.fire_rate_wait + 100 + }, + }, + { + id: "BOMB_CART", + name: "$action_bomb_cart", + description: "$actiondesc_bomb_cart", + sprite: "data/ui_gfx/gun_actions/bomb_cart.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bomb_unidentified.png", + related_projectiles: ["data/entities/projectiles/bomb_cart.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.6,0.6,0.5,0.8,0.6", + price: 200, + mana: 75, + max_uses: 6, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/bomb_cart.xml") + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 200.0 + c.fire_rate_wait = c.fire_rate_wait + 60 + }, + }, + { + id: "CURSED_ORB", + name: "$action_cursed_orb", + description: "$actiondesc_cursed_orb", + sprite: "data/ui_gfx/gun_actions/cursed_orb.png", + sprite_unidentified: "data/ui_gfx/gun_actions/disc_bullet_unidentified.png", + related_projectiles: ["data/entities/projectiles/orb_cursed.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3", + spawn_probability: "0.3,0.2,0.1", + price: 200, + mana: 40, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/orb_cursed.xml") + c.fire_rate_wait = c.fire_rate_wait + 20 + shot_effects.recoil_knockback = 40.0 + }, + }, + { + id: "EXPANDING_ORB", + name: "$action_expanding_orb", + description: "$actiondesc_expanding_orb", + sprite: "data/ui_gfx/gun_actions/expanding_orb.png", + sprite_unidentified: "data/ui_gfx/gun_actions/disc_bullet_unidentified.png", + related_projectiles: ["data/entities/projectiles/orb_expanding.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.5,0.5,1,1,0.5", + price: 200, + mana: 70, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/orb_expanding.xml") + c.fire_rate_wait = c.fire_rate_wait + 30 + shot_effects.recoil_knockback = 20.0 + }, + }, + { + id: "CRUMBLING_EARTH", + name: "$action_crumbling_earth", + description: "$actiondesc_crumbling_earth", + spawn_requires_flag: "card_unlocked_crumbling_earth", + sprite: "data/ui_gfx/gun_actions/crumbling_earth.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bomb_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/crumbling_earth.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.4,0.3,0.5,0.6,0.9", + price: 300, + mana: 240, + max_uses: 3, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/crumbling_earth.xml") + }, + }, + { + id: "SUMMON_ROCK", + name: "$action_summon_rock", + description: "$actiondesc_summon_rock", + sprite: "data/ui_gfx/gun_actions/summon_rock.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bomb_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/rock.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,3,4,5,6", + spawn_probability: "0.8,0.8,0.6,0.6,0.3,0.7,0.7", + price: 160, + mana: 100, + max_uses: 3, + custom_xml_file: "data/entities/misc/custom_cards/summon_rock.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/rock.xml") + }, + }, + { + id: "SUMMON_EGG", + name: "$action_summon_egg", + description: "$actiondesc_summon_egg", + sprite: "data/ui_gfx/gun_actions/summon_egg.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bomb_unidentified.png", + related_projectiles: ["data/entities/items/pickup/egg_monster.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,3,4,5,6", + spawn_probability: "0.7,0.8,0.8,0.7,0.6,0.6,0.5", + price: 220, + mana: 100, + max_uses: 2, + action: (c: GunActionState) => { + SetRandomSeed( GameGetFrameNum(), GameGetFrameNum() ) + let types = ["monster","slime","red","fire"] + let rnd = Random(1, types.length) + let egg_name = "egg_" + String(types[rnd - 1]) + ".xml" + add_projectile("data/entities/items/pickup/" + egg_name) + }, + }, + { + id: "SUMMON_HOLLOW_EGG", + name: "$action_summon_hollow_egg", + description: "$actiondesc_summon_hollow_egg", + sprite: "data/ui_gfx/gun_actions/summon_hollow_egg.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bomb_unidentified.png", + related_projectiles: ["data/entities/items/pickup/egg_hollow.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,5,6", + spawn_probability: "0.6,0.8,0.7,0.8,0.3", + price: 140, + mana: 30, + action: (c: GunActionState) => { + add_projectile_trigger_death("data/entities/items/pickup/egg_hollow.xml", 1) + c.fire_rate_wait = c.fire_rate_wait - 12 + }, + }, + { + id: "TNTBOX", + name: "$action_tntbox", + description: "$actiondesc_tntbox", + sprite: "data/ui_gfx/gun_actions/tntbox.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bomb_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/tntbox.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,5", + spawn_probability: "0.8,0.9,0.5,0.4", + price: 150, + mana: 40, + max_uses: 15, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/tntbox.xml") + c.fire_rate_wait = c.fire_rate_wait + 30 + }, + }, + { + id: "TNTBOX_BIG", + name: "$action_tntbox_big", + description: "$actiondesc_tntbox_big", + sprite: "data/ui_gfx/gun_actions/tntbox_big.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bomb_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/tntbox_big.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,4,5", + spawn_probability: "0.8,1,0.7", + price: 170, + mana: 40, + max_uses: 15, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/tntbox_big.xml") + c.fire_rate_wait = c.fire_rate_wait + 30 + }, + }, + { + id: "SWARM_FLY", + name: "$action_swarm_fly", + description: "$actiondesc_swarm_fly", + sprite: "data/ui_gfx/gun_actions/swarm_fly.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spiral_shot_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/swarm_fly.xml",5], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "2,4,5", + spawn_probability: "0.3,0.4,0.5", + price: 90, + mana: 60, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/swarm_fly.xml") + add_projectile("data/entities/projectiles/deck/swarm_fly.xml") + add_projectile("data/entities/projectiles/deck/swarm_fly.xml") + add_projectile("data/entities/projectiles/deck/swarm_fly.xml") + c.spread_degrees = c.spread_degrees + 6.0 + c.fire_rate_wait = c.fire_rate_wait + 60 + setCurrentReloadTime(current_reload_time + 20) + }, + }, + { + id: "SWARM_FIREBUG", + name: "$action_swarm_firebug", + description: "$actiondesc_swarm_firebug", + sprite: "data/ui_gfx/gun_actions/swarm_firebug.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spiral_shot_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/swarm_firebug.xml",4], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "2,5,6", + spawn_probability: "0.2,0.4,0.5", + price: 100, + mana: 70, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/swarm_firebug.xml") + add_projectile("data/entities/projectiles/deck/swarm_firebug.xml") + add_projectile("data/entities/projectiles/deck/swarm_firebug.xml") + c.spread_degrees = c.spread_degrees + 12.0 + c.fire_rate_wait = c.fire_rate_wait + 60 + setCurrentReloadTime(current_reload_time + 20) + }, + }, + { + id: "SWARM_WASP", + name: "$action_swarm_wasp", + description: "$actiondesc_swarm_wasp", + sprite: "data/ui_gfx/gun_actions/swarm_wasp.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spiral_shot_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/swarm_wasp.xml",6], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "4,5,6", + spawn_probability: "0.2,0.5,0.6", + price: 120, + mana: 80, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/swarm_wasp.xml") + add_projectile("data/entities/projectiles/deck/swarm_wasp.xml") + add_projectile("data/entities/projectiles/deck/swarm_wasp.xml") + add_projectile("data/entities/projectiles/deck/swarm_wasp.xml") + add_projectile("data/entities/projectiles/deck/swarm_wasp.xml") + c.spread_degrees = c.spread_degrees + 24.0 + c.fire_rate_wait = c.fire_rate_wait + 60 + setCurrentReloadTime(current_reload_time + 20) + }, + }, + { + id: "FRIEND_FLY", + name: "$action_friend_fly", + description: "$actiondesc_friend_fly", + sprite: "data/ui_gfx/gun_actions/friend_fly.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spiral_shot_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/friend_fly.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "4,5,6", + spawn_probability: "0.2,0.6,0.5", + price: 160, + mana: 120, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/friend_fly.xml") + c.spread_degrees = c.spread_degrees + 24.0 + c.fire_rate_wait = c.fire_rate_wait + 80 + setCurrentReloadTime(current_reload_time + 40) + }, + }, + + { + id: "ACIDSHOT", + name: "$action_acidshot", + description: "$actiondesc_acidshot", + sprite: "data/ui_gfx/gun_actions/acidshot.png", + sprite_unidentified: "data/ui_gfx/gun_actions/acidshot_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/acidshot.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4", + spawn_probability: "1,1,0.9,0.6", + price: 180, + mana: 20, + max_uses: 20, + custom_xml_file: "data/entities/misc/custom_cards/acidshot.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/acidshot.xml") + c.fire_rate_wait = c.fire_rate_wait + 10 + }, + }, + { + id: "THUNDERBALL", + name: "$action_thunderball", + description: "$actiondesc_thunderball", + sprite: "data/ui_gfx/gun_actions/thunderball.png", + sprite_unidentified: "data/ui_gfx/gun_actions/thunderball_unidentified.png", + related_projectiles: ["data/entities/projectiles/thunderball.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,4,6,10", + spawn_probability: "0.9,1,0.7,0.2", + price: 300, + mana: 120, + max_uses: 3, + custom_xml_file: "data/entities/misc/custom_cards/thunderball.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/thunderball.xml") + c.fire_rate_wait = c.fire_rate_wait + 120 + }, + }, + + { + id: "FIREBOMB", + name: "$action_firebomb", + description: "$actiondesc_firebomb", + sprite: "data/ui_gfx/gun_actions/firebomb.png", + sprite_unidentified: "data/ui_gfx/gun_actions/firebomb_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/firebomb.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3", + spawn_probability: "1,0.9,0.7", + price: 90, + mana: 10, + + custom_xml_file: "data/entities/misc/custom_cards/firebomb.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/firebomb.xml") + }, + }, + { + id: "SOILBALL", + name: "$action_soilball", + description: "$actiondesc_soilball", + sprite: "data/ui_gfx/gun_actions/soil.png", + sprite_unidentified: "data/ui_gfx/gun_actions/firebomb_unidentified.png", + related_projectiles: ["data/entities/projectiles/chunk_of_soil.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "1,2,3,5", + spawn_probability: "0.8,0.8,1,0.75", + price: 10, + mana: 5, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/chunk_of_soil.xml") + }, + }, + + { + id: "DEATH_CROSS", + name: "$action_death_cross", + description: "$actiondesc_death_cross", + sprite: "data/ui_gfx/gun_actions/death_cross.png", + sprite_unidentified: "data/ui_gfx/gun_actions/death_cross_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/death_cross.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "1,0.8,0.6,0.5,0.5,0.3", + price: 210, + mana: 80, + custom_xml_file: "data/entities/misc/custom_cards/death_cross.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/death_cross.xml") + c.fire_rate_wait = c.fire_rate_wait + 40 + }, + }, + { + id: "DEATH_CROSS_BIG", + name: "$action_death_cross_big", + description: "$actiondesc_death_cross_big", + sprite: "data/ui_gfx/gun_actions/death_cross_big.png", + sprite_unidentified: "data/ui_gfx/gun_actions/death_cross_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/death_cross_big.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4,5,6,10", + spawn_probability: "0.4,0.5,0.55,0.3,0.4,0.2", + price: 310, + mana: 150, + max_uses: 8, + custom_xml_file: "data/entities/misc/custom_cards/death_cross.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/death_cross_big.xml") + c.fire_rate_wait = c.fire_rate_wait + 70 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 30.0 + }, + }, + { + id: "INFESTATION", + name: "$action_infestation", + description: "$actiondesc_infestation", + sprite: "data/ui_gfx/gun_actions/infestation.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rubber_ball_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/infestation.xml",10], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "2,3,4", + spawn_probability: "0.1,0.3,0.4", + price: 160, + mana: 40, + + action: (c: GunActionState) => { + for (let i = 1; i <= 6; i++) { + add_projectile("data/entities/projectiles/deck/infestation.xml") + } + + c.fire_rate_wait = c.fire_rate_wait - 2 + c.spread_degrees = c.spread_degrees + 25 + }, + }, + { + id: "WALL_HORIZONTAL", + name: "$action_wall_horizontal", + description: "$actiondesc_wall_horizontal", + sprite: "data/ui_gfx/gun_actions/wall_horizontal.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/wall_horizontal.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "0,1,2,4,5", + spawn_probability: "0.4,0.4,0.6,0.5,0.2", + price: 160, + mana: 70, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/wall_horizontal.xml") + c.fire_rate_wait = c.fire_rate_wait + 5 + }, + }, + { + id: "WALL_VERTICAL", + name: "$action_wall_vertical", + description: "$actiondesc_wall_vertical", + sprite: "data/ui_gfx/gun_actions/wall_vertical.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/wall_vertical.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "0,1,2,4,5", + spawn_probability: "0.4,0.4,0.6,0.5,0.2", + price: 160, + mana: 70, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/wall_vertical.xml") + c.fire_rate_wait = c.fire_rate_wait + 5 + }, + }, + { + id: "WALL_SQUARE", + name: "$action_wall_square", + description: "$actiondesc_wall_square", + sprite: "data/ui_gfx/gun_actions/wall_square.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/wall_square.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "0,1,2,4,5,6", + spawn_probability: "0.3,0.2,0.6,0.5,0.4,0.4", + price: 160, + mana: 70, + max_uses: 20, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/wall_square.xml") + c.fire_rate_wait = c.fire_rate_wait + 20 + }, + }, + { + id: "TEMPORARY_WALL", + name: "$action_temporary_wall", + description: "$actiondesc_temporary_wall", + sprite: "data/ui_gfx/gun_actions/temporary_wall.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/temporary_wall.xml"], + type: ACTION_TYPE_UTILITY, + spawn_level: "0,1,2,4,5", + spawn_probability: "0.1,0.1,0.3,0.4,0.2", + price: 100, + mana: 40, + max_uses: 20, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/temporary_wall.xml") + c.fire_rate_wait = c.fire_rate_wait + 40 + }, + }, + { + id: "TEMPORARY_PLATFORM", + name: "$action_temporary_platform", + description: "$actiondesc_temporary_platform", + sprite: "data/ui_gfx/gun_actions/temporary_platform.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/temporary_platform.xml"], + type: ACTION_TYPE_UTILITY, + spawn_level: "0,1,2,4,5", + spawn_probability: "0.1,0.1,0.3,0.4,0.2", + price: 90, + mana: 30, + max_uses: 20, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/temporary_platform.xml") + c.fire_rate_wait = c.fire_rate_wait + 40 + }, + }, + { + id: "PURPLE_EXPLOSION_FIELD", + name: "$action_purple_explosion_field", + description: "$actiondesc_purple_explosion_field", + sprite: "data/ui_gfx/gun_actions/purple_explosion_field.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/purple_explosion_field.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "0,1,2,4,5,6", + spawn_probability: "0.7,1,0.7,0.5,0.5,0.3", + price: 160, + mana: 90, + max_uses: 20, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/purple_explosion_field.xml") + c.fire_rate_wait = c.fire_rate_wait + 10 + c.speed_multiplier = c.speed_multiplier - 2 + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + }, + }, + { + id: "DELAYED_SPELL", + name: "$action_delayed_spell", + description: "$actiondesc_delayed_spell", + sprite: "data/ui_gfx/gun_actions/delayed_spell.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/delayed_spell.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "0,1,2,4,5,6", + spawn_probability: "0.8,0.8,1,0.7,0.5,0.4", + price: 240, + mana: 20, + action: (c: GunActionState) => { + add_projectile_trigger_death("data/entities/projectiles/deck/delayed_spell.xml", 3) + c.fire_rate_wait = c.fire_rate_wait + 10 + }, + }, + { + id: "LONG_DISTANCE_CAST", + name: "$action_long_distance_cast", + description: "$actiondesc_long_distance_cast", + sprite: "data/ui_gfx/gun_actions/long_distance_cast.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/long_distance_cast.xml"], + type: ACTION_TYPE_UTILITY, + spawn_level: "0,1,2,4,5,6", + spawn_probability: "0.6,0.7,0.8,0.6,0.3,0.4", + price: 90, + mana: 0, + action: (c: GunActionState) => { + add_projectile_trigger_death("data/entities/projectiles/deck/long_distance_cast.xml", 1) + c.fire_rate_wait = c.fire_rate_wait - 5 + }, + }, + { + id: "TELEPORT_CAST", + name: "$action_teleport_cast", + description: "$actiondesc_teleport_cast", + sprite: "data/ui_gfx/gun_actions/teleport_cast.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/teleport_cast.xml"], + type: ACTION_TYPE_UTILITY, + spawn_level: "1,2,4,5,6", + spawn_probability: "0.6,0.6,0.6,0.8,1", + price: 190, + mana: 100, + action: (c: GunActionState) => { + add_projectile_trigger_death("data/entities/projectiles/deck/teleport_cast.xml", 1) + c.fire_rate_wait = c.fire_rate_wait + 20 + c.spread_degrees = c.spread_degrees + 24 + }, + }, + { + id: "SUPER_TELEPORT_CAST", + name: "$action_super_teleport_cast", + description: "$actiondesc_super_teleport_cast", + sprite: "data/ui_gfx/gun_actions/super_teleport_cast.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/super_teleport_cast.xml"], + type: ACTION_TYPE_UTILITY, + spawn_level: "2,4,5,6", + spawn_probability: "0.2,0.6,0.8,0.8", + price: 160, + mana: 20, + action: (c: GunActionState) => { + add_projectile_trigger_death("data/entities/projectiles/deck/super_teleport_cast.xml", 1) + c.fire_rate_wait = c.fire_rate_wait + 10 + c.spread_degrees = c.spread_degrees - 6 + }, + }, + { + id: "CASTER_CAST", + name: "$action_caster_cast", + description: "$actiondesc_caster_cast", + sprite: "data/ui_gfx/gun_actions/caster_cast.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/caster_cast.xml"], + type: ACTION_TYPE_UTILITY, + spawn_level: "2,4,5,6,10", + spawn_probability: "0.2,0.2,0.4,0.4,0.2", + price: 70, + mana: 10, + action: (c: GunActionState) => { + c.spread_degrees = c.spread_degrees - 24 + c.extra_entities = c.extra_entities + "data/entities/misc/caster_cast.xml," + draw_actions( 1, true ) + }, + }, + + { + id: "MIST_RADIOACTIVE", + name: "$action_mist_radioactive", + description: "$actiondesc_mist_radioactive", + sprite: "data/ui_gfx/gun_actions/mist_radioactive.png", + sprite_unidentified: "data/ui_gfx/gun_actions/slimeball_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/mist_radioactive.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4", + spawn_probability: "0.4,0.4,0.4,0.4", + price: 80, + mana: 40, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/mist_radioactive.xml") + c.fire_rate_wait = c.fire_rate_wait + 10 + }, + }, + { + id: "MIST_ALCOHOL", + name: "$action_mist_alcohol", + description: "$actiondesc_mist_alcohol", + sprite: "data/ui_gfx/gun_actions/mist_alcohol.png", + sprite_unidentified: "data/ui_gfx/gun_actions/slimeball_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/mist_alcohol.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4", + spawn_probability: "0.4,0.4,0.4,0.4", + price: 80, + mana: 40, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/mist_alcohol.xml") + c.fire_rate_wait = c.fire_rate_wait + 10 + }, + }, + { + id: "MIST_SLIME", + name: "$action_mist_slime", + description: "$actiondesc_mist_slime", + sprite: "data/ui_gfx/gun_actions/mist_slime.png", + sprite_unidentified: "data/ui_gfx/gun_actions/slimeball_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/mist_slime.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4", + spawn_probability: "0.4,0.4,0.4,0.4", + price: 80, + mana: 40, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/mist_slime.xml") + c.fire_rate_wait = c.fire_rate_wait + 10 + }, + }, + { + id: "MIST_BLOOD", + name: "$action_mist_blood", + description: "$actiondesc_mist_blood", + sprite: "data/ui_gfx/gun_actions/mist_blood.png", + sprite_unidentified: "data/ui_gfx/gun_actions/slimeball_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/mist_blood.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4", + spawn_probability: "0.4,0.4,0.4,0.4", + price: 120, + mana: 40, + max_uses: 10, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/mist_blood.xml") + c.fire_rate_wait = c.fire_rate_wait + 10 + }, + }, + { + id: "CIRCLE_FIRE", + name: "$action_circle_fire", + description: "$actiondesc_circle_fire", + sprite: "data/ui_gfx/gun_actions/circle_fire.png", + sprite_unidentified: "data/ui_gfx/gun_actions/slimeball_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/circle_fire.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "1,2,3,4", + spawn_probability: "0.4,0.4,0.4,0.4", + price: 170, + mana: 20, + max_uses: 15, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/circle_fire.xml") + c.fire_rate_wait = c.fire_rate_wait + 20 + }, + }, + { + id: "CIRCLE_ACID", + name: "$action_circle_acid", + description: "$actiondesc_circle_acid", + sprite: "data/ui_gfx/gun_actions/circle_acid.png", + sprite_unidentified: "data/ui_gfx/gun_actions/slimeball_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/circle_acid.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "1,2,3,4", + spawn_probability: "0.4,0.4,0.4,0.4", + price: 180, + mana: 40, + max_uses: 4, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/circle_acid.xml") + c.fire_rate_wait = c.fire_rate_wait + 20 + }, + }, + { + id: "CIRCLE_OIL", + name: "$action_circle_oil", + description: "$actiondesc_circle_oil", + sprite: "data/ui_gfx/gun_actions/circle_oil.png", + sprite_unidentified: "data/ui_gfx/gun_actions/slimeball_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/circle_oil.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "1,2,3,4", + spawn_probability: "0.4,0.4,0.4,0.4", + price: 160, + mana: 20, + max_uses: 15, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/circle_oil.xml") + c.fire_rate_wait = c.fire_rate_wait + 20 + }, + }, + { + id: "CIRCLE_WATER", + name: "$action_circle_water", + description: "$actiondesc_circle_water", + sprite: "data/ui_gfx/gun_actions/circle_water.png", + sprite_unidentified: "data/ui_gfx/gun_actions/slimeball_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/circle_water.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "1,2,3,4", + spawn_probability: "0.4,0.4,0.4,0.4", + price: 160, + mana: 20, + max_uses: 15, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/circle_water.xml") + c.fire_rate_wait = c.fire_rate_wait + 20 + }, + }, + + { + id: "MATERIAL_WATER", + name: "$action_material_water", + description: "$actiondesc_material_water", + sprite: "data/ui_gfx/gun_actions/material_water.png", + sprite_unidentified: "data/ui_gfx/gun_actions/material_water_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/material_water.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.4,0.4,0.4,0.4,0.4", + price: 110, + mana: 0, + sound_loop_tag: "sound_spray", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/material_water.xml") + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_apply_wet.xml," + c.fire_rate_wait = c.fire_rate_wait - 15 + setCurrentReloadTime(current_reload_time - ACTION_DRAW_RELOAD_TIME_INCREASE - 10 ) + }, + }, + { + id: "MATERIAL_OIL", + name: "$action_material_oil", + description: "$actiondesc_material_oil", + sprite: "data/ui_gfx/gun_actions/material_oil.png", + sprite_unidentified: "data/ui_gfx/gun_actions/material_oil_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/material_oil.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.4,0.4,0.4,0.4,0.4", + price: 140, + mana: 0, + sound_loop_tag: "sound_spray", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/material_oil.xml") + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_apply_oiled.xml," + c.fire_rate_wait = c.fire_rate_wait - 15 + setCurrentReloadTime(current_reload_time - ACTION_DRAW_RELOAD_TIME_INCREASE - 10 ) + }, + }, + + { + id: "MATERIAL_BLOOD", + name: "$action_material_blood", + description: "$actiondesc_material_blood", + sprite: "data/ui_gfx/gun_actions/material_blood.png", + sprite_unidentified: "data/ui_gfx/gun_actions/material_blood_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/material_blood.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.4,0.4,0.4,0.4,0.4", + price: 130, + max_uses: 250, + mana: 0, + sound_loop_tag: "sound_spray", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/material_blood.xml") + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_apply_bloody.xml," + c.fire_rate_wait = c.fire_rate_wait - 15 + setCurrentReloadTime(current_reload_time - ACTION_DRAW_RELOAD_TIME_INCREASE - 10 ) + }, + }, + { + id: "MATERIAL_ACID", + name: "$action_material_acid", + description: "$actiondesc_material_acid", + sprite: "data/ui_gfx/gun_actions/material_acid.png", + sprite_unidentified: "data/ui_gfx/gun_actions/material_acid_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/material_acid.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.4,0.4,0.4,0.4,0.4", + price: 150, + + + mana: 0, + sound_loop_tag: "sound_spray", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/material_acid.xml") + c.fire_rate_wait = c.fire_rate_wait - 15 + setCurrentReloadTime(current_reload_time - ACTION_DRAW_RELOAD_TIME_INCREASE - 10 ) + }, + }, + { + id: "MATERIAL_CEMENT", + name: "$action_material_cement", + description: "$actiondesc_material_cement", + spawn_requires_flag: "card_unlocked_material_cement", + sprite: "data/ui_gfx/gun_actions/material_cement.png", + sprite_unidentified: "data/ui_gfx/gun_actions/material_cement_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/material_cement.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.4,0.4,0.4,0.4,0.4", + price: 100, + + + mana: 0, + sound_loop_tag: "sound_spray", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/material_cement.xml") + c.fire_rate_wait = c.fire_rate_wait - 15 + setCurrentReloadTime(current_reload_time - ACTION_DRAW_RELOAD_TIME_INCREASE - 10 ) + }, + }, + + + { + id: "TELEPORT_PROJECTILE", + name: "$action_teleport_projectile", + description: "$actiondesc_teleport_projectile", + sprite: "data/ui_gfx/gun_actions/teleport_projectile.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/teleport_projectile.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,4,5,6", + spawn_probability: "0.6,0.6,0.6,0.4,0.4,0.4", + price: 130, + mana: 40, + + custom_xml_file: "data/entities/misc/custom_cards/teleport_projectile.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/teleport_projectile.xml") + c.fire_rate_wait = c.fire_rate_wait + 3 + c.spread_degrees = c.spread_degrees - 2.0 + }, + }, + { + id: "TELEPORT_PROJECTILE_SHORT", + name: "$action_teleport_projectile_short", + description: "$actiondesc_teleport_projectile_short", + sprite: "data/ui_gfx/gun_actions/teleport_projectile_short.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/teleport_projectile_short.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,4,5,6", + spawn_probability: "0.6,0.6,0.6,0.4,0.4,0.4", + price: 130, + mana: 20, + + custom_xml_file: "data/entities/misc/custom_cards/teleport_projectile_short.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/teleport_projectile_short.xml") + c.spread_degrees = c.spread_degrees - 2.0 + }, + }, + { + id: "TELEPORT_PROJECTILE_STATIC", + name: "$action_teleport_projectile_static", + description: "$actiondesc_teleport_projectile_static", + sprite: "data/ui_gfx/gun_actions/teleport_projectile_static.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/teleport_projectile_static.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,4,5,6", + spawn_probability: "0.6,0.6,0.6,0.4,0.4,0.4", + price: 90, + mana: 40, + + custom_xml_file: "data/entities/misc/custom_cards/teleport_projectile_static.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/teleport_projectile_static.xml") + c.fire_rate_wait = c.fire_rate_wait + 3 + c.spread_degrees = c.spread_degrees - 2.0 + }, + }, + { + id: "SWAPPER_PROJECTILE", + name: "$action_swapper_projectile", + description: "$actiondesc_swapper_projectile", + sprite: "data/ui_gfx/gun_actions/swapper_projectile.png", + sprite_unidentified: "data/ui_gfx/gun_actions/light_bullet_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/swapper.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,4,5,6", + spawn_probability: "0.05,0.05,0.1,0.4,0.4,0.1", + price: 100, + mana: 5, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/swapper.xml") + c.fire_rate_wait = c.fire_rate_wait + 3 + c.screenshake = c.screenshake + 0.5 + c.spread_degrees = c.spread_degrees - 2.0 + c.damage_critical_chance = c.damage_critical_chance + 5 + }, + }, + { + id: "TELEPORT_PROJECTILE_CLOSER", + name: "$action_teleport_closer", + description: "$actiondesc_teleport_closer", + sprite: "data/ui_gfx/gun_actions/teleport_projectile_closer.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/teleport_projectile_closer.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "0,1,2,4,5,6", + spawn_probability: "0.4,0.6,0.6,0.7,0.4,0.4", + price: 130, + mana: 20, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/teleport_projectile_closer.xml") + c.spread_degrees = c.spread_degrees - 2.0 + }, + }, + + + { + id: "NUKE", + name: "$action_nuke", + description: "$actiondesc_nuke", + spawn_requires_flag: "card_unlocked_nuke", + sprite: "data/ui_gfx/gun_actions/nuke.png", + sprite_unidentified: "data/ui_gfx/gun_actions/nuke_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/nuke.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,5,6,10", + spawn_probability: "0.3,1,1,0.2", + price: 400, + mana: 200, + max_uses: 1, + custom_xml_file: "data/entities/misc/custom_cards/nuke.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/nuke.xml") + c.fire_rate_wait = 20 + c.speed_multiplier = c.speed_multiplier * 0.75 + c.material = "fire" + c.material_amount = c.material_amount + 60 + c.ragdoll_fx = 2 + c.gore_particles = c.gore_particles + 10 + c.screenshake = c.screenshake + 10.5 + setCurrentReloadTime(current_reload_time + 600) + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 300.0 + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + }, + }, + { + id: "NUKE_GIGA", + name: "$action_nuke_giga", + description: "$actiondesc_nuke_giga", + sprite: "data/ui_gfx/gun_actions/nuke_giga.png", + sprite_unidentified: "data/ui_gfx/gun_actions/nuke_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/nuke_giga.xml"], + spawn_requires_flag: "card_unlocked_nukegiga", + spawn_manual_unlock: true, + never_unlimited: true, + recursive: true, + ai_never_uses: true, + type: ACTION_TYPE_PROJECTILE, + spawn_level: "10", + spawn_probability: "1", + price: 800, + mana: 500, + max_uses: 1, + custom_xml_file: "data/entities/misc/custom_cards/nuke_giga.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/nuke_giga.xml") + c.fire_rate_wait = 50 + c.speed_multiplier = c.speed_multiplier * 0.5 + c.material = "fire" + c.material_amount = c.material_amount + 80 + c.ragdoll_fx = 2 + c.gore_particles = c.gore_particles + 30 + c.screenshake = c.screenshake + 30.5 + setCurrentReloadTime(current_reload_time + 800) + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 300.0 + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + }, + }, + + + + { + id: "FIREWORK", + name: "$action_firework", + description: "$actiondesc_firework", + spawn_requires_flag: "card_unlocked_firework", + sprite: "data/ui_gfx/gun_actions/fireworks.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/fireworks/firework_pink.xml"], + type: ACTION_TYPE_PROJECTILE, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "1,0.8,1,1,0.5,0.3", + price: 220, + mana: 70, + max_uses: 25, + action: (c: GunActionState) => { + SetRandomSeed( GameGetFrameNum(), GameGetFrameNum() ) + let types = ["pink","green","blue","orange"] + let rnd = Random(1, types.length) + let firework_name = "firework_" + String(types[rnd - 1]) + ".xml" + add_projectile("data/entities/projectiles/deck/fireworks/" + firework_name) + c.fire_rate_wait = c.fire_rate_wait + 60 + + c.ragdoll_fx = 2 + shot_effects.recoil_knockback = 120.0 + }, + }, + { + id: "SUMMON_WANDGHOST", + name: "$action_summon_wandghost", + description: "$actiondesc_summon_wandghost", + sprite: "data/ui_gfx/gun_actions/summon_wandghost.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/wand_ghost_player.xml"], + type: ACTION_TYPE_UTILITY, + spawn_level: "2,4,5,6,10", + spawn_probability: "0.08,0.1,0.3,0.3,0.1", + price: 420, + mana: 300, + max_uses: 1, + never_unlimited: true, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/wand_ghost_player.xml") + add_projectile("data/entities/particles/image_emitters/wand_effect.xml") + }, + }, + { + id: "TOUCH_GOLD", + name: "$action_touch_gold", + description: "$actiondesc_touch_gold", + sprite: "data/ui_gfx/gun_actions/touch_gold.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/touch_gold.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "1,2,3,4,5,6,7,10", + spawn_probability: "0,0,0,0,0.1,0.1,0.1,0.5", + price: 480, + mana: 300, + max_uses: 1, + never_unlimited: true, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/touch_gold.xml") + }, + }, + { + id: "TOUCH_WATER", + name: "$action_touch_water", + description: "$actiondesc_touch_water", + sprite: "data/ui_gfx/gun_actions/touch_water.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/touch_water.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "1,2,3,4,5,6,7,10", + spawn_probability: "0,0,0,0,0.1,0.1,0.1,0.4", + price: 420, + mana: 280, + max_uses: 5, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/touch_water.xml") + }, + }, + { + id: "TOUCH_OIL", + name: "$action_touch_oil", + description: "$actiondesc_touch_oil", + sprite: "data/ui_gfx/gun_actions/touch_oil.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/touch_oil.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "1,2,3,4,5,6,7,10", + spawn_probability: "0,0,0,0,0.1,0.1,0.1,0.4", + price: 380, + mana: 260, + max_uses: 5, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/touch_oil.xml") + }, + }, + { + id: "TOUCH_ALCOHOL", + name: "$action_touch_alcohol", + description: "$actiondesc_touch_alcohol", + sprite: "data/ui_gfx/gun_actions/touch_alcohol.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/touch_alcohol.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "1,2,3,4,5,6,7,10", + spawn_probability: "0,0,0,0,0.1,0.1,0.1,0.4", + price: 360, + mana: 240, + max_uses: 5, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/touch_alcohol.xml") + }, + }, + { + id: "TOUCH_BLOOD", + name: "$action_touch_blood", + description: "$actiondesc_touch_blood", + sprite: "data/ui_gfx/gun_actions/touch_blood.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/touch_blood.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "1,2,3,4,5,6,7,10", + spawn_probability: "0,0,0,0,0.1,0.1,0.1,0.5", + price: 390, + mana: 270, + max_uses: 3, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/touch_blood.xml") + }, + }, + { + id: "TOUCH_SMOKE", + name: "$action_touch_smoke", + description: "$actiondesc_touch_smoke", + sprite: "data/ui_gfx/gun_actions/touch_smoke.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/touch_smoke.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "1,2,3,4,5,6,7,10", + spawn_probability: "0,0,0,0,0.1,0.1,0.1,0.4", + price: 350, + mana: 230, + max_uses: 5, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/touch_smoke.xml") + }, + }, + { + id: "DESTRUCTION", + name: "$action_destruction", + description: "$actiondesc_destruction", + sprite: "data/ui_gfx/gun_actions/destruction.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/destruction.xml"], + spawn_requires_flag: "card_unlocked_destruction", + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "10", + spawn_probability: "1", + price: 600, + mana: 600, + max_uses: 5, + ai_never_uses: true, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/destruction.xml") + c.fire_rate_wait = c.fire_rate_wait + 100 + setCurrentReloadTime(current_reload_time + 300) + }, + }, + + { + id: "BURST_2", + name: "$action_burst_2", + description: "$actiondesc_burst_2", + sprite: "data/ui_gfx/gun_actions/burst_2.png", + sprite_unidentified: "data/ui_gfx/gun_actions/burst_2_unidentified.png", + type: ACTION_TYPE_DRAW_MANY, + spawn_level: "0,1,2,3,4,5,6", + spawn_probability: "0.8,0.8,0.8,0.8,0.8,0.8,0.8", + price: 140, + mana: 0, + + action: (c: GunActionState) => { + draw_actions( 2, true ) + }, + }, + { + id: "BURST_3", + name: "$action_burst_3", + description: "$actiondesc_burst_3", + sprite: "data/ui_gfx/gun_actions/burst_3.png", + sprite_unidentified: "data/ui_gfx/gun_actions/burst_3_unidentified.png", + type: ACTION_TYPE_DRAW_MANY, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "0.7,0.7,0.7,0.7,0.7,0.7", + price: 160, + mana: 2, + + action: (c: GunActionState) => { + draw_actions( 3, true ) + }, + }, + { + id: "BURST_4", + name: "$action_burst_4", + description: "$actiondesc_burst_4", + sprite: "data/ui_gfx/gun_actions/burst_4.png", + sprite_unidentified: "data/ui_gfx/gun_actions/burst_4_unidentified.png", + type: ACTION_TYPE_DRAW_MANY, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.4,0.5,0.6,0.6,0.6", + price: 180, + mana: 5, + + action: (c: GunActionState) => { + draw_actions( 4, true ) + }, + }, + { + id: "BURST_8", + name: "$action_burst_8", + description: "$actiondesc_burst_8", + sprite: "data/ui_gfx/gun_actions/burst_8.png", + sprite_unidentified: "data/ui_gfx/gun_actions/burst_4_unidentified.png", + spawn_requires_flag: "card_unlocked_musicbox", + type: ACTION_TYPE_DRAW_MANY, + spawn_level: "5,6,10", + spawn_probability: "0.1,0.1,0.5", + price: 300, + mana: 30, + + action: (c: GunActionState) => { + draw_actions( 8, true ) + }, + }, + { + id: "BURST_X", + name: "$action_burst_x", + description: "$actiondesc_burst_x", + sprite: "data/ui_gfx/gun_actions/burst_x.png", + sprite_unidentified: "data/ui_gfx/gun_actions/burst_4_unidentified.png", + spawn_requires_flag: "card_unlocked_musicbox", + type: ACTION_TYPE_DRAW_MANY, + spawn_level: "5,6,10", + spawn_probability: "0.1,0.1,0.5", + price: 500, + mana: 50, + max_uses: 30, + action: (c: GunActionState) => { + if ( deck.length > 0 ) { + draw_actions( deck.length, true ) + } + }, + }, + { + + id: "SCATTER_2", + name: "$action_scatter_2", + description: "$actiondesc_scatter_2", + sprite: "data/ui_gfx/gun_actions/scatter_2.png", + sprite_unidentified: "data/ui_gfx/gun_actions/scatter_2_unidentified.png", + type: ACTION_TYPE_DRAW_MANY, + spawn_level: "0,1,2", + spawn_probability: "0.8,0.8,0.7", + price: 100, + mana: 0, + + action: (c: GunActionState) => { + draw_actions( 2, true ) + c.spread_degrees = c.spread_degrees + 10.0 + }, + }, + { + id: "SCATTER_3", + name: "$action_scatter_3", + description: "$actiondesc_scatter_3", + sprite: "data/ui_gfx/gun_actions/scatter_3.png", + sprite_unidentified: "data/ui_gfx/gun_actions/scatter_3_unidentified.png", + type: ACTION_TYPE_DRAW_MANY, + spawn_level: "0,1,2,3", + spawn_probability: "0.6,0.7,0.7,0.8", + price: 120, + mana: 1, + + action: (c: GunActionState) => { + draw_actions( 3, true ) + c.spread_degrees = c.spread_degrees + 20.0 + }, + }, + { + id: "SCATTER_4", + name: "$action_scatter_4", + description: "$actiondesc_scatter_4", + sprite: "data/ui_gfx/gun_actions/scatter_4.png", + sprite_unidentified: "data/ui_gfx/gun_actions/scatter_4_unidentified.png", + type: ACTION_TYPE_DRAW_MANY, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "0.5,0.6,0.7,0.8,0.8,0.6", + price: 140, + mana: 2, + + action: (c: GunActionState) => { + draw_actions( 4, true ) + c.spread_degrees = c.spread_degrees + 40.0 + }, + }, + { + id: "I_SHAPE", + name: "$action_i_shape", + description: "$actiondesc_i_shape", + sprite: "data/ui_gfx/gun_actions/i_shape.png", + sprite_unidentified: "data/ui_gfx/gun_actions/i_shape_unidentified.png", + type: ACTION_TYPE_DRAW_MANY, + spawn_level: "1,2,3", + spawn_probability: "0.4,0.5,0.3", + price: 80, + mana: 0, + + action: (c: GunActionState) => { + draw_actions(2, true) + c.pattern_degrees = 180 + }, + }, + { + id: "Y_SHAPE", + name: "$action_y_shape", + description: "$actiondesc_y_shape", + sprite: "data/ui_gfx/gun_actions/y_shape.png", + sprite_unidentified: "data/ui_gfx/gun_actions/y_shape_unidentified.png", + type: ACTION_TYPE_DRAW_MANY, + spawn_level: "0,1,2,3", + spawn_probability: "0.8,0.5,0.4,0.3", + price: 100, + mana: 2, + + action: (c: GunActionState) => { + draw_actions(2, true) + c.pattern_degrees = 45 + }, + }, + { + id: "T_SHAPE", + name: "$action_t_shape", + description: "$actiondesc_t_shape", + sprite: "data/ui_gfx/gun_actions/t_shape.png", + sprite_unidentified: "data/ui_gfx/gun_actions/t_shape_unidentified.png", + type: ACTION_TYPE_DRAW_MANY, + spawn_level: "1,2,3,4", + spawn_probability: "0.4,0.5,0.4,0.3", + price: 120, + mana: 3, + + action: (c: GunActionState) => { + draw_actions(3, true) + c.pattern_degrees = 90 + }, + }, + { + id: "W_SHAPE", + name: "$action_w_shape", + description: "$actiondesc_w_shape", + sprite: "data/ui_gfx/gun_actions/w_shape.png", + sprite_unidentified: "data/ui_gfx/gun_actions/w_shape_unidentified.png", + type: ACTION_TYPE_DRAW_MANY, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.4,0.3,0.5,0.3,0.3", + price: 160, + mana: 3, + + action: (c: GunActionState) => { + draw_actions(3, true) + c.pattern_degrees = 20 + }, + }, + { + id: "CIRCLE_SHAPE", + name: "$action_circle_shape", + description: "$actiondesc_circle_shape", + sprite: "data/ui_gfx/gun_actions/circle_shape.png", + sprite_unidentified: "data/ui_gfx/gun_actions/circle_shape_unidentified.png", + type: ACTION_TYPE_DRAW_MANY, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "0.1,0.2,0.3,0.3,0.3,0.3", + price: 150, + mana: 6, + + action: (c: GunActionState) => { + draw_actions(6, true) + c.pattern_degrees = 180 + }, + }, + { + id: "PENTAGRAM_SHAPE", + name: "$action_pentagram_shape", + description: "$actiondesc_pentagram_shape", + sprite: "data/ui_gfx/gun_actions/pentagram_shape.png", + sprite_unidentified: "data/ui_gfx/gun_actions/pentagram_shape_unidentified.png", + type: ACTION_TYPE_DRAW_MANY, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.4,0.4,0.3,0.2,0.1", + price: 150, + mana: 5, + + action: (c: GunActionState) => { + draw_actions(5, true) + c.pattern_degrees = 180 + + + }, + }, + { + id: "SPREAD_REDUCE", + name: "$action_spread_reduce", + description: "$actiondesc_spread_reduce", + sprite: "data/ui_gfx/gun_actions/spread_reduce.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "0.8,0.8,0.8,0.8,0.7,0.6", + price: 100, + mana: 1, + + action: (c: GunActionState) => { + c.spread_degrees = c.spread_degrees - 60.0 + draw_actions( 1, true ) + }, + }, + { + id: "HEAVY_SPREAD", + name: "$action_heavy_spread", + description: "$actiondesc_heavy_spread", + sprite: "data/ui_gfx/gun_actions/heavy_spread.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleport_projectile_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "0,1,2,4,5,6", + spawn_probability: "0.6,0.7,0.8,0.8,0.8,0.6", + price: 100, + mana: 2, + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait - 7 + setCurrentReloadTime(current_reload_time - 15) + c.spread_degrees = c.spread_degrees + 720 + draw_actions( 1, true ) + }, + }, + { + id: "RECHARGE", + name: "$action_recharge", + description: "$actiondesc_recharge", + sprite: "data/ui_gfx/gun_actions/recharge.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "0.8,0.9,1,0.8,0.9,1", + price: 200, + mana: 12, + + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait - 10 + setCurrentReloadTime(current_reload_time - 20) + draw_actions( 1, true ) + }, + }, + { + id: "LIFETIME", + name: "$action_lifetime", + description: "$actiondesc_lifetime", + sprite: "data/ui_gfx/gun_actions/lifetime.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "3,4,5,6,10", + spawn_probability: "0.5,0.5,0.5,0.75,0.1", + price: 250, + mana: 40, + + custom_xml_file: "data/entities/misc/custom_cards/lifetime.xml", + action: (c: GunActionState) => { + c.lifetime_add = c.lifetime_add + 75 + c.fire_rate_wait = c.fire_rate_wait + 13 + draw_actions( 1, true ) + }, + }, + { + id: "LIFETIME_DOWN", + name: "$action_lifetime_down", + description: "$actiondesc_lifetime_down", + sprite: "data/ui_gfx/gun_actions/lifetime_down.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "3,4,5,6,10", + spawn_probability: "0.5,0.5,0.75,0.5,0.1", + price: 90, + mana: 10, + + custom_xml_file: "data/entities/misc/custom_cards/lifetime_down.xml", + action: (c: GunActionState) => { + c.lifetime_add = c.lifetime_add - 42 + c.fire_rate_wait = c.fire_rate_wait - 15 + draw_actions( 1, true ) + }, + }, + { + id: "NOLLA", + name: "$action_nolla", + description: "$actiondesc_nolla", + sprite: "data/ui_gfx/gun_actions/nolla.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_pyramid", + related_extra_entities: [ "data/entities/misc/nolla.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,4,5,6,10", + spawn_probability: "0.2,0.2,0.5,0.5,1", + price: 50, + mana: 1, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/nolla.xml," + c.fire_rate_wait = c.fire_rate_wait - 15 + draw_actions( 1, true ) + }, + }, + { + id: "SLOW_BUT_STEADY", + name: "$action_slow_but_steady", + description: "$actiondesc_slow_but_steady", + sprite: "data/ui_gfx/gun_actions/slow_but_steady.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_maths", + type: ACTION_TYPE_MODIFIER, + spawn_level: "3,4,5,6,10", + spawn_probability: "0.1,0.2,0.6,0.6,0.4", + price: 50, + mana: 0, + action: (c: GunActionState) => { + setCurrentReloadTime(90) + shot_effects.recoil_knockback = shot_effects.recoil_knockback - 80.0 + draw_actions( 1, true ) + }, + }, + { + id: "EXPLOSION_REMOVE", + name: "$action_explosion_remove", + description: "$actiondesc_explosion_remove", + sprite: "data/ui_gfx/gun_actions/explosion_remove.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + related_extra_entities: [ "data/entities/misc/explosion_remove.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,4,5,6", + spawn_probability: "0.2,0.6,0.7,0.2", + price: 50, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/explosion_remove.xml," + c.fire_rate_wait = c.fire_rate_wait - 15 + c.explosion_radius = c.explosion_radius - 30.0 + c.damage_explosion_add = c.damage_explosion_add - 0.8 + draw_actions( 1, true ) + }, + }, + { + id: "EXPLOSION_TINY", + name: "$action_explosion_tiny", + description: "$actiondesc_explosion_tiny", + sprite: "data/ui_gfx/gun_actions/explosion_tiny.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + related_extra_entities: [ "data/entities/misc/explosion_tiny.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,4,5,6", + spawn_probability: "0.2,0.6,0.7,0.2", + price: 160, + mana: 40, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/explosion_tiny.xml," + c.fire_rate_wait = c.fire_rate_wait + 15 + c.explosion_radius = c.explosion_radius - 30.0 + c.damage_explosion_add = c.damage_explosion_add + 0.8 + draw_actions( 1, true ) + }, + }, + { + id: "LASER_EMITTER_WIDER", + name: "$action_laser_emitter_wider", + description: "$actiondesc_laser_emitter_wider", + sprite: "data/ui_gfx/gun_actions/laser_emitter_wider.png", + sprite_unidentified: "data/ui_gfx/gun_actions/burn_trail_unidentified.png", + related_extra_entities: [ "data/entities/misc/laser_emitter_wider.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.3,0.3,0.4", + price: 40, + mana: 10, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/laser_emitter_wider.xml," + draw_actions( 1, true ) + }, + }, + + { + id: "MANA_REDUCE", + name: "$action_mana_reduce", + description: "$actiondesc_mana_reduce", + sprite: "data/ui_gfx/gun_actions/mana.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "0.7,0.9,1,1,1,1", + price: 250, + mana: -30, + + custom_xml_file: "data/entities/misc/custom_cards/mana_reduce.xml", + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 10 + draw_actions( 1, true ) + }, + }, + { + id: "BLOOD_MAGIC", + name: "$action_blood_magic", + description: "$actiondesc_blood_magic", + sprite: "data/ui_gfx/gun_actions/blood_magic.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + related_extra_entities: [ "data/entities/particles/blood_sparks.xml" ], + type: ACTION_TYPE_UTILITY, + spawn_level: "5,6,10", + spawn_probability: "0.3,0.7,0.5", + price: 150, + mana: -100, + custom_xml_file: "data/entities/misc/custom_cards/blood_magic.xml", + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/particles/blood_sparks.xml," + c.fire_rate_wait = c.fire_rate_wait - 20 + setCurrentReloadTime(current_reload_time - 20) + draw_actions( 1, true ) + + let entity_id = GetUpdatedEntityID() + + let dcomps = EntityGetComponent( entity_id, "DamageModelComponent" ) + + if (( dcomps != null ) && ( dcomps.length > 0 )) { + dcomps.every((b: any, a: any) => { + let hp = ComponentGetValue2( b, "hp" ) + hp = Math.max( hp - 0.16, 0.04 ) + ComponentSetValue2( b, "hp", hp ) + return true; + }) + } + }, + }, + { + id: "MONEY_MAGIC", + name: "$action_money_magic", + description: "$actiondesc_money_magic", + sprite: "data/ui_gfx/gun_actions/golden_punch.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + related_extra_entities: [ "data/entities/particles/gold_sparks.xml" ], + type: ACTION_TYPE_UTILITY, + spawn_level: "3,5,6,10", + spawn_probability: "0.2,0.8,0.3,0.5", + price: 200, + mana: 30, + custom_xml_file: "data/entities/misc/custom_cards/money_magic.xml", + action: (c: GunActionState) => { + let entity_id = GetUpdatedEntityID() + + let dcomp = EntityGetFirstComponent( entity_id, "WalletComponent" ) + + if ( dcomp != null ) { + let money = ComponentGetValue2( dcomp, "money" ) + let moneyspent = ComponentGetValue2( dcomp, "money_spent" ) + let damage = Math.min( Math.floor( money * 0.05 ), 24000 ) + + if (( damage > 1 ) && ( money >= 10 )) { + damage = Math.max( damage, 10 ) + + c.extra_entities = c.extra_entities + "data/entities/particles/gold_sparks.xml," + + money = money - damage + moneyspent = moneyspent + damage + ComponentSetValue2( dcomp, "money", money ) + ComponentSetValue2( dcomp, "money_spent", moneyspent ) + + + + if ( damage < 120 ) { + c.damage_projectile_add = c.damage_projectile_add + ( damage / 25 ) + } else if ( damage < 300 ) { + c.damage_projectile_add = c.damage_projectile_add + ( damage / 35 ) + } else if ( damage < 500 ) { + c.damage_projectile_add = c.damage_projectile_add + ( damage / 45 ) + } else { + c.damage_projectile_add = c.damage_projectile_add + ( damage / 55 ) + } + } + } + + draw_actions( 1, true ) + }, + }, + { + id: "BLOOD_TO_POWER", + name: "$action_blood_to_power", + description: "$actiondesc_blood_to_power", + sprite: "data/ui_gfx/gun_actions/blood_punch.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + related_extra_entities: [ "data/entities/particles/blood_sparks.xml" ], + type: ACTION_TYPE_UTILITY, + spawn_level: "2,5,6,10", + spawn_probability: "0.2,0.8,0.2,0.5", + price: 150, + mana: 20, + custom_xml_file: "data/entities/misc/custom_cards/blood_to_power.xml", + action: (c: GunActionState) => { + let entity_id = GetUpdatedEntityID() + + let dcomp = EntityGetFirstComponent( entity_id, "DamageModelComponent" ) + + if ( dcomp != null ) { + let hp = ComponentGetValue2( dcomp, "hp" ) + let damage = Math.min( hp * 0.44, 960 ) + let self_damage = hp * 0.2 + + if (( hp >= 0.4 ) && ( self_damage > 0.2 )) { + c.extra_entities = c.extra_entities + "data/entities/particles/blood_sparks.xml," + + EntityInflictDamage( entity_id, self_damage, "DAMAGE_CURSE", "$action_blood_to_power", "NONE", 0, 0, entity_id ) + + + + c.damage_projectile_add = c.damage_projectile_add + damage + } + } + + draw_actions( 1, true ) + }, + }, + { + id: "DUPLICATE", + name: "$action_duplicate", + description: "$actiondesc_duplicate", + sprite: "data/ui_gfx/gun_actions/duplicate.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_mestari", + type: ACTION_TYPE_OTHER, + recursive: true, + spawn_level: "5,6,10", + spawn_probability: "0.1,0.2,1", + price: 250, + mana: 250, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + let hand_count = hand.length + + hand.every((v: any, i: any) => { + let rec = check_recursion( v, recursion_level ) + if (( v.id !== "DUPLICATE" ) && ( i < hand_count ) && ( rec > -1 )) { + call_action(ActionSource.ACTION, v, c, rec ) + } + return true; + }) + + c.fire_rate_wait = c.fire_rate_wait + 20 + setCurrentReloadTime(current_reload_time + 20) + + draw_actions( 1, true ) + }, + }, + { + id: "QUANTUM_SPLIT", + name: "$action_quantum_split", + description: "$actiondesc_quantum_split", + sprite: "data/ui_gfx/gun_actions/quantum_split.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + related_extra_entities: [ "data/entities/misc/quantum_split.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.5,0.6,0.5,0.5,1", + price: 200, + mana: 10, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/quantum_split.xml," + c.fire_rate_wait = c.fire_rate_wait + 5 + draw_actions( 1, true ) + }, + }, + { + id: "GRAVITY", + name: "$action_gravity", + description: "$actiondesc_gravity", + sprite: "data/ui_gfx/gun_actions/gravity.png", + sprite_unidentified: "data/ui_gfx/gun_actions/w_shape_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.5,0.4,0.4,0.3,0.3", + price: 50, + mana: 1, + + action: (c: GunActionState) => { + c.gravity = c.gravity + 600.0 + draw_actions( 1, true ) + }, + }, + { + id: "GRAVITY_ANTI", + name: "$action_gravity_anti", + description: "$actiondesc_gravity_anti", + sprite: "data/ui_gfx/gun_actions/gravity_anti.png", + sprite_unidentified: "data/ui_gfx/gun_actions/w_shape_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.5,0.4,0.4,0.3,0.3", + price: 50, + mana: 1, + + action: (c: GunActionState) => { + c.gravity = c.gravity - 600.0 + draw_actions( 1, true ) + }, + }, + + { + id: "SINEWAVE", + name: "$action_sinewave", + description: "$actiondesc_sinewave", + sprite: "data/ui_gfx/gun_actions/sinewave.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/sinewave.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,4,6", + spawn_probability: "0.4,0.55,0.4", + price: 10, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/sinewave.xml," + c.speed_multiplier = c.speed_multiplier * 2 + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + + draw_actions( 1, true ) + }, + }, + { + id: "CHAOTIC_ARC", + name: "$action_chaotic_arc", + description: "$actiondesc_chaotic_arc", + sprite: "data/ui_gfx/gun_actions/chaotic_arc.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/chaotic_arc.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,5", + spawn_probability: "0.4,0.55,0.4", + price: 10, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/chaotic_arc.xml," + c.speed_multiplier = c.speed_multiplier * 2 + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + + draw_actions( 1, true ) + }, + }, + { + id: "PINGPONG_PATH", + name: "$action_pingpong_path", + description: "$actiondesc_pingpong_path", + sprite: "data/ui_gfx/gun_actions/pingpong_path.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/pingpong_path.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,5", + spawn_probability: "0.4,0.5,0.4", + price: 20, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/pingpong_path.xml," + c.lifetime_add = c.lifetime_add + 25 + draw_actions( 1, true ) + }, + }, + { + id: "AVOIDING_ARC", + name: "$action_avoiding_arc", + description: "$actiondesc_avoiding_arc", + sprite: "data/ui_gfx/gun_actions/avoiding_arc.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/avoiding_arc.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,4,6", + spawn_probability: "0.5,0.4,0.4", + price: 30, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/avoiding_arc.xml," + c.fire_rate_wait = c.fire_rate_wait + 10 + draw_actions( 1, true ) + }, + }, + { + id: "FLOATING_ARC", + name: "$action_floating_arc", + description: "$actiondesc_floating_arc", + sprite: "data/ui_gfx/gun_actions/floating_arc.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/floating_arc.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,5", + spawn_probability: "0.4,0.4,0.5", + price: 30, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/floating_arc.xml," + c.fire_rate_wait = c.fire_rate_wait + 10 + draw_actions( 1, true ) + }, + }, + { + id: "FLY_DOWNWARDS", + name: "$action_fly_downwards", + description: "$actiondesc_fly_downwards", + sprite: "data/ui_gfx/gun_actions/fly_downwards.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/fly_downwards.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,5", + spawn_probability: "0.3,0.45,0.3", + price: 30, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/fly_downwards.xml," + draw_actions( 1, true ) + c.fire_rate_wait = c.fire_rate_wait - 3 + }, + }, + { + id: "FLY_UPWARDS", + name: "$action_fly_upwards", + description: "$actiondesc_fly_upwards", + sprite: "data/ui_gfx/gun_actions/fly_upwards.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/fly_upwards.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,4,6", + spawn_probability: "0.3,0.45,0.3", + price: 20, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/fly_upwards.xml," + draw_actions( 1, true ) + c.fire_rate_wait = c.fire_rate_wait - 3 + }, + }, + { + id: "HORIZONTAL_ARC", + name: "$action_horizontal_arc", + description: "$actiondesc_horizontal_arc", + sprite: "data/ui_gfx/gun_actions/horizontal_arc.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/horizontal_arc.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,5", + spawn_probability: "0.4,0.4,0.4", + price: 20, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/horizontal_arc.xml," + draw_actions( 1, true ) + c.damage_projectile_add = c.damage_projectile_add + 0.3 + c.fire_rate_wait = c.fire_rate_wait - 6 + }, + }, + { + id: "LINE_ARC", + name: "$action_line_arc", + description: "$actiondesc_line_arc", + sprite: "data/ui_gfx/gun_actions/line_arc.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/line_arc.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,5", + spawn_probability: "0.3,0.4,0.5", + price: 30, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/line_arc.xml," + draw_actions( 1, true ) + c.damage_projectile_add = c.damage_projectile_add + 0.2 + c.fire_rate_wait = c.fire_rate_wait - 4 + }, + }, + { + id: "ORBIT_SHOT", + name: "$action_orbit_shot", + description: "$actiondesc_orbit_shot", + sprite: "data/ui_gfx/gun_actions/orbit_shot.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/spiraling_shot.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4", + spawn_probability: "0.2,0.4,0.4,0.3", + price: 30, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/spiraling_shot.xml," + draw_actions( 1, true ) + c.damage_projectile_add = c.damage_projectile_add + 0.1 + c.fire_rate_wait = c.fire_rate_wait - 6 + c.lifetime_add = c.lifetime_add + 25 + }, + }, + { + id: "SPIRALING_SHOT", + name: "$action_spiraling_shot", + description: "$actiondesc_spiraling_shot", + sprite: "data/ui_gfx/gun_actions/spiraling_shot.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/orbit_shot.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4", + spawn_probability: "0.2,0.3,0.4,0.5", + price: 30, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/orbit_shot.xml," + draw_actions( 1, true ) + c.damage_projectile_add = c.damage_projectile_add + 0.1 + c.fire_rate_wait = c.fire_rate_wait - 6 + c.lifetime_add = c.lifetime_add + 50 + }, + }, + { + id: "PHASING_ARC", + name: "$action_phasing_arc", + description: "$actiondesc_phasing_arc", + sprite: "data/ui_gfx/gun_actions/phasing_arc.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/phasing_arc.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5", + spawn_probability: "0.2,0.3,0.6,0.1", + price: 170, + mana: 2, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/phasing_arc.xml," + draw_actions( 1, true ) + c.fire_rate_wait = c.fire_rate_wait - 12 + c.lifetime_add = c.lifetime_add + 80 + c.speed_multiplier = c.speed_multiplier * 0.33 + c.child_speed_multiplier = c.child_speed_multiplier * 0.33 + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + }, + }, + { + id: "TRUE_ORBIT", + name: "$action_true_orbit", + description: "$actiondesc_true_orbit", + sprite: "data/ui_gfx/gun_actions/true_orbit.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/true_orbit.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.2,0.3,0.4", + price: 40, + mana: 2, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/true_orbit.xml," + draw_actions( 1, true ) + c.damage_projectile_add = c.damage_projectile_add + 0.1 + c.fire_rate_wait = c.fire_rate_wait - 20 + c.lifetime_add = c.lifetime_add + 80 + }, + }, + { + id: "BOUNCE", + name: "$action_bounce", + description: "$actiondesc_bounce", + sprite: "data/ui_gfx/gun_actions/bounce.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bounce_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,6", + spawn_probability: "1,1,0.4,0.2", + price: 50, + mana: 0, + + action: (c: GunActionState) => { + c.bounces = c.bounces + 10 + draw_actions( 1, true ) + }, + }, + { + id: "REMOVE_BOUNCE", + name: "$action_remove_bounce", + description: "$actiondesc_remove_bounce", + sprite: "data/ui_gfx/gun_actions/remove_bounce.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bounce_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5", + spawn_probability: "0.2,0.2,1,1", + price: 50, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/remove_bounce.xml," + c.bounces = 0 + draw_actions( 1, true ) + }, + }, + { + id: "HOMING", + name: "$action_homing", + description: "$actiondesc_homing", + sprite: "data/ui_gfx/gun_actions/homing.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/misc/homing.xml", "data/entities/particles/tinyspark_white.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "0.1,0.4,0.4,0.4,0.4,0.4", + price: 220, + mana: 70, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/homing.xml,data/entities/particles/tinyspark_white.xml," + draw_actions( 1, true ) + }, + }, + { + id: "ANTI_HOMING", + name: "$action_anti_homing", + description: "$actiondesc_anti_homing", + sprite: "data/ui_gfx/gun_actions/anti_homing.png", + sprite_unidentified: "data/ui_gfx/gun_actions/anti_homing_unidentified.png", + related_extra_entities: [ "data/entities/misc/anti_homing.xml", "data/entities/particles/tinyspark_white.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "0.05,0.3,0.3,0.1,0.1,0.01", + price: 110, + mana: 1, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/anti_homing.xml,data/entities/particles/tinyspark_white.xml," + c.fire_rate_wait = c.fire_rate_wait - 20 + draw_actions( 1, true ) + }, + }, + { + id: "HOMING_WAND", + name: "$action_homing_wand", + description: "$actiondesc_homing_wand", + sprite: "data/ui_gfx/gun_actions/homing_wand.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + spawn_requires_flag: "card_unlocked_homing_wand", + related_extra_entities: [ "data/entities/misc/homing_wand.xml", "data/entities/particles/tinyspark_white.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,4,5,6,10", + spawn_probability: "0.00001,0.08,0.08,0.25,0.25,0.2", + price: 500, + mana: 200, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/homing_wand.xml,data/entities/particles/tinyspark_white.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HOMING_SHORT", + name: "$action_homing_short", + description: "$actiondesc_homing_short", + sprite: "data/ui_gfx/gun_actions/homing_short.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/misc/homing_short.xml", "data/entities/particles/tinyspark_white_weak.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "0.4,0.8,1,0.4,0.3,0.1", + price: 160, + mana: 40, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/homing_short.xml,data/entities/particles/tinyspark_white_weak.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HOMING_ROTATE", + name: "$action_homing_rotate", + description: "$actiondesc_homing_rotate", + sprite: "data/ui_gfx/gun_actions/homing_rotate.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/misc/homing_rotate.xml", "data/entities/particles/tinyspark_white.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.2,0.4,0.6,0.4,0.4", + price: 175, + mana: 40, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/homing_rotate.xml,data/entities/particles/tinyspark_white.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HOMING_SHOOTER", + name: "$action_homing_shooter", + description: "$actiondesc_homing_shooter", + sprite: "data/ui_gfx/gun_actions/homing_shooter.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/misc/homing_shooter.xml", "data/entities/particles/tinyspark_white.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,6", + spawn_probability: "0.2,0.3,0.2,0.2", + price: 100, + mana: 10, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/homing_shooter.xml,data/entities/particles/tinyspark_white.xml," + draw_actions( 1, true ) + }, + }, + { + id: "AUTOAIM", + name: "$action_autoaim", + description: "$actiondesc_autoaim", + sprite: "data/ui_gfx/gun_actions/autoaim.png", + sprite_unidentified: "data/ui_gfx/gun_actions/autoaim_unidentified.png", + related_extra_entities: [ "data/entities/misc/autoaim.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.4,0.4,0.4,0.4,0.4", + price: 150, + mana: 25, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/autoaim.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HOMING_ACCELERATING", + name: "$action_homing_accelerating", + description: "$actiondesc_homing_accelerating", + sprite: "data/ui_gfx/gun_actions/homing_accelerating.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/misc/homing_accelerating.xml", "data/entities/particles/tinyspark_white_small.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4", + spawn_probability: "0.1,0.3,0.3,0.5", + price: 180, + mana: 60, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/homing_accelerating.xml,data/entities/particles/tinyspark_white_small.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HOMING_CURSOR", + name: "$action_homing_cursor", + description: "$actiondesc_homing_cursor", + sprite: "data/ui_gfx/gun_actions/homing_cursor.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/misc/homing_cursor.xml", "data/entities/particles/tinyspark_white.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.7,0.7,0.4,0.4,1", + price: 175, + mana: 30, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/homing_cursor.xml,data/entities/particles/tinyspark_white.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HOMING_AREA", + name: "$action_homing_area", + description: "$actiondesc_homing_area", + sprite: "data/ui_gfx/gun_actions/homing_area.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/misc/homing_area.xml", "data/entities/particles/tinyspark_white.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.2,0.4,0.6,0.7,0.4", + price: 175, + mana: 60, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/homing_area.xml,data/entities/particles/tinyspark_white.xml," + c.fire_rate_wait = c.fire_rate_wait + 8 + c.spread_degrees = c.spread_degrees + 6 + c.speed_multiplier = c.speed_multiplier * 0.75 + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + + draw_actions( 1, true ) + }, + }, + + { + id: "PIERCING_SHOT", + name: "$action_piercing_shot", + description: "$actiondesc_piercing_shot", + sprite: "data/ui_gfx/gun_actions/piercing_shot.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/misc/piercing_shot.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.4,0.5,0.6,0.6,0.4", + price: 190, + mana: 140, + + action: (c: GunActionState) => { + c.damage_projectile_add = c.damage_projectile_add - 0.6 + c.extra_entities = c.extra_entities + "data/entities/misc/piercing_shot.xml," + c.friendly_fire = true + draw_actions( 1, true ) + }, + }, + { + id: "CLIPPING_SHOT", + name: "$action_clipping_shot", + description: "$actiondesc_clipping_shot", + sprite: "data/ui_gfx/gun_actions/clipping_shot.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/misc/clipping_shot.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.2,0.3,0.6,0.4,0.6", + price: 200, + mana: 160, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/clipping_shot.xml," + c.fire_rate_wait = c.fire_rate_wait + 50 + setCurrentReloadTime(current_reload_time + 40) + draw_actions( 1, true ) + }, + }, + { + id: "DAMAGE", + name: "$action_damage", + description: "$actiondesc_damage", + sprite: "data/ui_gfx/gun_actions/damage.png", + sprite_unidentified: "data/ui_gfx/gun_actions/damage_unidentified.png", + related_extra_entities: [ "data/entities/particles/tinyspark_yellow.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.6,0.6,0.8,0.6,0.6", + price: 140, + mana: 5, + + custom_xml_file: "data/entities/misc/custom_cards/damage.xml", + action: (c: GunActionState) => { + c.damage_projectile_add = c.damage_projectile_add + 0.4 + c.gore_particles = c.gore_particles + 5 + c.fire_rate_wait = c.fire_rate_wait + 5 + c.extra_entities = c.extra_entities + "data/entities/particles/tinyspark_yellow.xml," + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 10.0 + draw_actions( 1, true ) + }, + }, + { + id: "DAMAGE_RANDOM", + name: "$action_damage_random", + description: "$actiondesc_damage_random", + sprite: "data/ui_gfx/gun_actions/damage_random.png", + sprite_unidentified: "data/ui_gfx/gun_actions/damage_unidentified.png", + spawn_requires_flag: "card_unlocked_pyramid", + related_extra_entities: [ "data/entities/particles/tinyspark_yellow.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "3,4,5", + spawn_probability: "0.7,0.6,0.6", + price: 200, + mana: 15, + + custom_xml_file: "data/entities/misc/custom_cards/damage_random.xml", + action: (c: GunActionState) => { + SetRandomSeed( GameGetFrameNum(), GameGetFrameNum() + 253 ) + let multiplier = 0 + multiplier = Random( -3, 4 ) * Random( 0, 2 ) + let result = 0 + result = c.damage_projectile_add + 0.4 * multiplier + c.damage_projectile_add = result + c.gore_particles = c.gore_particles + 5 * multiplier + c.fire_rate_wait = c.fire_rate_wait + 5 + c.extra_entities = c.extra_entities + "data/entities/particles/tinyspark_yellow.xml," + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 10.0 * multiplier + draw_actions( 1, true ) + }, + }, + { + id: "BLOODLUST", + name: "$action_bloodlust", + description: "$actiondesc_bloodlust", + sprite: "data/ui_gfx/gun_actions/bloodlust.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/particles/tinyspark_red.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,4,5,6", + spawn_probability: "0.2,0.3,0.6,0.7,0.3", + price: 160, + mana: 2, + + action: (c: GunActionState) => { + c.damage_projectile_add = c.damage_projectile_add + 1.3 + c.gore_particles = c.gore_particles + 15 + c.fire_rate_wait = c.fire_rate_wait + 8 + c.friendly_fire = true + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 30.0 + c.spread_degrees = c.spread_degrees + 6 + c.extra_entities = c.extra_entities + "data/entities/particles/tinyspark_red.xml," + draw_actions( 1, true ) + }, + }, + { + id: "DAMAGE_FOREVER", + name: "$action_damage_forever", + description: "$actiondesc_damage_forever", + sprite: "data/ui_gfx/gun_actions/damage_forever.png", + sprite_unidentified: "data/ui_gfx/gun_actions/damage_unidentified.png", + related_extra_entities: [ "data/entities/particles/tinyspark_red.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6,10", + spawn_probability: "0.2,0.3,0.6,0.5,0.2,0.2", + price: 240, + mana: 0, + max_uses: 20, + never_unlimited: true, + custom_xml_file: "data/entities/misc/custom_cards/damage_forever.xml", + action: (c: GunActionState) => { + if ( mana > 50 ) { + let manaforspell = mana - 50 + c.damage_projectile_add = c.damage_projectile_add + 0.025 * manaforspell + setMana(50) + } + + c.gore_particles = c.gore_particles + 15 + c.fire_rate_wait = c.fire_rate_wait + 15 + setCurrentReloadTime(current_reload_time + 10) + c.extra_entities = c.extra_entities + "data/entities/particles/tinyspark_red.xml," + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 10.0 + draw_actions( 1, true ) + }, + }, + { + id: "CRITICAL_HIT", + name: "$action_critical_hit", + description: "$actiondesc_critical_hit", + sprite: "data/ui_gfx/gun_actions/critical_hit.png", + sprite_unidentified: "data/ui_gfx/gun_actions/damage_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.5,0.6,0.6,0.7,0.6", + price: 140, + mana: 5, + + custom_xml_file: "data/entities/misc/custom_cards/critical_hit.xml", + action: (c: GunActionState) => { + c.damage_critical_chance = c.damage_critical_chance + 15 + draw_actions( 1, true ) + }, + }, + { + id: "AREA_DAMAGE", + name: "$action_area_damage", + description: "$actiondesc_area_damage", + sprite: "data/ui_gfx/gun_actions/area_damage.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/misc/area_damage.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.4,0.5,0.5,0.5,0.6", + price: 140, + mana: 30, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/area_damage.xml," + draw_actions( 1, true ) + }, + }, + { + id: "SPELLS_TO_POWER", + name: "$action_spells_to_power", + description: "$actiondesc_spells_to_power", + sprite: "data/ui_gfx/gun_actions/spells_to_power.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/misc/spells_to_power.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6,10", + spawn_probability: "0.3,0.3,0.5,0.5,0.5,0.1", + price: 140, + mana: 110, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/spells_to_power.xml," + c.fire_rate_wait = c.fire_rate_wait + 40 + draw_actions( 1, true ) + }, + }, + { + id: "ESSENCE_TO_POWER", + name: "$action_enemies_to_power", + description: "$actiondesc_enemies_to_power", + sprite: "data/ui_gfx/gun_actions/essence_to_power.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/misc/essence_to_power.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,6,10", + spawn_probability: "0.2,0.5,0.5,0.5,0.1", + price: 120, + mana: 110, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/essence_to_power.xml," + c.fire_rate_wait = c.fire_rate_wait + 20 + draw_actions( 1, true ) + }, + }, + { + id: "ZERO_DAMAGE", + name: "$action_zero_damage", + description: "$actiondesc_zero_damage", + sprite: "data/ui_gfx/gun_actions/zero_damage.png", + sprite_unidentified: "data/ui_gfx/gun_actions/damage_unidentified.png", + related_extra_entities: [ "data/entities/particles/tinyspark_white_small.xml", "data/entities/misc/zero_damage.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "3,4,5,10", + spawn_probability: "0.3,0.3,0.6,0.3", + price: 50, + mana: 5, + + action: (c: GunActionState) => { + c.damage_electricity_add = 0 + c.damage_explosion_add = 0 + c.damage_explosion = 0 + c.damage_critical_chance = 0 + c.damage_ice_add = 0 + c.damage_projectile_add = 0 + c.damage_null_all = 1 + c.gore_particles = 0 + c.fire_rate_wait = c.fire_rate_wait - 5 + c.extra_entities = c.extra_entities + "data/entities/particles/tinyspark_white_small.xml,data/entities/misc/zero_damage.xml," + shot_effects.recoil_knockback = shot_effects.recoil_knockback - 10.0 + c.lifetime_add = c.lifetime_add + 280 + draw_actions( 1, true ) + }, + }, + + { + id: "HEAVY_SHOT", + name: "$action_heavy_shot", + description: "$actiondesc_heavy_shot", + sprite: "data/ui_gfx/gun_actions/heavy_shot.png", + sprite_unidentified: "data/ui_gfx/gun_actions/heavy_shot_unidentified.png", + related_extra_entities: [ "data/entities/particles/heavy_shot.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.4,0.4,0.5", + price: 150, + mana: 7, + + custom_xml_file: "data/entities/misc/custom_cards/heavy_shot.xml", + action: (c: GunActionState) => { + c.damage_projectile_add = c.damage_projectile_add + 1.75 + c.fire_rate_wait = c.fire_rate_wait + 10 + c.gore_particles = c.gore_particles + 10 + c.speed_multiplier = c.speed_multiplier * 0.3 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 50.0 + c.extra_entities = c.extra_entities + "data/entities/particles/heavy_shot.xml," + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + + draw_actions( 1, true ) + }, + }, + { + id: "LIGHT_SHOT", + name: "$action_light_shot", + description: "$actiondesc_light_shot", + sprite: "data/ui_gfx/gun_actions/light_shot.png", + sprite_unidentified: "data/ui_gfx/gun_actions/heavy_shot_unidentified.png", + related_extra_entities: [ "data/entities/particles/light_shot.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.3,0.5,0.4", + price: 60, + mana: 5, + + custom_xml_file: "data/entities/misc/custom_cards/light_shot.xml", + action: (c: GunActionState) => { + c.damage_projectile_add = c.damage_projectile_add - 1.0 + c.explosion_radius = c.explosion_radius - 10.0 + if (c.explosion_radius < 0) { + c.explosion_radius = 0 + } + c.fire_rate_wait = c.fire_rate_wait - 3 + c.speed_multiplier = c.speed_multiplier * 7.5 + c.spread_degrees = c.spread_degrees - 6 + shot_effects.recoil_knockback = shot_effects.recoil_knockback - 10.0 + c.extra_entities = c.extra_entities + "data/entities/particles/light_shot.xml," + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + + draw_actions( 1, true ) + }, + }, + + { + id: "KNOCKBACK", + name: "$action_knockback", + description: "$actiondesc_knockback", + sprite: "data/ui_gfx/gun_actions/knockback.png", + sprite_unidentified: "data/ui_gfx/gun_actions/knockback_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "3,5", + spawn_probability: "0.7,0.6", + price: 100, + mana: 5, + + action: (c: GunActionState) => { + c.knockback_force = c.knockback_force + 5 + draw_actions( 1, true ) + }, + }, + { + id: "RECOIL", + name: "$action_recoil", + description: "$actiondesc_recoil", + sprite: "data/ui_gfx/gun_actions/recoil.png", + sprite_unidentified: "data/ui_gfx/gun_actions/recoil_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,4", + spawn_probability: "0.6,0.7", + price: 100, + mana: 5, + + action: (c: GunActionState) => { + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 200.0 + draw_actions( 1, true ) + }, + }, + { + id: "RECOIL_DAMPER", + name: "$action_recoil_damper", + description: "$actiondesc_recoil_damper", + sprite: "data/ui_gfx/gun_actions/recoil_damper.png", + sprite_unidentified: "data/ui_gfx/gun_actions/recoil_damper_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "3,6", + spawn_probability: "0.6,0.7", + price: 100, + mana: 5, + + action: (c: GunActionState) => { + shot_effects.recoil_knockback = shot_effects.recoil_knockback - 200 + draw_actions( 1, true ) + }, + }, + { + id: "SPEED", + name: "$action_speed", + description: "$actiondesc_speed", + sprite: "data/ui_gfx/gun_actions/speed.png", + sprite_unidentified: "data/ui_gfx/gun_actions/speed_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3", + spawn_probability: "1,0.5,0.5", + price: 100, + mana: 3, + + custom_xml_file: "data/entities/misc/custom_cards/speed.xml", + action: (c: GunActionState) => { + c.speed_multiplier = c.speed_multiplier * 2.5 + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + + draw_actions( 1, true ) + }, + }, + { + id: "ACCELERATING_SHOT", + name: "$action_accelerating_shot", + description: "$actiondesc_accelerating_shot", + sprite: "data/ui_gfx/gun_actions/accelerating_shot.png", + sprite_unidentified: "data/ui_gfx/gun_actions/heavy_shot_unidentified.png", + related_extra_entities: [ "data/entities/misc/accelerating_shot.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.5,0.4,1", + price: 190, + mana: 20, + + custom_xml_file: "data/entities/misc/custom_cards/accelerating_shot.xml", + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 8 + c.speed_multiplier = c.speed_multiplier * 0.32 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 10.0 + c.extra_entities = c.extra_entities + "data/entities/misc/accelerating_shot.xml," + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + + draw_actions( 1, true ) + }, + }, + { + id: "DECELERATING_SHOT", + name: "$action_decelerating_shot", + description: "$actiondesc_decelerating_shot", + sprite: "data/ui_gfx/gun_actions/decelerating_shot.png", + sprite_unidentified: "data/ui_gfx/gun_actions/heavy_shot_unidentified.png", + related_extra_entities: [ "data/entities/misc/decelerating_shot.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.4,0.1,0.7", + price: 80, + mana: 10, + + custom_xml_file: "data/entities/misc/custom_cards/decelerating_shot.xml", + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait - 8 + c.speed_multiplier = c.speed_multiplier * 1.68 + shot_effects.recoil_knockback = shot_effects.recoil_knockback - 10.0 + c.extra_entities = c.extra_entities + "data/entities/misc/decelerating_shot.xml," + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + + draw_actions( 1, true ) + }, + }, + + { + id: "EXPLOSIVE_PROJECTILE", + name: "$action_explosive_projectile", + description: "$actiondesc_explosive_projectile", + sprite: "data/ui_gfx/gun_actions/explosive_projectile.png", + sprite_unidentified: "data/ui_gfx/gun_actions/explosive_projectile_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "1,1,0.8", + price: 120, + mana: 30, + + custom_xml_file: "data/entities/misc/custom_cards/explosive_projectile.xml", + action: (c: GunActionState) => { + c.explosion_radius = c.explosion_radius + 15.0 + c.damage_explosion_add = c.damage_explosion_add + 0.2 + c.fire_rate_wait = c.fire_rate_wait + 40 + c.speed_multiplier = c.speed_multiplier * 0.75 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 30.0 + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + + draw_actions( 1, true ) + }, + }, + { + id: "WATER_TO_POISON", + name: "$action_water_to_poison", + description: "$actiondesc_water_to_poison", + sprite: "data/ui_gfx/gun_actions/water_to_poison.png", + sprite_unidentified: "data/ui_gfx/gun_actions/explosive_projectile_unidentified.png", + related_extra_entities: [ "data/entities/misc/water_to_poison.xml", "data/entities/particles/tinyspark_purple.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.3,0.3,0.3", + price: 80, + mana: 30, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/water_to_poison.xml,data/entities/particles/tinyspark_purple.xml," + c.fire_rate_wait = c.fire_rate_wait + 10 + draw_actions( 1, true ) + }, + }, + { + id: "BLOOD_TO_ACID", + name: "$action_blood_to_acid", + description: "$actiondesc_blood_to_acid", + sprite: "data/ui_gfx/gun_actions/blood_to_acid.png", + sprite_unidentified: "data/ui_gfx/gun_actions/explosive_projectile_unidentified.png", + related_extra_entities: [ "data/entities/misc/blood_to_acid.xml", "data/entities/particles/tinyspark_red.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.3,0.3,0.3", + price: 80, + mana: 30, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/blood_to_acid.xml,data/entities/particles/tinyspark_red.xml," + c.fire_rate_wait = c.fire_rate_wait + 10 + draw_actions( 1, true ) + }, + }, + { + id: "LAVA_TO_BLOOD", + name: "$action_lava_to_blood", + description: "$actiondesc_lava_to_blood", + sprite: "data/ui_gfx/gun_actions/lava_to_blood.png", + sprite_unidentified: "data/ui_gfx/gun_actions/explosive_projectile_unidentified.png", + related_extra_entities: [ "data/entities/misc/lava_to_blood.xml", "data/entities/particles/tinyspark_orange.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.3,0.3,0.3", + price: 80, + mana: 30, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/lava_to_blood.xml,data/entities/particles/tinyspark_orange.xml," + c.fire_rate_wait = c.fire_rate_wait + 10 + draw_actions( 1, true ) + }, + }, + { + id: "LIQUID_TO_EXPLOSION", + name: "$action_liquid_to_explosion", + description: "$actiondesc_liquid_to_explosion", + sprite: "data/ui_gfx/gun_actions/liquid_to_explosion.png", + sprite_unidentified: "data/ui_gfx/gun_actions/explosive_projectile_unidentified.png", + related_extra_entities: [ "data/entities/misc/liquid_to_explosion.xml", "data/entities/particles/tinyspark_red.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.3,0.3,0.3", + price: 120, + mana: 40, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/liquid_to_explosion.xml,data/entities/particles/tinyspark_red.xml," + c.fire_rate_wait = c.fire_rate_wait + 20 + draw_actions( 1, true ) + }, + }, + { + id: "TOXIC_TO_ACID", + name: "$action_toxic_to_acid", + description: "$actiondesc_toxic_to_acid", + sprite: "data/ui_gfx/gun_actions/toxic_to_acid.png", + sprite_unidentified: "data/ui_gfx/gun_actions/explosive_projectile_unidentified.png", + related_extra_entities: [ "data/entities/misc/toxic_to_acid.xml", "data/entities/particles/tinyspark_green.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.3,0.3,0.3", + price: 120, + mana: 50, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/toxic_to_acid.xml,data/entities/particles/tinyspark_green.xml," + c.fire_rate_wait = c.fire_rate_wait + 10 + draw_actions( 1, true ) + }, + }, + { + id: "STATIC_TO_SAND", + name: "$action_static_to_sand", + description: "$actiondesc_static_to_sand", + sprite: "data/ui_gfx/gun_actions/static_to_sand.png", + sprite_unidentified: "data/ui_gfx/gun_actions/explosive_projectile_unidentified.png", + related_extra_entities: [ "data/entities/misc/static_to_sand.xml", "data/entities/particles/tinyspark_yellow.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,10", + spawn_probability: "0.3,0.3,0.3,0.2", + price: 140, + mana: 70, + max_uses: 8, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/static_to_sand.xml,data/entities/particles/tinyspark_yellow.xml," + c.fire_rate_wait = c.fire_rate_wait + 60 + draw_actions( 1, true ) + }, + }, + { + id: "TRANSMUTATION", + name: "$action_transmutation", + description: "$actiondesc_transmutation", + sprite: "data/ui_gfx/gun_actions/transmutation.png", + sprite_unidentified: "data/ui_gfx/gun_actions/explosive_projectile_unidentified.png", + related_extra_entities: [ "data/entities/misc/transmutation.xml", "data/entities/particles/tinyspark_purple_bright.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6,10", + spawn_probability: "0.3,0.3,0.3,0.3,0.3,0.2", + price: 180, + mana: 80, + max_uses: 8, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/transmutation.xml,data/entities/particles/tinyspark_purple_bright.xml," + c.fire_rate_wait = c.fire_rate_wait + 20 + draw_actions( 1, true ) + }, + }, + { + id: "RANDOM_EXPLOSION", + name: "$action_random_explosion", + description: "$actiondesc_random_explosion", + sprite: "data/ui_gfx/gun_actions/random_explosion.png", + sprite_unidentified: "data/ui_gfx/gun_actions/explosive_projectile_unidentified.png", + related_extra_entities: [ "data/entities/misc/random_explosion.xml", "data/entities/particles/tinyspark_purple_bright.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "3,5,6", + spawn_probability: "0.3,0.6,1", + price: 240, + mana: 120, + max_uses: 30, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/random_explosion.xml,data/entities/particles/tinyspark_purple_bright.xml," + c.fire_rate_wait = c.fire_rate_wait + 40 + draw_actions( 1, true ) + }, + }, + { + id: "NECROMANCY", + name: "$action_necromancy", + description: "$actiondesc_necromancy", + spawn_requires_flag: "card_unlocked_necromancy", + sprite: "data/ui_gfx/gun_actions/necromancy.png", + sprite_unidentified: "data/ui_gfx/gun_actions/explosive_projectile_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5", + spawn_probability: "0.4,0.6,0.6,0.3", + price: 80, + mana: 20, + + action: (c: GunActionState) => { + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_necromancy.xml," + c.fire_rate_wait = c.fire_rate_wait + 10 + draw_actions( 1, true ) + }, + }, + { + id: "LIGHT", + name: "$action_light", + description: "$actiondesc_light", + sprite: "data/ui_gfx/gun_actions/light.png", + related_extra_entities: [ "data/entities/misc/light.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "0,1,2,3,4", + spawn_probability: "1,0.8,0.6,0.4,0.2", + price: 20, + mana: 1, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/light.xml," + draw_actions( 1, true ) + }, + }, + { + id: "EXPLOSION", + name: "$action_explosion", + description: "$actiondesc_explosion", + sprite: "data/ui_gfx/gun_actions/explosion.png", + sprite_unidentified: "data/ui_gfx/gun_actions/explosion_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/explosion.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "0,2,4,5", + spawn_probability: "0.5,1,1,0.7", + price: 160, + mana: 80, + + custom_xml_file: "data/entities/misc/custom_cards/explosion.xml", + is_dangerous_blast: true, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/explosion.xml") + c.fire_rate_wait = c.fire_rate_wait + 3 + c.screenshake = c.screenshake + 2.5 + }, + }, + { + id: "EXPLOSION_LIGHT", + name: "$action_explosion_light", + description: "$actiondesc_explosion_light", + sprite: "data/ui_gfx/gun_actions/explosion_light.png", + sprite_unidentified: "data/ui_gfx/gun_actions/explosion_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/explosion_light.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "2,3,5,6", + spawn_probability: "0.5,1,0.7,0.5", + price: 160, + mana: 80, + + custom_xml_file: "data/entities/misc/custom_cards/explosion_light.xml", + is_dangerous_blast: true, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/explosion_light.xml") + c.fire_rate_wait = c.fire_rate_wait + 3 + c.screenshake = c.screenshake + 2.5 + }, + }, + { + id: "FIRE_BLAST", + name: "$action_fire_blast", + description: "$actiondesc_fire_blast", + sprite: "data/ui_gfx/gun_actions/fire_blast.png", + sprite_unidentified: "data/ui_gfx/gun_actions/fire_blast_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/fireblast.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "0,1,3,5", + spawn_probability: "0.5,0.7,0.6,0.4", + price: 120, + mana: 10, + + custom_xml_file: "data/entities/misc/custom_cards/fire_blast.xml", + is_dangerous_blast: true, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/fireblast.xml") + c.fire_rate_wait = c.fire_rate_wait + 3 + c.screenshake = c.screenshake + 0.5 + }, + }, + { + id: "POISON_BLAST", + name: "$action_poison_blast", + description: "$actiondesc_poison_blast", + sprite: "data/ui_gfx/gun_actions/poison_blast.png", + sprite_unidentified: "data/ui_gfx/gun_actions/poison_blast_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/poison_blast.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "1,2,4,6", + spawn_probability: "0.5,0.8,0.4,0.3", + price: 140, + mana: 30, + + custom_xml_file: "data/entities/misc/custom_cards/poison_blast.xml", + is_dangerous_blast: true, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/poison_blast.xml") + c.fire_rate_wait = c.fire_rate_wait + 3 + c.screenshake = c.screenshake + 0.5 + }, + }, + { + id: "ALCOHOL_BLAST", + name: "$action_alcohol_blast", + description: "$actiondesc_alcohol_blast", + sprite: "data/ui_gfx/gun_actions/alcohol_blast.png", + sprite_unidentified: "data/ui_gfx/gun_actions/poison_blast_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/alcohol_blast.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "1,2,4,6", + spawn_probability: "0.5,0.6,0.65,0.3", + price: 140, + mana: 30, + + custom_xml_file: "data/entities/misc/custom_cards/alcohol_blast.xml", + is_dangerous_blast: true, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/alcohol_blast.xml") + c.fire_rate_wait = c.fire_rate_wait + 3 + c.screenshake = c.screenshake + 0.5 + }, + }, + { + id: "THUNDER_BLAST", + name: "$action_thunder_blast", + description: "$actiondesc_thunder_blast", + sprite: "data/ui_gfx/gun_actions/thunder_blast.png", + sprite_unidentified: "data/ui_gfx/gun_actions/thunder_blast_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/thunder_blast.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "1,3,5,6,10", + spawn_probability: "0.5,0.6,0.7,0.5,0.1", + price: 180, + mana: 110, + + custom_xml_file: "data/entities/misc/custom_cards/thunder_blast.xml", + is_dangerous_blast: true, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/thunder_blast.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + c.screenshake = c.screenshake + 3.0 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 30.0 + }, + }, + + { + id: "BERSERK_FIELD", + name: "$action_berserk_field", + description: "$actiondesc_berserk_field", + sprite: "data/ui_gfx/gun_actions/berserk_field.png", + sprite_unidentified: "data/ui_gfx/gun_actions/berserk_field_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/berserk_field.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "2,3,4", + spawn_probability: "0.3,0.6,0.3", + price: 200, + mana: 30, + max_uses: 15, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/berserk_field.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "POLYMORPH_FIELD", + name: "$action_polymorph_field", + description: "$actiondesc_polymorph_field", + sprite: "data/ui_gfx/gun_actions/polymorph_field.png", + sprite_unidentified: "data/ui_gfx/gun_actions/polymorph_field_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/polymorph_field.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "0,1,2,3,4,5,6", + spawn_probability: "0.3,0.3,0.3,0.8,0.8,0.3,0.3", + price: 200, + mana: 50, + max_uses: 5, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/polymorph_field.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "CHAOS_POLYMORPH_FIELD", + name: "$action_chaos_polymorph_field", + description: "$actiondesc_chaos_polymorph_field", + sprite: "data/ui_gfx/gun_actions/chaos_polymorph_field.png", + sprite_unidentified: "data/ui_gfx/gun_actions/chaos_polymorph_field_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/chaos_polymorph_field.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "0.3,0.3,0.5,0.6,0.3,0.3", + price: 200, + mana: 20, + max_uses: 10, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/chaos_polymorph_field.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "ELECTROCUTION_FIELD", + name: "$action_electrocution_field", + description: "$actiondesc_electrocution_field", + sprite: "data/ui_gfx/gun_actions/electrocution_field.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electrocution_field_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/electrocution_field.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "1,3,5,6", + spawn_probability: "0.3,0.6,0.8,0.3", + price: 200, + mana: 60, + max_uses: 15, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/electrocution_field.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "FREEZE_FIELD", + name: "$action_freeze_field", + description: "$actiondesc_freeze_field", + sprite: "data/ui_gfx/gun_actions/freeze_field.png", + sprite_unidentified: "data/ui_gfx/gun_actions/freeze_field_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/freeze_field.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "0,2,4,5", + spawn_probability: "0.3,0.6,0.7,0.3", + price: 200, + mana: 50, + max_uses: 15, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/freeze_field.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "REGENERATION_FIELD", + name: "$action_regeneration_field", + description: "$actiondesc_regeneration_field", + sprite: "data/ui_gfx/gun_actions/regeneration_field.png", + sprite_unidentified: "data/ui_gfx/gun_actions/regeneration_field_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/regeneration_field.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "1,2,3,4", + spawn_probability: "0.3,0.3,0.4,0.3", + price: 250, + mana: 80, + max_uses: 2, + never_unlimited: true, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/regeneration_field.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "TELEPORTATION_FIELD", + name: "$action_teleportation_field", + description: "$actiondesc_teleportation_field", + sprite: "data/ui_gfx/gun_actions/teleportation_field.png", + sprite_unidentified: "data/ui_gfx/gun_actions/teleportation_field_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/teleportation_field.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "0,1,2,3,4,5", + spawn_probability: "0.3,0.6,0.3,0.3,0.6,0.3", + price: 150, + mana: 30, + max_uses: 15, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/teleportation_field.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "LEVITATION_FIELD", + name: "$action_levitation_field", + description: "$actiondesc_levitation_field", + sprite: "data/ui_gfx/gun_actions/levitation_field.png", + sprite_unidentified: "data/ui_gfx/gun_actions/levitation_field_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/levitation_field.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "1,2,3,4", + spawn_probability: "0.3,0.6,0.6,0.3", + price: 120, + mana: 10, + max_uses: 15, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/levitation_field.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + + { + id: "SHIELD_FIELD", + name: "$action_shield_field", + description: "$actiondesc_shield_field", + sprite: "data/ui_gfx/gun_actions/shield_field.png", + sprite_unidentified: "data/ui_gfx/gun_actions/shield_field_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/shield_field.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.3,0.3,0.4,0.5,0.3", + price: 160, + mana: 20, + max_uses: 10, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/shield_field.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "PROJECTILE_TRANSMUTATION_FIELD", + name: "$action_projectile_transmutation_field", + description: "$actiondesc_projectile_transmutation_field", + sprite: "data/ui_gfx/gun_actions/projectile_transmutation_field.png", + sprite_unidentified: "data/ui_gfx/gun_actions/chaos_polymorph_field_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/projectile_transmutation_field.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.3,0.4,0.4,0.3,0.3", + price: 250, + mana: 120, + max_uses: 6, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/projectile_transmutation_field.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "PROJECTILE_THUNDER_FIELD", + name: "$action_projectile_thunder_field", + description: "$actiondesc_projectile_thunder_field", + sprite: "data/ui_gfx/gun_actions/projectile_thunder_field.png", + sprite_unidentified: "data/ui_gfx/gun_actions/chaos_polymorph_field_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/projectile_thunder_field.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "3,4,5,6", + spawn_probability: "0.3,0.3,0.5,0.3", + price: 300, + mana: 140, + max_uses: 6, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/projectile_thunder_field.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "PROJECTILE_GRAVITY_FIELD", + name: "$action_projectile_gravity_field", + description: "$actiondesc_projectile_gravity_field", + sprite: "data/ui_gfx/gun_actions/projectile_gravity_field.png", + sprite_unidentified: "data/ui_gfx/gun_actions/chaos_polymorph_field_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/projectile_gravity_field.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "2,5,6", + spawn_probability: "0.6,0.3,0.3", + price: 250, + mana: 120, + max_uses: 6, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/projectile_gravity_field.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "VACUUM_POWDER", + name: "$action_vacuum_powder", + description: "$actiondesc_vacuum_powder", + sprite: "data/ui_gfx/gun_actions/vacuum_powder.png", + sprite_unidentified: "data/ui_gfx/gun_actions/chaos_polymorph_field_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/vacuum_powder.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "2,3,5,6", + spawn_probability: "0.3,0.7,0.3,0.4", + price: 150, + mana: 40, + max_uses: 20, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/vacuum_powder.xml") + c.fire_rate_wait = c.fire_rate_wait + 10 + }, + }, + { + id: "VACUUM_LIQUID", + name: "$action_vacuum_liquid", + description: "$actiondesc_vacuum_liquid", + sprite: "data/ui_gfx/gun_actions/vacuum_liquid.png", + sprite_unidentified: "data/ui_gfx/gun_actions/chaos_polymorph_field_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/vacuum_liquid.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "2,4,5,6", + spawn_probability: "0.3,0.7,0.4,0.3", + price: 150, + mana: 40, + max_uses: 20, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/vacuum_liquid.xml") + c.fire_rate_wait = c.fire_rate_wait + 10 + }, + }, + { + id: "VACUUM_ENTITIES", + name: "$action_vacuum_entities", + description: "$actiondesc_vacuum_entities", + sprite: "data/ui_gfx/gun_actions/vacuum_entities.png", + sprite_unidentified: "data/ui_gfx/gun_actions/chaos_polymorph_field_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/vacuum_liquid.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "2,3,5,6", + spawn_probability: "0.3,0.7,0.3,0.4", + price: 200, + mana: 50, + max_uses: 20, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/vacuum_entities.xml") + c.fire_rate_wait = c.fire_rate_wait + 10 + }, + }, + { + id: "SEA_LAVA", + name: "$action_sea_lava", + description: "$actiondesc_sea_lava", + spawn_requires_flag: "card_unlocked_sea_lava", + sprite: "data/ui_gfx/gun_actions/sea_lava.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sea_lava_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/sea_lava.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "0,4,5,6", + spawn_probability: "0.2,0.2,0.5,0.6", + price: 350, + mana: 140, + max_uses: 3, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/sea_lava.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "SEA_ALCOHOL", + name: "$action_sea_alcohol", + description: "$actiondesc_sea_alcohol", + sprite: "data/ui_gfx/gun_actions/sea_alcohol.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sea_lava_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/sea_alcohol.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "0,4,5,6", + spawn_probability: "0.3,0.5,0.6,0.3", + price: 350, + mana: 140, + max_uses: 3, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/sea_alcohol.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "SEA_OIL", + name: "$action_sea_oil", + description: "$actiondesc_sea_oil", + sprite: "data/ui_gfx/gun_actions/sea_oil.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sea_oil_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/sea_oil.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "0,4,5,6", + spawn_probability: "0.3,0.5,0.6,0.3", + price: 350, + mana: 140, + max_uses: 3, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/sea_oil.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "SEA_WATER", + name: "$action_sea_water", + description: "$actiondesc_sea_water", + sprite: "data/ui_gfx/gun_actions/sea_water.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sea_water_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/sea_water.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "0,4,5,6", + spawn_probability: "0.5,0.4,0.3,0.2", + price: 350, + mana: 140, + max_uses: 3, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/sea_water.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "SEA_SWAMP", + name: "$action_sea_swamp", + description: "$actiondesc_sea_swamp", + sprite: "data/ui_gfx/gun_actions/sea_swamp.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sea_swamp_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/sea_swamp.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "0", + spawn_probability: "0", + price: 350, + mana: 140, + max_uses: 3, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/sea_swamp.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "SEA_ACID", + name: "$action_sea_acid", + description: "$actiondesc_sea_acid", + sprite: "data/ui_gfx/gun_actions/sea_acid.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sea_acid_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/sea_acid.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "0,4,5,6", + spawn_probability: "0.2,0.2,0.4,0.5", + price: 350, + mana: 140, + max_uses: 3, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/sea_acid.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "SEA_ACID_GAS", + name: "$action_sea_acid_gas", + description: "$actiondesc_sea_acid_gas", + sprite: "data/ui_gfx/gun_actions/sea_acid_gas.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sea_acid_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/sea_acid_gas.xml"], + type: ACTION_TYPE_MATERIAL, + spawn_level: "0,4,5,6", + spawn_probability: "0.3,0.4,0.4,0.3", + price: 200, + mana: 140, + max_uses: 3, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/sea_acid_gas.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "CLOUD_WATER", + name: "$action_cloud_water", + description: "$actiondesc_cloud_water", + sprite: "data/ui_gfx/gun_actions/cloud_water.png", + sprite_unidentified: "data/ui_gfx/gun_actions/cloud_water_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/cloud_water.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "0,1,2,3,4,5", + spawn_probability: "0.2,0.3,0.4,0.4,0.3,0.2", + price: 140, + mana: 30, + max_uses: 10, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/cloud_water.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "CLOUD_OIL", + name: "$action_cloud_oil", + description: "$actiondesc_cloud_oil", + sprite: "data/ui_gfx/gun_actions/cloud_oil.png", + sprite_unidentified: "data/ui_gfx/gun_actions/cloud_water_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/cloud_oil.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "0,1,2,3,4,5", + spawn_probability: "0.2,0.3,0.4,0.4,0.3,0.2", + price: 100, + mana: 20, + max_uses: 15, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/cloud_oil.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "CLOUD_BLOOD", + name: "$action_cloud_blood", + description: "$actiondesc_cloud_blood", + sprite: "data/ui_gfx/gun_actions/cloud_blood.png", + sprite_unidentified: "data/ui_gfx/gun_actions/cloud_water_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/cloud_blood.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "0,1,2,3,4,5", + spawn_probability: "0.2,0.3,0.3,0.4,0.3,0.2", + price: 200, + mana: 60, + max_uses: 3, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/cloud_blood.xml") + c.fire_rate_wait = c.fire_rate_wait + 30 + }, + }, + { + id: "CLOUD_ACID", + name: "$action_cloud_acid", + description: "$actiondesc_cloud_acid", + sprite: "data/ui_gfx/gun_actions/cloud_acid.png", + sprite_unidentified: "data/ui_gfx/gun_actions/cloud_water_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/cloud_acid.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "0,1,2,3,4,5", + spawn_probability: "0.2,0.2,0.4,0.2,0.2,0.5", + price: 180, + mana: 90, + max_uses: 8, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/cloud_acid.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "CLOUD_THUNDER", + name: "$action_cloud_thunder", + description: "$actiondesc_cloud_thunder", + sprite: "data/ui_gfx/gun_actions/cloud_thunder.png", + spawn_requires_flag: "card_unlocked_cloud_thunder", + sprite_unidentified: "data/ui_gfx/gun_actions/cloud_water_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/cloud_thunder.xml"], + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "0,1,2,3,4,5", + spawn_probability: "0.3,0.3,0.2,0.3,0.4,0.5", + price: 190, + mana: 90, + max_uses: 5, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/cloud_thunder.xml") + c.fire_rate_wait = c.fire_rate_wait + 30 + }, + }, + { + id: "ELECTRIC_CHARGE", + name: "$action_electric_charge", + description: "$actiondesc_electric_charge", + sprite: "data/ui_gfx/gun_actions/electric_charge.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/particles/electricity.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,4,5", + spawn_probability: "1,1,0.8,0.7", + price: 150, + mana: 8, + + custom_xml_file: "data/entities/misc/custom_cards/electric_charge.xml", + action: (c: GunActionState) => { + c.lightning_count = c.lightning_count + 1 + c.damage_electricity_add = c.damage_electricity_add + 0.1 + c.extra_entities = c.extra_entities + "data/entities/particles/electricity.xml," + draw_actions( 1, true ) + }, + }, + { + id: "MATTER_EATER", + name: "$action_matter_eater", + description: "$actiondesc_matter_eater", + sprite: "data/ui_gfx/gun_actions/matter_eater.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/matter_eater.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,4,5,10", + spawn_probability: "0.1,0.9,0.1,0.2,0.2", + price: 280, + mana: 120, + max_uses: 10, + never_unlimited: true, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/matter_eater.xml," + draw_actions( 1, true ) + }, + }, + { + id: "FREEZE", + name: "$action_freeze", + description: "$actiondesc_freeze", + sprite: "data/ui_gfx/gun_actions/freeze.png", + sprite_unidentified: "data/ui_gfx/gun_actions/freeze_unidentified.png", + related_extra_entities: [ "data/entities/particles/freeze_charge.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,4,5", + spawn_probability: "1,1,0.9,0.8", + price: 140, + mana: 10, + + custom_xml_file: "data/entities/misc/custom_cards/freeze.xml", + action: (c: GunActionState) => { + c.damage_ice_add = c.damage_ice_add + 0.2 + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_frozen.xml," + c.extra_entities = c.extra_entities + "data/entities/particles/freeze_charge.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HITFX_BURNING_CRITICAL_HIT", + name: "$action_hitfx_burning_critical_hit", + description: "$actiondesc_hitfx_burning_critical_hit", + sprite: "data/ui_gfx/gun_actions/burning_critical.png", + sprite_unidentified: "data/entities/misc/hitfx_burning_critical_hit.xml", + related_extra_entities: [ "data/entities/particles/freeze_charge.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,4,5", + spawn_probability: "0.2,0.4,0.2,0.2", + price: 70, + mana: 10, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_burning_critical_hit.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HITFX_CRITICAL_WATER", + name: "$action_hitfx_critical_water", + description: "$actiondesc_hitfx_critical_water", + sprite: "data/ui_gfx/gun_actions/critical_water.png", + sprite_unidentified: "data/ui_gfx/gun_actions/freeze_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_critical_water.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,4,5", + spawn_probability: "0.2,0.2,0.4,0.2", + price: 70, + mana: 10, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_critical_water.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HITFX_CRITICAL_OIL", + name: "$action_hitfx_critical_oil", + description: "$actiondesc_hitfx_critical_oil", + sprite: "data/ui_gfx/gun_actions/critical_oil.png", + sprite_unidentified: "data/ui_gfx/gun_actions/freeze_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_critical_oil.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,4,5", + spawn_probability: "0.2,0.4,0.2,0.2", + price: 70, + mana: 10, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_critical_oil.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HITFX_CRITICAL_BLOOD", + name: "$action_hitfx_critical_blood", + description: "$actiondesc_hitfx_critical_blood", + sprite: "data/ui_gfx/gun_actions/critical_blood.png", + sprite_unidentified: "data/ui_gfx/gun_actions/freeze_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_critical_blood.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,4,5", + spawn_probability: "0.2,0.2,0.2,0.4", + price: 70, + mana: 10, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_critical_blood.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HITFX_TOXIC_CHARM", + name: "$action_hitfx_toxic_charm", + description: "$actiondesc_hitfx_toxic_charm", + sprite: "data/ui_gfx/gun_actions/charm_on_toxic.png", + sprite_unidentified: "data/ui_gfx/gun_actions/freeze_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_toxic_charm.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,4,5", + spawn_probability: "0.2,0.2,0.3,0.2", + price: 150, + mana: 70, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_toxic_charm.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HITFX_EXPLOSION_SLIME", + name: "$action_hitfx_explosion_slime", + description: "$actiondesc_hitfx_explosion_slime", + sprite: "data/ui_gfx/gun_actions/explode_on_slime.png", + sprite_unidentified: "data/ui_gfx/gun_actions/freeze_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_explode_slime.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,4,5", + spawn_probability: "0.2,0.3,0.2,0.2", + price: 140, + mana: 20, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_explode_slime.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HITFX_EXPLOSION_SLIME_GIGA", + name: "$action_hitfx_explosion_slime_giga", + description: "$actiondesc_hitfx_explosion_slime_giga", + sprite: "data/ui_gfx/gun_actions/explode_on_slime_giga.png", + sprite_unidentified: "data/ui_gfx/gun_actions/freeze_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_explode_slime_giga.xml", "data/entities/particles/tinyspark_purple.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,4,5", + spawn_probability: "0.1,0.1,0.3,0.1", + price: 300, + mana: 200, + max_uses: 20, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_explode_slime_giga.xml,data/entities/particles/tinyspark_purple.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HITFX_EXPLOSION_ALCOHOL", + name: "$action_hitfx_explosion_alcohol", + description: "$actiondesc_hitfx_explosion_alcohol", + sprite: "data/ui_gfx/gun_actions/explode_on_alcohol.png", + sprite_unidentified: "data/ui_gfx/gun_actions/freeze_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_explode_alcohol.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,4,5", + spawn_probability: "0.3,0.2,0.2,0.2", + price: 140, + mana: 20, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_explode_alcohol.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HITFX_EXPLOSION_ALCOHOL_GIGA", + name: "$action_hitfx_explosion_alcohol_giga", + description: "$actiondesc_hitfx_explosion_alcohol_giga", + sprite: "data/ui_gfx/gun_actions/explode_on_alcohol_giga.png", + sprite_unidentified: "data/ui_gfx/gun_actions/freeze_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_explode_alcohol_giga.xml", "data/entities/particles/tinyspark_orange.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,4,5", + spawn_probability: "0.1,0.1,0.1,0.3", + price: 300, + mana: 200, + max_uses: 20, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_explode_alcohol_giga.xml,data/entities/particles/tinyspark_orange.xml," + draw_actions( 1, true ) + }, + }, + { + id: "HITFX_PETRIFY", + name: "$action_petrify", + description: "$actiondesc_petrify_a", + sprite: "data/ui_gfx/gun_actions/petrify.png", + sprite_unidentified: "data/ui_gfx/gun_actions/explosive_projectile_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,5,6", + spawn_probability: "0.2,0.3,0.2,0.3", + price: 140, + mana: 10, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_petrify.xml," + draw_actions( 1, true ) + }, + }, + + { + id: "ROCKET_DOWNWARDS", + name: "$action_rocket_downwards", + description: "$actiondesc_rocket_downwards", + sprite: "data/ui_gfx/gun_actions/rocket_downwards.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/rocket_downwards.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4", + spawn_probability: "0.2,0.5,0.7,0.7", + price: 200, + mana: 90, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/rocket_downwards.xml," + c.fire_rate_wait = c.fire_rate_wait + 25 + draw_actions( 1, true ) + }, + }, + { + id: "ROCKET_OCTAGON", + name: "$action_rocket_octagon", + description: "$actiondesc_rocket_octagon", + sprite: "data/ui_gfx/gun_actions/rocket_octagon.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/rocket_octagon.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.5,0.6,0.3", + price: 200, + mana: 100, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/rocket_octagon.xml," + c.fire_rate_wait = c.fire_rate_wait + 20 + draw_actions( 1, true ) + }, + }, + { + id: "FIZZLE", + name: "$action_fizzle", + description: "$actiondesc_fizzle", + sprite: "data/ui_gfx/gun_actions/fizzle.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/fizzle.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "3,4,5", + spawn_probability: "0.4,0.3,0.1", + price: 0, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/fizzle.xml," + c.speed_multiplier = c.speed_multiplier * 1.2 + c.fire_rate_wait = c.fire_rate_wait - 10 + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + + draw_actions( 1, true ) + }, + }, + { + id: "BOUNCE_EXPLOSION", + name: "$action_bounce_explosion", + description: "$actiondesc_bounce_explosion", + sprite: "data/ui_gfx/gun_actions/bounce_explosion.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/bounce_explosion.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5", + spawn_probability: "0.2,0.6,0.8,0.8", + price: 180, + mana: 20, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/bounce_explosion.xml," + c.bounces = c.bounces + 1 + c.fire_rate_wait = c.fire_rate_wait + 25 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 20.0 + draw_actions( 1, true ) + }, + }, + { + id: "BOUNCE_SPARK", + name: "$action_bounce_spark", + description: "$actiondesc_bounce_spark", + sprite: "data/ui_gfx/gun_actions/bounce_spark.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/bounce_spark.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4", + spawn_probability: "0.2,0.6,0.6,0.6", + price: 120, + mana: 20, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/bounce_spark.xml," + c.bounces = c.bounces + 1 + c.fire_rate_wait = c.fire_rate_wait + 8 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 5.0 + draw_actions( 1, true ) + }, + }, + { + id: "BOUNCE_LASER", + name: "$action_bounce_laser", + description: "$actiondesc_bounce_laser", + sprite: "data/ui_gfx/gun_actions/bounce_laser.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/bounce_laser.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "3,4,5", + spawn_probability: "0.4,0.8,0.4", + price: 180, + mana: 30, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/bounce_laser.xml," + c.bounces = c.bounces + 1 + c.fire_rate_wait = c.fire_rate_wait + 12 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 5.0 + draw_actions( 1, true ) + }, + }, + { + id: "BOUNCE_LASER_EMITTER", + name: "$action_bounce_laser_emitter", + description: "$actiondesc_bounce_laser_emitter", + sprite: "data/ui_gfx/gun_actions/bounce_laser_emitter.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/bounce_laser_emitter.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "3,4,5", + spawn_probability: "0.4,0.8,0.4", + price: 180, + mana: 40, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/bounce_laser_emitter.xml," + c.bounces = c.bounces + 1 + c.fire_rate_wait = c.fire_rate_wait + 12 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 5.0 + draw_actions( 1, true ) + }, + }, + { + id: "BOUNCE_LARPA", + name: "$action_bounce_larpa", + description: "$actiondesc_bounce_larpa", + sprite: "data/ui_gfx/gun_actions/bounce_larpa.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/bounce_larpa.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "4,5,6", + spawn_probability: "0.4,0.6,0.4", + price: 250, + mana: 80, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/bounce_larpa.xml," + c.bounces = c.bounces + 1 + c.fire_rate_wait = c.fire_rate_wait + 32 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 10.0 + draw_actions( 1, true ) + }, + }, + { + id: "BOUNCE_SMALL_EXPLOSION", + name: "$action_bounce_small_explosion", + description: "$actiondesc_bounce_small_explosion", + sprite: "data/ui_gfx/gun_actions/bounce_small_explosion.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/bounce_small_explosion.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "0,1,2", + spawn_probability: "0.5,0.3,0.3", + price: 100, + mana: 10, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/bounce_small_explosion.xml," + c.bounces = c.bounces + 1 + c.fire_rate_wait = c.fire_rate_wait + 9 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 10.0 + draw_actions( 1, true ) + }, + }, + { + id: "BOUNCE_LIGHTNING", + name: "$action_bounce_lightning", + description: "$actiondesc_bounce_lightning", + sprite: "data/ui_gfx/gun_actions/bounce_lightning.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/bounce_lightning.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,3,5", + spawn_probability: "0.1,0.3,0.6", + price: 180, + mana: 40, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/bounce_lightning.xml," + c.bounces = c.bounces + 1 + c.fire_rate_wait = c.fire_rate_wait + 25 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 10.0 + draw_actions( 1, true ) + }, + }, + { + id: "BOUNCE_HOLE", + name: "$action_bounce_hole", + description: "$actiondesc_bounce_hole", + sprite: "data/ui_gfx/gun_actions/bounce_hole.png", + sprite_unidentified: "data/ui_gfx/gun_actions/sinewave_unidentified.png", + related_extra_entities: [ "data/entities/misc/bounce_hole.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,4,6,10", + spawn_probability: "0.1,0.4,0.4,0.1", + price: 220, + mana: 60, + max_uses: 20, + never_unlimited: true, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/bounce_hole.xml," + c.bounces = c.bounces + 1 + c.fire_rate_wait = c.fire_rate_wait + 40 + shot_effects.recoil_knockback = shot_effects.recoil_knockback + 10.0 + draw_actions( 1, true ) + }, + }, + { + id: "FIREBALL_RAY", + name: "$action_fireball_ray", + description: "$actiondesc_fireball_ray", + sprite: "data/ui_gfx/gun_actions/fireball_ray.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/fireball_ray.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,4,5", + spawn_probability: "0.6,0.6,0.4,0.4", + price: 150, + mana: 110, + max_uses: 16, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/fireball_ray.xml," + draw_actions( 1, true ) + }, + }, + { + id: "LIGHTNING_RAY", + name: "$action_lightning_ray", + description: "$actiondesc_lightning_ray", + sprite: "data/ui_gfx/gun_actions/lightning_ray.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/lightning_ray.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5", + spawn_probability: "0,0.2,0.4,0.4,0.4", + price: 180, + mana: 110, + max_uses: 16, + custom_xml_file: "data/entities/misc/custom_cards/electric_charge.xml", + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/lightning_ray.xml," + draw_actions( 1, true ) + }, + }, + { + id: "TENTACLE_RAY", + name: "$action_tentacle_ray", + description: "$actiondesc_tentacle_ray", + sprite: "data/ui_gfx/gun_actions/tentacle_ray.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/tentacle_ray.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.1,0,0.4,0.4,0.4", + price: 150, + mana: 110, + max_uses: 16, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/tentacle_ray.xml," + draw_actions( 1, true ) + }, + }, + { + id: "LASER_EMITTER_RAY", + name: "$action_laser_emitter_ray", + description: "$actiondesc_laser_emitter_ray", + sprite: "data/ui_gfx/gun_actions/laser_emitter_ray.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/laser_emitter_ray.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5", + spawn_probability: "0,0.1,0.4,0.4,0.4", + price: 150, + mana: 110, + max_uses: 16, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/laser_emitter_ray.xml," + draw_actions( 1, true ) + }, + }, + { + id: "FIREBALL_RAY_LINE", + name: "$action_fireball_ray_line", + description: "$actiondesc_fireball_ray_line", + sprite: "data/ui_gfx/gun_actions/fireball_ray_line.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/fireball_ray_line.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.6,0.4,0.4,0.4,1", + price: 120, + mana: 130, + max_uses: 20, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/fireball_ray_line.xml," + draw_actions( 1, true ) + }, + }, + { + id: "FIREBALL_RAY_ENEMY", + name: "$action_fireball_ray_enemy", + description: "$actiondesc_fireball_ray_enemy", + sprite: "data/ui_gfx/gun_actions/fireball_ray_enemy.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_fireball_ray_enemy.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,4,5", + spawn_probability: "0.5,0.6,0.4,0.3", + price: 100, + mana: 90, + max_uses: 20, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_fireball_ray_enemy.xml," + draw_actions( 1, true ) + }, + }, + { + id: "LIGHTNING_RAY_ENEMY", + name: "$action_lightning_ray_enemy", + description: "$actiondesc_lightning_ray_enemy", + sprite: "data/ui_gfx/gun_actions/lightning_ray_enemy.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_lightning_ray_enemy.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5", + spawn_probability: "0,0.2,0.4,0.4,0.5", + price: 150, + mana: 90, + max_uses: 20, + custom_xml_file: "data/entities/misc/custom_cards/electric_charge.xml", + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_lightning_ray_enemy.xml," + draw_actions( 1, true ) + }, + }, + { + id: "TENTACLE_RAY_ENEMY", + name: "$action_tentacle_ray_enemy", + description: "$actiondesc_tentacle_ray_enemy", + sprite: "data/ui_gfx/gun_actions/tentacle_ray_enemy.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_tentacle_ray_enemy.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5", + spawn_probability: "0,0.1,0.4,0.5,0.4", + price: 150, + mana: 90, + max_uses: 20, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_tentacle_ray_enemy.xml," + draw_actions( 1, true ) + }, + }, + { + id: "GRAVITY_FIELD_ENEMY", + name: "$action_gravity_field_enemy", + description: "$actiondesc_gravity_field_enemy", + sprite: "data/ui_gfx/gun_actions/gravity_field_enemy.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_gravity_field_enemy.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,4,5", + spawn_probability: "0.5,0.6,0.4,0.4", + price: 250, + mana: 110, + max_uses: 20, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_gravity_field_enemy.xml," + draw_actions( 1, true ) + }, + }, + { + id: "CURSE", + name: "$action_curse", + description: "$actiondesc_curse", + sprite: "data/ui_gfx/gun_actions/curse.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_curse.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,5,10", + spawn_probability: "0.6,0.7,0.4,0.1", + price: 140, + mana: 30, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_curse.xml," + draw_actions( 1, true ) + }, + }, + { + id: "CURSE_WITHER_PROJECTILE", + name: "$action_curse_wither_projectile", + description: "$actiondesc_curse_wither_projectile", + sprite: "data/ui_gfx/gun_actions/curse_wither_projectile.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_curse_wither_projectile.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "3,4,5,6,10", + spawn_probability: "0.2,0.4,0.7,0.7,0.1", + price: 100, + mana: 50, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_curse_wither_projectile.xml," + draw_actions( 1, true ) + }, + }, + { + id: "CURSE_WITHER_EXPLOSION", + name: "$action_curse_wither_explosion", + description: "$actiondesc_curse_wither_explosion", + sprite: "data/ui_gfx/gun_actions/curse_wither_explosion.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_curse_wither_explosion.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,10", + spawn_probability: "0.2,0.4,0.7,0.7,0.1", + price: 100, + mana: 50, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_curse_wither_explosion.xml," + draw_actions( 1, true ) + }, + }, + { + id: "CURSE_WITHER_MELEE", + name: "$action_curse_wither_melee", + description: "$actiondesc_curse_wither_melee", + sprite: "data/ui_gfx/gun_actions/curse_wither_melee.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_curse_wither_melee.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "3,4,5,6,10", + spawn_probability: "0.2,0.4,0.7,0.7,0.1", + price: 100, + mana: 50, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_curse_wither_melee.xml," + draw_actions( 1, true ) + }, + }, + { + id: "CURSE_WITHER_ELECTRICITY", + name: "$action_curse_wither_electricity", + description: "$actiondesc_curse_wither_electricity", + sprite: "data/ui_gfx/gun_actions/curse_wither_electricity.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/hitfx_curse_wither_electricity.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,4,5,6,10", + spawn_probability: "0.2,0.4,0.7,0.7,0.1", + price: 100, + mana: 50, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/hitfx_curse_wither_electricity.xml," + draw_actions( 1, true ) + }, + }, + { + id: "ORBIT_DISCS", + name: "$action_orbit_discs", + description: "$actiondesc_orbit_discs", + sprite: "data/ui_gfx/gun_actions/orbit_discs.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/orbit_discs.xml" ], + spawn_requires_flag: "card_unlocked_dragon", + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,4,5", + spawn_probability: "0.3,0.65,0.4,0.3", + price: 200, + mana: 70, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/orbit_discs.xml," + draw_actions( 1, true ) + }, + }, + { + id: "ORBIT_FIREBALLS", + name: "$action_orbit_fireballs", + description: "$actiondesc_orbit_fireballs", + sprite: "data/ui_gfx/gun_actions/orbit_fireballs.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/orbit_fireballs.xml" ], + spawn_requires_flag: "card_unlocked_dragon", + type: ACTION_TYPE_MODIFIER, + spawn_level: "0,1,2,4,5", + spawn_probability: "0.2,0.3,0.7,0.4,0.2", + price: 140, + mana: 40, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/orbit_fireballs.xml," + draw_actions( 1, true ) + }, + }, + { + id: "ORBIT_NUKES", + name: "$action_orbit_nukes", + description: "$actiondesc_orbit_nukes", + sprite: "data/ui_gfx/gun_actions/orbit_nukes.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/orbit_nukes.xml" ], + spawn_requires_flag: "card_unlocked_dragon", + type: ACTION_TYPE_MODIFIER, + ai_never_uses: true, + spawn_level: "2,4,5,6,10", + spawn_probability: "0.1,0.2,0.1,0.2,1", + price: 400, + mana: 250, + max_uses: 3, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/orbit_nukes.xml," + draw_actions( 1, true ) + }, + }, + { + id: "ORBIT_LASERS", + name: "$action_orbit_lasers", + description: "$actiondesc_orbit_lasers", + sprite: "data/ui_gfx/gun_actions/orbit_lasers.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/orbit_lasers.xml" ], + spawn_requires_flag: "card_unlocked_dragon", + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,4,5,10", + spawn_probability: "0.2,0.7,0.4,0.3,0.2", + price: 200, + mana: 100, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/orbit_lasers.xml," + draw_actions( 1, true ) + }, + }, + { + id: "ORBIT_LARPA", + name: "$action_orbit_larpa", + description: "$actiondesc_orbit_larpa", + sprite: "data/ui_gfx/gun_actions/orbit_larpa.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/orbit_larpa.xml" ], + spawn_requires_flag: "card_unlocked_dragon", + type: ACTION_TYPE_MODIFIER, + spawn_level: "3,4,6,10", + spawn_probability: "0.2,0.2,0.8,0.2", + price: 240, + mana: 90, + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/orbit_larpa.xml," + draw_actions( 1, true ) + }, + }, + { + id: "CHAIN_SHOT", + name: "$action_chain_shot", + description: "$actiondesc_chain_shot", + sprite: "data/ui_gfx/gun_actions/chain_shot.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/misc/chain_shot.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,4,5", + spawn_probability: "0.4,0.6,0.8", + price: 240, + mana: 70, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/chain_shot.xml," + c.lifetime_add = c.lifetime_add - 30 + c.damage_projectile_add = c.damage_projectile_add - 0.2 + c.explosion_radius = c.explosion_radius - 5.0 + if (c.explosion_radius < 0) { + c.explosion_radius = 0 + } + c.spread_degrees = c.spread_degrees + 10.0 + draw_actions( 1, true ) + }, + }, + + + + { + id: "ARC_ELECTRIC", + name: "$action_arc_electric", + description: "$actiondesc_arc_electric", + sprite: "data/ui_gfx/gun_actions/arc_electric.png", + sprite_unidentified: "data/ui_gfx/gun_actions/arc_electric_unidentified.png", + related_extra_entities: [ "data/entities/misc/arc_electric.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.4,0.4,0.4,0.4,0.8", + price: 170, + + mana: 15, + custom_xml_file: "data/entities/misc/custom_cards/arc_electric.xml", + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/arc_electric.xml," + draw_actions( 1, true ) + }, + }, + { + id: "ARC_FIRE", + name: "$action_arc_fire", + description: "$actiondesc_arc_fire", + sprite: "data/ui_gfx/gun_actions/arc_fire.png", + sprite_unidentified: "data/ui_gfx/gun_actions/arc_fire_unidentified.png", + related_extra_entities: [ "data/entities/misc/arc_fire.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.4,0.2,0.2,0.5,0.2", + price: 160, + + mana: 15, + custom_xml_file: "data/entities/misc/custom_cards/arc_fire.xml", + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/arc_fire.xml," + draw_actions( 1, true ) + }, + }, + { + id: "ARC_GUNPOWDER", + name: "$action_arc_gunpowder", + description: "$actiondesc_arc_gunpowder", + sprite: "data/ui_gfx/gun_actions/arc_gunpowder.png", + sprite_unidentified: "data/ui_gfx/gun_actions/arc_fire_unidentified.png", + related_extra_entities: [ "data/entities/misc/arc_gunpowder.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.4,0.4,0.2,0.4,0.2", + price: 160, + + mana: 15, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/arc_gunpowder.xml," + draw_actions( 1, true ) + }, + }, + { + id: "ARC_POISON", + name: "$action_arc_poison", + description: "$actiondesc_arc_poison", + sprite: "data/ui_gfx/gun_actions/arc_poison.png", + sprite_unidentified: "data/ui_gfx/gun_actions/arc_fire_unidentified.png", + related_extra_entities: [ "data/entities/misc/arc_poison.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.4,0.2,0.4,0.2,0.4", + price: 160, + + mana: 15, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/arc_poison.xml," + draw_actions( 1, true ) + }, + }, + { + id: "CRUMBLING_EARTH_PROJECTILE", + name: "$action_crumbling_earth_projectile", + description: "$actiondesc_crumbling_earth_projectile", + sprite: "data/ui_gfx/gun_actions/crumbling_earth_projectile.png", + sprite_unidentified: "data/ui_gfx/gun_actions/arc_fire_unidentified.png", + related_extra_entities: [ "data/entities/misc/crumbling_earth_projectile.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.2,0.3,0.4,0.4,0.3", + price: 200, + max_uses: 15, + mana: 45, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/crumbling_earth_projectile.xml," + draw_actions( 1, true ) + }, + }, + + { + id: "X_RAY", + name: "$action_x_ray", + description: "$actiondesc_x_ray", + sprite: "data/ui_gfx/gun_actions/x_ray.png", + sprite_unidentified: "data/ui_gfx/gun_actions/x_ray_unidentified.png", + related_projectiles: ["data/entities/projectiles/deck/xray.xml"], + type: ACTION_TYPE_UTILITY, + spawn_level: "0,1,2,3,4,5,6", + spawn_probability: "0.8,1,1,0.7,0.5,0.3,0.2", + price: 230, + max_uses: 10, + mana: 100, + custom_xml_file: "data/entities/misc/custom_cards/xray.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/xray.xml") + }, + }, + + { + id: "UNSTABLE_GUNPOWDER", + name: "$action_unstable_gunpowder", + description: "$actiondesc_unstable_gunpowder", + sprite: "data/ui_gfx/gun_actions/unstable_gunpowder.png", + sprite_unidentified: "data/ui_gfx/gun_actions/unstable_gunpowder_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.3,0.4,0.4", + price: 140, + mana: 15, + + custom_xml_file: "data/entities/misc/custom_cards/unstable_gunpowder.xml", + action: (c: GunActionState) => { + c.material = "gunpowder_unstable" + c.material_amount = c.material_amount + 10 + + draw_actions( 1, true ) + }, + }, + { + id: "ACID_TRAIL", + name: "$action_acid_trail", + description: "$actiondesc_acid_trail", + sprite: "data/ui_gfx/gun_actions/acid_trail.png", + sprite_unidentified: "data/ui_gfx/gun_actions/acid_trail_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5", + spawn_probability: "0.3,0.2,0.3,0.3,0.4", + price: 160, + mana: 15, + + custom_xml_file: "data/entities/misc/custom_cards/acid_trail.xml", + action: (c: GunActionState) => { + c.trail_material = c.trail_material + "acid," + c.trail_material_amount = c.trail_material_amount + 5 + draw_actions( 1, true ) + }, + }, + { + id: "POISON_TRAIL", + name: "$action_poison_trail", + description: "$actiondesc_poison_trail", + sprite: "data/ui_gfx/gun_actions/poison_trail.png", + sprite_unidentified: "data/ui_gfx/gun_actions/poison_trail_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.3,0.3,0.3", + price: 160, + mana: 10, + + custom_xml_file: "data/entities/misc/custom_cards/poison_trail.xml", + action: (c: GunActionState) => { + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_apply_poison.xml," + c.trail_material = c.trail_material + "poison," + c.trail_material_amount = c.trail_material_amount + 9 + draw_actions( 1, true ) + }, + }, + { + id: "OIL_TRAIL", + name: "$action_oil_trail", + description: "$actiondesc_oil_trail", + sprite: "data/ui_gfx/gun_actions/oil_trail.png", + sprite_unidentified: "data/ui_gfx/gun_actions/oil_trail_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.3,0.3,0.3", + price: 160, + mana: 10, + + custom_xml_file: "data/entities/misc/custom_cards/oil_trail.xml", + action: (c: GunActionState) => { + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_apply_oiled.xml," + c.trail_material = c.trail_material + "oil," + c.trail_material_amount = c.trail_material_amount + 20 + draw_actions( 1, true ) + }, + }, + { + id: "WATER_TRAIL", + name: "$action_water_trail", + description: "$actiondesc_water_trail", + sprite: "data/ui_gfx/gun_actions/water_trail.png", + sprite_unidentified: "data/ui_gfx/gun_actions/oil_trail_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4", + spawn_probability: "0.3,0.3,0.3,0.3", + price: 160, + mana: 10, + + custom_xml_file: "data/entities/misc/custom_cards/water_trail.xml", + action: (c: GunActionState) => { + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_apply_wet.xml," + c.trail_material = c.trail_material + "water," + c.trail_material_amount = c.trail_material_amount + 20 + draw_actions( 1, true ) + }, + }, + + + + + + + { + id: "GUNPOWDER_TRAIL", + name: "$action_gunpowder_trail", + description: "$actiondesc_gunpowder_trail", + sprite: "data/ui_gfx/gun_actions/gunpowder_trail.png", + sprite_unidentified: "data/ui_gfx/gun_actions/oil_trail_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.3,0.3,0.3", + price: 160, + mana: 10, + + custom_xml_file: "data/entities/misc/custom_cards/gunpowder_trail.xml", + action: (c: GunActionState) => { + c.trail_material = c.trail_material + "gunpowder," + c.trail_material_amount = c.trail_material_amount + 20 + draw_actions( 1, true ) + }, + }, + { + id: "FIRE_TRAIL", + name: "$action_fire_trail", + description: "$actiondesc_fire_trail", + sprite: "data/ui_gfx/gun_actions/fire_trail.png", + sprite_unidentified: "data/ui_gfx/gun_actions/fire_trail_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "0,1,2,3,4", + spawn_probability: "0.4,0.5,0.3,0.3,0.2", + price: 130, + mana: 10, + + custom_xml_file: "data/entities/misc/custom_cards/fire_trail.xml", + action: (c: GunActionState) => { + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_apply_on_fire.xml," + c.trail_material = c.trail_material + "fire," + c.trail_material_amount = c.trail_material_amount + 10 + draw_actions( 1, true ) + }, + }, + { + id: "BURN_TRAIL", + name: "$action_burn_trail", + description: "$actiondesc_burn_trail", + sprite: "data/ui_gfx/gun_actions/burn_trail.png", + sprite_unidentified: "data/ui_gfx/gun_actions/burn_trail_unidentified.png", + related_extra_entities: [ "data/entities/misc/burn.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "0,1,2", + spawn_probability: "0.4,0.3,0.3", + price: 100, + mana: 5, + + custom_xml_file: "data/entities/misc/custom_cards/burn_trail.xml", + action: (c: GunActionState) => { + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_apply_on_fire.xml," + c.extra_entities = c.extra_entities + "data/entities/misc/burn.xml," + draw_actions( 1, true ) + }, + }, + { + id: "TORCH", + name: "$action_torch", + description: "$actiondesc_torch", + sprite: "data/ui_gfx/gun_actions/torch.png", + sprite_unidentified: "data/ui_gfx/gun_actions/torch_unidentified.png", + type: ACTION_TYPE_PASSIVE, + spawn_level: "0,1,2", + spawn_probability: "1,0.6,0.5", + price: 100, + mana: 0, + + custom_xml_file: "data/entities/misc/custom_cards/torch.xml", + action: (c: GunActionState) => { + draw_actions( 1, true ) + }, + }, + { + id: "TORCH_ELECTRIC", + name: "$action_torch_electric", + description: "$actiondesc_torch_electric", + sprite: "data/ui_gfx/gun_actions/torch_electric.png", + sprite_unidentified: "data/ui_gfx/gun_actions/torch_unidentified.png", + type: ACTION_TYPE_PASSIVE, + spawn_level: "0,1,2", + spawn_probability: "0.8,0.6,0.4", + price: 150, + mana: 0, + + custom_xml_file: "data/entities/misc/custom_cards/torch_electric.xml", + action: (c: GunActionState) => { + draw_actions( 1, true ) + }, + }, + { + id: "ENERGY_SHIELD", + name: "$action_energy_shield", + description: "$actiondesc_energy_shield", + sprite: "data/ui_gfx/gun_actions/energy_shield.png", + sprite_unidentified: "data/ui_gfx/gun_actions/energy_shield_unidentified.png", + type: ACTION_TYPE_PASSIVE, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "0.05,0.4,0.8,0.4,0.4,0.6", + price: 220, + custom_xml_file: "data/entities/misc/custom_cards/energy_shield.xml", + action: (c: GunActionState) => { + + draw_actions( 1, true ) + }, + }, + { + id: "ENERGY_SHIELD_SECTOR", + name: "$action_energy_shield_sector", + description: "$actiondesc_energy_shield_sector", + sprite: "data/ui_gfx/gun_actions/energy_shield_sector.png", + sprite_unidentified: "data/ui_gfx/gun_actions/energy_shield_sector_unidentified.png", + type: ACTION_TYPE_PASSIVE, + spawn_level: "0,1,2,3,4,5", + spawn_probability: "0.1,0.5,0.6,0.8,0.5,0.4", + price: 160, + custom_xml_file: "data/entities/misc/custom_cards/energy_shield_sector.xml", + action: (c: GunActionState) => { + + draw_actions( 1, true ) + }, + }, + { + id: "ENERGY_SHIELD_SHOT", + name: "$action_energy_shield_shot", + description: "$actiondesc_energy_shield_shot", + sprite: "data/ui_gfx/gun_actions/energy_shield_shot.png", + sprite_unidentified: "data/ui_gfx/gun_actions/energy_shield_shot_unidentified.png", + related_extra_entities: [ "data/entities/misc/energy_shield_shot.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,6", + spawn_probability: "0.3,0.3,0.5,0.4,0.3", + price: 180, + mana: 5, + action: (c: GunActionState) => { + c.speed_multiplier = c.speed_multiplier * 0.4 + c.extra_entities = c.extra_entities + "data/entities/misc/energy_shield_shot.xml," + + if ( c.speed_multiplier >= 20 ) { + c.speed_multiplier = Math.min( c.speed_multiplier, 20 ) + } else if ( c.speed_multiplier < 0 ) { + c.speed_multiplier = 0 + } + + draw_actions( 1, true ) + }, + }, + { + id: "TINY_GHOST", + name: "$action_tiny_ghost", + description: "$actiondesc_tiny_ghost", + sprite: "data/ui_gfx/gun_actions/tiny_ghost.png", + sprite_unidentified: "data/ui_gfx/gun_actions/torch_unidentified.png", + type: ACTION_TYPE_PASSIVE, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "0.1,0.5,1,0.8,0.7,0.5", + price: 160, + mana: 0, + custom_xml_file: "data/entities/misc/custom_cards/tiny_ghost.xml", + action: (c: GunActionState) => { + draw_actions( 1, true ) + }, + }, + + + + + + + { + id: "OCARINA_A", + name: "$action_ocarina_a", + description: "$actiondesc_ocarina_a", + spawn_requires_flag: "card_unlocked_ocarina", + sprite: "data/ui_gfx/gun_actions/ocarina_a.png", + related_projectiles: ["data/entities/projectiles/deck/ocarina/ocarina_a.xml"], + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "0", + price: 10, + mana: 1, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/ocarina/ocarina_a.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "OCARINA_B", + name: "$action_ocarina_b", + description: "$actiondesc_ocarina_b", + spawn_requires_flag: "card_unlocked_ocarina", + sprite: "data/ui_gfx/gun_actions/ocarina_b.png", + related_projectiles: ["data/entities/projectiles/deck/ocarina/ocarina_b.xml"], + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "0", + price: 10, + mana: 1, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/ocarina/ocarina_b.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "OCARINA_C", + name: "$action_ocarina_c", + description: "$actiondesc_ocarina_c", + spawn_requires_flag: "card_unlocked_ocarina", + sprite: "data/ui_gfx/gun_actions/ocarina_c.png", + related_projectiles: ["data/entities/projectiles/deck/ocarina/ocarina_c.xml"], + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "0", + price: 10, + mana: 1, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/ocarina/ocarina_c.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "OCARINA_D", + name: "$action_ocarina_d", + description: "$actiondesc_ocarina_d", + spawn_requires_flag: "card_unlocked_ocarina", + sprite: "data/ui_gfx/gun_actions/ocarina_d.png", + related_projectiles: ["data/entities/projectiles/deck/ocarina/ocarina_d.xml"], + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "0", + price: 10, + mana: 1, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/ocarina/ocarina_d.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "OCARINA_E", + name: "$action_ocarina_e", + description: "$actiondesc_ocarina_e", + spawn_requires_flag: "card_unlocked_ocarina", + sprite: "data/ui_gfx/gun_actions/ocarina_e.png", + related_projectiles: ["data/entities/projectiles/deck/ocarina/ocarina_e.xml"], + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "0", + price: 10, + mana: 1, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/ocarina/ocarina_e.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "OCARINA_F", + name: "$action_ocarina_f", + description: "$actiondesc_ocarina_f", + spawn_requires_flag: "card_unlocked_ocarina", + sprite: "data/ui_gfx/gun_actions/ocarina_f.png", + related_projectiles: ["data/entities/projectiles/deck/ocarina/ocarina_f.xml"], + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "0", + price: 10, + mana: 1, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/ocarina/ocarina_f.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "OCARINA_GSHARP", + name: "$action_ocarina_gsharp", + description: "$actiondesc_ocarina_gsharp", + spawn_requires_flag: "card_unlocked_ocarina", + sprite: "data/ui_gfx/gun_actions/ocarina_gsharp.png", + related_projectiles: ["data/entities/projectiles/deck/ocarina/ocarina_gsharp.xml"], + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "0", + price: 10, + mana: 1, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/ocarina/ocarina_gsharp.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "OCARINA_A2", + name: "$action_ocarina_a2", + description: "$actiondesc_ocarina_a2", + spawn_requires_flag: "card_unlocked_ocarina", + sprite: "data/ui_gfx/gun_actions/ocarina_a2.png", + related_projectiles: ["data/entities/projectiles/deck/ocarina/ocarina_a2.xml"], + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "0", + price: 10, + mana: 1, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/ocarina/ocarina_a2.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "KANTELE_A", + name: "$action_kantele_a", + description: "$actiondesc_kantele_a", + spawn_requires_flag: "card_unlocked_kantele", + sprite: "data/ui_gfx/gun_actions/kantele_a.png", + related_projectiles: ["data/entities/projectiles/deck/kantele/kantele_a.xml"], + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "0", + price: 10, + mana: 1, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/kantele/kantele_a.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "KANTELE_D", + name: "$action_kantele_d", + description: "$actiondesc_kantele_d", + spawn_requires_flag: "card_unlocked_kantele", + sprite: "data/ui_gfx/gun_actions/kantele_d.png", + related_projectiles: ["data/entities/projectiles/deck/kantele/kantele_d.xml"], + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "0", + price: 10, + mana: 1, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/kantele/kantele_d.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "KANTELE_DIS", + name: "$action_kantele_dis", + description: "$actiondesc_kantele_dis", + spawn_requires_flag: "card_unlocked_kantele", + sprite: "data/ui_gfx/gun_actions/kantele_dis.png", + related_projectiles: ["data/entities/projectiles/deck/kantele/kantele_dis.xml"], + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "0", + price: 10, + mana: 1, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/kantele/kantele_dis.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "KANTELE_E", + name: "$action_kantele_e", + description: "$actiondesc_kantele_e", + spawn_requires_flag: "card_unlocked_kantele", + sprite: "data/ui_gfx/gun_actions/kantele_e.png", + related_projectiles: ["data/entities/projectiles/deck/kantele/kantele_e.xml"], + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "0", + price: 10, + mana: 1, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/kantele/kantele_e.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "KANTELE_G", + name: "$action_kantele_g", + description: "$actiondesc_kantele_g", + spawn_requires_flag: "card_unlocked_kantele", + sprite: "data/ui_gfx/gun_actions/kantele_g.png", + related_projectiles: ["data/entities/projectiles/deck/kantele/kantele_g.xml"], + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "0", + price: 10, + mana: 1, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/kantele/kantele_g.xml") + c.fire_rate_wait = c.fire_rate_wait + 15 + }, + }, + { + id: "RANDOM_SPELL", + name: "$action_random_spell", + description: "$actiondesc_random_spell", + sprite: "data/ui_gfx/gun_actions/random_spell.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_pyramid", + type: ACTION_TYPE_OTHER, + recursive: true, + spawn_level: "3,4,5,6,10", + spawn_probability: "0.2,0.3,0.2,0.1,0.5", + price: 100, + mana: 5, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + SetRandomSeed( GameGetFrameNum() + deck.length, GameGetFrameNum() + 263 ) + let rnd = Random( 1, actions.length ) + let data = actions[rnd - 1] + + let safety = 0 + let rec = check_recursion( data, recursion_level ) + + while (( safety < 100 ) && ( rec === -1 )) { + rnd = Random( 1, actions.length ) + data = actions[rnd - 1] + rec = check_recursion( data, recursion_level ) + + safety = safety + 1 + } + + call_action(ActionSource.ACTION, data, c, rec ) + }, + }, + { + id: "RANDOM_PROJECTILE", + name: "$action_random_projectile", + description: "$actiondesc_random_projectile", + sprite: "data/ui_gfx/gun_actions/random_projectile.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_pyramid", + type: ACTION_TYPE_PROJECTILE, + recursive: true, + spawn_level: "2,4,5,6,10", + spawn_probability: "0.2,0.4,0.1,0.2,0.5", + price: 150, + mana: 20, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + SetRandomSeed( GameGetFrameNum() + deck.length, GameGetFrameNum() + 203 ) + let rnd = Random( 1, actions.length ) + let data = actions[rnd - 1] + + let safety = 0 + let rec = check_recursion( data, recursion_level ) + + while (( safety < 100 ) && ( ( data.type !== 0 ) || ( rec === -1 ) )) { + rnd = Random( 1, actions.length ) + data = actions[rnd - 1] + rec = check_recursion( data, recursion_level ) + + safety = safety + 1 + } + + call_action(ActionSource.ACTION, data, c, rec ) + }, + }, + { + id: "RANDOM_MODIFIER", + name: "$action_random_modifier", + description: "$actiondesc_random_modifier", + sprite: "data/ui_gfx/gun_actions/random_modifier.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_pyramid", + type: ACTION_TYPE_MODIFIER, + recursive: true, + spawn_level: "4,5,6,10", + spawn_probability: "0.3,0.2,0.1,0.5", + price: 120, + mana: 20, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + SetRandomSeed( GameGetFrameNum() + deck.length, GameGetFrameNum() + 133 ) + let rnd = Random( 1, actions.length ) + let data = actions[rnd - 1] + + let safety = 0 + let rec = check_recursion( data, recursion_level ) + + while (( safety < 100 ) && ( ( data.type !== 2 ) || ( rec === -1 ) )) { + rnd = Random( 1, actions.length ) + data = actions[rnd - 1] + rec = check_recursion( data, recursion_level ) + + safety = safety + 1 + } + + call_action(ActionSource.ACTION, data, c, rec ) + }, + }, + { + id: "RANDOM_STATIC_PROJECTILE", + name: "$action_random_static_projectile", + description: "$actiondesc_random_static_projectile", + sprite: "data/ui_gfx/gun_actions/random_static_projectile.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_pyramid", + type: ACTION_TYPE_STATIC_PROJECTILE, + recursive: true, + spawn_level: "3,5,6,10", + spawn_probability: "0.2,0.1,0.2,0.5", + price: 160, + mana: 20, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + SetRandomSeed( GameGetFrameNum() + deck.length, GameGetFrameNum() + 253 ) + let rnd = Random( 1, actions.length ) + let data = actions[rnd - 1] + + let safety = 0 + let rec = check_recursion( data, recursion_level ) + + while (( safety < 100 ) && ( ( data.type !== 1 ) || ( rec === -1 ) )) { + rnd = Random( 1, actions.length ) + data = actions[rnd - 1] + rec = check_recursion( data, recursion_level ) + + safety = safety + 1 + } + + call_action(ActionSource.ACTION, data, c, rec ) + }, + }, + { + id: "DRAW_RANDOM", + name: "$action_draw_random", + description: "$actiondesc_draw_random", + sprite: "data/ui_gfx/gun_actions/draw_random.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_pyramid", + type: ACTION_TYPE_OTHER, + recursive: true, + spawn_level: "2,3,4,5,6,10", + spawn_probability: "0.3,0.2,0.2,0.1,0.1,1", + price: 150, + mana: 20, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + SetRandomSeed( GameGetFrameNum() + deck.length, GameGetFrameNum() - 325 + discarded.length ) + let datasize = deck.length + discarded.length + let rnd = Random( 1, datasize ) + + let data: Action | null = null + + if ( rnd <= deck.length ) { + data = deck[rnd - 1] + } else { + data = discarded[rnd - deck.length - 1] + } + + let checks = 0 + let rec = check_recursion( data, recursion_level ) + + while (( data != null ) && ( ( rec === -1 ) || ( ( data.uses_remaining != null ) && ( data.uses_remaining === 0 ) ) ) && ( checks < datasize )) { + rnd = ( rnd % datasize ) + 1 + checks = checks + 1 + + if ( rnd <= deck.length ) { + data = deck[rnd - 1] + } else { + data = discarded[rnd - deck.length - 1] + } + + rec = check_recursion( data, recursion_level ) + } + + if (( data != null ) && ( rec > -1 ) && ( ( data.uses_remaining == null ) || ( data.uses_remaining !== 0 ) )) { + call_action(ActionSource.ACTION, data, c, rec ) + + if (( data.uses_remaining != null ) && ( data.uses_remaining > 0 )) { + data.uses_remaining = data.uses_remaining - 1 + + let reduce_uses = ActionUsesRemainingChanged( data.inventoryitem_id, data.uses_remaining ) + if (!reduce_uses) { + data.uses_remaining = data.uses_remaining + 1 + } + } + } + }, + }, + { + id: "DRAW_RANDOM_X3", + name: "$action_draw_random_x3", + description: "$actiondesc_draw_random_x3", + sprite: "data/ui_gfx/gun_actions/draw_random_x3.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_pyramid", + type: ACTION_TYPE_OTHER, + recursive: true, + spawn_level: "3,4,5,6,10", + spawn_probability: "0.1,0.3,0.1,0.1,1", + price: 250, + mana: 50, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + SetRandomSeed( GameGetFrameNum() + deck.length, GameGetFrameNum() - 325 + discarded.length ) + let datasize = deck.length + discarded.length + let rnd = Random( 1, datasize ) + + let data: Action | null = null + + if ( rnd <= deck.length ) { + data = deck[rnd - 1] + } else { + data = discarded[rnd - deck.length - 1] + } + + let checks = 0 + let rec = check_recursion( data, recursion_level ) + + while (( data != null ) && ( ( rec === -1 ) || ( ( data.uses_remaining != null ) && ( data.uses_remaining === 0 ) ) ) && ( checks < datasize )) { + rnd = ( rnd % datasize ) + 1 + checks = checks + 1 + + if ( rnd <= deck.length ) { + data = deck[rnd - 1] + } else { + data = discarded[rnd - deck.length - 1] + } + + rec = check_recursion( data, recursion_level ) + } + + if (( data != null ) && ( rec > -1 ) && ( ( data.uses_remaining == null ) || ( data.uses_remaining !== 0 ) )) { + for (let i = 1; i <= 3; i++) { + call_action(ActionSource.ACTION, data, c, rec ) + } + + if (( data.uses_remaining != null ) && ( data.uses_remaining > 0 )) { + data.uses_remaining = data.uses_remaining - 1 + + let reduce_uses = ActionUsesRemainingChanged( data.inventoryitem_id, data.uses_remaining ) + if (!reduce_uses) { + data.uses_remaining = data.uses_remaining + 1 + } + } + } + }, + }, + { + id: "DRAW_3_RANDOM", + name: "$action_draw_3_random", + description: "$actiondesc_draw_3_random", + sprite: "data/ui_gfx/gun_actions/draw_3_random.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_pyramid", + type: ACTION_TYPE_OTHER, + recursive: true, + spawn_level: "2,3,5,6,10", + spawn_probability: "0.1,0.2,0.1,0.1,1", + price: 200, + mana: 40, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + SetRandomSeed( GameGetFrameNum() + deck.length, GameGetFrameNum() - 325 + discarded.length ) + let datasize = deck.length + discarded.length + + for (let i = 1; i <= 3; i++) { + let rnd = Random( 1, datasize ) + + let data: Action | null = null + + if ( rnd <= deck.length ) { + data = deck[rnd - 1] + } else { + data = discarded[rnd - deck.length - 1] + } + + let checks = 0 + let rec = check_recursion( data, recursion_level ) + + while (( data != null ) && ( ( rec === -1 ) || ( ( data.uses_remaining != null ) && ( data.uses_remaining === 0 ) ) ) && ( checks < datasize )) { + rnd = ( rnd % datasize ) + 1 + checks = checks + 1 + + if ( rnd <= deck.length ) { + data = deck[rnd - 1] + } else { + data = discarded[rnd - deck.length - 1] + } + + rec = check_recursion( data, recursion_level ) + } + + if (( data != null ) && ( rec > -1 ) && ( ( data.uses_remaining == null ) || ( data.uses_remaining !== 0 ) )) { + call_action(ActionSource.ACTION, data, c, rec ) + + if (( data.uses_remaining != null ) && ( data.uses_remaining > 0 )) { + data.uses_remaining = data.uses_remaining - 1 + + let reduce_uses = ActionUsesRemainingChanged( data.inventoryitem_id, data.uses_remaining ) + if (!reduce_uses) { + data.uses_remaining = data.uses_remaining + 1 + } + } + } + } + }, + }, + { + id: "ALL_NUKES", + name: "$action_all_nukes", + description: "$actiondesc_all_nukes", + sprite: "data/ui_gfx/gun_actions/all_nukes.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + spawn_requires_flag: "card_unlocked_alchemy", + never_unlimited: true, + type: ACTION_TYPE_UTILITY, + spawn_level: "6,10", + spawn_probability: "0.1,1", + price: 600, + mana: 600, + ai_never_uses: true, + max_uses: 2, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/all_nukes.xml") + c.fire_rate_wait = c.fire_rate_wait + 100 + setCurrentReloadTime(current_reload_time + 100) + }, + }, + { + id: "ALL_DISCS", + name: "$action_all_discs", + description: "$actiondesc_all_discs", + sprite: "data/ui_gfx/gun_actions/all_discs.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + spawn_requires_flag: "card_unlocked_alchemy", + type: ACTION_TYPE_UTILITY, + spawn_level: "0,6,10", + spawn_probability: "0.1,0.05,1", + price: 400, + mana: 100, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/all_discs.xml") + c.fire_rate_wait = c.fire_rate_wait + 50 + setCurrentReloadTime(current_reload_time + 50) + }, + }, + { + id: "ALL_ROCKETS", + name: "$action_all_rockets", + description: "$actiondesc_all_rockets", + sprite: "data/ui_gfx/gun_actions/all_rockets.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + spawn_requires_flag: "card_unlocked_alchemy", + never_unlimited: true, + type: ACTION_TYPE_UTILITY, + spawn_level: "1,6,10", + spawn_probability: "0.1,0.05,1", + price: 400, + mana: 100, + max_uses: 10, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/all_rockets.xml") + c.fire_rate_wait = c.fire_rate_wait + 50 + setCurrentReloadTime(current_reload_time + 50) + }, + }, + { + id: "ALL_DEATHCROSSES", + name: "$action_all_deathcrosses", + description: "$actiondesc_all_deathcrosses", + sprite: "data/ui_gfx/gun_actions/all_deathcrosses.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + spawn_requires_flag: "card_unlocked_alchemy", + never_unlimited: true, + type: ACTION_TYPE_UTILITY, + spawn_level: "2,6,10", + spawn_probability: "0.1,0.05,1", + price: 350, + mana: 80, + max_uses: 15, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/all_deathcrosses.xml") + c.fire_rate_wait = c.fire_rate_wait + 40 + setCurrentReloadTime(current_reload_time + 40) + }, + }, + { + id: "ALL_BLACKHOLES", + name: "$action_all_blackholes", + description: "$actiondesc_all_blackholes", + sprite: "data/ui_gfx/gun_actions/all_blackholes.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + spawn_requires_flag: "card_unlocked_alchemy", + never_unlimited: true, + type: ACTION_TYPE_UTILITY, + spawn_level: "3,6,10", + spawn_probability: "0.1,0.05,1", + price: 500, + mana: 200, + max_uses: 10, + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/all_blackholes.xml") + c.fire_rate_wait = c.fire_rate_wait + 100 + setCurrentReloadTime(current_reload_time + 100) + }, + }, + { + id: "ALL_ACID", + name: "$action_all_acid", + description: "$actiondesc_all_acid", + sprite: "data/ui_gfx/gun_actions/all_acid.png", + sprite_unidentified: "data/ui_gfx/gun_actions/rocket_unidentified.png", + spawn_requires_flag: "card_unlocked_alchemy", + type: ACTION_TYPE_UTILITY, + spawn_level: "4,6,10", + spawn_probability: "0.1,0.05,1", + price: 600, + mana: 200, + + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/all_acid.xml") + c.fire_rate_wait = c.fire_rate_wait + 100 + setCurrentReloadTime(current_reload_time + 100) + }, + }, + { + id: "ALL_SPELLS", + name: "$action_all_spells", + description: "$actiondesc_all_spells", + sprite: "data/ui_gfx/gun_actions/all_spells.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_everything", + spawn_manual_unlock: true, + never_unlimited: true, + type: ACTION_TYPE_OTHER, + recursive: true, + ai_never_uses: true, + spawn_level: "10", + spawn_probability: "1", + price: 1000, + mana: 600, + max_uses: 1, + action: (c: GunActionState) => { + let players = EntityGetWithTag( "player_unit" ) + players.every((v: any, i: any) => { + let [x, y] = EntityGetTransform( v ) + let eid = EntityLoad("data/entities/projectiles/deck/all_spells_loader.xml", x, y) + return true; + }) + c.fire_rate_wait = c.fire_rate_wait + 100 + setCurrentReloadTime(current_reload_time + 100) + }, + }, + { + id: "SUMMON_PORTAL", + name: "$action_summon_portal", + description: "$actiondesc_summon_portal", + sprite: "data/ui_gfx/gun_actions/summon_portal.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "0", + price: 100, + mana: 50, + max_uses: 7, + custom_xml_file: "data/entities/misc/custom_cards/summon_portal.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/summon_portal.xml") + c.fire_rate_wait = c.fire_rate_wait + 80 + }, + }, + { + id: "ADD_TRIGGER", + name: "$action_add_trigger", + description: "$actiondesc_add_trigger", + sprite: "data/ui_gfx/gun_actions/trigger.png", + sprite_unidentified: "data/ui_gfx/gun_actions/damage_unidentified.png", + spawn_requires_flag: "card_unlocked_mestari", + type: ACTION_TYPE_OTHER, + spawn_level: "3,4,5,10", + spawn_probability: "0.3,0.6,0.6,1", + price: 100, + mana: 10, + + action: (c: GunActionState) => { + let data: Action | null = null + + let how_many = 1 + + if ( deck.length > 0 ) { + data = deck[1 - 1] + } else { + data = null + } + + if ( data != null ) { + while (( deck.length >= how_many ) && ( ( data.type === ACTION_TYPE_MODIFIER ) || ( data.type === ACTION_TYPE_PASSIVE ) || ( data.type === ACTION_TYPE_OTHER ) || ( data.type === ACTION_TYPE_DRAW_MANY ) )) { + if (( ( data.uses_remaining == null ) || ( data.uses_remaining !== 0 ) ) && ( data.id !== "ADD_TRIGGER" ) && ( data.id !== "ADD_TIMER" ) && ( data.id !== "ADD_DEATH_TRIGGER" )) { + if ( data.type === ACTION_TYPE_MODIFIER ) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, ) + setDontDrawActions(false) + } + } + how_many = how_many + 1 + data = deck[how_many - 1] + } + + if (( data != null ) && ( data.related_projectiles != null ) && ( ( data.uses_remaining == null ) || ( data.uses_remaining !== 0 ) )) { + let target = data.related_projectiles[0] + let count = data.related_projectiles[1] || 1 + + for (let i = 1; i <= how_many; i++) { + data = deck[1 - 1] + discarded.push(data) + deck.splice(1 - 1, 1) + } + + let valid = false + + for (let i = 1; i <= deck.length; i++) { + let check = deck[i - 1] + + if (( check != null ) && ( ( check.type === ACTION_TYPE_PROJECTILE ) || ( check.type === ACTION_TYPE_STATIC_PROJECTILE ) || ( check.type === ACTION_TYPE_MATERIAL ) || ( check.type === ACTION_TYPE_UTILITY ) )) { + valid = true + break; + } + } + + if (( data.uses_remaining != null ) && ( data.uses_remaining > 0 )) { + data.uses_remaining = data.uses_remaining - 1 + + let reduce_uses = ActionUsesRemainingChanged( data.inventoryitem_id, data.uses_remaining ) + if (!reduce_uses) { + data.uses_remaining = data.uses_remaining + 1 + } + } + + if (valid ) { + for (let i = 1; i <= count; i++) { + add_projectile_trigger_hit_world(target, 1) + } + } else { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, ) + setDontDrawActions(false) + } + } + } + }, + }, + { + id: "ADD_TIMER", + name: "$action_add_timer", + description: "$actiondesc_add_timer", + sprite: "data/ui_gfx/gun_actions/timer.png", + sprite_unidentified: "data/ui_gfx/gun_actions/damage_unidentified.png", + spawn_requires_flag: "card_unlocked_mestari", + type: ACTION_TYPE_OTHER, + spawn_level: "3,4,5,10", + spawn_probability: "0.3,0.6,0.6,1", + price: 150, + mana: 20, + + action: (c: GunActionState) => { + let data: Action | null = null + + let how_many = 1 + + if ( deck.length > 0 ) { + data = deck[1 - 1] + } else { + data = null + } + + if ( data != null ) { + while (( deck.length >= how_many ) && ( ( data.type === ACTION_TYPE_MODIFIER ) || ( data.type === ACTION_TYPE_PASSIVE ) || ( data.type === ACTION_TYPE_OTHER ) || ( data.type === ACTION_TYPE_DRAW_MANY ) )) { + if (( ( data.uses_remaining == null ) || ( data.uses_remaining !== 0 ) ) && ( data.id !== "ADD_TRIGGER" ) && ( data.id !== "ADD_TIMER" ) && ( data.id !== "ADD_DEATH_TRIGGER" )) { + if ( data.type === ACTION_TYPE_MODIFIER ) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, ) + setDontDrawActions(false) + } + } + how_many = how_many + 1 + data = deck[how_many - 1] + } + + if (( data != null ) && ( data.related_projectiles != null ) && ( ( data.uses_remaining == null ) || ( data.uses_remaining !== 0 ) )) { + let target = data.related_projectiles[0] + let count = data.related_projectiles[1] || 1 + + for (let i = 1; i <= how_many; i++) { + data = deck[1 - 1] + discarded.push(data) + deck.splice(1 - 1, 1) + } + + let valid = false + + for (let i = 1; i <= deck.length; i++) { + let check = deck[i - 1] + + if (( check != null ) && ( ( check.type === ACTION_TYPE_PROJECTILE ) || ( check.type === ACTION_TYPE_STATIC_PROJECTILE ) || ( check.type === ACTION_TYPE_MATERIAL ) || ( check.type === ACTION_TYPE_UTILITY ) )) { + valid = true + break; + } + } + + if (( data.uses_remaining != null ) && ( data.uses_remaining > 0 )) { + data.uses_remaining = data.uses_remaining - 1 + + let reduce_uses = ActionUsesRemainingChanged( data.inventoryitem_id, data.uses_remaining ) + if (!reduce_uses) { + data.uses_remaining = data.uses_remaining + 1 + } + } + + if (valid ) { + for (let i = 1; i <= count; i++) { + add_projectile_trigger_timer(target, 20, 1) + } + } else { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, ) + setDontDrawActions(false) + } + } + } + }, + }, + { + id: "ADD_DEATH_TRIGGER", + name: "$action_add_death_trigger", + description: "$actiondesc_add_death_trigger", + sprite: "data/ui_gfx/gun_actions/death_trigger.png", + sprite_unidentified: "data/ui_gfx/gun_actions/damage_unidentified.png", + spawn_requires_flag: "card_unlocked_mestari", + type: ACTION_TYPE_OTHER, + spawn_level: "3,4,5,10", + spawn_probability: "0.3,0.6,0.6,1", + price: 150, + mana: 20, + + action: (c: GunActionState) => { + let data: Action | null = null + + let how_many = 1 + + if ( deck.length > 0 ) { + data = deck[1 - 1] + } else { + data = null + } + + if ( data != null ) { + while (( deck.length >= how_many ) && ( ( data.type === ACTION_TYPE_MODIFIER ) || ( data.type === ACTION_TYPE_PASSIVE ) || ( data.type === ACTION_TYPE_OTHER ) || ( data.type === ACTION_TYPE_DRAW_MANY ) )) { + if (( ( data.uses_remaining == null ) || ( data.uses_remaining !== 0 ) ) && ( data.id !== "ADD_TRIGGER" ) && ( data.id !== "ADD_TIMER" ) && ( data.id !== "ADD_DEATH_TRIGGER" )) { + if ( data.type === ACTION_TYPE_MODIFIER ) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, ) + setDontDrawActions(false) + } + } + how_many = how_many + 1 + data = deck[how_many - 1] + } + + if (( data != null ) && ( data.related_projectiles != null ) && ( ( data.uses_remaining == null ) || ( data.uses_remaining !== 0 ) )) { + let target = data.related_projectiles[0] + let count = data.related_projectiles[1] || 1 + + for (let i = 1; i <= how_many; i++) { + data = deck[1 - 1] + discarded.push(data) + deck.splice(1 - 1, 1) + } + + let valid = false + + for (let i = 1; i <= deck.length; i++) { + let check = deck[i - 1] + + if (( check != null ) && ( ( check.type === ACTION_TYPE_PROJECTILE ) || ( check.type === ACTION_TYPE_STATIC_PROJECTILE ) || ( check.type === ACTION_TYPE_MATERIAL ) || ( check.type === ACTION_TYPE_UTILITY ) )) { + valid = true + break; + } + } + + if (( data.uses_remaining != null ) && ( data.uses_remaining > 0 )) { + data.uses_remaining = data.uses_remaining - 1 + + let reduce_uses = ActionUsesRemainingChanged( data.inventoryitem_id, data.uses_remaining ) + if (!reduce_uses) { + data.uses_remaining = data.uses_remaining + 1 + } + } + + if (valid ) { + for (let i = 1; i <= count; i++) { + add_projectile_trigger_death(target, 1) + } + } else { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, ) + setDontDrawActions(false) + } + } + } + }, + }, + { + id: "LARPA_CHAOS", + name: "$action_larpa_chaos", + description: "$actiondesc_larpa_chaos", + sprite: "data/ui_gfx/gun_actions/larpa_chaos.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/larpa_chaos.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,10", + spawn_probability: "0.1,0.2,0.3,0.4,0.2", + price: 260, + mana: 100, + + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 15 + c.extra_entities = c.extra_entities + "data/entities/misc/larpa_chaos.xml," + draw_actions( 1, true ) + }, + }, + { + id: "LARPA_DOWNWARDS", + name: "$action_larpa_downwards", + description: "$actiondesc_larpa_downwards", + sprite: "data/ui_gfx/gun_actions/larpa_downwards.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/larpa_downwards.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,10", + spawn_probability: "0.1,0.3,0.4,0.2,0.2", + price: 290, + mana: 120, + + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 15 + c.extra_entities = c.extra_entities + "data/entities/misc/larpa_downwards.xml," + draw_actions( 1, true ) + }, + }, + { + id: "LARPA_UPWARDS", + name: "$action_larpa_upwards", + description: "$actiondesc_larpa_upwards", + sprite: "data/ui_gfx/gun_actions/larpa_upwards.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/larpa_upwards.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,10", + spawn_probability: "0.1,0.1,0.2,0.4,0.2", + price: 290, + mana: 120, + + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 15 + c.extra_entities = c.extra_entities + "data/entities/misc/larpa_upwards.xml," + draw_actions( 1, true ) + }, + }, + { + id: "LARPA_CHAOS_2", + name: "$action_larpa_chaos_2", + description: "$actiondesc_larpa_chaos_2", + sprite: "data/ui_gfx/gun_actions/larpa_chaos_2.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + spawn_requires_flag: "card_unlocked_alchemy", + related_extra_entities: [ "data/entities/misc/larpa_chaos_2.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "3,5,10", + spawn_probability: "0.1,0.4,0.1", + price: 300, + mana: 150, + + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 20 + c.extra_entities = c.extra_entities + "data/entities/misc/larpa_chaos_2.xml," + draw_actions( 1, true ) + }, + }, + { + id: "LARPA_DEATH", + name: "$action_larpa_death", + description: "$actiondesc_larpa_death", + sprite: "data/ui_gfx/gun_actions/larpa_death.png", + sprite_unidentified: "data/ui_gfx/gun_actions/electric_charge_unidentified.png", + related_extra_entities: [ "data/entities/misc/larpa_death.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,5,10", + spawn_probability: "0.1,0.1,0.3,0.4,0.2", + price: 150, + mana: 90, + max_uses: 30, + action: (c: GunActionState) => { + c.fire_rate_wait = c.fire_rate_wait + 15 + c.extra_entities = c.extra_entities + "data/entities/misc/larpa_death.xml," + draw_actions( 1, true ) + }, + }, + { + id: "ALPHA", + name: "$action_alpha", + description: "$actiondesc_alpha", + sprite: "data/ui_gfx/gun_actions/alpha.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_duplicate", + type: ACTION_TYPE_OTHER, + recursive: true, + spawn_level: "5,6,10", + spawn_probability: "0.1,0.2,1", + price: 200, + mana: 30, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + c.fire_rate_wait = c.fire_rate_wait + 15 + + let data: Action | null = null + + if ( discarded.length > 0 ) { + data = discarded[1 - 1] + } else if ( hand.length > 0 ) { + data = hand[1 - 1] + } else if ( deck.length > 0 ) { + data = deck[1 - 1] + } else { + data = null + } + + let rec = check_recursion( data, recursion_level ) + + if (( data != null ) && ( rec > -1 )) { + call_action(ActionSource.ACTION, data, c, rec ) + } + + + }, + }, + { + id: "GAMMA", + name: "$action_gamma", + description: "$actiondesc_gamma", + sprite: "data/ui_gfx/gun_actions/gamma.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_duplicate", + type: ACTION_TYPE_OTHER, + recursive: true, + spawn_level: "5,6,10", + spawn_probability: "0.1,0.2,1", + price: 200, + mana: 30, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + c.fire_rate_wait = c.fire_rate_wait + 15 + + let data: Action | null = null + + if ( deck.length > 0 ) { + data = deck[deck.length - 1] + } else if ( hand.length > 0 ) { + data = hand[hand.length - 1] + } else { + data = null + } + + let rec = check_recursion( data, recursion_level ) + + if (( data != null ) && ( rec > -1 )) { + call_action(ActionSource.ACTION, data, c, rec ) + } + + + }, + }, + { + id: "TAU", + name: "$action_tau", + description: "$actiondesc_tau", + sprite: "data/ui_gfx/gun_actions/tau.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_duplicate", + type: ACTION_TYPE_OTHER, + recursive: true, + spawn_level: "5,6,10", + spawn_probability: "0.1,0.2,1", + price: 200, + mana: 80, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + c.fire_rate_wait = c.fire_rate_wait + 35 + + let data1: any = [] + let data2: any = [] + + let s1 = "" + let s2 = "" + + if ( deck.length > 0 ) { + s1 = "deck" + data1 = deck[1 - 1] + } else { + data1 = null + } + + if ( deck.length > 0 ) { + s2 = "deck 2" + data2 = deck[2 - 1] + } else { + data2 = null + } + + let rec1 = check_recursion( data1, recursion_level ) + let rec2 = check_recursion( data2, recursion_level ) + + if (( data1 != null ) && ( rec1 > -1 )) { + + call_action(ActionSource.ACTION, data1, c, rec1 ) + } + + if (( data2 != null ) && ( rec2 > -1 )) { + + call_action(ActionSource.ACTION, data2, c, rec2 ) + } + + + }, + }, + { + id: "OMEGA", + name: "$action_omega", + description: "$actiondesc_omega", + sprite: "data/ui_gfx/gun_actions/omega.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_duplicate", + type: ACTION_TYPE_OTHER, + recursive: true, + spawn_level: "5,6,10", + spawn_probability: "0.1,0.1,1", + price: 600, + mana: 300, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + c.fire_rate_wait = c.fire_rate_wait + 50 + + if ( discarded != null ) { + discarded.every((data: any, i: any) => { + let rec = check_recursion( data, recursion_level ) + if (( data != null ) && ( rec > -1 ) && ( data.id !== "RESET" )) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, rec ) + setDontDrawActions(false) + } + return true; + }) + } + + if ( hand != null ) { + hand.every((data: any, i: any) => { + let rec = check_recursion( data, recursion_level ) + if (( data != null ) && ( ( data.recursive == null ) || ( data.recursive === false ) )) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, rec ) + setDontDrawActions(false) + } + return true; + }) + } + + if ( deck != null ) { + deck.every((data: any, i: any) => { + let rec = check_recursion( data, recursion_level ) + if (( data != null ) && ( rec > -1 ) && ( data.id !== "RESET" )) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, rec ) + setDontDrawActions(false) + } + return true; + }) + } + }, + }, + { + id: "MU", + name: "$action_mu", + description: "$actiondesc_mu", + sprite: "data/ui_gfx/gun_actions/mu.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_duplicate", + type: ACTION_TYPE_OTHER, + recursive: true, + spawn_level: "5,6,10", + spawn_probability: "0.1,0.2,1", + price: 500, + mana: 120, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + c.fire_rate_wait = c.fire_rate_wait + 50 + + let firerate = c.fire_rate_wait + let reload = current_reload_time + let mana_ = mana + + if ( discarded != null ) { + discarded.every((data: any, i: any) => { + let rec = check_recursion( data, recursion_level ) + if (( data != null ) && ( data.type === 2 ) && ( rec > -1 )) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, rec ) + setDontDrawActions(false) + } + return true; + }) + } + + if ( hand != null ) { + hand.every((data: any, i: any) => { + let rec = check_recursion( data, recursion_level ) + if (( data != null ) && ( data.type === 2 ) && ( rec > -1 )) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, rec ) + setDontDrawActions(false) + } + return true; + }) + } + + if ( deck != null ) { + deck.every((data: any, i: any) => { + let rec = check_recursion( data, recursion_level ) + if (( data != null ) && ( data.type === 2 ) && ( rec > -1 )) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, rec ) + setDontDrawActions(false) + } + return true; + }) + } + + c.fire_rate_wait = firerate + setCurrentReloadTime(reload) + setMana(mana_) + + draw_actions( 1, true ) + }, + }, + { + id: "PHI", + name: "$action_phi", + description: "$actiondesc_phi", + sprite: "data/ui_gfx/gun_actions/phi.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_duplicate", + type: ACTION_TYPE_OTHER, + recursive: true, + spawn_level: "5,6,10", + spawn_probability: "0.1,0.2,1", + price: 500, + mana: 120, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + c.fire_rate_wait = c.fire_rate_wait + 50 + + let firerate = c.fire_rate_wait + let reload = current_reload_time + let mana_ = mana + + if ( discarded != null ) { + discarded.every((data: any, i: any) => { + let rec = check_recursion( data, recursion_level ) + if (( data != null ) && ( data.type === 0 ) && ( rec > -1 )) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, rec ) + setDontDrawActions(false) + } + return true; + }) + } + + if ( hand != null ) { + hand.every((data: any, i: any) => { + let rec = check_recursion( data, recursion_level ) + if (( data != null ) && ( data.type === 0 ) && ( rec > -1 )) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, rec ) + setDontDrawActions(false) + } + return true; + }) + } + + if ( deck != null ) { + deck.every((data: any, i: any) => { + let rec = check_recursion( data, recursion_level ) + if (( data != null ) && ( data.type === 0 ) && ( rec > -1 )) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, rec ) + setDontDrawActions(false) + } + return true; + }) + } + + c.fire_rate_wait = firerate + setCurrentReloadTime(reload) + setMana(mana_) + }, + }, + { + id: "SIGMA", + name: "$action_sigma", + description: "$actiondesc_sigma", + sprite: "data/ui_gfx/gun_actions/sigma.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_duplicate", + type: ACTION_TYPE_OTHER, + recursive: true, + spawn_level: "4,5,10", + spawn_probability: "0.1,0.2,1", + price: 500, + mana: 120, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + c.fire_rate_wait = c.fire_rate_wait + 30 + + let firerate = c.fire_rate_wait + let reload = current_reload_time + let mana_ = mana + + if ( discarded != null ) { + discarded.every((data: any, i: any) => { + let rec = check_recursion( data, recursion_level ) + if (( data != null ) && ( data.type === 1 ) && ( rec > -1 )) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, rec ) + setDontDrawActions(false) + } + return true; + }) + } + + if ( hand != null ) { + hand.every((data: any, i: any) => { + let rec = check_recursion( data, recursion_level ) + if (( data != null ) && ( data.type === 1 ) && ( rec > -1 )) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, rec ) + setDontDrawActions(false) + } + return true; + }) + } + + if ( deck != null ) { + deck.every((data: any, i: any) => { + let rec = check_recursion( data, recursion_level ) + if (( data != null ) && ( data.type === 1 ) && ( rec > -1 )) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, rec ) + setDontDrawActions(false) + } + return true; + }) + } + + c.fire_rate_wait = firerate + setCurrentReloadTime(reload) + setMana(mana_) + + draw_actions( 1, true ) + }, + }, + { + id: "ZETA", + name: "$action_zeta", + description: "$actiondesc_zeta", + sprite: "data/ui_gfx/gun_actions/zeta.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_duplicate", + type: ACTION_TYPE_OTHER, + spawn_manual_unlock: true, + recursive: true, + spawn_level: "2,5,10", + spawn_probability: "0.2,0.4,0.5", + price: 200, + mana: 10, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + let entity_id = GetUpdatedEntityID() + let [x, y] = EntityGetTransform( entity_id ) + let options: any = [] + + let children = EntityGetAllChildren( entity_id ) + let inventory = EntityGetFirstComponent( entity_id, "Inventory2Component" ) + + if (( children != null ) && ( inventory != null )) { + let active_wand = ComponentGetValue2( inventory, "mActiveItem" ) + + children.every((child_id: any, i: any) => { + if ( EntityGetName( child_id ) === "inventory_quick" ) { + let wands = EntityGetAllChildren( child_id ) + + if ( wands != null ) { + wands.every((wand_id: any, k: any) => { + if (( wand_id !== active_wand ) && EntityHasTag( wand_id, "wand" )) { + let spells = EntityGetAllChildren( wand_id ) + + if ( spells != null ) { + spells.every((spell_id: any, j: any) => { + let comp = EntityGetFirstComponentIncludingDisabled( spell_id, "ItemActionComponent" ) + + if ( comp != null ) { + let action_id = ComponentGetValue2( comp, "action_id" ) + + options.push(action_id) + } + return true; + }) + } + } + return true; + }) + } + } + return true; + }) + } + + if ( options.length > 0 ) { + SetRandomSeed( x + GameGetFrameNum(), y + 251 ) + + let rnd = Random( 1, options.length ) + let action_id = options[rnd] + + actions.every((data: any, i: any) => { + if ( data.id === action_id ) { + let rec = check_recursion( data, recursion_level ) + if ( rec > -1 ) { + setDontDrawActions(true) + call_action(ActionSource.ACTION, data, c, rec ) + setDontDrawActions(false) + } + return false; + } + return true; + }) + } + + draw_actions( 1, true ) + }, + }, + { + id: "DIVIDE_2", + name: "$action_divide_2", + description: "$actiondesc_divide_2", + sprite: "data/ui_gfx/gun_actions/divide_2.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_musicbox", + type: ACTION_TYPE_OTHER, + spawn_level: "3,5,6,10", + spawn_probability: "0.2,0.3,0.2,1", + price: 200, + mana: 35, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + c.fire_rate_wait = c.fire_rate_wait + 20 + + let data: Action | null = null + + let iter = iteration || 1 + let iter_max = iteration || 1 + + if ( deck.length > 0 ) { + data = deck[iter - 1] || null + } else { + data = null + } + + let count = 2 + if ( iter >= 5 ) { + count = 1 + } + + let rec = check_recursion( data, recursion_level ) + + if (( data != null ) && ( rec > -1 ) && ( ( data.uses_remaining == null ) || ( data.uses_remaining !== 0 ) )) { + let firerate = c.fire_rate_wait + let reload = current_reload_time + + for (let i = 1; i <= count; i++) { + if ( i === 1 ) { + setDontDrawActions(true) + } + let imax = call_action(ActionSource.ACTION, data, c, rec, iter + 1 ) + setDontDrawActions(false) + if (imax != null) { + iter_max = imax + } + } + + if (( data.uses_remaining != null ) && ( data.uses_remaining > 0 )) { + data.uses_remaining = data.uses_remaining - 1 + + let reduce_uses = ActionUsesRemainingChanged( data.inventoryitem_id, data.uses_remaining ) + if (!reduce_uses) { + data.uses_remaining = data.uses_remaining + 1 + } + } + + if (iter === 1) { + c.fire_rate_wait = firerate + setCurrentReloadTime(reload) + + for (let i = 1; i <= iter_max; i++) { + if (deck.length > 0) { + let d = deck[1 - 1] + discarded.push(d) + deck.splice(1 - 1, 1) + } + } + } + } + + c.damage_projectile_add = c.damage_projectile_add - 0.2 + c.explosion_radius = c.explosion_radius - 5.0 + if (c.explosion_radius < 0) { + c.explosion_radius = 0 + } + + c.pattern_degrees = 5 + + return iter_max + }, + }, + { + id: "DIVIDE_3", + name: "$action_divide_3", + description: "$actiondesc_divide_3", + sprite: "data/ui_gfx/gun_actions/divide_3.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_musicbox", + type: ACTION_TYPE_OTHER, + spawn_level: "4,5,6,10", + spawn_probability: "0.1,0.1,0.2,1", + price: 250, + mana: 50, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + c.fire_rate_wait = c.fire_rate_wait + 35 + + let data: Action | null = null + + let iter = iteration || 1 + let iter_max = iteration || 1 + + if ( deck.length > 0 ) { + data = deck[iter - 1] || null + } else { + data = null + } + + let count = 3 + if ( iter >= 4 ) { + count = 1 + } + + let rec = check_recursion( data, recursion_level ) + + if (( data != null ) && ( rec > -1 ) && ( ( data.uses_remaining == null ) || ( data.uses_remaining !== 0 ) )) { + let firerate = c.fire_rate_wait + let reload = current_reload_time + + for (let i = 1; i <= count; i++) { + if ( i === 1 ) { + setDontDrawActions(true) + } + let imax = call_action(ActionSource.ACTION, data, c, rec, iter + 1 ) + setDontDrawActions(false) + if (imax != null) { + iter_max = imax + } + } + + if (( data.uses_remaining != null ) && ( data.uses_remaining > 0 )) { + data.uses_remaining = data.uses_remaining - 1 + + let reduce_uses = ActionUsesRemainingChanged( data.inventoryitem_id, data.uses_remaining ) + if (!reduce_uses) { + data.uses_remaining = data.uses_remaining + 1 + } + } + + if (iter === 1) { + c.fire_rate_wait = firerate + setCurrentReloadTime(reload) + + for (let i = 1; i <= iter_max; i++) { + if (deck.length > 0) { + let d = deck[1 - 1] + discarded.push(d) + deck.splice(1 - 1, 1) + } + } + } + } + + c.damage_projectile_add = c.damage_projectile_add - 0.4 + c.explosion_radius = c.explosion_radius - 10.0 + if (c.explosion_radius < 0) { + c.explosion_radius = 0 + } + + c.pattern_degrees = 5 + + return iter_max + }, + }, + { + id: "DIVIDE_4", + name: "$action_divide_4", + description: "$actiondesc_divide_4", + sprite: "data/ui_gfx/gun_actions/divide_4.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_musicbox", + type: ACTION_TYPE_OTHER, + spawn_level: "5,6,10", + spawn_probability: "0.1,0.1,1", + price: 300, + mana: 70, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + c.fire_rate_wait = c.fire_rate_wait + 50 + + let data: Action | null = null + + let iter = iteration || 1 + let iter_max = iteration || 1 + + if ( deck.length > 0 ) { + data = deck[iter - 1] || null + } else { + data = null + } + + let count = 4 + if ( iter >= 4 ) { + count = 1 + } + + let rec = check_recursion( data, recursion_level ) + + if (( data != null ) && ( rec > -1 ) && ( ( data.uses_remaining == null ) || ( data.uses_remaining !== 0 ) )) { + let firerate = c.fire_rate_wait + let reload = current_reload_time + + for (let i = 1; i <= count; i++) { + if ( i === 1 ) { + setDontDrawActions(true) + } + let imax = call_action(ActionSource.ACTION, data, c, rec, iter + 1 ) + setDontDrawActions(false) + if (imax != null) { + iter_max = imax + } + } + + if (( data.uses_remaining != null ) && ( data.uses_remaining > 0 )) { + data.uses_remaining = data.uses_remaining - 1 + + let reduce_uses = ActionUsesRemainingChanged( data.inventoryitem_id, data.uses_remaining ) + if (!reduce_uses) { + data.uses_remaining = data.uses_remaining + 1 + } + } + + if (iter === 1) { + c.fire_rate_wait = firerate + setCurrentReloadTime(reload) + + for (let i = 1; i <= iter_max; i++) { + if (deck.length > 0) { + let d = deck[1 - 1] + discarded.push(d) + deck.splice(1 - 1, 1) + } + } + } + } + + c.damage_projectile_add = c.damage_projectile_add - 0.6 + c.explosion_radius = c.explosion_radius - 20.0 + if (c.explosion_radius < 0) { + c.explosion_radius = 0 + } + + c.pattern_degrees = 5 + + return iter_max + }, + }, + { + id: "DIVIDE_10", + name: "$action_divide_10", + description: "$actiondesc_divide_10", + sprite: "data/ui_gfx/gun_actions/divide_10.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_divide", + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "1", + price: 400, + mana: 200, + max_uses: 5, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + c.fire_rate_wait = c.fire_rate_wait + 80 + setCurrentReloadTime(current_reload_time + 20) + + let data: Action | null = null + + let iter = iteration || 1 + let iter_max = iteration || 1 + + if ( deck.length > 0 ) { + data = deck[iter - 1] || null + } else { + data = null + } + + let count = 10 + if ( iter >= 3 ) { + count = 1 + } + + let rec = check_recursion( data, recursion_level ) + + if (( data != null ) && ( rec > -1 ) && ( ( data.uses_remaining == null ) || ( data.uses_remaining !== 0 ) )) { + let firerate = c.fire_rate_wait + let reload = current_reload_time + + for (let i = 1; i <= count; i++) { + if ( i === 1 ) { + setDontDrawActions(true) + } + let imax = call_action(ActionSource.ACTION, data, c, rec, iter + 1 ) + setDontDrawActions(false) + if (imax != null) { + iter_max = imax + } + } + + if (( data.uses_remaining != null ) && ( data.uses_remaining > 0 )) { + data.uses_remaining = data.uses_remaining - 1 + + let reduce_uses = ActionUsesRemainingChanged( data.inventoryitem_id, data.uses_remaining ) + if (!reduce_uses) { + data.uses_remaining = data.uses_remaining + 1 + } + } + + if (iter === 1) { + c.fire_rate_wait = firerate + setCurrentReloadTime(reload) + + for (let i = 1; i <= iter_max; i++) { + if (deck.length > 0) { + let d = deck[1 - 1] + discarded.push(d) + deck.splice(1 - 1, 1) + } + } + } + } + + c.damage_projectile_add = c.damage_projectile_add - 1.5 + c.explosion_radius = c.explosion_radius - 40.0 + if (c.explosion_radius < 0) { + c.explosion_radius = 0 + } + + c.pattern_degrees = 5 + + return iter_max + }, + }, + { + id: "METEOR_RAIN", + name: "$action_meteor_rain", + description: "$actiondesc_meteor_rain", + sprite: "data/ui_gfx/gun_actions/meteor_rain.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bomb_unidentified.png", + related_projectiles: [ "data/entities/projectiles/deck/meteor_rain_meteor.xml" ], + related_extra_entities: [ "data/entities/misc/effect_meteor_rain.xml" ], + spawn_requires_flag: "card_unlocked_rain", + never_unlimited: true, + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "6,10", + spawn_probability: "0.1,1", + price: 300, + mana: 225, + max_uses: 2, + custom_xml_file: "data/entities/misc/custom_cards/meteor_rain.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/meteor_rain.xml") + c.extra_entities = c.extra_entities + "data/entities/misc/effect_meteor_rain.xml," + c.fire_rate_wait = c.fire_rate_wait + 100 + setCurrentReloadTime(current_reload_time + 60) + }, + }, + { + id: "WORM_RAIN", + name: "$action_worm_rain", + description: "$actiondesc_worm_rain", + sprite: "data/ui_gfx/gun_actions/worm_rain.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bomb_unidentified.png", + related_projectiles: ["data/entities/animals/worm_big.xml"], + spawn_requires_flag: "card_unlocked_rain", + never_unlimited: true, + type: ACTION_TYPE_STATIC_PROJECTILE, + spawn_level: "6,10", + spawn_probability: "0.1,1", + price: 300, + mana: 225, + max_uses: 2, + custom_xml_file: "data/entities/misc/custom_cards/worm_rain.xml", + action: (c: GunActionState) => { + add_projectile("data/entities/projectiles/deck/worm_rain.xml") + c.fire_rate_wait = c.fire_rate_wait + 100 + setCurrentReloadTime(current_reload_time + 60) + }, + }, + { + id: "RESET", + name: "$action_reset", + description: "$actiondesc_reset", + sprite: "data/ui_gfx/gun_actions/reset.png", + sprite_unidentified: "data/ui_gfx/gun_actions/bomb_unidentified.png", + spawn_requires_flag: "card_unlocked_mestari", + type: ACTION_TYPE_UTILITY, + recursive: true, + spawn_level: "10", + spawn_probability: "1", + price: 120, + mana: 20, + action: (c: GunActionState) => { + setCurrentReloadTime(current_reload_time - 25) + + hand.every((v: any, i: any) => { + + discarded.push(v) + return true; + }) + + deck.every((v: any, i: any) => { + + discarded.push(v) + return true; + }) + + clearHand() + clearDeck() + + if ( force_stop_draws === false ) { + setForceStopDraws(true) + move_discarded_to_deck() + order_deck() + } + }, + }, + { + id: "IF_ENEMY", + name: "$action_if_enemy", + description: "$actiondesc_if_enemy", + sprite: "data/ui_gfx/gun_actions/if_enemy.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_maths", + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "1", + price: 100, + mana: 0, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + let endpoint = -1 + let elsepoint = -1 + let [x, y] = EntityGetTransform( GetUpdatedEntityID() ) + let enemies = EntityGetInRadiusWithTag( x, y, 240, "homing_target" ) + + let doskip = false + if ( enemies.length < 15 ) { + doskip = true + } + + if ( deck.length > 0 ) { + deck.every((v: any, i: any) => { + if ( v != null ) { + if (( v.id.substring( 1-1, 3 ) === "IF_" ) && ( v.id !== "IF_END" ) && ( v.id !== "IF_ELSE" )) { + endpoint = -1 + return false; + } + + if ( v.id === "IF_ELSE" ) { + endpoint = i + 1 + elsepoint = i + 1 + } + + if ( v.id === "IF_END" ) { + endpoint = i + 1 + return false; + } + } + return true; + }) + + let envelope_min = 1 + let envelope_max = 1 + + if (doskip ) { + if ( elsepoint > 0 ) { + envelope_max = elsepoint + } else if ( endpoint > 0 ) { + envelope_max = endpoint + } + + for (let i = envelope_min; i <= envelope_max; i++) { + let v = deck[envelope_min - 1] + + if ( v != null ) { + discarded.push(v) + deck.splice(envelope_min - 1, 1) + } + } + } else { + if ( elsepoint > 0 ) { + envelope_min = elsepoint + + if ( endpoint > 0 ) { + envelope_max = endpoint + } else { + envelope_max = deck.length + } + + for (let i = envelope_min; i <= envelope_max; i++) { + let v = deck[envelope_min - 1] + + if ( v != null ) { + discarded.push(v) + deck.splice(envelope_min - 1, 1) + } + } + } + } + } + + draw_actions( 1, true ) + }, + }, + { + id: "IF_PROJECTILE", + name: "$action_if_projectile", + description: "$actiondesc_if_projectile", + sprite: "data/ui_gfx/gun_actions/if_projectile.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_maths", + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "1", + price: 100, + mana: 0, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + let endpoint = -1 + let elsepoint = -1 + let [x, y] = EntityGetTransform( GetUpdatedEntityID() ) + let enemies = EntityGetInRadiusWithTag( x, y, 160, "projectile" ) + + let doskip = false + if ( enemies.length < 20 ) { + doskip = true + } + + if ( deck.length > 0 ) { + deck.every((v: any, i: any) => { + if ( v != null ) { + if (( v.id.substring( 1-1, 3 ) === "IF_" ) && ( v.id !== "IF_END" ) && ( v.id !== "IF_ELSE" )) { + endpoint = -1 + return false; + } + + if ( v.id === "IF_ELSE" ) { + endpoint = i + 1 + elsepoint = i + 1 + } + + if ( v.id === "IF_END" ) { + endpoint = i + 1 + return false; + } + } + return true; + }) + + let envelope_min = 1 + let envelope_max = 1 + + if (doskip ) { + if ( elsepoint > 0 ) { + envelope_max = elsepoint + } else if ( endpoint > 0 ) { + envelope_max = endpoint + } + + for (let i = envelope_min; i <= envelope_max; i++) { + let v = deck[envelope_min - 1] + + if ( v != null ) { + discarded.push(v) + deck.splice(envelope_min - 1, 1) + } + } + } else { + if ( elsepoint > 0 ) { + envelope_min = elsepoint + + if ( endpoint > 0 ) { + envelope_max = endpoint + } else { + envelope_max = deck.length + } + + for (let i = envelope_min; i <= envelope_max; i++) { + let v = deck[envelope_min - 1] + + if ( v != null ) { + discarded.push(v) + deck.splice(envelope_min - 1, 1) + } + } + } + } + } + + draw_actions( 1, true ) + }, + }, + { + id: "IF_HP", + name: "$action_if_hp", + description: "$actiondesc_if_hp", + sprite: "data/ui_gfx/gun_actions/if_hp.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_maths", + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "1", + price: 100, + mana: 0, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + let endpoint = -1 + let elsepoint = -1 + let entity_id = GetUpdatedEntityID() + let comp = EntityGetFirstComponent( entity_id, "DamageModelComponent" ) + let hpdiff = 1.0 + + if ( comp != null ) { + let hp = ComponentGetValue2( comp, "hp" ) + let max_hp = ComponentGetValue2( comp, "max_hp" ) + + hpdiff = hp / max_hp + } + + let doskip = false + if ( hpdiff > 0.25 ) { + doskip = true + } + + if ( deck.length > 0 ) { + deck.every((v: any, i: any) => { + if ( v != null ) { + if (( v.id.substring( 1-1, 3 ) === "IF_" ) && ( v.id !== "IF_END" ) && ( v.id !== "IF_ELSE" )) { + endpoint = -1 + return false; + } + + if ( v.id === "IF_ELSE" ) { + endpoint = i + 1 + elsepoint = i + 1 + } + + if ( v.id === "IF_END" ) { + endpoint = i + 1 + return false; + } + } + return true; + }) + + let envelope_min = 1 + let envelope_max = 1 + + if (doskip ) { + if ( elsepoint > 0 ) { + envelope_max = elsepoint + } else if ( endpoint > 0 ) { + envelope_max = endpoint + } + + for (let i = envelope_min; i <= envelope_max; i++) { + let v = deck[envelope_min - 1] + + if ( v != null ) { + discarded.push(v) + deck.splice(envelope_min - 1, 1) + } + } + } else { + if ( elsepoint > 0 ) { + envelope_min = elsepoint + + if ( endpoint > 0 ) { + envelope_max = endpoint + } else { + envelope_max = deck.length + } + + for (let i = envelope_min; i <= envelope_max; i++) { + let v = deck[envelope_min - 1] + + if ( v != null ) { + discarded.push(v) + deck.splice(envelope_min - 1, 1) + } + } + } + } + } + + draw_actions( 1, true ) + }, + }, + { + id: "IF_HALF", + name: "$action_if_half", + description: "$actiondesc_if_half", + sprite: "data/ui_gfx/gun_actions/if_half.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_maths", + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "1", + price: 100, + mana: 0, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + let endpoint = -1 + let elsepoint = -1 + let doskip = false + + if ( reflecting === false ) { + let status = Number.parseInt( GlobalsGetValue( "GUN_ACTION_IF_HALF_STATUS", "0" ) ) || 0 + + if ( status === 1 ) { + doskip = true + } + + status = 1 - status + GlobalsSetValue( "GUN_ACTION_IF_HALF_STATUS", String( status ) ) + } + + if ( deck.length > 0 ) { + deck.every((v: any, i: any) => { + if ( v != null ) { + if (( v.id.substring( 1-1, 3 ) === "IF_" ) && ( v.id !== "IF_END" ) && ( v.id !== "IF_ELSE" )) { + endpoint = -1 + return false; + } + + if ( v.id === "IF_ELSE" ) { + endpoint = i + 1 + elsepoint = i + 1 + } + + if ( v.id === "IF_END" ) { + endpoint = i + 1 + return false; + } + } + return true; + }) + + let envelope_min = 1 + let envelope_max = 1 + + if (doskip ) { + if ( elsepoint > 0 ) { + envelope_max = elsepoint + } else if ( endpoint > 0 ) { + envelope_max = endpoint + } + + for (let i = envelope_min; i <= envelope_max; i++) { + let v = deck[envelope_min - 1] + + if ( v != null ) { + discarded.push(v) + deck.splice(envelope_min - 1, 1) + } + } + } else { + if ( elsepoint > 0 ) { + envelope_min = elsepoint + + if ( endpoint > 0 ) { + envelope_max = endpoint + } else { + envelope_max = deck.length + } + + for (let i = envelope_min; i <= envelope_max; i++) { + let v = deck[envelope_min - 1] + + if ( v != null ) { + discarded.push(v) + deck.splice(envelope_min - 1, 1) + } + } + } + } + } + + draw_actions( 1, true ) + }, + }, + { + id: "IF_END", + name: "$action_if_end", + description: "$actiondesc_if_end", + sprite: "data/ui_gfx/gun_actions/if_end.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_maths", + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "1", + price: 10, + mana: 0, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + draw_actions( 1, true ) + }, + }, + { + id: "IF_ELSE", + name: "$action_if_else", + description: "$actiondesc_if_else", + sprite: "data/ui_gfx/gun_actions/if_else.png", + sprite_unidentified: "data/ui_gfx/gun_actions/spread_reduce_unidentified.png", + spawn_requires_flag: "card_unlocked_maths", + type: ACTION_TYPE_OTHER, + spawn_level: "10", + spawn_probability: "1", + price: 10, + mana: 0, + action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { + draw_actions( 1, true ) + }, + }, + { + id: "COLOUR_RED", + name: "$action_colour_red", + description: "$actiondesc_colour_red", + sprite: "data/ui_gfx/gun_actions/colour_red.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/particles/tinyspark_red.xml", "data/entities/misc/colour_red.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "1,2,3,4,5,6", + spawn_probability: "0.2,0.2,0.4,0.2,0.2,0.2", + spawn_requires_flag: "card_unlocked_paint", + price: 40, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/particles/tinyspark_red.xml,data/entities/misc/colour_red.xml," + c.fire_rate_wait = c.fire_rate_wait - 8 + c.screenshake = c.screenshake - 2.5 + if ( c.screenshake < 0 ) { + c.screenshake = 0 + } + draw_actions( 1, true ) + }, + }, + { + id: "COLOUR_ORANGE", + name: "$action_colour_orange", + description: "$actiondesc_colour_orange", + sprite: "data/ui_gfx/gun_actions/colour_orange.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/particles/tinyspark_red.xml", "data/entities/misc/colour_orange.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.1,0.1,0.4", + spawn_requires_flag: "card_unlocked_paint", + price: 40, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/particles/tinyspark_red.xml,data/entities/misc/colour_orange.xml," + c.fire_rate_wait = c.fire_rate_wait - 8 + c.screenshake = c.screenshake - 2.5 + if ( c.screenshake < 0 ) { + c.screenshake = 0 + } + draw_actions( 1, true ) + }, + }, + { + id: "COLOUR_GREEN", + name: "$action_colour_green", + description: "$actiondesc_colour_green", + sprite: "data/ui_gfx/gun_actions/colour_green.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/particles/tinyspark_red.xml", "data/entities/misc/colour_green.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.4,0.1,0.1", + spawn_requires_flag: "card_unlocked_paint", + price: 40, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/particles/tinyspark_red.xml,data/entities/misc/colour_green.xml," + c.fire_rate_wait = c.fire_rate_wait - 8 + c.screenshake = c.screenshake - 2.5 + if ( c.screenshake < 0 ) { + c.screenshake = 0 + } + draw_actions( 1, true ) + }, + }, + { + id: "COLOUR_YELLOW", + name: "$action_colour_yellow", + description: "$actiondesc_colour_yellow", + sprite: "data/ui_gfx/gun_actions/colour_yellow.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/particles/tinyspark_red.xml", "data/entities/misc/colour_yellow.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.1,0.4,0.1", + spawn_requires_flag: "card_unlocked_paint", + price: 40, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/particles/tinyspark_red.xml,data/entities/misc/colour_yellow.xml," + c.fire_rate_wait = c.fire_rate_wait - 8 + c.screenshake = c.screenshake - 2.5 + if ( c.screenshake < 0 ) { + c.screenshake = 0 + } + draw_actions( 1, true ) + }, + }, + { + id: "COLOUR_PURPLE", + name: "$action_colour_purple", + description: "$actiondesc_colour_purple", + sprite: "data/ui_gfx/gun_actions/colour_purple.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/particles/tinyspark_red.xml", "data/entities/misc/colour_purple.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.1,0.1,0.4", + spawn_requires_flag: "card_unlocked_paint", + price: 40, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/particles/tinyspark_red.xml,data/entities/misc/colour_purple.xml," + c.fire_rate_wait = c.fire_rate_wait - 8 + c.screenshake = c.screenshake - 2.5 + if ( c.screenshake < 0 ) { + c.screenshake = 0 + } + draw_actions( 1, true ) + }, + }, + { + id: "COLOUR_BLUE", + name: "$action_colour_blue", + description: "$actiondesc_colour_blue", + sprite: "data/ui_gfx/gun_actions/colour_blue.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/particles/tinyspark_red.xml", "data/entities/misc/colour_blue.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4", + spawn_probability: "0.4,0.1,0.1", + spawn_requires_flag: "card_unlocked_paint", + price: 40, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/particles/tinyspark_red.xml,data/entities/misc/colour_blue.xml," + c.fire_rate_wait = c.fire_rate_wait - 8 + c.screenshake = c.screenshake - 2.5 + if ( c.screenshake < 0 ) { + c.screenshake = 0 + } + draw_actions( 1, true ) + }, + }, + { + id: "COLOUR_RAINBOW", + name: "$action_colour_rainbow", + description: "$actiondesc_colour_rainbow", + sprite: "data/ui_gfx/gun_actions/colour_rainbow.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/particles/tinyspark_red.xml", "data/entities/misc/colour_rainbow.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,10", + spawn_probability: "0.1,0.1,0.1,0.2", + spawn_requires_flag: "card_unlocked_paint", + price: 40, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/particles/tinyspark_red.xml,data/entities/misc/colour_rainbow.xml," + c.fire_rate_wait = c.fire_rate_wait - 8 + c.screenshake = c.screenshake - 2.5 + if ( c.screenshake < 0 ) { + c.screenshake = 0 + } + draw_actions( 1, true ) + }, + }, + { + id: "COLOUR_INVIS", + name: "$action_colour_invis", + description: "$actiondesc_colour_invis", + sprite: "data/ui_gfx/gun_actions/colour_invis.png", + sprite_unidentified: "data/ui_gfx/gun_actions/homing_unidentified.png", + related_extra_entities: [ "data/entities/misc/colour_invis.xml" ], + type: ACTION_TYPE_MODIFIER, + spawn_level: "2,3,4,10", + spawn_probability: "0.1,0.1,0.1,0.1", + spawn_requires_flag: "card_unlocked_paint", + price: 40, + mana: 0, + + action: (c: GunActionState) => { + c.extra_entities = c.extra_entities + "data/entities/misc/colour_invis.xml," + c.fire_rate_wait = c.fire_rate_wait - 8 + c.screenshake = c.screenshake - 2.5 + if ( c.screenshake < 0 ) { + c.screenshake = 0 + } + draw_actions( 1, true ) + }, + }, + { + id: "RAINBOW_TRAIL", + name: "$action_rainbow_trail", + description: "$actiondesc_rainbow_trail", + sprite: "data/ui_gfx/gun_actions/rainbow_trail.png", + sprite_unidentified: "data/ui_gfx/gun_actions/oil_trail_unidentified.png", + type: ACTION_TYPE_MODIFIER, + spawn_level: "10", + spawn_probability: "0", + spawn_requires_flag: "card_unlocked_rainbow_trail", + price: 100, + mana: 0, + + custom_xml_file: "data/entities/misc/custom_cards/rainbow_trail.xml", + action: (c: GunActionState) => { + c.game_effect_entities = c.game_effect_entities + "data/entities/misc/effect_rainbow_farts.xml," + c.trail_material = c.trail_material + "material_rainbow," + c.trail_material_amount = c.trail_material_amount + 20 + draw_actions( 1, true ) + }, + + }, +] + diff --git a/src/app/calc/__generated__/gun_actions.ts b/src/app/calc/__generated__/gun_actions.ts index 072a77a..abd800b 100644 --- a/src/app/calc/__generated__/gun_actions.ts +++ b/src/app/calc/__generated__/gun_actions.ts @@ -7427,7 +7427,6 @@ export const actions: Action[] = [ if (( check != null ) && ( ( check.type === ACTION_TYPE_PROJECTILE ) || ( check.type === ACTION_TYPE_STATIC_PROJECTILE ) || ( check.type === ACTION_TYPE_MATERIAL ) || ( check.type === ACTION_TYPE_UTILITY ) )) { valid = true - // return false; TODO fix this in generate script break; } } @@ -7508,7 +7507,6 @@ export const actions: Action[] = [ if (( check != null ) && ( ( check.type === ACTION_TYPE_PROJECTILE ) || ( check.type === ACTION_TYPE_STATIC_PROJECTILE ) || ( check.type === ACTION_TYPE_MATERIAL ) || ( check.type === ACTION_TYPE_UTILITY ) )) { valid = true - // return false; TODO fix this in generate script break; } } @@ -7589,7 +7587,6 @@ export const actions: Action[] = [ if (( check != null ) && ( ( check.type === ACTION_TYPE_PROJECTILE ) || ( check.type === ACTION_TYPE_STATIC_PROJECTILE ) || ( check.type === ACTION_TYPE_MATERIAL ) || ( check.type === ACTION_TYPE_UTILITY ) )) { valid = true - // return false; TODO fix this in generate script break; } } diff --git a/src/app/calc/__generated__/translations.beta.ts b/src/app/calc/__generated__/translations.beta.ts new file mode 100644 index 0000000..04b4901 --- /dev/null +++ b/src/app/calc/__generated__/translations.beta.ts @@ -0,0 +1,3479 @@ +export const translations = { + "current_language": "English", + "booktitle00": "Emerald Tablet - volume I", + "bookdesc00": "Tis true without lying, certain and most true.\nThat which is below is like that which is above\nand that which is above is like that which is below\nto do the miracles of one only thing.\nAnd as all things have been and arose from one by the mediation of one: \nso all things have their birth from this one thing by adaptation.", + "booktitle01": "Emerald Tablet of Thoth", + "bookdesc01": "The necessity of concealing the Art is\none of the chief anxieties of alchemists. \nWe are sworn to secrecy by heaven and earth and hell,\nby the four elements, by the height and the depth,\nby Hermes, by Anubis,and by the howlings of Kerkoros.\nAn oath has been required of us to reveal\nnothing clearly to any uninitiated being.", + "booktitle02": "Emerald Tablet - volume II", + "bookdesc02": "Thence is born a spirit white as snow, \nand another spirit red as blood,\nwhich two spirits are contained in a third hidden thing.", + "booktitle03": "Emerald Tablet - volume III", + "bookdesc03": "Heed my warning or death and decay will follow.", + "booktitle04": "Emerald Tablet - volume IV", + "bookdesc04": "The definition of death is the disjunction of the composite, \nbut there is no disjunction of that which is simple, for it is one.\nDeath consists in the separation of the soul from the body,\nbecause anything formed out of two, three,\nor four components must disintegrate, and this is death.\nUnderstand, further, that no complex substance which lacks fire eats, \ndrinks, or sleeps, because in all things which have a spirit \nfire is that which eats.\n", + "booktitle05": "Emerald Tablet - volume V", + "bookdesc05": "And the Lord spake, saying,\n'First shalt hou take out the Holy Pin.\nThen, shalt thou count to three. No more. No less.\nThree shalt be the number thou shalt count, \nand the number of the counting shall be three. \nFour shalt thou not count, neither count thou two,\nexcepting that thou then proceed to three.\nFive is right out. Once at the number three, \nbeing the third number be reached, then,\nlobbest thou thy Holy Hand Grenade of Antioch towards \nthy foe, who, being naughty in My sight, shall snuff it.'", + "booktitle06": "Emerald Tablet - volume VI", + "bookdesc06": "Some Alchemists fancy that the work from beginning \nto end is a mere idle entertainment; but those who \nmake it so will reap what they have sown - nothing. \nWe know that next to the Divine Blessing,\nand the discovery of the proper foundation,\nnothing is so important as unwearied industry\nand perseverance in this First Operation.\nIt is no wonder, then, that so many students\nof this Art are reduced to beggary;\nthey are afraid of work, and look upon our Art as \nmere sport for their leisure moments. For no labour \nis more tedious than that which the preparatory part \nof our enterprise demands. \n", + "booktitle07": "Emerald Tablet - volume VII", + "bookdesc07": "Among those who devote themselves to the transmutation of metals,\nhowever, there can be no such thing as mediocrity of attainment.\nA person who studies this Art, must have either everything or nothing.\nAn Alchemist who knows only half their craft, reaps nothing but disappointment \nand waste of time and money; moreover, they lay themselves open to the mockery \nof those who despise our Art. Those, indeed, who succeed in reaching the goal \nof the Magistery, have not only infinite riches, but the means of continued \nlife and health. Hence it is the most popular of all pursuits. ", + "booktitle08": "Emerald Tablet - volume VIII", + "bookdesc08": "Woe unto all ye fools! \nHow ignorant are ye of this Art, for which ye would die if ye knew it! \nI swear to you that if kings were familiar with it, \nnone of us would ever attain this thing. \nO how this nature changeth body into spirit! \nO how admirable is Nature, how she presides over all, and overcomes all.\n", + "booktitle09": "Emerald Tablet - volume IX", + "bookdesc09": "In this way, then, Nature generates by means of \nthis sulphur the different kinds of metals in the \nveins of the earth, according to the diversity of \ndegrees and alterations.\n", + "booktitle10": "Emerald Tablet - volume X", + "bookdesc10": "Take, he tells us, the stone of gold, combine with humour which is \npermanent water, set in its vessel, over a gentle fire until liquefaction \ntakes place. Then leave it until the water dries, and the sand and \nwater are combined, one with another; then let the fire be more intense\nthan before, until it again becomes dry, and is made earth. When this is done, \nunderstand that here is the beginning of the arcanum; but do this many times,\nuntil two-thirds of the water perish, and colours manifest unto you.", + "booktitle_corpse": "Tabula Smaragdina", + "bookdesc_corpse": "If all the mountains were of silver and gold, what would \nthey profit a man who lives in constant fear of death? \nHence there cannot be in the whole world anything better than our Medicine,\nwhich has power to heal all the diseases of the flesh.", + "booktitle_tree": "Secretorum Hermetis", + "bookdesc_tree": "The sacrifice of oneself to the pursuit of \nknowledge is the highest tribute to the gods.", + "menu_paused": "PAUSED", + "menu_continue": "Continue", + "menu_options": "Options", + "menu_stats": "Stats", + "menu_progress": "Progress", + "menu_releasenotes": "Release Notes", + "menu_credits": "Credits", + "menu_newgame": "New Game", + "menu_dailyrun": "Daily Run", + "menu_saveandquit": "Save & Quit", + "menu_return": "Return", + "menu_applyandreturn": "Apply & Return", + "menu_cancel": "Cancel", + "menu_yes": "Yes", + "menu_no": "No", + "menu_ok": "Ok", + "menu_high": "High", + "menu_medium": "Medium", + "menu_low": "Low", + "option_on": "On", + "option_off": "Off", + "option_adaptive": "Adaptive", + "menu_newgame_areyousure": "Are you sure you want to start a new game? All progress from current run will be lost.", + "menuoptions_windowmode": "Window mode: $0", + "windowmode_windowed": "Windowed", + "windowmode_fullscreen": "Fullscreen (windowed)", + "windowmode_fullscreen_real": "Fullscreen (real)", + "menuoptions_resolution": "Resolution: $0", + "menuoptions_resolution_illegible": " - WARNING: Might be illegible!", + "menuoptions_matchresolution": "Use current display's resolution", + "menuoptions_applydisplay": "Apply display settings", + "menuoptions_renderingquality": "Rendering quality", + "menuoptions_lowqualityrendering": "Low quality rendering: $0", + "menuoptions_vsync": "Vsync: $0", + "menuoptions_display_areyousure": "Do you want to keep the new display settings? Old settings will be restored in $0 seconds.", + "menuoptions_resetsave": "Reset all progress", + "menuoptions_resetsave_areyousure": "Are you sure you want to reset all progress? This cannot be undone!", + "menugameover_newgame": "New Game", + "menugameover_savereplay": "Save death replay", + "menugameover_quit": "Quit", + "menugameover_gamecompleted": "COMPLETED THE GAME!", + "menugameover_nextbutton": "You are dead - click here for stats", + "menugameover_records": "RECORDS", + "menuoptions_pixelart_aa": "Pixel art anti-aliasing: $0", + "menuoptions_lowres": "Low resolution rendering: $0", + "menuoptions_lowres_tooltip_exp": "EXPERIMENTAL. Might cause minor rendering glitches.", + "menuoptions_lowres_tooltip": "Improves rendering performance, but might cause minor rendering glitches.", + "menuoptions_brightness": "Brightness", + "menuoptions_contrast": "Contrast", + "menuoptions_gamma": "Gamma", + "menuoptions_reset_keyboard": "Right click to reset to default.", + "menuoptions_reset_gamepad": "Press B to reset to default.", + "menuoptions_musicvolume": "Music volume", + "menuoptions_soundsvolume": "Sound effect volume", + "menuoptions_configurecontrols": "Configure controls", + "menuoptions_configurecontrols_reset_all": "Reset all to default", + "menuoptions_configurecontrols_rebind_keyboard": "Press the key or button for $0", + "menuoptions_configurecontrols_rebind_gamepad": "Press the button for $0", + "menuoptions_controls": "Gamepad: $0", + "menuoptions_mousesensitivity": "Mouse sensitivity", + "menuoptions_controls_keyboard": "Mouse + Keyboard", + "menuoptions_controls_autodetectgamepad": "Auto-detect", + "menuoptions_gamepad_rumble": "Gamepad rumble intensity", + "menuoptions_ui_inventory_icons_always_clickable": "Click on icon switches item: $0", + "menuoptions_application_rendered_cursor": "Game renders the cursor: $0", + "menuoptions_screenshake_intensity": "Screen shake intensity", + "menuoptions_damagenumbers": "Damage numbers: $0", + "menuoptions_replayrecorder": "Replay recorder: $0", + "menuoptions_checkforupdates": "Check for updates: $0", + "menuoptions_language": "Language: English", + "menuupdatenotification_title": "NEW UPDATE AVAILABLE", + "menuupdatenotification_description_generic": "A new build of Noita is now available!\nClick here for release notes", + "menureleasenotes_notavailable": "No release notes available", + "menureleasenotes_eawarning": "Welcome to Noita!\nNoita is an early access game.\nIt contains bugs and may even sometimes crash!\nWe're working hard to fix things and add new features.", + "controls_up": "up", + "controls_down": "down", + "controls_left": "left", + "controls_right": "right", + "controls_sprayflask": "spray from potion", + "controls_throw": "throw", + "controls_kick": "kick", + "controls_inventory": "open/close inventory", + "controls_itemnext": "next item", + "controls_itemprev": "previous item", + "controls_itemslot1": "select item in slot 1", + "controls_itemslot2": "select item in slot 2", + "controls_itemslot3": "select item in slot 3", + "controls_itemslot4": "select item in slot 4", + "controls_itemslot5": "select item in slot 5", + "controls_itemslot6": "select item in slot 6", + "controls_itemslot7": "select item in slot 7", + "controls_itemslot8": "select item in slot 8", + "controls_itemslot9": "select item in slot 9", + "controls_itemslot10": "select item in slot 10", + "controls_escape": "pause/close", + "hud_air_unit": "o2", + "hud_air": "Air: $0 / $1", + "hud_health": "Health: $0 / $1", + "hud_jetpack": "Levitation energy: $0 / $1", + "hud_wand_mana": "Wand mana: $0 / $1", + "hud_wand_reload": "Wand recharge: $0 s", + "hud_gold": "Gold: $0", + "hud_orbs": "Orbs collected: $0", + "hud_title_wands": "WANDS", + "hud_title_throwables": "ITEMS", + "hud_title_actionstorage": "SPELLS", + "menu_newwand_title": "NEW WAND", + "menu_newwand_pressagain_pick": "Press $0 again to pick the wand", + "menu_newwand_pressagain_cancel": "Press $0 to cancel", + "menu_newwand_whichwand_gamepad": "WHICH WAND DO YOU WANT TO DROP?", + "menu_newwand_whichwand_keyboard": "WHICH WAND DO YOU WANT TO DROP? (Click it!)", + "menu_newwand_emptyslot": "$0 - empty slot", + "menu_newbook_pressagain_pick": "Press $0 again to pick the book", + "menu_newbook_pressagain_close": "Press $0 to close", + "item_empty": "Empty", + "item_wand": "Wand", + "item_potion": "Potion", + "item_cocktail": "Cocktail", + "item_orb": "Orb", + "item_description_potion": "Equip and throw", + "item_description_egg": "Equip and throw", + "item_potion_with_material": "$0 potion", + "item_potion_fullness": " ($0% full)", + "item_potion_empty": "Empty", + "item_egg": "Egg", + "item_chest_treasure": "Treasure chest", + "item_goldnugget": "Gold nugget", + "item_heart": "Extra max HP", + "item_heart_better": "Large extra max HP", + "item_heart_fullhp": "Full health regeneration", + "item_unidentified": "Unidentified item", + "itempickup_notenoughgold": "Not enough gold to purchase '$0'", + "itempickup_purchase": "Press $0 to purchase '$1'", + "itempickup_pick": "Press $0 to pick '$1'", + "itempickup_read": "Press $0 to read '$1'", + "itempickup_purchase_swap": "Press $0 to purchase '$1' and swap an item with it", + "itempickup_pick_swap": "Press $0 to swap an item with '$1'", + "itempickup_cannotpick": "Cannot pick '$0'. Please get rid of an item to make space for it", + "itempickup_cannotpick_closeinventory": "Close the inventory first to pick '$0'", + "hint_editwands": "Press $0 to tinker with wands", + "hint_endingmcguffin_use": "Press $0 to complete the Work", + "log_pickedup_perk": "$0 ", + "log_pickedup": "Picked up $0", + "log_equipped": "Equipped $0", + "log_entered": "Entered $0", + "log_damage": "Damage: $0", + "log_death": "Death: $0", + "log_teleported": "Teleported!", + "log_teleported_something": "Something entered a teleport nearby", + "log_gamefx_savinggrace": "Saving Grace saved you!", + "log_gamefx_respawn": "You get one more chance!", + "logdesc_gamefx_respawn": "Extra life saved you", + "log_recharging": "RECHARGING..", + "log_blindness": "Temporarily blinded!", + "log_polymorph": "Polymorphed!", + "log_block_attack": "BLOCK", + "log_coop_resurrected": "RESURRECTED", + "log_coop_resurrected_player": "Resurrected player $0!", + "log_coop_partner_is_dead": "Partner is dead!", + "log_coop_started": "CO-OP!", + "log_chest": "Opened a treasure chest!", + "logdesc_chest_gold": "You got $0 gold!", + "log_heart": "Picked up Extra Max Health", + "logdesc_heart": "Increased maximum health to $0", + "logdesc_heart_blocked": "Increased maximum health to $0 ..but some sort of curse blocked the increase of maximum health!", + "log_heart_better": "Picked up Extra Max Health", + "logdesc_heart_better": "Increased maximum health to $0", + "log_heart_fullhp": "Picked up Full Health Regeneration", + "log_discovered": "You have discovered $0", + "inventory_sort": "Sort", + "inventory_shuffle": "Shuffle", + "inventory_shuffle_tooltip": "Wands that shuffle cast their spells in random order.", + "inventory_actionspercast": "Spells/Cast", + "inventory_actionspercast_tooltip": "The number of spells this wand casts when used.", + "inventory_castdelay": "Cast delay", + "inventory_castdelay_tooltip": "The time between casts.", + "inventory_rechargetime": "Rechrg. Time", + "inventory_rechargetime_tooltip": "The time it takes for this wand to recharge when all spells inside it have been cast.", + "inventory_manamax": "Mana max", + "inventory_manamax_tooltip": "Maximum amount of mana this wand can store.", + "inventory_manachargespeed": "Mana chg. Spd", + "inventory_manachargespeed_tooltip": "This wand's mana regeneration speed.", + "inventory_capacity": "Capacity", + "inventory_capacity_tooltip": "The number of spells that can be inserted into this wand.", + "inventory_spread": "Spread", + "inventory_spread_tooltip": "The directional deviation of projectiles casted by this wand.", + "inventory_chargecapacity": "Charge capacity", + "inventory_alwayscasts": "Always casts", + "inventory_alwayscasts_description": "This wand casts some spells every time it's used.", + "inventory_usesremaining": "Uses remaining", + "inventory_actiontype": "Type", + "inventory_manadrain": "Mana drain", + "inventory_damage": "Damage", + "inventory_dmg_explosion": "Dmg. Expl", + "inventory_explosion_radius": "Expl. Radius", + "inventory_dmg_slice": "Dmg. Slice", + "inventory_dmg_drill": "Dmg. Drill", + "inventory_dmg_fire": "Dmg. Fire", + "inventory_dmg_ice": "Dmg. Ice", + "inventory_speed": "Speed", + "inventory_mod_castdelay": "Cast delay", + "inventory_mod_rechargetime": "Recharge time", + "inventory_mod_bounces": "Bounces", + "inventory_mod_speed": "Proj. Speed", + "inventory_mod_explosion_radius": "Expl. Radius", + "inventory_mod_spread": "Spread", + "inventory_mod_knockback": "Knockback", + "inventory_mod_damage": "Damage", + "inventory_mod_damage_melee": "Dmg. Melee", + "inventory_mod_damage_electric": "Dmg. Electric", + "inventory_mod_damage_fire": "Dmg. Fire", + "inventory_mod_damage_explosion": "Dmg. Expl", + "inventory_mod_critchance": "Crit. Chance", + "inventory_warning_noactions": "WARNING - This wand contains no spells", + "inventory_warning_noactions_description": "The wand doesn't do anything. Place some spells into the wand's slots.", + "inventory_warning_notenoughmana": "WARNING - This wand doesn't have enough mana for $0", + "inventory_warning_notenoughmana_description": "Wand has max $0 mana. Casting $1 requires $2 mana.", + "inventory_info_frozen": "INFO - This wand has been frozen", + "inventory_info_frozen_description": "A spell prevents the wand from being customized.", + "inventory_seconds": "$0 s", + "inventory_degrees": "$0 DEG", + "inventory_actiontype_projectile": "Projectile", + "inventory_actiontype_staticprojectile": "Static proj.", + "inventory_actiontype_modifier": "Proj. modifier", + "inventory_actiontype_drawmany": "Multicast", + "inventory_actiontype_material": "Material", + "inventory_actiontype_other": "Other", + "inventory_actiontype_utility": "Utility", + "inventory_actiontype_passive": "Passive", + "item_spell_refresh": "Spell refresher", + "itemtitle_spell_refresh": "Picked up Spell refresher", + "itemdesc_spell_refresh": "All spells refreshed", + "itemtitle_wand_pickup": "Picked up a new magic wand", + "itemtitle_chest_open": "Opened a treasure chest!", + "itemtitle_chest_broken_open": "A chest was broken open", + "log_endcrystal": "Touched the cursed crystal!", + "logdesc_endcrystal": "Something stirs above you", + "logdesc_temple_spawn_guardian": "You have angered the Gods", + "logdesc_gods_are_angry": "You have angered the Gods", + "logdesc_gods_are_very_angry": "The Gods are very angry with you", + "damage_projectile": "projectile", + "damage_electricity": "electricity", + "damage_explosion": "explosion", + "damage_fire": "fire", + "damage_melee": "melee", + "damage_drill": "drill", + "damage_slice": "slice", + "damage_ice": "ice", + "damage_healing": "healing", + "damage_physicshit": "heavy impact", + "damage_radioactive": "toxic", + "damage_poison": "poison", + "damage_water": "wetness", + "damage_fall": "fall", + "damage_drowning": "drowning", + "damage_frommaterial": "damage from material: $0", + "damage_kick": "kick", + "damage_holy_mountains_curse": "Holy Mountain's curse", + "stat_depth": "Depth:", + "stat_time": "Time:", + "stat_places_visited": "Places visited:", + "stat_enemies_slain": "Enemies slain:", + "stat_max_hp": "Max HP:", + "stat_gold": "Gold:", + "stat_items_found": "Items found:", + "stat_orbs": "Orbs collected:", + "stat_total_deaths": "Total deaths:", + "stat_total_play_time": "Total play time:", + "stat_total_wins": "Total wins:", + "stat_cause_of_death": "Cause of death: '$0'", + "stat_best": "(Best: $0)", + "credits_music": "With music by From Grotto and Niilo Takalainen", + "credits_sounddesign": "Sound design by Niilo Takalainen", + "credits_fmod": "Noita uses FMOD Studio by Firelight Technologies Pty Ltd", + "credits_copyright": "Noita (c) Nolla Games Oy 2019", + "progress_perks": "Perks", + "progress_actions": "Spells", + "progress_secrets": "Secrets", + "progress_enemies": "Enemies", + "progress_unlocked": "Unlocks", + "progress_completed": "$0 $1 secret(s) found", + "progress_kills": "Kills: $0", + "progress_unknown": "???", + "progress_ending0": "Discovered the secret below - ", + "progress_ending1": "Discovered the secret above - ", + "progress_ending01": "Discovered the secrets above and below - ", + "status_wet": "Wet", + "statusdesc_wet": "Wet clothes protect you from fire.", + "status_oiled": "Oiled ", + "statusdesc_oiled": "Oil makes you slippery and more flammable.", + "status_bloody": "Bloody ", + "statusdesc_bloody": "Bloody clothes protect you from fire.\nYou sense an increased chance of attaining critical hits.", + "status_slimy": "Slimy", + "statusdesc_slimy": "Slimy clothes protect you from fire.\nThe mucus makes moving around difficult.", + "status_radioactive": "Toxic", + "statusdesc_radioactive": "Toxic sludge in your clothes makes your health degrade slowly.\nWet clothes protect you from fire.\nCan be washed off by liquids.", + "status_alcoholic": "Alcoholic", + "statusdesc_alcoholic": "Heavy scent of booze oozes of your clothes.\nAiming is disturbed.\nAnd alcohol is flammable!", + "status_poisoned": "Poisoned", + "statusdesc_poisoned": "A poisoning slowly degrades your health. ", + "status_teleportation": "Teleportitis", + "statusdesc_teleportation": "You teleport uncontrollably every now and then.", + "status_hp_regeneration": "Regeneration ", + "statusdesc_hp_regeneration": "A health regeneration spell affects you.", + "status_polymorph": "Polymorph", + "statusdesc_polymorph": "You're a sheep.", + "status_polymorph_random": "Chaos polymorph", + "statusdesc_polymorph_random": "A polymorph curse affects you.", + "status_berserk": "Berserk", + "statusdesc_berserk": "A berserk curse affects you.", + "status_charm": "Charmed", + "statusdesc_charm": "A charm affects you.", + "status_invisibility": "Invisible", + "statusdesc_invisibility": "The magical liquid on your clothes makes you invisible.\nThe spell is disturbed by stained or wet clothes.", + "status_on_fire": "On fire ", + "statusdesc_on_fire": "You're on fire. Find some water!", + "boss_limbs_limb_attacker": "Spider leg", + "biome_boss_arena": "The Laboratory", + "biome_boss_victoryroom": "The Work", + "biome_coalmine": "mines", + "biome_coalmine_alt": "collapsed mines", + "biome_crypt": "Temple of the Art", + "biome_desert": "Desert", + "biome_dragoncave": "Dragoncave", + "biome_ending_placeholder": "Master Symbol Crypt", + "biome_excavationsite": "Coal Pits", + "biome_fungicave": "Fungal Caverns", + "biome_gold": "Gold", + "biome_lake": "Lake", + "biome_lava": "Volcanic Lake", + "biome_lavacave": "Volcanic Cave", + "biome_magic_gate": "Sanctuary", + "biome_null": "unknown", + "biome_pyramid": "Pyramid", + "biome_rainforest": "Underground Jungle", + "biome_sandcave": "Sandcave", + "biome_secret_entrance": "Mysterious Gate", + "biome_shop_room": "Secret Shop", + "biome_snowcastle": "Hiisi Base", + "biome_snowcave": "Snowy Depths", + "biome_town_under": "twisty passages", + "biome_vault": "The Vault", + "biome_wandcave": "magical temple", + "biome_water": "water", + "biome_winter": "snowy wasteland", + "biome_holymountain": "Holy Mountain", + "biome_east": "East $0", + "biome_west": "West $0", + "animal_player": "Minä", + "animal_boss_centipede_minion": "Kolmisilmän apuri", + "animal_boss_limbs": "Kolmisilmän koipi", + "animal_boss_dragon_endcrystal": "Mato", + "animal_lukki": "Hämähäkki", + "animal_lukki_creepy": "Kasvoton Hämähäkki", + "animal_lukki_creepy_long": "Kasvoton Lukki", + "animal_lukki_longleg": "Lukki", + "animal_acidshooter": "Happonuljaska", + "animal_alchemist": "Alkemisti", + "animal_ant": "Murkku", + "animal_assassin": "Salamurhaajarobotti", + "animal_barfer": "Turvonnu velho", + "animal_bat": "Lepakko", + "animal_bigbat": "Suurlepakko", + "animal_bigfirebug": "Suurtulikärpänen", + "animal_bigzombie": "Mätänevä ruumis", + "animal_bigzombiehead": "Mätänevä pää", + "animal_bigzombietorso": "Mätänevä kroppa", + "animal_blob": "Kiukkumöykky", + "animal_bloodcrystal_physics": "Verikristalli", + "animal_bloom": "Puska", + "animal_boss_dragon": "Suomuhauki", + "animal_chest_mimic": "Matkija", + "animal_crystal_physics": "Kirottu kristalli", + "animal_darkghost": "Haamu", + "animal_deer": "Nelikoipi", + "animal_drone": "Lennokki", + "animal_drone_physics": "Lennokki", + "animal_duck": "Ankka", + "animal_eel": "Nahkiainen", + "animal_elk": "Poro", + "animal_firebug": "Pikkutulikärpänen", + "animal_firemage": "Eldari", + "animal_firemage_weak": "Stendari", + "animal_fireskull": "Liekkiö", + "animal_fish": "Eväkäs", + "animal_fish_large": "Suureväkäs", + "animal_flamer": "Liekkari", + "animal_fly": "Amppari", + "animal_frog": "Konna", + "animal_fungus": "Laahustussieni", + "animal_gazer": "Helvetinkatse", + "animal_ghost": "Houre", + "animal_ghoul": "Sylkyri", + "animal_giant": "Hiidenkivi", + "animal_giantshooter": "Äitinuljaska", + "animal_healerdrone_physics": "Korjauslennokki", + "animal_icer": "Jäähdytyslaite", + "animal_iceskull": "Jäätiö", + "animal_lasershooter": "Mulkkio", + "animal_longleg": "Hämis", + "animal_slimeshooter": "Limanuljaska", + "animal_slimeshooter_boss_limbs": "Äitilimanuljaska", + "animal_maggot": "Toukka", + "animal_mimic_physics": "Matkija", + "animal_miner": "Tappurahiisi", + "animal_miner_weak": "Tappurahiisiläinen", + "animal_miner_fire": "Tulihiisi", + "animal_miner_santa": "Jouluhiisi", + "animal_mine_scavenger": "Miina", + "animal_miniblob": "Möykky", + "animal_missilecrab": "Heinäsirkka", + "animal_pebble": "Lohkare", + "animal_pebble_player": "Toveri lohkare", + "animal_phantom_a": "Spiraalikalma", + "animal_phantom_b": "Kiukkukalma", + "animal_playerghost": "Kummitus", + "animal_rat": "Rotta", + "animal_roboguard": "Robottikyttä", + "animal_scavenger_clusterbomb": "Isohiisi", + "animal_scavenger_grenade": "Kranuhiisi", + "animal_scavenger_heal": "Parantajahiisi", + "animal_scavenger_leader": "Toimari", + "animal_scavenger_mine": "Miinankylväjä", + "animal_scavenger_poison": "Myrkkyhiisi", + "animal_scavenger_smg": "Rynkkyhiisi", + "animal_scorpion": "Skorpioni", + "animal_sheep": "Lammas", + "animal_sheep_bat": "Lentolammas", + "animal_sheep_fly": "Suhiseva lammas", + "animal_shooterflower": "Plasmakukka", + "animal_shotgunner_weak": "Heikko haulikkohiisi", + "animal_shotgunner": "Haulikkohiisi", + "animal_skullfly": "Kallokärpänen", + "animal_skullrat": "Kallorotta", + "animal_sniper": "Snipuhiisi", + "animal_spitmonster": "Helvetin sylkijä", + "animal_statue_physics": "Hohtonaamio", + "animal_tank": "KK-Tankki", + "animal_tank_rocket": "IT-Tankki", + "animal_tentacler": "Turso", + "animal_tentacler_small": "Pikkuturso", + "animal_thundermage": "Ukko", + "animal_turret": "Torjuntalaite", + "animal_wand_ghost": "Taikasauva", + "animal_wizard_dark": "Sokaisunmestari", + "animal_wizard_poly": "Muodonmuutosmestari", + "animal_wizard_tele": "Siirtäjämestari", + "animal_wolf": "Susi", + "animal_worm": "Mato", + "animal_worm_big": "Jättimato", + "animal_worm_end": "Helvetinmato", + "animal_worm_skull": "Kalmamato", + "animal_worm_tiny": "Pikkumato", + "animal_zombie_weak": "Heikkohurtta", + "animal_zombie": "Hurtta", + "action_burst_2": "Double spell", + "actiondesc_burst_2": "Simultaneously casts 2 spells", + "action_burst_3": "Triple spell", + "actiondesc_burst_3": "Simultaneously casts 3 spells", + "action_burst_4": "Quadruple spell", + "actiondesc_burst_4": "Simultaneously casts 4 spells", + "action_scatter_2": "Double scatter spell", + "actiondesc_scatter_2": "Simultaneously casts 2 spells with low accuracy", + "action_scatter_3": "Triple scatter spell", + "actiondesc_scatter_3": "Simultaneously casts 3 spells with low accuracy", + "action_scatter_4": "Quadruple scatter spell", + "actiondesc_scatter_4": "Simultaneously casts 4 spells with low accuracy", + "action_i_shape": "Formation - behind your back", + "actiondesc_i_shape": "Casts two spells: one ahead of and one behind the caster", + "action_y_shape": "Formation - bifurcated", + "actiondesc_y_shape": "Casts 2 spells in a bifurcated pattern", + "action_t_shape": "Formation - above and below", + "actiondesc_t_shape": "Casts 3 spells - ahead, above and below the caster", + "action_w_shape": "Formation - trifurcated", + "actiondesc_w_shape": "Casts 3 spells in a trifurcated pattern", + "action_circle_shape": "Formation - hexagon", + "actiondesc_circle_shape": "Casts 6 spells in a hexagonal pattern", + "action_pentagram_shape": "Formation - pentagon", + "actiondesc_pentagram_shape": "Casts 5 spells in a pentagonal pattern", + "action_spread_reduce": "Reduce spread", + "actiondesc_spread_reduce": "Reduces the spread of a spell", + "action_recharge": "Reduce recharge time", + "actiondesc_recharge": "Reduces the time between spellcasts", + "action_gravity": "Gravity", + "actiondesc_gravity": "Increases the effect gravity has on a projectile", + "action_gravity_anti": "Anti-gravity", + "actiondesc_gravity_anti": "Applies a lifting force to a projectile", + "action_penetrate_walls": "Penetrate walls", + "actiondesc_penetrate_walls": "Gives a projectile more penetration power", + "action_sinewave": "Slithering path", + "actiondesc_sinewave": "Makes a projectile move rapidly in a slithering manner, like a snake", + "action_bounce": "Bounce", + "actiondesc_bounce": "Makes a projectile bounce on impact", + "action_homing": "Homing", + "action_homing_shooter": "Boomerang", + "actiondesc_homing_shooter": "Gives a projectile a path that curves towards you", + "action_damage": "Damage Plus", + "actiondesc_damage": "Increases the damage done by a projectile", + "action_critical_hit": "Critical Plus", + "actiondesc_critical_hit": "Gives a projectile +15% chance of a critical hit", + "action_damage_friendly": "Cunning power", + "actiondesc_damage_friendly": "Gives a projectile extra damage, but makes it capable of damaging you", + "action_damage_x2": "Intense power", + "action_damage_x5": "Sundering power", + "action_heavy_shot": "Heavy Shot", + "actiondesc_heavy_shot": "Greatly increases the damage done by a projectile, at the cost of its speed", + "action_knockback": "Knockback", + "actiondesc_knockback": "Gives a projectile the power to knock back the foes it hits", + "action_recoil": "Recoil", + "actiondesc_recoil": "Increases the recoil when casting spells", + "action_recoil_damper": "Recoil Damper", + "actiondesc_recoil_damper": "Reduces the recoil when casting spells", + "action_speed": "Speed Up", + "actiondesc_speed": "Increases the speed at which a projectile flies through the air", + "action_gore": "Draw blood", + "actiondesc_gore": "Makes foes spill more blood when hit with a projectile", + "actiondesc_explosive_projectile": "Makes a projectile more destructive to the environment", + "action_water_to_poison": "Water to poison", + "actiondesc_water_to_poison": "Makes any water within a projectile's range turns into poison", + "action_blood_to_acid": "Blood to acid", + "actiondesc_blood_to_acid": "Makes any blood within a projectile's range turns into acid", + "action_lava_to_blood": "Lava to blood", + "actiondesc_lava_to_blood": "Makes any lava within a projectile's range turn into blood", + "action_necromancy": "Necromancy", + "actiondesc_necromancy": "Makes corpses of creatures killed by a projectile rise to your aid", + "actiondesc_explosion": "A powerful explosion", + "action_fire_blast": "Explosion of brimstone", + "actiondesc_fire_blast": "A fiery explosion", + "action_poison_blast": "Explosion of poison", + "actiondesc_poison_blast": "An alchemical explosion", + "action_alcohol_blast": "Explosion of spirits", + "actiondesc_alcohol_blast": "An inebriating explosion", + "action_thunder_blast": "Explosion of thunder", + "actiondesc_thunder_blast": "An electric explosion", + "action_charm_field": "Circle of persuasion", + "actiondesc_charm_field": "A field of charming magic", + "action_berserk_field": "Circle of fervour", + "actiondesc_berserk_field": "A field of berserk magic", + "action_polymorph_field": "Circle of transmogrification", + "actiondesc_polymorph_field": "A field of sheep-like magic", + "action_chaos_polymorph_field": "Circle of unstable metamorphosis", + "actiondesc_chaos_polymorph_field": "A field of transformative magic", + "action_electrocution_field": "Circle of thunder", + "actiondesc_electrocution_field": "A field of electrifying magic", + "action_freeze_field": "Circle of stillness", + "actiondesc_freeze_field": "A field of freezing magic", + "action_regeneration_field": "Circle of vigour", + "actiondesc_regeneration_field": "A field of regenerative magic", + "action_teleportation_field": "Circle of displacement", + "actiondesc_teleportation_field": "A field of teleportative magic", + "action_levitation_field": "Circle of buoyancy", + "actiondesc_levitation_field": "A field of levitative magic", + "action_telepathy_field": "Circle of seeing", + "actiondesc_telepathy_field": "A field of clairvoyant magic", + "action_shield_field": "Circle of shielding", + "actiondesc_shield_field": "A field of protective magic", + "action_sea_lava": "Sea of lava", + "actiondesc_sea_lava": "Summons a large body of lava below the caster", + "action_sea_oil": "Sea of oil", + "actiondesc_sea_oil": "Summons a large body of oil below the caster", + "action_sea_water": "Sea of water", + "actiondesc_sea_water": "Summons a large body of water below the caster", + "action_sea_acid": "Sea of acid", + "actiondesc_sea_acid": "Summons a large body of acid below the caster", + "action_sea_acid_gas": "Sea of flammable gas", + "actiondesc_sea_acid_gas": "Summons a large body of flammable gas below the caster", + "action_sea_alcohol": "Sea of alcohol", + "actiondesc_sea_alcohol": "Summons a large body of tasty alcohol below the caster", + "action_cloud_water": "Rain cloud", + "actiondesc_cloud_water": "Creates a watery weather phenomenon", + "action_cloud_blood": "Blood cloud", + "actiondesc_cloud_blood": "Creates a rain of blood", + "action_cloud_acid": "Acid cloud", + "actiondesc_cloud_acid": "Creates an rain of acid", + "action_cloud_thunder": "Thundercloud", + "actiondesc_cloud_thunder": "Creates a stormy cloud", + "action_electric_charge": "Electric charge", + "actiondesc_electric_charge": "Gives a projectile an electric charge, that it will release on impact", + "action_matter_eater": "Matter eater", + "actiondesc_matter_eater": "Makes a projectile eat the environment as it flies", + "action_freeze": "Freeze charge", + "actiondesc_freeze": "Gives a projectile a frozen charge, that it will release on impact", + "action_hitfx_burning_critical_hit": "Critical on burning", + "actiondesc_hitfx_burning_critical_hit": "Makes a projectile always do a critical hit on burning enemies", + "action_hitfx_critical_water": "Critical on wet (water) enemies", + "actiondesc_hitfx_critical_water": "Makes a projectile always do a critical hit on wet (water) enemies", + "action_hitfx_critical_oil": "Critical on oiled enemies", + "actiondesc_hitfx_critical_oil": "Makes a projectile always do a critical hit on oiled enemies", + "action_hitfx_critical_blood": "Critical on bloody enemies", + "actiondesc_hitfx_critical_blood": "Makes a projectile always do a critical hit on bloody enemies", + "action_hitfx_poltergeist": "Poltergeist", + "actiondesc_hitfx_poltergeist": "Gives a projectile the power to animate physical objects", + "action_fireball_ray": "Fireball thrower", + "actiondesc_fireball_ray": "Makes a projectile cast fireballs in random directions", + "action_hitfx_oiled_freeze": "Oil freeze", + "actiondesc_hitfx_oiled_freeze": "Makes a projectile freeze enemies drenched in oil", + "action_alcohol_shot": "Alcohol shot", + "actiondesc_alcohol_shot": "Makes a projectile get the enemies it hits drunk", + "action_freeze_if_wet_shooter": "Freeze if wet", + "actiondesc_freeze_if_wet_shooter": "If caster is wet, makes a projectile freeze the enemies it hits", + "action_blindness": "Blindness", + "actiondesc_blindness": "I can't see!", + "action_teleportation": "Teleportation", + "actiondesc_teleportation": "Spells cast alongside this will teleport enemies", + "action_telepathy": "Telepathy", + "actiondesc_telepathy": "Sense other beings through walls", + "action_arc_electric": "Electric Arc", + "action_arc_fire": "Fire Arc", + "action_arc_gunpowder": "Gunpowder Arc", + "action_arc_poison": "Poison Arc", + "action_polymorph": "Polymorph charge", + "actiondesc_polymorph": "Baaaaa", + "action_berserk": "Berserk", + "actiondesc_berserk": "Target enters a state of wild fury, attacking anyone nearby and getting a 2x damage boost", + "action_charm": "Charm", + "actiondesc_charm": "Target becomes friendly to the caster", + "action_x_ray": "All-seeing eye", + "actiondesc_x_ray": "See into the unexplored. But not everywhere...", + "action_x_ray_modifier": "X-ray modifier", + "actiondesc_x_ray_modifier": "Projectile lights the way in the darkness", + "action_acid": "Acid", + "actiondesc_acid": "Projectiles turn into acid on collision", + "action_unstable_gunpowder": "Firecrackers", + "action_acid_trail": "Acid trail", + "actiondesc_acid_trail": "Gives a projectile a trail of acid", + "action_poison_trail": "Poison trail", + "actiondesc_poison_trail": "Gives a projectile a trail of poison", + "action_oil_trail": "Oil trail", + "actiondesc_oil_trail": "Gives a projectile a trail of oil", + "action_water_trail": "Water trail", + "actiondesc_water_trail": "Gives a projectile a trail of water", + "action_blood_trail": "Blood trail", + "actiondesc_blood_trail": "Gives a projectile a trail of blood", + "action_gunpowder_trail": "Gunpowder trail", + "actiondesc_gunpowder_trail": "Gives a projectile a trail of gunpowder", + "action_fire_trail": "Fire trail", + "actiondesc_fire_trail": "Gives a projectile a trail of fiery particles", + "action_burn_trail": "Burning trail", + "actiondesc_burn_trail": "Gives a projectile a tail of fire", + "action_torch": "Torch", + "actiondesc_torch": "Lights your wand right up!", + "action_torch_electric": "Electric Torch", + "actiondesc_torch_electric": "Gives your wand a bright but very dangerous light!", + "action_light": "Light", + "actiondesc_light": "Makes a projectile illuminate its surroundings", + "action_energy_shield": "Energy shield", + "actiondesc_energy_shield": "Deflects incoming projectiles", + "action_energy_shield_sector": "Energy shield sector", + "actiondesc_energy_shield_sector": "Deflects incoming projectiles", + "action_duplicate_on_death": "Duplicate", + "actiondesc_duplicate_on_death": "Projectile clones itself x2 on collision", + "action_bee": "Bee", + "actiondesc_bee": "Bee", + "action_duck": "Duck", + "actiondesc_duck": "Duck!", + "action_sheep": "Sheep", + "actiondesc_sheep": "Sheep!", + "action_misfire": "Misfire", + "actiondesc_misfire": "Discard 1 spell", + "action_misfire_critical": "Misfire (critical)", + "actiondesc_misfire_critical": "Permanently destroy 1 spell", + "action_generate_random_deck_5": "Generate random deck (5)", + "actiondesc_generate_random_deck_5": "Current deck is replaced with a random deck of 5 cards", + "action_testbullet": "DEBUG BULLET", + "actiondesc_testbullet": "A weak but enchanting sparkling projectile", + "action_light_bullet": "Spark bolt", + "actiondesc_light_bullet": "A weak but enchanting sparkling projectile", + "action_air_bullet": "Burst of air", + "actiondesc_air_bullet": "A brittle burst of air capable of greatly pushing objects", + "action_light_bullet_trigger": "Spark bolt with trigger", + "actiondesc_light_bullet_trigger": "A spark bolt that casts another spell upon collision", + "action_light_bullet_trigger_2": "Spark bolt with double trigger", + "actiondesc_light_bullet_trigger_2": "A spark bolt that casts two new spells upon collision", + "action_light_bullet_timer": "Spark bolt with timer", + "actiondesc_light_bullet_timer": "A spark bolt that casts another spell after a timer runs out", + "action_bullet": "Magic arrow", + "actiondesc_bullet": "A handy magical arrow", + "action_bullet_trigger": "Magic arrow with trigger", + "actiondesc_bullet_trigger": "A magical arrow that casts another spell upon collision", + "action_bullet_timer": "Magic arrow with timer", + "actiondesc_bullet_timer": "A magical arrow that casts another spell after a timer runs out", + "action_heavy_bullet": "Magic bolt", + "actiondesc_heavy_bullet": "A powerful magical bolt", + "action_heavy_bullet_trigger": "Magic bolt with trigger", + "actiondesc_heavy_bullet_trigger": "A powerful magical bolt that casts another spell upon collision", + "action_heavy_bullet_timer": "Magic bolt with timer", + "actiondesc_heavy_bullet_timer": "A powerful magical bolt that casts another spell after a timer runs out", + "action_slow_bullet": "Energy orb", + "actiondesc_slow_bullet": "A slow but powerful orb of energy", + "action_slow_bullet_trigger": "Energy orb with a trigger", + "actiondesc_slow_bullet_trigger": "A slow but powerful orb of energy that casts another spell upon collision", + "action_slow_bullet_timer": "Energy orb with a timer", + "action_black_hole": "Black hole", + "actiondesc_black_hole": "A slow orb of void that eats through all obstacles", + "action_black_hole_big": "Giga black hole", + "actiondesc_black_hole_big": "A growing orb of negative energy that destroys everything in its reach", + "action_decoy": "Decoy", + "actiondesc_decoy": "Creates a decoy for distracting enemies", + "action_decoy_trigger": "Decoy with trigger", + "actiondesc_decoy_trigger": "Creates a decoy for distracting enemies that casts another spell after a timer runs out", + "action_spitter": "Spitter bolt", + "actiondesc_spitter": "A short-lived magical bolt", + "action_spitter_timer": "Spitter bolt with timer", + "actiondesc_spitter_timer": "A short-lived magical bolt that casts another spell after a timer runs out", + "action_bubbleshot": "Bubble spark", + "actiondesc_bubbleshot": "A bouncy, inaccurate spell", + "action_bubbleshot_trigger": "Bubble spark with trigger", + "actiondesc_bubbleshot_trigger": "A bouncy, inaccurate spell that casts another spell upon collision", + "action_disc_bullet": "Disc projectile", + "actiondesc_disc_bullet": "Summons a sharp disc projectile", + "action_bouncy_orb": "Energy sphere", + "actiondesc_bouncy_orb": "A fast, arcing projectile", + "action_bouncy_orb_timer": "Energy sphere with timer", + "action_rubber_ball": "Bouncing burst", + "actiondesc_rubber_ball": "A very bouncy projectile", + "action_arrow": "Arrow", + "actiondesc_arrow": "Summons an arrow", + "action_lance": "Glowing lance", + "actiondesc_lance": "A magical lance that cuts through soft materials", + "action_rocket": "Magic missile", + "actiondesc_rocket": "A fiery, explosive projectile", + "action_rocket_tier_2": "Large magic missile", + "actiondesc_rocket_tier_2": "A more powerful version of Magic missile", + "action_rocket_tier_3": "Giant magic missile", + "actiondesc_rocket_tier_3": "The most powerful version of Magic missile", + "action_grenade": "Firebolt", + "actiondesc_grenade": "A bouncy, explosive bolt", + "action_grenade_tier_2": "Large firebolt", + "actiondesc_grenade_tier_2": "A more powerful version of Firebolt", + "action_grenade_tier_3": "Giant firebolt", + "actiondesc_grenade_tier_3": "The most powerful version of Firebolt", + "action_grenade_trigger": "Firebolt with trigger", + "actiondesc_grenade_trigger": "A bouncy, explosive bolt that that casts another spell upon collision", + "action_grenade_anti": "Odd Firebolt", + "actiondesc_grenade_anti": "A somewhat peculiar bouncy, explosive bolt", + "action_grenade_large": "Dropper bolt", + "actiondesc_grenade_large": "A very heavy explosive bolt", + "action_mine": "Unstable crystal", + "actiondesc_mine": "A crystal that explodes when someone comes nearby", + "action_mine_death_trigger": "Unstable crystal with trigger", + "actiondesc_mine_death_trigger": "A crystal that explodes and casts another spell when someone comes nearby", + "action_pipe_bomb": "Dormant crystal", + "actiondesc_pipe_bomb": "A crystal that explodes when caught in an explosion", + "action_pipe_bomb_death_trigger": "Dormant crystal with trigger", + "actiondesc_pipe_bomb_death_trigger": "A crystal that explodes and casts another spell when caught in an explosion", + "action_exploding_deer": "Summon deercoy", + "actiondesc_exploding_deer": "Summons a seemingly-innocuous deer", + "action_pipe_bomb_detonator": "Dormant crystal detonation", + "actiondesc_pipe_bomb_detonator": "All nearby dormant crystals explode", + "action_laser": "Concentrated light", + "actiondesc_laser": "A pinpointed beam of light", + "action_lightning": "Lightning bolt", + "actiondesc_lightning": "The primordial force of nature", + "action_digger": "Digging bolt", + "actiondesc_digger": "A bolt that is ideal for mining operations", + "action_powerdigger": "Digging blast", + "actiondesc_powerdigger": "More powerful digging", + "action_chainsaw": "Chainsaw", + "action_tentacle": "Summon Tentacle", + "actiondesc_tentacle": "Calls a terrifying appendage from another dimension", + "action_tentacle_timer": "Summon Tentacle with timer", + "actiondesc_tentacle_timer": "Calls a terrifying appendage from another dimension! Comes with a timer", + "action_heal_bullet": "Healing bolt", + "action_spiral_shot": "Spiral shot", + "actiondesc_spiral_shot": "A mystical whirlwind of magic sparks", + "action_fireball": "Fireball", + "actiondesc_fireball": "A powerful exploding spell", + "action_meteor": "Meteor", + "actiondesc_meteor": "A destructive projectile from the skies!", + "action_flamethrower": "Flamethrower", + "actiondesc_flamethrower": "A stream of fire!!", + "action_icethrower": "Icethrower", + "actiondesc_icethrower": "A stream of ice!!", + "action_slimeball": "Slimeball", + "actiondesc_slimeball": "A dripping ball of poisonous slime", + "action_darkflame": "Path of dark flame", + "actiondesc_darkflame": "A trail of dark, deadly flames", + "action_missile": "Summon missile", + "actiondesc_missile": "A missile!!!", + "action_pebble": "Summon rock spirit", + "actiondesc_pebble": "Summons an autonomous rock ally", + "action_dynamite": "Dynamite", + "actiondesc_dynamite": "Summons a small explosive", + "action_bomb_legacy": "Bomb", + "actiondesc_bomb_legacy": "Summons a bomb that destroys ground very efficiently", + "action_bomb": "Bomb", + "actiondesc_bomb": "Summons a bomb that destroys ground very efficiently", + "action_bomb_holy": "Holy Bomb", + "actiondesc_bomb_holy": "Summons a bomb that... well...", + "action_knife": "Throwing Knife", + "actiondesc_knife": "Very deadly!", + "action_crumbling_earth": "Earthquake", + "actiondesc_crumbling_earth": "Calls the anger of the earth", + "action_circleshot_a": "Circle shot", + "actiondesc_circleshot_a": "Projectiles fly out in a circular pattern", + "action_circleshot_b": "Spiral shot", + "actiondesc_circleshot_b": "Projectiles fly out in a spiral pattern", + "action_acidshot": "Acid ball", + "actiondesc_acidshot": "A terrifying acidic projectile", + "action_thunderball": "Thunder charge", + "actiondesc_thunderball": "A projectile with immense stored electricity", + "action_bloomshot": "Slime arc", + "actiondesc_bloomshot": "Spells cast alongside this will have arcs of slime flowing between them", + "action_icecircle": "Ice circle", + "actiondesc_icecircle": "Shoots icy projectiles in a circle", + "action_firebomb": "Firebomb", + "actiondesc_firebomb": "Slow, fiery bolt", + "action_soilball": "Chunk of soil", + "actiondesc_soilball": "Don't soil yourself", + "action_pink_orb": "Homing orb", + "actiondesc_pink_orb": "A dangerous, homing orb", + "action_death_cross": "Death cross", + "actiondesc_death_cross": "A deadly energy cross that explodes after a short time", + "action_plasma_flare": "Plasma flare", + "actiondesc_plasma_flare": "A magical projectile that accelerates quickly", + "action_keyshot": "Key shot", + "actiondesc_keyshot": "A powerful projectile. Nothing out of ordinary", + "action_mana": "Mana", + "actiondesc_mana": "Extra mana", + "action_skull": "Skull", + "actiondesc_skull": "Scary skull!!!", + "action_material_debug": "shoots debug material", + "actiondesc_material_debug": "ONLY TO BE USED IN DEBUG MODE!", + "action_material_liquid": "shoots liquid", + "actiondesc_material_liquid": "Drop it in liquid and shoot it!", + "action_mist_radioactive": "Toxic mist", + "actiondesc_mist_radioactive": "A cloud of toxic mist", + "action_mist_alcohol": "mist of spirits", + "actiondesc_mist_alcohol": "A cloud of potent alcohol", + "action_mist_slime": "Slime mist", + "actiondesc_mist_slime": "A cloud of slimy mist", + "action_mist_blood": "Blood mist", + "actiondesc_mist_blood": "A cloud of blood mist", + "action_circle_fire": "Circle of fire", + "actiondesc_circle_fire": "An expanding circle of burning air", + "action_circle_acid": "Circle of acid", + "actiondesc_circle_acid": "An expanding circle of dripping acid", + "action_circle_oil": "Circle of oil", + "actiondesc_circle_oil": "An expanding circle of slick oil", + "action_circle_water": "Circle of water", + "actiondesc_circle_water": "An expanding circle of water", + "action_material_water": "Water", + "actiondesc_material_water": "Transmute drops of water from nothing", + "action_material_oil": "Oil", + "actiondesc_material_oil": "Transmute drops of oil from nothing", + "action_material_blood": "Blood", + "actiondesc_material_blood": "Blood blood blood", + "action_material_acid": "Acid", + "actiondesc_material_acid": "Transmute drops of acid from nothing", + "action_material_cement": "Cement", + "actiondesc_material_cement": "Transmute drops of wet cement from nothing", + "action_material_lava": "Lava", + "actiondesc_material_lava": "Transmute globs of lava from nothing", + "action_material_gunpowder_explosive": "Explosive gunpowder", + "actiondesc_material_gunpowder_explosive": "Transmute grains of gunpowder from nothing", + "action_material_dirt": "Dirt", + "actiondesc_material_dirt": "Transmute grains of dirt from nothing", + "action_building_board_wood": "Wooden mold", + "actiondesc_building_board_wood": "Useful for cement construction. REQUIRES SOLAR POWER TO RECHARGE.", + "action_building_back_wall_rock": "Back wall (rock)", + "actiondesc_building_back_wall_rock": "Provides structural support. REQUIRES SOLAR POWER TO RECHARGE.", + "action_building_pressure_plate": "Pressure plate", + "actiondesc_building_pressure_plate": "TODO", + "action_building_physics_templedoor": "Temple door", + "actiondesc_building_physics_templedoor": "TODO", + "action_teleport_projectile": "Teleport bolt", + "actiondesc_teleport_projectile": "A magical bolt that moves you wherever it ends up flying", + "action_teleport_home": "Teleport home", + "actiondesc_teleport_home": "Creates a portal to the surface that can be used once per each direction", + "action_levitation_projectile": "LEVITATION projectile", + "actiondesc_levitation_projectile": "Levitation stuff", + "action_nuke": "Nuke", + "actiondesc_nuke": "Take cover!", + "action_high_explosive": "TNT", + "actiondesc_high_explosive": "Extremely powerful explosive projectile", + "action_drone": "Drone", + "actiondesc_drone": "More powerful digging", + "action_baab_is": "IS", + "actiondesc_baab_is": "", + "action_baab_all": "ALL", + "actiondesc_baab_all": "", + "action_baab_empty": "ALL", + "actiondesc_baab_empty": "", + "action_baab_lava": "LAVA", + "actiondesc_baab_lava": "", + "action_baab_water": "WATER", + "actiondesc_baab_water": "", + "action_baab_poop": "POOP", + "actiondesc_baab_poop": "", + "action_baab_love": "LOVE", + "actiondesc_baab_love": "", + "action_firework": "Fireworks!", + "actiondesc_firework": "A fiery, explosive projectile", + "projectile_default": "projectile", + "perk_critical_hit": "Critical Hit +", + "perkdesc_critical_hit": "You get more critical hits", + "perk_breath_underwater": "Breathless", + "perkdesc_breath_underwater": "You can no longer drown, and can move in liquids with ease.", + "perk_extra_money": "Greed", + "perkdesc_extra_money": "You gain double the gold per nugget.", + "perk_extra_money_trick_kill": "Trick Greed", + "perkdesc_extra_money_trick_kill": "4x instead of 2x gold is dropped when death is an accident.", + "perk_hover_boost": "Strong Levitation", + "perkdesc_hover_boost": "You can fly 100% longer.", + "perk_movement_faster": "Faster Movement", + "perkdesc_movement_faster": "Your movement speed is increased.", + "perk_repelling_cape": "Repelling Cape", + "perkdesc_repelling_cape": "Stains drop at a fast rate (when moving).", + "perk_exploding_corpses": "Exploding Corpses", + "perkdesc_exploding_corpses": "Enemies explode upon death, but you gain immunity to explosive damage.", + "perk_saving_grace": "Saving Grace", + "perkdesc_saving_grace": "If you would die and have more than 1 HP, your HP is set to 1 instead.", + "perk_invisibility": "Invisibility", + "perkdesc_invisibility": "You're invisible. Stains, casting spells, kicking and taking damage makes you temporarily visible.", + "perk_global_gore": "More Blood", + "perkdesc_global_gore": "Blood blood blood.", + "perk_no_damage_flash": "No Damage Flash", + "perkdesc_no_damage_flash": "Pain is inevitable, but damage flash is optional.", + "perk_reverse_slowdown": "Slicky Slime", + "perkdesc_reverse_slowdown": "Instead of slowing you down, slime allows you to move faster.", + "perk_extra_hp": "Extra Health (One-off)", + "perkdesc_extra_hp": "You gain 50% extra maximum health.", + "perk_glass_cannon": "Glass Cannon", + "perkdesc_glass_cannon": "Your spells are 5 times as powerful, but your maximum health becomes 50 and cannot be increased by normal hearts.", + "perk_respawn": "Extra Life (One-off)", + "perkdesc_respawn": "Upon death you respawn with 100 health.", + "perk_protection_fire": "Fire Immunity", + "perkdesc_protection_fire": "You take no damage from fire.", + "perk_protection_radioactivity": "Toxic Immunity", + "perkdesc_protection_radioactivity": "You take no damage from toxic sludge and other toxic things.", + "perk_protection_explosion": "Explosion Immunity", + "perkdesc_protection_explosion": "You take no direct damage from explosions.", + "perk_protection_melee": "Melee Immunity", + "perkdesc_protection_melee": "You take no damage from close-range enemy attacks.", + "perk_protection_electricity": "Electricity Immunity", + "perkdesc_protection_electricity": "You take no damage from electric shocks.", + "perk_teleportitis": "Teleportitis", + "perkdesc_teleportitis": "You take 20% less damage. You teleport away every time you're hurt.", + "perk_stainless_armour": "Stainless Armour", + "perkdesc_stainless_armour": "You take 50% less damage as long as you have no active stain status effect.", + "perk_edit_wands_everywhere": "Tinker With Wands Everywhere", + "perkdesc_edit_wands_everywhere": "A divine blessing allows you to tinker with wands everywhere.", + "perk_projectile_homing": "Homing Shots", + "perkdesc_projectile_homing": "Your spells home towards enemies very slightly.", + "perk_freeze_field": "Freeze Field", + "perkdesc_freeze_field": "Liquids freeze in your presence.", + "perk_dissolve_powders": "Dissolve Powders", + "perkdesc_dissolve_powders": "Sand and other soft, powdery materials dissolve quickly in your presence.", + "perk_bleed_slime": "Slime Blood", + "perk_shield": "Permanent Shield", + "perkdesc_shield": "You gain a small, permanent shield.", + "perk_revenge_explosion": "Revenge Explosion", + "perkdesc_revenge_explosion": "You release a magical explosion upon taking damage, and gain 25% resistance against explosions.", + "perk_electricity": "Electricity", + "perkdesc_electricity": "You're immune to electric damage, but metal and liquids around you electrify constantly. Look out!", + "perk_mystery_eggplant": "Mystery Eggplant", + "perkdesc_mystery_eggplant": "It breaks easily.", + "perk_double_hp": "Double Health, No Regeneration", + "perkdesc_double_hp": "Your maximum HP is doubled, but you take 20% more damage from projectiles.", + "perk_berserk": "Berserk", + "perkdesc_berserk": "The less HP you have, the more damage your spells deal, up to +300% extra damage.", + "perk_shuffle_wands": "Shuffle Wands", + "perkdesc_shuffle_wands": "All your wands are replaced with random wands of approximately equal power.", + "perk_heavy_ammo": "Heavy Ammo", + "perkdesc_heavy_ammo": "You gain a selection of 2 powerful spells.", + "perk_liquid_movement": "Liquid Movement", + "perkdesc_liquid_movement": "Liquids don't affect your movement at all.", + "perk_faster_swimming": "Faster Swimming", + "perkdesc_faster_swimming": "You swim faster.", + "perk_extra_shop_item": "Extra Item In Holy Mountain", + "perkdesc_extra_shop_item": "There will be an additional item in every Holy Mountain you haven't discovered yet.", + "perk_poison_burn": "Burning Poison", + "perkdesc_poison_burn": "Your projectiles have a chance to ignite poisoned enemies.", + "perk_low_gravity": "Low Gravity", + "perkdesc_low_gravity": "All creatures, you included, have lower personal gravity.", + "perk_destruction_enhancement": "Destruction Enhancement", + "perkdesc_destruction_enchancement": "You can destroy the environment more effectively.", + "perk_damaging_aura": "Damaging Aura", + "perkdesc_damaging_aura": "Your spells damage nearby enemies even if they don't hit them.", + "perk_thunder_kick": "Thunder Kick", + "perkdesc_thunder_kick": "Your kicks instantly kill most foes, and push objects more.", + "perk_vision": "Better Vision", + "perkdesc_vision": "You can see more into the darkness.", + "perk_telepathic_vision": "Telepathic Presence", + "perkdesc_telepathic_vision": "Darkness is no more, but enemies always know where you are.", + "perk_no_more_knockback": "No More Knockback", + "perkdesc_no_more_knockback": "Enemies can no longer knock you back.", + "perk_knockback_control": "Controllable Knockback", + "perkdesc_knockback_control": "You can steer while being knocked back.", + "perk_roll_again": "Roll Again", + "perkdesc_roll_again": "You get a new set of perks to choose from.", + "perk_reveal_secrets": "Reveal Secrets", + "perkdesc_reveal_secrets": "Chests, hearts and other items shine through darkness.", + "perk_potion_drop": "Potion Drop", + "perkdesc_potion_drop": "Enemies have a chance of dropping a random potion upon death.", + "perk_mystery_egg": "Mystery Egg", + "perkdesc_mystery_egg": "Something may hatch from it!", + "perk_gold_no_disappear_while_seen": "Golden I", + "perkdesc_gold_no_disappear_while_seen": "Gold doesn't disappear as long as it can be seen.", + "perk_mana_discount": "Mana Discount", + "perkdesc_mana_discount": "All spells cost 50% less mana.", + "perk_juggernaut": "Juggernaut Spells", + "perkdesc_juggernaut": "Your projectiles deal 30% more damage, but are 30% slower.", + "perk_big_potions": "Big Potions", + "perkdesc_big_potions": "Potions you find contain double the liquid.", + "perk_extra_charges": "Extra Charges", + "perkdesc_extra_charges": "Spells with limited uses can be used twice as many times.", + "perk_fast_projectiles": "Faster Projectiles", + "perkdesc_fast_projectiles": "Your projectile spells fly faster than before.", + "perk_deadly_environment": "Deadly Environment", + "perkdesc_deadly_environment": "Creatures take increased damage from poison and other liquids, fire, and more.", + "perk_cursed_power": "Cursed Power", + "perkdesc_cursed_power": "All your wands gain extra damage but become uncustomizable.", + "perk_randomize_spells": "Randomize Spells", + "perkdesc_randomize_spells": "All spells in your inventory are replaced with a random spell.", + "perk_personal_raincloud": "Personal Raincloud", + "perkdesc_personal_raincloud": "You gather water when standing in a pool, and release it if you shoot at the cloud that follows you.", + "perk_helper_orb": "Helper Orb", + "perkdesc_helper_orb": "An orb flies near you and attacks your enemies.", + "perk_extra_wand_slot": "Extra Wand Storage", + "perkdesc_extra_wand_slot": "You can carry one extra wand.", + "perk_extra_potion_slot": "Extra Item Storage", + "perkdesc_extra_potion_slot": "You can carry one extra item.", + "perk_extra_action_storage": "Extra Spell Storage", + "perkdesc_extra_action_storage": "You gain more room for spells", + "perk_persuasion": "Persuasion", + "perkdesc_persuasion": "Enemies with low health may start fighting for you.", + "perk_permanent_flying": "Floor Is Lava", + "perkdesc_permanent_flying": "You can fly forever, but standing on the ground deals you damage over time.", + "perk_melt": "Melting Corpses", + "perkdesc_melt": "Your enemies' corpses melt into slime.", + "perk_double_cast": "Double Cast", + "perkdesc_double_cast": "Your wands cast one extra spell when used.", + "perk_ability_actions_materialized": "Bombs Materialized", + "perkdesc_ability_actions_materialized": "Bomb-like spells can be placed in the ITEMS space in inventory and used like throwable items.", + "mat_air": "air", + "mat_fire": "fire", + "mat_spark": "spark", + "mat_spark_green": "spark", + "mat_spark_blue": "spark", + "mat_spark_red": "spark", + "mat_spark_white": "spark", + "mat_spark_yellow": "spark", + "mat_spark_purple": "spark", + "mat_spark_player": "spark", + "mat_spark_teal": "spark", + "mat_spark_electric": "electric spark", + "mat_flame": "fire", + "mat_sand_static": "ground", + "mat_sand_static_rainforest": "lush ground", + "mat_bone_static": "bone wall", + "mat_rust_static": "rusted metal", + "mat_sand_static_bright": "granite ground", + "mat_sand_static_red": "rusty ground", + "mat_nest_static": "nest", + "mat_bluefungi_static": "blue fungus", + "mat_cheese_static": "cheese", + "mat_rock_static": "rock", + "mat_rock_static_intro": "rock", + "mat_water_static": "Water", + "mat_endslime_static": "hell slime", + "mat_slime_static": "slime", + "mat_rock_hard": "dense rock", + "mat_rock_static_noedge": "rock", + "mat_rock_hard_border": "extremely dense rock", + "mat_rock_magic_gate": "magic gate", + "mat_rock_magic_bottom": "magic wall", + "mat_rock_eroding": "eroding rock", + "mat_rock_vault": "vault rock", + "mat_coal_static": "coal vein", + "mat_rock_static_grey": "grey rock", + "mat_rock_static_radioactive": "toxic rock", + "mat_rock_static_poison": "poisonous rock", + "mat_skullrock": "hell rock", + "mat_rock_static_wet": "damp rock", + "mat_lavarock_static": "volcanic rock", + "mat_lava": "lava", + "mat_meteorite_static": "meteorite", + "mat_templerock_static": "brickwork", + "mat_templebrick_static": "brickwork", + "mat_templebrick_noedge_static": "brickwork", + "mat_templebrick_thick_static": "brickwork", + "mat_templebrickdark_static": "brickwork", + "mat_templeslab_static": "brickwork", + "mat_templeslab_crumbling_static": "brickwork", + "mat_glowstone": "glowing stone", + "mat_glowstone_altar": "glowing stone", + "mat_glowstone_potion": "glowing stone", + "mat_templebrick_red": "brickwork", + "mat_templebrick_moss_static": "mossy brickwork", + "mat_the_end": "hell rock", + "mat_steel_static": "steel", + "mat_steelmoss_static": "mossy steel", + "mat_steelmoss_slanted": "mossy steel", + "mat_steelsmoke_static": "smoking steel", + "mat_steelpipe_static": "metal pipe", + "mat_steel_static_strong": "dense steel", + "mat_steel_static_unmeltable": "hardened steel", + "mat_rock_static_glow": "glowing matter", + "mat_snow_static": "packed snow", + "mat_ice_static": "ice", + "mat_rock_static_intro_breakable": "rock", + "mat_ice_blood_static": "frozen blood", + "mat_ice_acid_static": "frozen acid", + "mat_ice_cold_static": "ice", + "mat_ice_radioactive_static": "toxic ice", + "mat_ice_meteor_static": "ice", + "mat_tubematerial": "neon tube", + "mat_glass_static": "glass", + "mat_waterrock": "rock", + "mat_ice_glass": "ice", + "mat_tube_physics": "neon tube", + "mat_ice_acid_glass": "frozen acid", + "mat_ice_cold_glass": "ice", + "mat_ice_radioactive_glass": "toxic ice", + "mat_ice_glass_b2": "ice", + "mat_glass_brittle": "brittle glass", + "mat_snowrock_static": "frozen rock", + "mat_concrete_static": "concrete", + "mat_wood_static": "wood", + "mat_wood_static_wet": "damp wood", + "mat_creepy_liquid_emitter": "brick wall", + "mat_gold_static": "gold vein", + "mat_gold_static_dark": "vibrant gold vein", + "mat_wood_static_vertical": "wood", + "mat_wood_static_gas": "pressurized wood", + "mat_corruption_static": "corrupted rock", + "mat_smoke": "smoke", + "mat_smoke_explosion": "smoke", + "mat_steam": "steam", + "mat_acid_gas": "flammable gas", + "mat_acid_gas_static": "flammable gas", + "mat_smoke_static": "smoke", + "mat_poison_gas": "poison gas", + "mat_fungal_gas": "fungal gas", + "mat_blood_cold_vapour": "freezing vapour", + "mat_sand_herb_vapour": "funky vapour", + "mat_radioactive_gas": "toxic gas", + "mat_radioactive_gas_static": "toxic gas", + "mat_water": "Water", + "mat_water_fading": "Water", + "mat_water_salt": "brine", + "mat_water_temp": "Water", + "mat_water_ice": "chilly water", + "mat_water_swamp": "swamp", + "mat_oil": "oil", + "mat_liquid_fire_weak": "liquid fire", + "mat_alcohol": "whiskey", + "mat_midas_precursor": "alchemic precursor", + "mat_midas": "draught of midas", + "mat_magic_liquid": "gate-opener", + "mat_magic_liquid_teleportation": "teleportatium", + "mat_magic_liquid_hp_regeneration": "healthium", + "mat_magic_liquid_hp_regeneration_unstable": "lively concoction", + "mat_magic_liquid_polymorph": "polymorphine", + "mat_magic_liquid_random_polymorph": "chaotic polymorphine", + "mat_magic_liquid_berserk": "berserkium", + "mat_magic_liquid_charm": "pheromone", + "mat_magic_liquid_invisibility": "invisiblium", + "mat_cloud": "cloud", + "mat_cloud_radioactive": "toxic mist", + "mat_cloud_alcohol": "alcohol mist", + "mat_cloud_blood": "blood mist", + "mat_cloud_slime": "slime mist", + "mat_swamp": "swamp", + "mat_mud": "mud", + "mat_blood_fading_slow": "fungal blood", + "mat_blood_worm": "worm blood", + "mat_blood_cold": "freezing liquid", + "mat_radioactive_liquid": "toxic sludge", + "mat_radioactive_liquid_fading": "toxic sludge", + "mat_plasma_fading": "magical liquid", + "mat_plasma_fading_green": "magical liquid", + "mat_plasma_fading_pink": "magical liquid", + "mat_gold_molten": "molten gold", + "mat_steel_static_molten": "molten steel", + "mat_steelmoss_slanted_molten": "molten steel", + "mat_steelmoss_static_molten": "molten steel", + "mat_steelsmoke_static_molten": "molten steel", + "mat_metal_molten": "molten metal", + "mat_metal_rust_molten": "molten metal", + "mat_metal_nohit_molten": "molten metal", + "mat_aluminium_molten": "molten aluminium", + "mat_aluminium_robot_molten": "molten aluminium", + "mat_metal_prop_molten": "molten metal", + "mat_steel_rust_molten": "molten steel", + "mat_aluminium_oxide_molten": "molten aluminium", + "mat_wax_molten": "molten wax", + "mat_silver_molten": "molten silver", + "mat_copper_molten": "molten copper", + "mat_brass_molten": "molten brass", + "mat_glass_molten": "molten glass", + "mat_glass_broken_molten": "molten glass", + "mat_steel_molten": "molten metal", + "mat_creepy_liquid": "creepy liquid", + "mat_cement": "cement", + "mat_sand": "sand", + "mat_sand_blue": "blue sand", + "mat_lavasand": "volcanic sand", + "mat_bone": "bone dust", + "mat_soil": "soil", + "mat_soil_dead": "barren soil", + "mat_sandstone": "sandstone", + "mat_fungisoil": "fungal soil", + "mat_honey": "honey", + "mat_pea_soup": "pea soup", + "mat_endslime": "hell slime", + "mat_endslime_blood": "hell slime", + "mat_explosion_dirt": "dirt", + "mat_vine": "vine", + "mat_root": "vine", + "mat_snow": "snow", + "mat_rotten_meat": "rotten meat", + "mat_meat_slime_sand": "slimy meat", + "mat_meat_slime_green": "green slimy meat", + "mat_meat_slime_orange": "slimy meat", + "mat_rotten_meat_radioactive": "toxic meat", + "mat_meat_worm": "worm meat", + "mat_ice": "ice", + "mat_wax": "wax", + "mat_gold": "gold", + "mat_gold_radioactive": "toxic gold", + "mat_copper": "copper", + "mat_silver": "silver", + "mat_coal": "coal", + "mat_brass": "brass", + "mat_burning_powder": "burning powder", + "mat_sodium_unstable": "wet sodium", + "mat_gunpowder": "gunpowder", + "mat_gunpowder_tnt": "gunpowder", + "mat_gunpowder_unstable": "gunpowder", + "mat_gunpowder_unstable_boss_limbs": "slimy meat", + "mat_plastic_red": "plastic", + "mat_plastic_red_molten": "molten plastic", + "mat_plastic_molten": "molten plastic", + "mat_plastic_prop_molten": "molten plastic", + "mat_grass": "grass", + "mat_moss": "moss", + "mat_moss_rust": "rusty moss", + "mat_fungi_green": "fungus", + "mat_spore": "seed", + "mat_plant_material_red": "seed", + "mat_ceiling_plant_material": "seed", + "mat_mushroom_seed": "fungal spore", + "mat_plant_seed": "plant seed", + "mat_mushroom": "fungal spore", + "mat_mushroom_giant_red": "fungal spore", + "mat_mushroom_giant_blue": "fungal spore", + "mat_bush_seed": "evergreen seed", + "mat_acid": "acid", + "mat_wood_player_b2": "wood", + "mat_wood_player_b2_vertical": "wood", + "mat_wood": "wood", + "mat_fuse": "bomb", + "mat_fuse_tnt": "tnt", + "mat_fuse_holy": "holy matter", + "mat_templebrick_box2d": "brickwork", + "mat_wood_trailer": "wood", + "mat_wood_wall": "wood", + "mat_cactus": "grass", + "mat_grass_loose": "fungal matter", + "mat_wood_prop": "wood", + "mat_wood_prop_durable": "tough wood", + "mat_nest_box2d": "nest", + "mat_cocoon_box2d": "cocoon", + "mat_wood_loose": "wood", + "mat_rock_loose": "rock", + "mat_ice_ceiling": "ice", + "mat_brick": "brick wall", + "mat_concrete_collapsed": "collapsed concrete", + "mat_tnt": "tnt", + "mat_trailer_text": "text", + "mat_meteorite": "meteorite", + "mat_meteorite_crackable": "meteorite", + "mat_meteorite_green": "green meteorite", + "mat_steel": "steel", + "mat_steel_rust": "rusted steel", + "mat_metal_rust_rust": "rusted metal", + "mat_metal_rust_barrel_rust": "rusted metal", + "mat_plastic": "plastic", + "mat_aluminium": "aluminium", + "mat_metal_prop": "metal", + "mat_metal": "metal", + "mat_rock_box2d_hard": "rock", + "mat_rock_box2d_nohit": "rock", + "mat_rock_box2d_nohit_hard": "dense rock", + "mat_rock_static_box2d": "rock", + "mat_rock_box2d": "rock", + "mat_item_box2d": "item", + "mat_gem_box2d": "gem", + "mat_potion_glass_box2d": "glass", + "mat_glass_box2d": "glass", + "mat_gem_box2d_pink": "gem", + "mat_gem_box2d_red": "gem", + "mat_gem_box2d_green": "gem", + "mat_gem_box2d_orange": "gem", + "mat_gold_box2d": "gold", + "mat_metal_nohit": "metal", + "mat_metal_rust": "rusted metal", + "mat_metal_rust_barrel": "rusted metal", + "mat_bone_box2d": "bone", + "mat_crystal": "crystal", + "mat_crystal_purple": "purple crystal", + "mat_crystal_magic": "crystal", + "mat_aluminium_oxide": "aluminium", + "mat_meat": "meat", + "mat_urine": "urine", + "mat_poo": "excrement", + "mat_rocket_particles": "smoke", + "mat_ice_melting_perf_killer": "ice", + "mat_ice_b2": "ice", + "mat_glass": "glass", + "mat_neon_tube_purple": "neon tube", + "mat_neon_tube_cyan": "neon tube", + "mat_neon_tube_blood_red": "neon tube", + "mat_blood_thick": "blood", + "mat_snow_b2": "snow", + "mat_diamond": "diamond", + "mat_meat_slime": "slimy meat", + "mat_concrete_sand": "concrete", + "mat_blood": "blood", + "mat_blood_fading": "blood", + "mat_gunpowder_explosive": "gunpowder", + "mat_fungi": "fungus", + "mat_plant_material": "plant material", + "mat_wood_player": "wood", + "mat_wax_b2": "wax", + "mat_physics_throw_material_part2": "who knows", + "mat_fire_blue": "fire", + "mat_gold_b2": "gold", + "mat_fungus_loose": "fungus", + "mat_sodium": "sodium", + "mat_sulphur": "sulphur", + "mat_salt": "salt", + "mat_steel_sand": "steel", + "mat_slime_green": "slime", + "mat_slime_pink": "slime", + "mat_soil_lush": "soil", + "mat_radioactive_liquid_yellow": "toxic sludge", + "mat_liquid_fire": "fire", + "mat_smoke_magic": "smoke", + "mat_sand_herb": "herb", + "ENTIRELY NEW TEXT AFTER THIS LINE": "", + "biome_tower": "Tower", + "biome_vault_frozen": "Frozen vault", + "biome_clouds": "Cloudscape", + "biome_liquidcave": "Ancient laboratory", + "biome_secret_lab": "Abandoned alchemy lab", + "biome_weathercrystal": "Crystal Chamber", + "mat_ice_poison_static": "Frozen poison", + "mat_ice_poison_glass": "Frozen poison", + "mat_ice_slime_static": "Frozen slime", + "mat_ice_slime_glass": "Frozen slime", + "mat_ice_blood_glass": "Frozen blood", + "mat_void_liquid": "Void liquid", + "mat_fungi_creeping": "Mystery fungus", + "mat_purifying_powder": "Purifying powder", + "mat_magic_crystal": "Magical crystal", + "mat_rock_static_cursed": "Cursed rock", + "mat_steelfrost_static": "Frozen steel", + "mat_slush": "Slush", + "mat_poison": "Poison", + "mat_alcohol_gas": "Whiskey fumes", + "mat_vomit": "Vomit", + "mat_blood_fungi": "fungus blood", + "mat_glowshroom": "glowing fungal spore", + "mat_fungi_trippy": "weird fungus", + "mat_sima": "Sima", + "mat_glass_liquidcave": "Tempered glass", + "mat_templebrick_static_ruined": "Ruined brick wall", + "mat_templebrick_brittle": "Brittle brickwork", + "mat_rock_brittle": "Brittle rock", + "mat_antidote": "Antidote", + "mat_confusion": "flummoxium", + "mat_magic_liquid_movement_faster": "acceleratium", + "mat_magic_liquid_worm_attractor": "worm pheromone", + "mat_magic_liquid_protection_all": "ambrosia", + "mat_magic_liquid_mana_regeneration": "concentrated mana", + "mat_meat_helpless": "Meat of an innocent creature", + "mat_meat_trippy": "Weird meat", + "mat_meat_cursed": "Cursed meat", + "mat_meat_slime_cursed": "Slimy cursed meat", + "mat_meat_teleport": "Ethereal meat", + "mat_meat_polymorph": "Unstable meat", + "mat_meat_confusion": "Ambiguous meat", + "mat_bloodgold_box2d": "Ruby", + "mat_magic_liquid_faster_levitation": "levitatium", + "mat_magic_liquid_faster_levitation_and_movement": "hastium", + "mat_magic_gas_hp_regeneration": "Healium", + "mat_meat_polymorph_protection": "Stinky meat", + "animal_slimeshooter_weak": "Heikko limanuljaska", + "animal_wraith": "Hyypiö", + "animal_wraith_glowing": "Hohtava hyypiö", + "animal_necromancer_shop": "Stevari", + "animal_mine": "Maamiina", + "animal_fungus_big": "Nuijamalikka", + "animal_lurker": "Varjokupla", + "animal_scavenger_invis": "Häivehiisi", + "animal_scavenger_shield": "Kilpihiisi", + "animal_frog_big": "Jättikonna", + "animal_tank_super": "Laser-tankki", + "animal_plague_rats_rat": "Ruttorotta", + "animal_giantshooter_weak": "Heikko äitinuljaska", + "animal_acidshooter_weak": "Heikko happonuljaska", + "animal_wraith_storm": "Ukkoshyypiö", + "animal_skycrystal_physics": "Taivaskristalli", + "animal_slimeshooter_nontoxic": "Limanuljaska", + "animal_turret_right": "Torjuntalaite", + "animal_turret_left": "Torjuntalaite", + "animal_necromancer": "Hahmonvaihtaja", + "animal_lukki_tiny": "Pikkuhämähäkki", + "animal_spearbot": "Peitsivartija", + "animal_ultimate_killer": "Kauhuhirviö", + "animal_goblin_bomb": "Sähikäismenninkäinen", + "animal_pebble_physics": "Lohkare", + "animal_chest_leggy": "Jalkamatkatavara", + "animal_boss_centipede": "Kolmisilmä", + "animal_failed_alchemist": "Kadotettu alkemisti", + "animal_failed_alchemist_b": "Epäalkemisti", + "animal_enlightened_alchemist": "Valaistunut alkemisti", + "animal_lasergun": "Laserkanuuna", + "animal_monk": "Munkki", + "animal_statue": "Patsas", + "animal_boss_alchemist": "Ylialkemisti", + "animal_wizard_returner": "Palauttajamestari", + "animal_wizard_swapper": "Vaihdosmestari", + "animal_drone_lasership": "Jättilaser-lennokki", + "animal_shaman": "Märkiäinen", + "actiondesc_cloud_acid ": "Creates a rain of acid ", + "actiondesc_damage_x2": "Spells cast alongside this spell deal double damage", + "actiondesc_damage_x5": "Spells cast alongside this spell deal quintuple damage", + "actiondesc_unstable_gunpowder": "Makes a projectile release firecrackers when it disappears", + "actiondesc_slow_bullet_timer": "A slow but powerful orb of energy that casts another spell after a timer runs out", + "actiondesc_bouncy_orb_timer": "A fast, arcing projectile that casts another spell after a timer runs out", + "actiondesc_heal_bullet": "A magical bolt with rejuvenative powers", + "action_explosive_projectile": "Explosive projectile", + "action_explosion": "Explosion", + "actiondesc_arc_electric": "Creates arcs of lightning between projectiles (requires 2 projectile spells)", + "actiondesc_arc_fire": "Creates arcs of fire between projectiles (requires 2 projectile spells)", + "actiondesc_arc_gunpowder": "Creates arcs of gunpowder between projectiles (requires 2 projectile spells)", + "actiondesc_arc_poison": "Creates arcs of poison between projectiles (requires 2 projectile spells)", + "action_death_cross_big": "Giga death cross", + "actiondesc_death_cross_big": "A giant, deadly energy cross that explodes after a short time", + "action_area_damage": "Damage field", + "actiondesc_area_damage": "Gives a projectile an energy field that constantly deals 3.5 damage to nearby creatures", + "action_summon_rock": "Rock", + "actiondesc_summon_rock": "Create a mighty rock out of thin air", + "action_summon_egg": "Summon egg", + "actiondesc_summon_egg": "Summons an egg that houses a friendly creature", + "action_spitter_tier_2": "Large spitter bolt", + "actiondesc_spitter_tier_2": "A more powerful version of Spitter Bolt", + "action_spitter_tier_2_timer": "Large spitter bolt with timer", + "actiondesc_spitter_tier_2_timer": "A more powerful version of Spitter Bolt that casts another spell after a timer runs out", + "action_spitter_tier_3": "Giant spitter bolt", + "actiondesc_spitter_tier_3": "The most powerful version of Spitter Bolt", + "action_spitter_tier_3_timer": "Giant spitter bolt with timer", + "actiondesc_spitter_tier_3_timer": "The most powerful version of Spitter Bolt that casts another spell after a timer runs out", + "action_transmutation": "Chaotic transmutation", + "actiondesc_transmutation": "Transmutes various liquids and powdery substances within a projectile's range into something else", + "action_toxic_to_acid": "Toxic sludge to acid", + "actiondesc_toxic_to_acid": "Makes any toxic sludge within a projectile's range turn into acid", + "action_summon_wandghost": "Summon Taikasauva", + "actiondesc_summon_wandghost": "Summons a possessed wand to aid you", + "action_touch_gold": "Touch of Gold", + "actiondesc_touch_gold": "Transmutes everything in a short radius into gold, including walls, creatures... and you", + "action_touch_water": "Touch of Water", + "actiondesc_touch_water": "Transmutes everything in a short radius into water, including walls, creatures... and you", + "action_touch_oil": "Touch of Oil", + "actiondesc_touch_oil": "Transmutes everything in a short radius into oil, including walls, creatures... and you", + "action_touch_alcohol": "Touch of Spirits", + "actiondesc_touch_alcohol": "Transmutes everything in a short radius into alcohol, including walls, creatures... and you", + "action_touch_blood": "Touch of Blood", + "actiondesc_touch_blood": "Transmutes everything in a short radius into blood, including walls, creatures... and you", + "action_touch_smoke": "Touch of Smoke", + "actiondesc_touch_smoke": "Transmutes everything in a short radius into smoke, including walls, creatures... and you", + "action_destruction": "Destruction", + "actiondesc_destruction": "Instantly decimates foes around you, at the cost of your HP", + "action_projectile_transmutation_field": "Projectile transmutation field", + "actiondesc_projectile_transmutation_field": "Projectiles caught within the field transform into harmless critters", + "action_chaotic_arc": "Chaotic path", + "actiondesc_chaotic_arc": "Causes a projectile to chaotically fly wherever it wishes", + "action_projectile_thunder_field": "Projectile thunder field", + "actiondesc_projectile_thunder_field": "Projectiles caught within the field transform into blasts of lightning", + "action_projectile_gravity_field": "Projectile gravity field", + "actiondesc_projectile_gravity_field": "Projectiles caught within the field are attracted towards its center", + "action_fly_downwards": "Fly downwards", + "actiondesc_fly_downwards": "Causes a projectile to aim straight downwards a short time after casting", + "action_fly_upwards": "Fly upwards", + "actiondesc_fly_upwards": "Causes a projectile to aim straight upwards a short time after casting", + "action_horizontal_arc": "Horizontal path", + "actiondesc_horizontal_arc": "Forces a projectile on a horizontal path, but increases its damage", + "action_luminous_drill": "Luminous drill", + "actiondesc_luminous_drill": "A pinpointed, short-ranged beam of concentrated light", + "action_luminous_drill_timer": "Luminous drill with timer", + "actiondesc_luminous_drill_timer": "A pinpointed, short-ranged beam of concentrated light that casts another spell after a timer runs out", + "action_hitfx_explosion_slime": "Explosion on slimy enemies", + "actiondesc_hitfx_explosion_slime": "Makes a projectile explode upon collision with creatures covered in slime", + "action_hitfx_explosion_slime_giga": "Giant explosion on slimy enemies", + "actiondesc_hitfx_explosion_slime_giga": "Makes a projectile explode powerfully upon collision with creatures covered in slime", + "action_hitfx_explosion_alcohol": "Explosion on drunk enemies", + "actiondesc_hitfx_explosion_alcohol": "Makes a projectile explode upon collision with creatures covered in alcohol", + "action_hitfx_explosion_alcohol_giga": "Giant explosion on drunk enemies", + "actiondesc_hitfx_explosion_alcohol_giga": "Makes a projectile explode powerfully upon collision with creatures covered in alcohol", + "action_fireball_ray_enemy": "Personal fireball thrower", + "actiondesc_fireball_ray_enemy": "Makes a projectile turn the creatures it hits into living fireball throwers", + "action_lightning_ray": "Lightning thrower", + "actiondesc_lightning_ray": "Makes a projectile cast lightning in random directions", + "action_lightning_ray_enemy": "Personal lightning caster", + "actiondesc_lightning_ray_enemy": "Makes a projectile turn the creatures it hits into living thunderstorms", + "action_tentacle_ray": "Tentacler", + "actiondesc_tentacle_ray": "Makes a projectile cast tentacles in random directions", + "action_tentacle_ray_enemy": "Personal tentacler", + "actiondesc_tentacle_ray_enemy": "Makes creatures hit by a projectile grow tentacles in a chaotic manner", + "action_hitfx_toxic_charm": "Charm on toxic sludge", + "actiondesc_hitfx_toxic_charm": "Makes a projectile charm creatures covered in toxic sludge", + "action_tentacle_portal": "Eldritch portal", + "actiondesc_tentacle_portal": "Summons a one-way portal to a sinister realm", + "action_static_to_sand": "Ground to sand", + "actiondesc_static_to_sand": "Makes any hard, solid materials within a projectile's range turn into sand", + "action_gravity_field_enemy": "Personal gravity field", + "actiondesc_gravity_field_enemy": "Makes creatures hit by a projectile gain a temporary gravity well that draws projectiles in", + "action_summon_hollow_egg": "Summon hollow egg", + "actiondesc_summon_hollow_egg": "Summons an otherwise empty egg that casts a spell upon cracking open", + "action_buckshot": "Triplicate bolt", + "actiondesc_buckshot": "A formation of three small, fast bolts", + "action_lifetime": "Increase lifetime", + "actiondesc_lifetime": "Increases the lifetime of a spell", + "action_mana_reduce": "Add mana", + "actiondesc_mana_reduce": "Adds 30 mana to the wand", + "action_shortlived_shot": "Shortlived spell", + "actiondesc_shortlived_shot": "Makes a projectile lasts only a very short amount of time, but deal more damage", + "action_wall_horizontal": "Horizontal barrier", + "actiondesc_wall_horizontal": "A thin, horizontal barrier that harms passing creatures, including you", + "action_wall_vertical": "Vertical barrier", + "actiondesc_wall_vertical": "A thin, vertical barrier that harms passing creatures, including you", + "action_wall_square": "Square barrier", + "actiondesc_wall_square": "A thin, square-shaped barrier that harms passing creatures, including you", + "action_purple_explosion_field": "Glittering field", + "actiondesc_purple_explosion_field": "Small explosions appear randomly over a large area", + "action_light_shot": "Light shot", + "actiondesc_light_shot": "Makes a projectile move considerably faster, but deal less damage", + "action_commander_bullet": "Commander bolt", + "actiondesc_commander_bullet": "Any projectiles shot alongside the command bolt will be attracted to it. Casts 3 extra spells upon being cast", + "action_disc_bullet_big": "Giga disc projectile", + "actiondesc_disc_bullet_big": "Summons a large, serrated disc with a curious flight pattern", + "action_bounce_explosion": "Explosive bounce", + "actiondesc_bounce_explosion": "Makes a projectile explode as it bounces", + "action_rocket_downwards": "Downwards bolt bundle", + "actiondesc_rocket_downwards": "Makes a projectile separate into a bundle of 5 explosive bolts as soon as it moves downwards", + "action_piercing_shot": "Piercing shot", + "actiondesc_piercing_shot": "Makes a projectile fly through enemies, but harmful to the caster", + "action_clipping_shot": "Drilling shot", + "actiondesc_clipping_shot": "Gives a projectile the power to go through the ground", + "action_delayed_spell": "Delayed spellcast", + "actiondesc_delayed_spell": "A static, magical phenomenon that casts 3 extra spells after a short while", + "action_turret_spell": "Guarding spellcast", + "actiondesc_turret_spell": "A static, magical phenomenon that casts 3 extra spells if an enemy approaches it", + "action_accelerating_shot": "Accelerating shot", + "actiondesc_accelerating_shot": "Causes a projectile to accelerate as it flies", + "action_avoiding_arc": "Avoiding arc", + "actiondesc_avoiding_arc": "Makes a projectile shy away from obstacles", + "action_lifetime_down": "Reduce lifetime", + "actiondesc_lifetime_down": "Reduces the lifetime of a spell", + "action_long_distance_cast": "Long-distance cast", + "actiondesc_long_distance_cast": "Casts a spell some distance away from the caster", + "action_teleport_cast": "Teleporting cast", + "actiondesc_teleport_cast": "Casts a spell from the closest enemy", + "action_heavy_spread": "Heavy spread", + "actiondesc_heavy_spread": "Gives a projectile a much lower cast delay, but no respect to your aim", + "action_ocarina_a": "Ocarina - note A", + "actiondesc_ocarina_a": "Music for your ears!", + "action_ocarina_b": "Ocarina - note B", + "actiondesc_ocarina_b": "Music for your ears!", + "action_ocarina_c": "Ocarina - note C", + "actiondesc_ocarina_c": "Music for your ears!", + "action_ocarina_d": "Ocarina - note D", + "actiondesc_ocarina_d": "Music for your ears!", + "action_ocarina_e": "Ocarina - note E", + "actiondesc_ocarina_e": "Music for your ears!", + "action_ocarina_f": "Ocarina - note F", + "actiondesc_ocarina_f": "Music for your ears!", + "action_ocarina_gsharp": "Ocarina - note G#", + "actiondesc_ocarina_gsharp": "Music for your ears!", + "action_ocarina_a2": "Ocarina - note A2", + "actiondesc_ocarina_a2": "Music for your ears!", + "action_chain_bolt": "Chain bolt", + "actiondesc_chain_bolt": "Fires a mysterious bolt that jumps from enemy to enemy", + "action_glitter_bomb": "Glitter bomb", + "actiondesc_glitter_bomb": "Summons a bomb that explodes into volatile fragments", + "action_fireball_ray_line": "Two-way fireball thrower", + "actiondesc_fireball_ray_line": "Makes a projectile fire small fireballs perpendicular to its trajectory", + "action_pingpong_path": "Ping-pong path", + "actiondesc_pingpong_path": "Makes a projectile fly back and forth", + "action_floating_arc": "Floating arc", + "actiondesc_floating_arc": "Makes a projectile float above the ground", + "action_teleport_projectile_static": "Return", + "actiondesc_teleport_projectile_static": "After a period of time, you'll be returned to where you cast this spell", + "action_freezing_gaze": "Freezing gaze", + "actiondesc_freezing_gaze": "A heart-freezingly sinister aura", + "action_glowing_bolt": "Pinpoint of light", + "actiondesc_glowing_bolt": "An extremely concentrated point of light that explodes after a moment", + "action_random_explosion": "Chaos magic", + "actiondesc_random_explosion": "Makes a projectile launch a random spell (out of a limited selection) when it hits something", + "action_decelerating_shot": "Decelerating shot", + "actiondesc_decelerating_shot": "Makes a projectile decelerate as it flies", + "action_rocket_octagon": "Octagonal bolt bundle", + "actiondesc_rocket_octagon": "Makes a projectile launch 8 magical bolts if it moves slowly enough", + "action_blood_magic": "Blood magic", + "actiondesc_blood_magic": "Reduces a spell's mana cost and recharge time greatly, at the costs of four health points", + "action_fizzle": "Fizzle", + "actiondesc_fizzle": "Gives a spell a small probability of short-circuiting", + "action_super_teleport_cast": "Warp cast", + "actiondesc_super_teleport_cast": "Makes a spell immediately jump a long distance, stopped by walls", + "action_bounce_laser": "Concentrated light bounce", + "actiondesc_bounce_laser": "Makes a projectile release a bundle of concentrated light as it bounces", + "action_magic_shield": "Magic guard", + "actiondesc_magic_shield": "Four guarding lights rotate around you for a time", + "action_big_magic_shield": "Big magic guard", + "actiondesc_big_magic_shield": "Eight guarding lights rotate around you for a time", + "action_swarm_fly": "Summon fly swarm", + "actiondesc_swarm_fly": "Summons five flies to aid you in battle", + "action_swarm_firebug": "Summon Firebug swarm", + "actiondesc_swarm_firebug": "Summons four fire bugs to aid you in battle", + "action_swarm_wasp": "Summon Wasp swarm", + "actiondesc_swarm_wasp": "Summon six wasps to aid you in battle", + "action_friend_fly": "Summon Friendly fly", + "actiondesc_friend_fly": "Summons a friendly fly that attacks your enemies!", + "action_duplicate": "Spell duplication", + "actiondesc_duplicate": "Duplicates every spell cast before it", + "action_infestation": "Infestation", + "actiondesc_infestation": "A bunch of magical sparks that fly in every direction", + "action_crumbling_earth_projectile": "Earthquake shot", + "actiondesc_crumbling_earth_projectile": "Makes a projectile crumble the earth it hits", + "action_random_spell": "Random spell", + "actiondesc_random_spell": "Casts a spell, any spell, at random!", + "action_random_projectile": "Random projectile spell", + "actiondesc_random_projectile": "Casts one random projectile spell", + "action_random_modifier": "Random modifier spell", + "actiondesc_random_modifier": "Casts one random modifier spell", + "action_random_static_projectile": "Random static projectile spell", + "actiondesc_random_static_projectile": "Casts one random static projectile spell", + "action_draw_random": "Copy random spell", + "actiondesc_draw_random": "Casts a random spell among the spells in your wand", + "action_draw_random_x3": "Copy random spell thrice", + "actiondesc_draw_random_x3": "Casts a random spell among the spells in your wand three times!", + "action_draw_3_random": "Copy three random spells", + "actiondesc_draw_3_random": "Casts three random spells among the spells in your wand", + "action_damage_random": "Random damage", + "actiondesc_damage_random": "Randomly increases or lowers the damage done by projectiles", + "action_alpha": "Alpha", + "actiondesc_alpha": "Casts a copy of the first spell in your wand", + "action_omega": "Omega", + "actiondesc_omega": "Casts copies of every spell in your wand", + "action_gamma": "Gamma", + "actiondesc_gamma": "Casts a copy of the last spell in your wand", + "action_divide_2": "Divide by 2", + "actiondesc_divide_2": "Casts the next spell twice, but with reduced damage", + "action_divide_3": "Divide by 3", + "actiondesc_divide_3": "Casts the next spell 3 times, but with reduced damage", + "action_divide_4": "Divide by 4", + "actiondesc_divide_4": "Casts the next spell 4 times, but with reduced damage", + "action_divide_10": "Divide by 10", + "actiondesc_divide_10": "Casts the next spell 10 times, but with reduced damage", + "action_all_nukes": "Spells to nukes", + "actiondesc_all_nukes": "Transforms every projectile currently in the air into a nuke; not a good idea", + "action_all_discs": "Spells to giga sawblades", + "actiondesc_all_discs": "Transforms every projectile currently in the air into a giant sawblade", + "action_all_blackholes": "Spells to black holes", + "actiondesc_all_blackholes": "Transforms every projectile currently in the air into a black hole", + "action_all_rockets": "Spells to magic missiles", + "actiondesc_all_rockets": "Transforms every projectile currently in the air into a magic missile", + "action_all_deathcrosses": "Spells to death crosses", + "actiondesc_all_deathcrosses": "Transforms every projectile currently in the air into a death cross", + "action_all_acid": "Spells to acid", + "actiondesc_all_acid": "Transforms every projectile currently in the air into a pool of acid", + "action_all_spells": "The end of everything", + "actiondesc_all_spells": "You're heavily advised not to cast this spell.", + "action_add_trigger": "Add trigger", + "actiondesc_add_trigger": "Makes a projectile cast another spell upon collision", + "action_add_timer": "Add timer", + "actiondesc_add_timer": "Makes a projectile cast another spell after a short time", + "action_add_death_trigger": "Add expiration trigger", + "actiondesc_add_death_trigger": "Makes a projectile cast another spell upon expiring", + "action_copy_spell": "Copy spell", + "actiondesc_copy_spell": "Copies a projectile near you", + "action_copy_field": "Copy field", + "actiondesc_copy_field": "A magical field that copies any projectiles near it", + "action_larpa_chaos": "Chaos larpa", + "actiondesc_larpa_chaos": "Makes a projectile cast copies of itself in random directions", + "action_larpa_downwards": "Downwards larpa", + "actiondesc_larpa_downwards": "Makes a projectile cast copies of itself with a downwards trajectory", + "action_larpa_upwards": "Upwards larpa", + "actiondesc_larpa_upwards": "Makes a projectile cast copies of itself with an upwards trajectory", + "action_delta": "Delta", + "actiondesc_delta": "Casts a copy of the next spell in your wand", + "action_larpa_chaos_2": "Copy trail", + "actiondesc_larpa_chaos_2": "Makes a projectile leave a trail of copies of itself", + "actiondesc_chainsaw": "A good tool for cutting meat. Also has some magical properties...", + "action_spore_pod": "Prickly Spore Pod", + "actiondesc_spore_pod": "Summons a spore pod that attaches to a surface and then grows and explodes into spikes", + "action_energy_shield_shot": "Projectile energy shield", + "actiondesc_energy_shield_shot": "Gives a projectile a shield that deflects other projectiles", + "action_autoaim": "Auto-Aim", + "actiondesc_autoaim": "Makes a projectile turns towards the nearest visible enemy", + "action_homing_rotate": "Rotate towards foes", + "actiondesc_homing_rotate": "Makes a projectile turn towards your foes", + "actiondesc_homing": "Makes a projectile accelerate towards your foes", + "action_swapper_projectile": "Swapper", + "actiondesc_swapper_projectile": "It was theorized that the source of qualia would be transferred …But it turns out it was the whole body all along.", + "action_propane_tank": "Propane tank", + "actiondesc_propane_tank": "Summons a propane tank. Be careful what you wish for.", + "action_megalaser": "Intense concentrated light", + "actiondesc_megalaser": "A spectral wand is summoned that casts a huge beam of light", + "action_bomb_cart": "Bomb cart", + "actiondesc_bomb_cart": "Summons a self-propeled mine cart loaded with explosives", + "action_tiny_ghost": "Summon Tiny Ghost", + "actiondesc_tiny_ghost": "Summons a tiny ethereal being to your help. It may cast stronger spells depending on how much damage you have suffered.", + "action_bounce_spark": "Bubbly bounce", + "actiondesc_bounce_spark": "Makes a projectile shoot bubble sparks as it bounces", + "action_cursed_orb": "Cursed sphere", + "actiondesc_cursed_orb": "A projectile that brings bad luck to anyone it hits", + "action_kantele_a": "Kantele - note A", + "actiondesc_kantele_a": "Music for your ears!", + "action_kantele_b": "Kantele - note B", + "actiondesc_kantele_b": "Music for your ears!", + "action_kantele_c": "Kantele - note C", + "actiondesc_kantele_c": "Music for your ears!", + "action_kantele_d": "Kantele - note D", + "actiondesc_kantele_d": "Music for your ears!", + "action_kantele_e": "Kantele - note E", + "actiondesc_kantele_e": "Music for your ears!", + "action_kantele_f": "Kantele - note F", + "actiondesc_kantele_f": "Music for your ears!", + "action_kantele_gsharp": "Kantele - note G#", + "actiondesc_kantele_gsharp": "Music for your ears!", + "action_kantele_a2": "Kantele - note A2", + "actiondesc_kantele_a2": "Music for your ears!", + "action_kantele_dis": "Kantele - note D#", + "actiondesc_kantele_dis": "Music for your ears!", + "action_kantele_g": "Kantele - note G", + "actiondesc_kantele_g": "Music for your ears!", + "perk_hearts_more_extra_hp": "Stronger Hearts", + "perkdesc_hearts_more_extra_hp": "Hearts bestow more maximum health.", + "perk_extra_perk": "Extra Perk", + "perkdesc_extra_perk": "From now on you will find an extra perk in every Holy Mountain.", + "perk_perks_lottery": "Perk Lottery", + "perkdesc_perks_lottery": "When you pick a perk, there's a 50% chance the others won't disappear.", + "perk_genome_more_hatred": "More Hatred", + "perkdesc_genome_more_hatred": "Creatures become more aggressive towards each other.", + "perk_genome_more_love": "More Love", + "perkdesc_genome_more_love": "Creatures become more friendly towards each other.", + "perk_random_allies": "Random Allies", + "perkdesc_random_allies": "You're allies with a random enemy group.", + "perk_remove_fog_of_war": "All-Seeing Eye", + "perkdesc_remove_fog_of_war": "You can see everywhere.", + "perk_attract_items": "Attract Gold", + "perkdesc_attract_items": "Gold nuggets gravitate towards you.", + "perk_strong_kick": "Never Skip Leg Day", + "perkdesc_strong_kick": "Your kicks deal extra damage and knockback.", + "perk_projectile_repulsion": "Projectile Repulsion Field", + "perkdesc_projectile_repulsion": "Most projectiles are repulsed by your presence, but you take slightly more projectile damage.", + "perkdesc_bleed_slime": "You bleed slime, but slime no longer slows you down and you have higher projectile resistance.", + "perk_multiply_hp": "Multiplied HP, No Healing", + "perkdesc_multiply_hp": "Your HP has been multiplied but you can no longer regain HP.", + "perk_bleed_oil": "Oil Blood", + "perkdesc_bleed_oil": "You bleed flammable oil, but are immune to fire.", + "perk_golden_i": "Golden I", + "perkdesc_golden_i": "Gold that you've seen no longer disappears over time.", + "perk_no_player_knockback": "Knockback Immunity", + "perkdesc_no_player_knockback": "Knockback does not affect you.", + "perk_extra_knockback": "Extra Knockback on Spells", + "perkdesc_extra_knockback": "Your spells knock enemies around with more force.", + "perk_lower_spread": "Concentrated Spells", + "perkdesc_lower_spread": "Your spells have lower spread and extra damage, but have increased cast delay.", + "perk_bounce": "Bouncing Spells", + "perkdesc_bounce": "Almost all your spells bounce around and last longer.", + "perk_projectile_homing_shooter": "Boomerang Spells", + "perkdesc_projectile_homing_shooter": "Your spells arc towards you, but gain extra speed and deal extra damage.", + "perk_worm_attractor": "Worm Attractor", + "perkdesc_worm_attractor": "Worms find you attractive.", + "perk_worm_detractor": "Worm Detractor", + "perkdesc_worm_detractor": "Worms run from you.", + "perk_speed_diver": "Fast Swimming", + "perkdesc_speed_diver": "You are an expert swimmer!", + "perk_revenge_tentacle": "Revenge Tentacle", + "perkdesc_revenge_tentacle": "You summon a monstrous tentacle upon taking damage, and gain 25% resistance against projectiles.", + "perk_attack_foot": "Lukki Mutation", + "perkdesc_attack_foot": "You grow curious additional limbs that fight for you.", + "perk_plague_rats": "Plague Rats", + "perkdesc_plague_rats": "Dying enemies release rats to serve your bidding! All rats become your friend.", + "perk_radar_enemy": "Enemy Radar", + "perkdesc_radar_enemy": "You can sense nearby enemies.", + "perk_radar_wand": "Wand Radar", + "perkdesc_radar_wand": "You can sense nearby wands.", + "perk_unlimited_spells": "Unlimited Spells", + "perkdesc_unlimited_spells": "Most spells are now unlimited.", + "perk_leggy_feet": "Leggy Mutation", + "perkdesc_leggy_feet": "You grow disturbing looking limbs that fight for you.", + "perk_always_cast": "Always Cast (One-off)", + "perkdesc_always_cast": "A random Always Cast spell is added to the wand in your hand, up to a maximum of 4.", + "perk_no_more_shuffle": "No More Shuffle", + "perkdesc_no_more_shuffle": "Most of the wands will be non shuffling. The wands you carry with you turn into non-shufflers too.", + "perk_vampirism": "Vampirism", + "perkdesc_vampirism": "You lose 25% maximum health, but can replenish health by drinking blood. Blood doesn't affect satiation level.", + "perk_no_wand_editing": "No Wand Tinkering", + "perkdesc_no_wand_editing": "Wands cannot be tinkered with, but enemies may drop blood money.", + "perk_telekinesis": "Telekinetic Kick", + "perkdesc_telekinesis": "You gain new telekinetic powers.", + "perk_projectile_duplicate": "Duplicated shots", + "perkdesc_projectile_duplicate": "Your spells duplicate as they hit obstacles.", + "perk_low_hp_damage_boost": "Living on the Edge", + "perkdesc_low_hp_damage_boost": "Your spells deal 3x damage when you're under 25 HP or 25% of maximum health.", + "perk_faster_levitation": "Faster Levitation", + "perkdesc_faster_levitation": "You levitate 75% faster.", + "perk_peace_with_steve": "Peace with Gods", + "perkdesc_peace_with_steve": "You make peace with your Gods.", + "perk_gold_is_forever": "Gold Is Forever", + "perkdesc_gold_is_forever": "Gold nuggets never disappear.", + "perk_wand_experimenter": "Wand Experimenter", + "perk_trick_blood_money": "Trick Blood Money", + "perkdesc_trick_blood_money": "Blood money is dropped when death is an accident.", + "perk_levitation_trail": "Levitation Trail", + "perkdesc_levitation_trail": "When levitating, you leave a trail of magical sparks that harm passing creatures.", + "perkdesc_wand_experimenter": "Firing newly found and unmodified wands heals you.", + "perk_protection_freeze": "Freezing Immunity", + "perkdesc_protection_freeze": "You cannot be frozen.", + "item_mcguffin": "Missing Key", + "itemdesc_mcguffin": "This has been said to complete the Work", + "item_mcguffin_0": "The Salt", + "itemdesc_mcguffin_0": "This has been said to complete the Work", + "item_mcguffin_1": "Our Matter", + "itemdesc_mcguffin_1": "This has been said to complete the Work", + "item_mcguffin_2": "Hermes bird", + "itemdesc_mcguffin_2": "This has been said to complete the Work", + "item_mcguffin_3": "White Eagle", + "itemdesc_mcguffin_3": "This has been said to complete the Work", + "item_mcguffin_4": "The Green Lion", + "itemdesc_mcguffin_4": "This has been said to complete the Work", + "item_mcguffin_5": "Red Lion", + "itemdesc_mcguffin_5": "This has been said to complete the Work", + "item_mcguffin_6": "Celestial Ruby", + "itemdesc_mcguffin_6": "This has been said to complete the Work", + "item_mcguffin_7": "Magnesia", + "itemdesc_mcguffin_7": "This has been said to complete the Work", + "item_mcguffin_8": "The Vessel of the Philosophers", + "itemdesc_mcguffin_8": "This has been said to complete the Work", + "item_mcguffin_9": "Our Blessed Stone", + "itemdesc_mcguffin_9": "This has been said to complete the Work", + "item_mcguffin_10": "Magnum Opus", + "itemdesc_mcguffin_10": "This has been said to complete the Work", + "item_mcguffin_11": "Philosopher's Stone", + "itemdesc_mcguffin_11": "This has been said to complete the Work", + "item_mcguffin_12": "Sampo", + "itemdesc_mcguffin_12": "This has been said to complete the Work", + "item_mcguffin_13": "True Knowledge", + "itemdesc_mcguffin_13": "You have completed the Work", + "item_perk_reroll": "Perk reroll", + "item_essence_fire": "Essence of Fire", + "itemdesc_essence_fire": "Your entire being is fluctuating!", + "item_essence_laser": "Essence of Earth", + "itemdesc_essence_laser": "Your being releases damaging light!", + "item_essence_air": "Essence of Air", + "itemdesc_essence_air": "Your being controls the air around you!", + "item_essence_water": "Essence of Water", + "itemdesc_essence_water": "The earth flows around you!", + "item_essence_alcohol": "Essence of Spirits", + "itemdesc_essence_alcohol": "That was not the best of ideas", + "item_chest_treasure_super": "Great treasure chest", + "item_rock": "Rock", + "itemdesc_rock": "It's a rock.", + "item_egg_hollow": "Hollow egg", + "itemdesc_egg_hollow": "I wonder if there's anything inside?", + "item_egg_worm": "Wiggling egg", + "item_description_egg_worm": "Something wiggles inside", + "item_egg_purple": "Chilly egg", + "item_description_egg_purple": "The egg feels cold", + "item_egg_fire": "Toasty egg", + "item_description_egg_fire": "The egg feels very warm", + "item_egg_slime": "Slimy egg", + "item_description_egg_slime": "The egg is covered in slime", + "item_flute": "Flutist's wand", + "item_weathercrystal_book": "Book of Balance", + "itemdesc_weathercrystal_book": "It is said that to attain great wealth one must be ready to break the very foundation of this world. However, would one do that, they'd be cursed. Yet their own greed is a curse on its own...", + "item_chest_dark": "Dark chest", + "item_weathercrystal": "Crystal of Balance", + "item_goldnugget_10": "Gold nugget (10)", + "item_goldnugget_50": "Gold nugget (50)", + "item_goldnugget_200": "Gold nugget (200)", + "item_goldnugget_1000": "Gold nugget (1000)", + "item_goldnugget_10000": "Golden Idol (10000)", + "item_runestone_laser": "Runestone of light", + "item_runestone_fireball": "Runestone of fire", + "item_runestone_lava": "Runestone of magma", + "item_runestone_disc": "Runestone of edges", + "item_runestone_null": "Runestone of emptiness", + "item_runestone_slow": "Runestone of weight", + "itemdesc_runestone": "A runestone with a strong magical aura. You feel like kicking it.", + "item_key": "Crystal key", + "itemdesc_key_0": "The key is voiceless.", + "itemdesc_key_1": "The key hums, but something is missing...", + "itemdesc_key_2": "The key whispers secrets and promises; it is ready.", + "item_description_potion_usage": "\n$0 on item - drink", + "item_jar": "Jar", + "item_description_jar": "Equip and spray or throw", + "item_jar_with_material": "$0 jar", + "item_broken_wand": "Broken wand", + "item_description_broken_wand": "This wand has snapped in half but it still crackles with magical energy", + "item_thunderstone": "Ukkoskivi", + "item_description_thunderstone": "This small rock makes you feel very charged.", + "item_brimstone": "Kiuaskivi", + "item_description_brimstone": "This tiny rock looks most fiery, but when touched only a pleasant warmth can be felt.", + "item_moon": "Kuu", + "item_description_moon": "This tiny celestial object has a strong gravitational pull.", + "item_waterstone": "Vuoksikivi", + "item_description_waterstone": "This small rock is hard and solid, yet seems to be gushing with water.", + "item_bloodmoney": "Bloody gold nugget", + "item_bloodmoney_10": "Bloody gold nugget (10)", + "item_bloodmoney_50": "Bloody gold nugget (50)", + "item_bloodmoney_200": "Bloody gold nugget (200)", + "item_bloodmoney_1000": "Bloody gold nugget (1000)", + "item_bloodmoney_10000": "Bloody golden Idol (10000)", + "item_die_roll": "The die is rolling...", + "item_die_1": "The die rolled a 1!", + "item_die_2": "The die rolled a 2!", + "item_die_3": "The die rolled a 3!", + "item_die_4": "The die rolled a 4!", + "item_die_5": "The die rolled a 5!", + "item_die_6": "The die rolled a 6!", + "item_die_bad": "You're extremely unlucky...!", + "item_die_good": "You're extremely lucky!", + "item_die": "Chaos die", + "itemdesc_die": "Roll it for various prizes!", + "itempickup_open": "Press $0 to open '$1'", + "itempickup_orb": "You discovered an orb of true Knowledge", + "itempickup_orb_evil": "You discovered an orb of corrupted Knowledge", + "itempickup_orb_discovered": "You found a familiar orb of true Knowledge", + "itempickupdesc_orb_discovered": "You're rewarded with additional health", + "itempickupdesc_orb_00": "Secrets of endless lava have been unlocked to you.", + "itempickupdesc_orb_01": "Secrets of Earth's anger have been unlocked to you.", + "itempickupdesc_orb_02": "Secrets of otherworldly life have been unlocked to you.", + "itempickupdesc_orb_03": "Secrets of utter destruction have been unlocked to you.", + "itempickupdesc_orb_04": "Secrets of Undeath have been unlocked to you.", + "itempickupdesc_orb_05": "Secrets of fire and brimstone have been unlocked to you.", + "itempickupdesc_orb_06": "Secrets of the Spiral have been unlocked to you.", + "itempickupdesc_orb_07": "Secrets of stormy skies have been unlocked to you.", + "itempickupdesc_orb_08": "Secrets of jubilation have been unlocked to you.", + "itempickupdesc_orb_09": "Secrets of hidden danger have been unlocked to you.", + "itempickupdesc_orb_10": "Secrets of rebuilding have been unlocked to you.", + "itempickupdesc_orb_11": "This secret should not have been available for you.", + "itempickupdesc_orb_13": "Secrets of great undoing have been unlocked to you.", + "menu_mods": "Mods", + "menu_mods_availablemods": "Available mods", + "menu_mods_availablemods_none": "No mods installed", + "menu_mods_enabled": "Enabled", + "menu_mods_moveup": "Move up", + "menu_mods_movedown": "Move down", + "menu_mods_help_exp": "This is an experimental feature.\nUse at your own risk. Only run mods from trusted sources!\nUpmost enabled mod will be loaded first.\nClick mod name to enable/disable the mod.", + "menu_mods_help": "Use mods at your own risk. Only run mods from trusted sources!\nUpmost enabled mod will be loaded first.\nClick mod name to enable/disable the mod.", + "menu_mods_help_paused": "Changes will be applied on next restart.", + "menu_mods_openmodfolder": "Open mod folder", + "menu_mods_restart": "Restart with enabled mods active", + "menu_mods_restart_tooltip": "Warning: some mods may not handle enabling/disabling ingame well - weirdness, bugs or crashes may occur.", + "menu_mods_newgame": "Start a new game with enabled mods active", + "menu_mods_refresh": "Refresh", + "menu_mods_reenablenotificiation": "This version changes how mods behave.\nMods need to be re-enabled via the “Mods” menu.", + "menu_mods_extraprivilegesareyousure": "This mod has requested extra privileges.\nIf enabled, it has full access to your computer,\neven without using possible exploits in the game code.\nAre you sure you want to trust this mod?", + "menu_mods_extraprivilegesnotification": "This mod has requested extra privileges.\nUnsafe mods need to be enabled to run this mod.", + "menu_mods_workshopsandboxnotification": "Workshop mods cannot be enabled while unsafe mods are on.", + "menu_mods_enablinginvalid": "This mod is broken and cannot be enabled [Error code #N0174H4X].", + "menu_mods_sandboxoffareyousure": "Enabling unsafe mods gives all installed mods full access to your computer.\nAre you sure?", + "menu_mods_sandboxoffareyousure_steam": "Enabling unsafe mods gives all installed mods full access to your computer.\nAre you sure?", + "menu_mods_sandboxoption": "Unsafe mods: $0", + "menu_mods_initerrors_title": "Errors occurred while initializing mods:", + "menu_mods_customactivation": "\nPlay this mod via the “New game” menu.", + "menu_mods_translationactivation": "\nEnable this translation via “Language” in the “Options” menu.", + "menu_mods_nameconflict": "Cannot enable multiple mods with the id “$0”.", + "menu_mods_installmods": "Get mods", + "menu_mods_installmods_steam": "Install mods using Workshop", + "menu_mods_workshopdownloading": "Downloading Workshop content $0", + "menu_mods_workshop_mod_tooltip": "This is a Steam Workshop mod.", + "menu_mods_disclaimernotification_exp": "This is an experimental feature.\nUse is at your own risk!\nYou should only run mods from trusted sources.", + "menu_mods_disclaimernotification": "Use of mods is at your own risk!\nYou should only run mods from trusted sources.", + "menu_mods_initerrors_log": "There were errors when initializing following mods: $0", + "menu_mods_workshopdownloading_noprogress": "Downloading Workshop content $0\nIf the downloads don't seem to progress,\nyou might need to change their priority in the Steam library downloads list.", + "menu_mods_modversion_older": "This mod has not been tested with the latest version of the modding interface.", + "menu_mods_modversion_newer": "This mod has been built with a newer version of the modding interface.\nA newer version of the game might be required.\nOr maybe the mod developer is just using a new version of the game,\nand everything is compatible.", + "menu_mods_incompatibilities": "Mods (!)", + "menu_mods_incompatibilities_tooltip": "Some mods have possible incompatibilities", + "option_allowed": "Allowed", + "option_disabled": "Disabled", + "menu_newgame_selectgamemode": "Select game mode", + "menu_quit": "Quit", + "menuautosave_text": "Autosave found. Looks like the game crashed?\nShould the game attempt to restore the autosave?", + "menuautosave_text_mods": "Some mods were enabled and might have caused the crash.", + "menuautosave_text_earlyaccess": "Noita is in early access, we'll try to fix this. :/", + "menuautosave_yes": "Restore", + "menuautosave_no": "Nah. Destroy it", + "menuoptions_configurecontrols_hint_gamepad": "Press B on a control to reset it to default ", + "menuoptions_configurecontrols_hint_keyboard": "Right click on a key binding to reset it to default", + "menuoptions_privacypolicy": "Privacy policy", + "menuoptions_showhoverinfonexttomouse": "Show hovered material/item name next to mouse: $0", + "menuoptions_replayrecorder_tooltip_exp": "EXPERIMENTAL FEATURE\nPress $0 to save a replay at any point in the game.\n\nSetting “Replay budget” too high might decrease performance\nor make the game crash. Use at your own risk!", + "menuoptions_replayrecorder_tooltip": "Press $0 to save a replay at any point in the game.\n\nSetting “Replay budget” too high might decrease performance\nor make the game crash. Use at your own risk!", + "menuoptions_application_rendered_cursor_hint": "Turn this on in case you can't see the mouse cursor.", + "menuoptions_general": "General", + "menuoptions_graphics": "Graphics", + "menuoptions_audio": "Audio", + "menuoptions_input": "Input", + "menuoptions_streaming": "Streaming", + "menuoptions_teleport_flash_brightness": "Teleport flash brightness", + "menuoptions_gamepaddetected": "Gamepad detected!\nEnable gamepads via the Input tab.", + "menuoptions_replaybudget": "Replay budget", + "menuoptions_heading_window": "WINDOW", + "menuoptions_heading_replayrecorder": "REPLAY RECORDER", + "menuoptions_heading_misc": "MISCELLANEOUS", + "menuoptions_heading_rendering": "RENDERING", + "menuoptions_heading_userinterface_graphics": "USER INTERFACE", + "menuoptions_heading_accessibility": "ACCESSIBILITY", + "menuoptions_heading_volume": "VOLUME", + "menuoptions_heading_userinterface_input": "USER INTERFACE", + "menuoptions_heading_gamepad": "GAMEPAD", + "menuoptions_heading_gameplay": "GAMEPLAY", + "menuoptions_heading_compatibility": "COMPATIBILITY", + "menuoptions_heading_streaming_integration": "TWITCH CHANNEL", + "menuoptions_heading_streaming_integration_config": "CONFIG", + "menuoptions_heading_streaming_integration_mods": "MODDING", + "menuoptions_heading_streaming_enabled_events": "ENABLED EVENTS", + "menuoptions_format_seconds": "$0 s", + "menuoptions_format_megabytes": "$0 MB", + "menuoptions_heading_online": "ONLINE", + "menuoptions_heading_userinterface_mouse": "MOUSE", + "menuoptions_heading_controls": "KEYBOARD/MOUSE", + "menuoptions_display_number": "Display number: $0", + "menuoptions_online_features": "Online features: $0", + "menuoptions_online_features_hint": "Turn off to prevent the game from connecting to Nolla Games' servers.\nThis may prevent some features from working.", + "menuoptions_capturemouseinsidewindow": "Lock mouse inside the window: $0", + "menuoptions_pause_the_game_when_unfocused": "Pause the game when unfocused: $0", + "menuoptions_ui_snappy_hover_boxes": "Inventory hover box animations: $0", + "menuoptions_dithering": "Anti color banding (dithering): $0", + "menuoptions_configuregamepad": "Configure gamepad controls", + "menuoptions_gamepad_analog_flying": "Gamepad analog flying: $0", + "menuoptions_ui_allow_shooting_while_inventory_open": "Allow firing of wands while inventory is open: $0", + "menuoptions_gamepad_throwsprayscheme": "New gamepad throw/spray scheme: $0", + "menuoldsavegame_text": "A save game with old version was detected.\nWould you like to continue it? (Weird things may occur.)", + "menuoldsavegame_text_update9": "Empty chunks may appear in the world after loading.\nHeed my warning - this may anger the Gods!\nWould you like to continue?", + "menu_secretmode": "Secret Mode", + "menu_selectworld": "Select world", + "menu_playtime": "$0h $1 min", + "menu_startnewworld": "Start new world", + "menu_worldselect_deleteareyousure": "Are you sure you want to delete the world in slot $0?\nThis cannot be undone.", + "menu_worldselect_deleteareyousure_playing": "Are you sure you want to delete the world you're currently playing?\nThis cannot be undone.", + "menu_worldselect_slot": "World $0", + "menu_worldselect_slot_playing": "World $0 – PLAYING", + "menu_switchthrowandspray": "We've changed the default values of a few settings:\n-Input bindings for Throw and Spray have been swapped around.\n-Inventory needs to be closed to cast spells.\nWould you like to enable the new defaults? These can be changed in the Options menu.", + "menu_newgame_modschangedrestart": "The game will restart due to mod changes.", + "menu_progress_new": "Progress ($0 new)", + "menu_streamermode": "Streamer mode: $0", + "menu_streaming_description": "Let stream viewers interact with your game through the Twitch chat.", + "menu_streaming_description_details": "Chat messages “1”, “2”, “3” and “4” will be counted as votes towards\nvarious events that are selected from a random pool.", + "menu_streaming_connect": "Connect", + "menu_streaming_disconnect": "Disconnect", + "menu_streaming_connect_twitch": "Connect to Twitch account", + "menu_streaming_status_connecting": " - CONNECTING...", + "menu_streaming_status_connected": " - CONNECTED", + "menu_streaming_status_failed_unknown": " - CONNECTION FAILED", + "menu_streaming_status_failed_serverconnection": " - COULDN'T FIND SERVER", + "menu_streaming_status_failed_timeout": " - TIMEOUT - NO SUCH CHANNEL?", + "menu_streaming_connected": "Connected to Twitch account: $0", + "menu_streaming_connect_failed": "Twitch authentication failed", + "menu_streaming_option": "Streaming integration: $0", + "menu_streaming_channelname": "Channel name:", + "menu_streaming_voting": "Chat votes: $0", + "menu_streaming_voting_hint": "Allow stream viewers to vote on events that take place in the game.", + "menu_streaming_allowusernames": "Display user names", + "menu_streaming_allowusernames_hint": "Allow events that display chat user names", + "menu_streaming_timebetweenvotes": "Time between votes", + "menu_streaming_timebetweenvotes_hint": "", + "menu_streaming_timevoting": "Voting time", + "menu_streaming_timevoting_hint": "The duration of a single vote", + "menu_streaming_playvotesound": "Play sound on new vote: $0", + "menu_streaming_distribution": "Vote event distribution", + "menu_streaming_distribution_hint": "Awful = very likely to ruin your run..\nBad = bad things can happen.\nNeutral = not necessarily goot or bad.\nGood = more health and other helpful events.", + "menu_streaming_distribution_awful": "Awful", + "menu_streaming_distribution_bad": "Bad", + "menu_streaming_distribution_neutral": "Neutral", + "menu_streaming_distribution_good": "Good", + "menu_streaming_usernames_ghosts": "Tiny ghosts can be named after viewers: $0", + "menu_streaming_usernames_rats": "Rats can be named after viewers: $0", + "menu_streaming_installmods": "Install streaming integration mods", + "menu_streaming_mod": "Streaming integration content mod", + "streaming_integration_connectionerror": "Connection error!", + "streaming_integration_nextvotein": "Next vote in $0 s", + "streaming_integration_voteendsin": "Voting ends in $0 s", + "streaming_integration_voteoptionformat": "$0 ($1) <$2", + "streaming_integration_votetie": "It's a tie! Picking random winner", + "streaming_integration_winner": "The winner is:", + "menu_replayedit_writinggif": "Writing gif - please wait – press $0 to cancel", + "menu_replayedit_writinggif_frameprogress": "Frame - $0 / $1 - $2%", + "menu_replayedit_writinggif_timeremaining": "$0 s remaining", + "menu_replayedit_returntogame": "Return to game $0", + "menu_replayedit_title_keyboard_exp": "REPLAY CLIP EDITOR (experimental) - Right/Left click on frames to set clip start and end points.", + "menu_replayedit_title_gamepad_exp": "REPLAY CLIP EDITOR (experimental) - [A] - start clip on hovered frame. [B] - end clip on hovered frame.", + "menu_replayedit_title_keyboard": "REPLAY CLIP EDITOR - Right/Left click on frames to set clip start and end points.", + "menu_replayedit_title_gamepad": "REPLAY CLIP EDITOR - [A] - start clip on hovered frame. [B] - end clip on hovered frame.", + "menu_replayedit_saveasgif": "Save as Gif [ENTER]", + "menu_replayedit_opengifdir": "Open gif directory", + "menu_replayedit_size": "Size: ", + "menu_replayedit_full": "Full", + "menu_replayedit_sizeformat": "$0x$1", + "menu_replayedit_outputscale": "Output scale: $0%", + "menu_replayedit_outputinfo1": "Output: $0 frames - $1s", + "menu_replayedit_outputinfo2": " - $0x$1 px", + "menu_replayedit_startclip_gamepad": "[A] - start clip on hovered frame. ", + "menu_replayedit_startclip_keyboard": "Left click - start clip on hovered frame. ", + "menu_replayedit_endclip_gamepad": "[B] - end clip on hovered frame. ", + "menu_replayedit_endclip_keyboard": "Right click - end clip on hovered frame.", + "menu_replayedit_frame": " Frame = $0", + "menu_replayedit_imagecenter": "Left click - set image center.", + "progress_new": "$0 (new)", + "log_golden_statue": "Picked a golden statue", + "logdesc_golden_statue": "You got $0 gold!", + "logdesc_heart_evil": "Increased maximum health to $0 ...with the cost of being cursed!", + "log_altar_magic": "Your curiosity is rewarded", + "log_altar_magic_monster": "Your curiosity is rewarded, but...", + "log_altar_magic_worm": "That is not what you seek!", + "log_moon_altar": "The four essences reveal their secret", + "logdesc_moon_altar": "The moon's egg cracks open. Its contents have been unlocked", + "logdesc_moon_altar_drunk": "The moon spills and unlocks its inebriating contents", + "log_heart_fullhp_temple": "Picked up Full Health Regeneration", + "logdesc_heart_fullhp_temple": "Increased maximum health by $0 and restored health to $1 (regained $2 health)", + "log_worm_deflector_death": "The worm crystal has shattered!", + "logdesc_worm_deflector_death": "You feel less safe...", + "logdesc_heart_fullhp": "Restored health to $0 (regained $1 health)", + "log_ocarina": "The world around you changes!", + "logdesc_ocarina": "Your music released strange energies", + "log_ocarina_done": "Seems like the musical energy is gone...", + "log_overingestion_00": "You're choking on food", + "log_overingestion_01": "Eating any more might kill you", + "log_overingestion_02": "You're choking on food", + "log_overingestion_03": "Eating any more might kill you", + "log_overingestion_04": "You're choking on food", + "log_overingestion_05": "Eating any more might kill you", + "log_overingestion_exploding_00": "You're bursting at the seams", + "log_overingestion_exploding_01": "You're feeling like you'll soon explode", + "log_overingestion_exploding_02": "You're bursting at the seams", + "log_overingestion_exploding_03": "You're feeling like you'll soon explode", + "log_overingestion_exploding_04": "You're feeling an explosive tightness in your stomach", + "log_overingestion_exploding_05": "You're feeling an explosive tightness in your stomach", + "log_kantele": "The world around you changes!", + "logdesc_kantele": "Your music released strange energies", + "log_kantele_done": "Seems like the musical energy is gone...", + "log_alchemist_key_first": "The key begins to hum!", + "logdesc_alchemist_key_first": "Something is still missing...", + "log_alchemist_key_second": "The key begins to whisper!", + "logdesc_alchemist_key_second": "”I can give you so much in exchange for...”", + "log_alchemist_key_invalid": "Nothing seemed to happen...", + "log_alchemist_chest_open": "The glass key speaks!", + "logdesc_alchemist_chest_open": "The chest listens", + "log_alchemist_chest_opened": "The glass key speaks again!", + "logdesc_alchemist_chest_opened": "The chest keeps listening", + "log_castdelaying": "CAST DELAY...", + "log_weathercrystal_broken": "Cursed by greed!", + "logdesc_weathercrystal_broken": "Your desire for treasures will surely be your undoing.", + "log_curse_fade": "The curse fades away", + "logdesc_curse_fade": "You're safe again... for now", + "logdesc_gods_are_impressed": "The Gods are very impressed with you", + "logdesc_gods_are_afraid": "The Gods are afraid", + "logdesc_gods_are_curious": "The Gods are very curious", + "logdesc_temple_peace_temple_break": "The Gods look the other way", + "log_altar_success_00": "The Gods accept your sacrifice", + "log_altar_success_01": "The Gods are satisfied with your sacrifice", + "log_altar_success_02": "The Gods are happy with your sacrifice", + "log_altar_fail_00": "The Gods aren't happy with your sacrifice", + "log_altar_fail_01": "The Gods sneer at your untrained sacrifice", + "log_altar_fail_02": "The Gods mock your crude sacrifice", + "log_altar_fail_03": "The Gods scorn at your illiterate sacrifice", + "log_reality_mutation_00": "Your reality is shaken", + "log_reality_mutation_01": "You sense things are no longer what they used to be", + "log_reality_mutation_02": "You feel something has changed", + "log_reality_mutation_03": "You feel the rules of the Cosmos have shifted", + "log_reality_mutation_04": "You sense the reality has shifted", + "log_reality_mutation_05": "The reality has shifted", + "status_reality_mutation": "The reality has shifted", + "statusdesc_reality_mutation": "You sense things are no longer what they used to be.", + "booktitle_allspells": "Map of Gnosis", + "bookdesc_allspells": "None other than you is teacher of the truth,\nwherever and from whatever source it is manifest.\n \nYou hear nothing true from me which you have not first told me.\n \nTruth, when did you ever fail to walk with me,\nteaching me what to avoid and what to seek....\nWithout you I could discern none of these things.", + "reward_gold_statue": "Golden statue", + "reward_clock": "Dedicated to 5 minutes", + "reward_minit": "1 minute?!", + "reward_nolla": "No gold", + "reward_dollar": "All the monies", + "reward_peace": "Pacifist", + "reward_crown": "King", + "reward_nohit": "Undamaged", + "controls_use": "interact", + "controls_replayeditopen": "save replay", + "controls_usewand": "use wand", + "teleport_mystery": "Portal to the Tower", + "teleport_mystery_back": "Portal back to the Mountain", + "teleport_world": "Portal to a faraway land", + "teleport_deeper": "Portal deeper", + "teleport_ending": "Portal to The Laboratory", + "teleport_ending_victory": "Portal to The Work", + "teleport_end_wall": "Portal to Crystal vault", + "teleport_generic": "Portal", + "teleport_back": "Portal back", + "gamemode_normal": "New Game", + "gamemode_normal_desc": "Explore a new world.\nThe original Noita experience.", + "gamemode_dailyrun": "Daily Run", + "gamemode_dailyrun_desc": "New day, new world.\nSome starting items are randomized.\nEvery player is playing the same seed.\nBe careful, you can only play once in 24 hours.", + "gamemode_nightmare_exp": "Nightmare (experimental)", + "gamemode_nightmare": "Nightmare", + "gamemode_nightmare_desc": "For a more challenging experience.\nUnlock this mode by completing the game.", + "gamemode_newgameplus": "New Game+ (experimental)", + "gamemode_newgameplus_desc": "For a more challenging experience.\nUnlock this mode by completing the game.", + "gamemode_laboratory": "Spell Lab", + "gamemode_laboratory_desc": "Play around with magic to your heart's content.\nDeath is not a problem.\nUnlock new spells for this mode by casting them.", + "gamemode_comingsoon": "Coming soon!", + "gamemode_comingsoon_desc": "It's a mystery.", + "gamemode_nightmare_desc_PETRI_is_this_correct_new_nightmare_description": "Every day a new run setup and a\n chance to play later biomes.\n Play the same seed as many times as you want.", + "gamemode_daily_practice_run": "Daily Practice Run", + "gamemode_daily_practice_run_desc": "Start a run from a randomized spot,\nwith randomized items.\nYou can try the same seed as many times as you like\nwithin 24 hours.", + "new_game_for_newgame_plus": "NEW GAME", + "building_worm_deflector": "Worm crystal", + "stat_modsenabled": "Mods enabled:", + "damage_curse": "curse", + "damage_rock_curse": "cursed rock", + "damage_overeating": "overeating", + "damage_midas": "midas", + "menureleasenotes_betawarning": "Welcome to the Noita 1.0 Beta version!\nBe warned, the game will probably be less stable here compared to the master branch.\nHappy noiting!", + "menureleasenotes_betawarning2": "Welcome to the Noita beta branch!\nBe warned, the game will probably be less stable here compared to the master branch.", + "inventory_chargecapacity_tooltip": "The amount of charge this wand can store.", + "infinity_symbol": "∞", + "credits_game_by": "A GAME BY", + "ingestion_status_caused_by": "Cause: Ingesting $0.", + "ingestion_status_caused_by_many": "Cause: Ingesting $0 and more.", + "ingestion_status_caused_by_overingestion": "Cause: Overeating", + "status_confusion": "Confused", + "statusdesc_confusion": "You feel confused.", + "status_movement_faster": "Greased lightning.", + "statusdesc_movement_faster": "You feel extremely fast.", + "status_worm_attractor": "Worm food", + "statusdesc_worm_attractor": "You feel like you're future worm food.", + "status_protection_all": "Protection from all", + "statusdesc_protection_all": "You feel strange strength in your body.", + "status_mana_regeneration": "Mana regeneration", + "statusdesc_mana_regeneration": "You gain mana back faster.", + "status_internal_fire": "Internal fire ", + "statusdesc_internal_fire": "You're burning inside.", + "status_cryptpoison": "Ancient venom poisoning", + "statusdesc_cryptpoison": "You lose health until you locate a rare antidote.", + "status_satiated00": "Minimally satiated", + "statusdesc_satiated00": "Your stomach is almost empty.", + "status_satiated01": "Satiated", + "statusdesc_satiated01": "You can still fit more in your stomach.", + "status_satiated02": "Fully satiated", + "statusdesc_satiated02": "You're feeling full. Any more food will make movement difficult.", + "status_satiated03": "Oversatiated", + "statusdesc_satiated03": "You're feeling really full.", + "status_satiated04": "Terribly oversatiated", + "statusdesc_satiated04": "You're feeling sickly full. Any more food might hurt you.", + "status_satiated05": "Choking", + "statusdesc_satiated05": "You're feeling sickly full and choking.", + "status_satiated06": "Choking and bloated", + "statusdesc_satiated06": "You most certainly don't feel like eating more.", + "status_ingestion_damage": "Choking", + "statusdesc_ingestion_damage": "Any more food or drinking will hurt you.", + "status_ingestion_exploding": "Bursting at the seams", + "statusdesc_ingestion_exploding": "You're feeling so full you might explode.", + "status_ingestion_alcoholic_00": "Mildly boozed", + "statusdesc_ingestion_alcoholic_00": "You're feeling a little tipsy.", + "status_ingestion_alcoholic_01": "Drunk", + "statusdesc_ingestion_alcoholic_01": "You drank too much.\nAiming is disturbed.", + "status_ingestion_alcoholic_02": "Wasted", + "statusdesc_ingestion_alcoholic_02": "You drank way too much.\nAiming is disturbed.\nDrinking more will make you Poisoned", + "status_ingestion_alcoholic_03": "Wasted", + "statusdesc_ingestion_alcoholic_03": "You drank way too much.\nAiming is disturbed.\nDrinking more will give you brain damage", + "status_brain_damage": "Brain Damage", + "statusdesc_brain_damage": "Your aim is permanently disturbed.", + "status_trip_00": "Tripping", + "statusdesc_trip_00": "You sense that something is off.", + "status_trip_01": "Tripping some", + "statusdesc_trip_01": "You feel in harmony with the magical forces.", + "status_trip_02": "Heavily tripping", + "statusdesc_trip_02": "Maan, that colour smells interesting.", + "status_trip_03": "Tripping balls", + "statusdesc_trip_03": "Usual concepts don't apply.", + "status_nightvision": "Wormy vision", + "statusdesc_nightvision": "You're seeing things more clearly.", + "status_food_poisoning": "Food poisoning", + "statusdesc_food_poisoning": "You're feeling sick. Nothing stays inside.", + "status_ingestion_movement_slower": "Clumsy movement", + "statusdesc_ingestion_movement_slower": "Movement is difficult.", + "status_ingestion_freezing": "Chilly", + "statusdesc_ingestion_freezing": "You're feeling cold inside. Movement is difficult.", + "status_farts": "Gassy", + "statusdesc_farts": "You're feeling pressure inside.", + "status_curse_cloud_00": "Rain Curse", + "statusdesc_curse_cloud_00": "You feel like there's a dark cloud hanging over you.", + "status_curse_cloud_01": "Thunder Curse", + "statusdesc_curse_cloud_01": "The weight of the cloud is almost unbearable. Your head hurts.", + "status_curse_cloud_02": "Acid Rain Curse", + "statusdesc_curse_cloud_02": "All the foul thoughts you have ever had wash over you.", + "status_jarate": "Jarated", + "statusdesc_jarate": "Wet clothes protect you from fire.\nYou sense an increased danger of receiving a critical hit.", + "status_protection_polymorph": "Polymorph immunity", + "statusdesc_protection_polymorph": "You cannot be polymorphed.", + "status_faster_levitation": "Faster levitation", + "statusdesc_faster_levitation": "You levitate 75% faster.", + "ending_above_part_a": "World has been restored", + "ending_above_part_b": "And everyone is much happier", + "inventory_perks_many": "$0 x $1", + "death_curse": "Curse", + "death_polymorph": ", while polymorphed to $0", + "streamingevent_speedy_enemies": "Speedy Creatures", + "streamingeventdesc_speedy_enemies": "Nearby creatures move faster", + "streamingevent_protect_enemies": "Protect Creatures", + "streamingeventdesc_protect_enemies": "Nearby creatures temporarily block all incoming damage", + "streamingevent_teleporting_enemies": "Teleporting Creatures", + "streamingeventdesc_teleporting_enemies": "Nearby creatures start teleporting around", + "streamingevent_polymorph_enemies": "Polymorph Creatures", + "streamingeventdesc_polymorph_enemies": "Nearby creatures polymorph into random beings", + "streamingevent_tiny_ghost_player": "Summon Friendly Ghosts", + "streamingeventdesc_tiny_ghost_player": "You get a few tiny ghost friends", + "streamingevent_tiny_ghost_enemy": "Summon Hostile Ghosts", + "streamingeventdesc_tiny_ghost_enemy": "Nearby creatures get tiny ghost friends", + "streamingevent_homing_enemy_projectiles": "Homing for Hostiles", + "streamingeventdesc_homing_enemy_projectiles": "Nearby enemies' projectiles accelerate toward you", + "streamingevent_health_plus": "Health Plus", + "streamingeventdesc_health_plus": "You gain 80 HP", + "streamingevent_health_minus": "Health Minus", + "streamingeventdesc_health_minus": "You lose 40 HP", + "streamingevent_max_health_plus": "Max Health Plus", + "streamingeventdesc_max_health_plus": "You gain 50 maximum HP", + "streamingevent_max_health_minus": "Max Health Minus", + "streamingeventdesc_max_health_minus": "You lose 25 maximum HP", + "streamingevent_regeneration_field": "Regeneration Field", + "streamingeventdesc_regeneration_field": "You're given a regenerative field", + "streamingevent_protect_player": "Temporary Immortality", + "streamingeventdesc_protect_player": "You become invincible for some time", + "streamingevent_shield_enemies": "Shielded Creatures", + "streamingeventdesc_shield_enemies": "All creatures gain a shield", + "streamingevent_shield_player": "Friendly Shield", + "streamingeventdesc_shield_player": "You gain a shield", + "streamingevent_faster_player": "Speedy Movement", + "streamingeventdesc_faster_player": "You can move faster for a time", + "streamingevent_slimy_player": "Slimy", + "streamingeventdesc_slimy_player": "Everyone gets covered in slime", + "streamingevent_wet_player": "Shower", + "streamingeventdesc_wet_player": "A raincloud spawns on you", + "streamingevent_oiled_player": "Glisten", + "streamingeventdesc_oiled_player": "A cloud of oil spawns on you", + "streamingevent_drunk_player": "Booze", + "streamingeventdesc_drunk_player": "You become drunk", + "streamingevent_drunk_enemies": "Drunk Creatures", + "streamingeventdesc_drunk_enemies": "Nearby creatures become drunk", + "streamingevent_spell_refresh": "Spell Refresh", + "streamingeventdesc_spell_refresh": "Your spells are refreshed", + "streamingevent_sea_of_x": "Sea of Random", + "streamingeventdesc_sea_of_x": "A huge body of random liquid is summoned", + "streamingevent_sea_of_water": "Sea of Water", + "streamingeventdesc_sea_of_water": "A huge body of water is summoned", + "streamingevent_sea_of_oil": "Sea of Oil", + "streamingeventdesc_sea_of_oil": "A huge body of oil is summoned", + "streamingevent_sea_of_lava": "Sea of Lava", + "streamingeventdesc_sea_of_lava": "A huge body of lava is summoned", + "streamingevent_nuke": "Boom!", + "streamingeventdesc_nuke": "Take cover!", + "streamingevent_spawn_worm": "Summon Worm", + "streamingeventdesc_spawn_worm": "A huge worm appears", + "streamingevent_spawn_shopkeeper": "Summon Stevari", + "streamingeventdesc_spawn_shopkeeper": "Stevari appears", + "streamingevent_bouncy_shots": "Bouncy Spells", + "streamingeventdesc_bouncy_shots": "Your projectiles become bouncy for a time", + "streamingevent_boomerang_shots": "Boomerang Spells", + "streamingeventdesc_boomerang_shots": "Your projectiles home back to you for a time", + "streamingevent_fizzle": "Fizzle Spells", + "streamingeventdesc_fizzle": "Your projectiles have a chance to fizzle out for a time", + "streamingevent_explosive_projectile": "Explosive Spells", + "streamingeventdesc_explosive_projectile": "Your projectiles become explosive for a time", + "streamingevent_give_wand_to_enemy": "Armed Creature", + "streamingeventdesc_give_wand_to_enemy": "A nearby creature gets a random wand", + "streamingevent_give_wand_to_player": "New Wand", + "streamingeventdesc_give_wand_to_player": "A random wand appears", + "streamingevent_remove_liquid": "Remove Liquids", + "streamingeventdesc_remove_liquid": "All nearby liquids disappears", + "streamingevent_remove_ground": "Remove Ground", + "streamingeventdesc_remove_ground": "All nearby solid ground disappears", + "streamingevent_berserk": "Rage", + "streamingeventdesc_berserk": "Everyone becomes berserk", + "streamingevent_fireball_thrower_player": "Fireball Thrower", + "streamingeventdesc_fireball_thrower_player": "You start spewing fireballs for a time", + "streamingevent_fireball_thrower_enemies": "Fireball Thrower Creatures", + "streamingeventdesc_fireball_thrower_enemies": "Creatures start spewing fireballs for a time", + "streamingevent_spawn_chest": "Loot!", + "streamingeventdesc_spawn_chest": "A chest appears!", + "streamingevent_transform_giga_discs": "Giga Sawblades Everywhere", + "streamingeventdesc_transform_giga_discs": "For a time, all projectiles become giant sawblades(!)", + "streamingevent_transform_nukes": "Projectiles Into Nukes", + "streamingeventdesc_transform_nukes": "All airborne projectiles become nukes(!!!)", + "streamingevent_rain_gold": "Treasure Rain", + "streamingeventdesc_rain_gold": "It's raining gold", + "streamingevent_rain_barrel": "Barrel Rain", + "streamingeventdesc_rain_barrel": "Barrels and other explosives appear out of thin air", + "streamingevent_rain_hiisi": "Hiisi Rain", + "streamingeventdesc_rain_hiisi": "A bunch of Hiisi appear out of thin air", + "streamingevent_rain_worm": "Worm Rain", + "streamingeventdesc_rain_worm": "Worms appear out of thin air", + "streamingevent_rain_potion": "Potion Rain", + "streamingeventdesc_rain_potion": "Potions appear out of thin air", + "streamingevent_rain_bomb": "Bomb Rain", + "streamingeventdesc_rain_bomb": "Bombs appear out of thin air", + "streamingevent_gravity_player": "Personal Gravity Field", + "streamingeventdesc_gravity_player": "You attract projectiles for a while", + "streamingevent_gravity_enemies": "Creature Gravity Field", + "streamingeventdesc_gravity_enemies": "Creatures start attracting projectiles for a while", + "streamingevent_portal_east": "Portal to East", + "streamingeventdesc_portal_east": "A portal leading somewhere far away", + "streamingevent_portal_beginning": "Portal to Surface", + "streamingeventdesc_portal_beginning": "A portal leading to the surface", + "streamingevent_portal_random": "Portal to Some Place", + "streamingeventdesc_portal_random": "A portal leading somewhere", + "streamingevent_slow_enemies": "Slow Creatures", + "streamingeventdesc_slow_enemies": "Creatures slow down", + "streamingevent_slow_player": "Slowdown", + "streamingeventdesc_slow_player": "You slow down", + "streamingevent_trail_water": "Water Trail", + "streamingeventdesc_trail_water": "Your projectiles leave a trail of water", + "streamingevent_trail_oil": "Oil Trail", + "streamingeventdesc_trail_oil": "Your projectiles leave a trail of oil", + "streamingevent_trail_acid": "Acid Trail", + "streamingeventdesc_trail_acid": "Your projectiles leave a trail of acid", + "streamingevent_trail_fire": "Fire Trail", + "streamingeventdesc_trail_fire": "Your projectiles leave a trail of fire", + "streamingevent_trail_lava": "Lava Trail", + "streamingeventdesc_trail_lava": "Your projectiles leave a trail of lava", + "streamingevent_trail_poison": "Poison Trail", + "streamingeventdesc_trail_poison": "Your projectiles leave a trail of poison", + "streamingevent_trail_gunpowder": "Gunpowder Trail", + "streamingeventdesc_trail_gunpowder": "Your projectiles leave a trail of gunpowder", + "streamingevent_trail_alcohol": "Alcohol Trail", + "streamingeventdesc_trail_alcohol": "Your projectiles leave a trail of alcohol", + "streamingevent_player_trip": "Trip", + "streamingeventdesc_player_trip": "You trip out", + "streamingevent_transmutation": "Transmutation", + "streamingeventdesc_transmutation": "Nearby materials transmute into acid for some time", + "streamingevent_slow_bullets": "Bullet Time", + "streamingeventdesc_slow_bullets": "Projectiles slow down heavily", + "streamingevent_gravity": "Projectile Gravity", + "streamingeventdesc_gravity": "Your projectiles gain extra gravity", + "streamingevent_antigravity": "Projectile Antigravity", + "streamingeventdesc_antigravity": "Your projectiles gain antigravity", + "biomemodifierdesc_moist": "The air feels extremely humid", + "biomemodifierdesc_fog_of_war_reappears": "A mysterious darkness lingers in this place", + "biomemodifierdesc_conductive": "The air smells ionized", + "biomemodifierdesc_freezing": "The air feels freezing", + "biomemodifierdesc_hot": "The air feels hot", + "biomemodifierdesc_dry": "The air feels dry", + "biomemodifierdesc_bouncy": "The floors look bouncy", + "biomemodifierdesc_gold_vein": "You sense lucrative opportunities", + "biomemodifierdesc_gold_vein_super": "You sense extremely lucrative opportunities", + "biomemodifierdesc_corrupted": "Something is not right here", + "biomemodifierdesc_flooded": "Where did all this water come from?", + "biomemodifierdesc_gas_glooded": "There's a smell of gas in the air", + "biomemodifierdesc_toxic": "The air smells toxic", + "biomemodifierdesc_vulcanous": "The air smells vulcanic", + "biomemodifierdesc_haunted": "A terrible chill runs down your spine", + "biomemodifierdesc_rat_infested": "The air smells of rats", + "biomemodifierdesc_worm_infested": "The air smells of worms", + "biomemodifierdesc_alchemic": "There's a spirit of Ancient Art in the air", + "biomemodifierdesc_peaceful": "You feel a sense of peace", + "biomemodifierdesc_portal_upwards": "You feel there's a special route nearby", + "biomemodifierdesc_portal_downwards": "You feel there's a special route nearby", + "NEWTEXTSINCE20200928": "", + "reward_nowands": "No wands", + "reward_almostpacifist": "Almost a pacifist", + "reward_notinkeringofwands": "Abstained from wand tinkering", + "reward_kicksonly": "The Mighty Foot", + "gamemode_dailyrun_desc_played": "You've played the daily. Try again tomorrow.", + "gamemode_dailyrun_desc_played2": "You already had your chance at the daily run. Try again tomorrow.", + "gamemode_dailyrun_desc_played3": "You already had your chance. Try again tomorrow.", + "perk_revenge_bullet": "Revenge bullets", + "perkdesc_revenge_bullet": "You return fire when hit by projectiles, and you gain 20% resistance against explosions and projectiles.", + "logdesk_curse_ghost": "Your greed will haunt you wherever you go...", + "logdesk_curse_permaoil": "Your greed sticks to you like tar...", + "logdesk_curse_nofly": "Your greed weighs you down heavily...", + "logdesk_curse_strongenemies": "Your greed makes others dislike you...", + "logdesk_curse_keepmoving": "Your greed makes you overly hasty...", + "log_curse": "Curse of greed!", + "log_curse_info": "Seek refreshment to cure the curse.", + "log_curse_reward": "You gain additional gold while the curse is active.", + "log_curse_secret": "The air trembles!", + "logdesc_curse_secret": "Ancient alchemists sought to utilize even the power of a curse...", + "animal_wizard_neutral": "Maadoittajamestari", + "action_burst_8": "Octuple spell", + "actiondesc_burst_8": "Simultaneously cast 8 spells", + "action_broken_spell": "Broken spell", + "actiondesc_broken_spell": "A malfunctioning spell", + "action_summon_portal": "Summon portal", + "actiondesc_summon_portal": "Summons a strange portal", + "teleport_strange_unstable": "Unstable portal", + "teleport_strange_stable": "Stable portal", + "log_repair_spell": "The spell is mended", + "log_repair_wand": "The wand is mended", + "gamemode_dailyrun_desc_offline": "Please turn on Online features to play this mode.", + "gamemode_dailyrun_desc_connection_failed": "Connection failed.", + "mat_meat_frog": "frog meat", + "menureleasenotes_noita10": "Welcome to Noita Epilogue Update!\nNoita used be an Early Access game, so we want to send a huge thank you to all of you\nwho played Noita during its first year. Your feedback has been invaluable!\nAnd to all the new Noita players... Welcome and best of luck!\n- Devs\n", + "item_mcguffin_14": "Truest of Knowledge", + "itemdesc_mcguffin_14": "Was it worth it?", + "perk_angry_ghost": "Angry ghost", + "perkdesc_angry_ghost": "An angry spirit comes to your aid, copying nearby spells and projectiles.", + "effect_neutralized": "Neutralized spells", + "effectdesc_neutralized": "Projectile spells you cast short-circuit.", + "log_all_spells": "You were warned!", + "logdesc_all_spells": "One does not escape quite so easily!", + "perk_gourd": "Refreshing gourd", + "perkdesc_gourd": "Just a nice gourd.", + "perk_gas_fire": "Gas fire", + "perkdesc_gas_fire": "Gases near you ignite automatically.", + "perk_spell_duplication": "Projectile duplication", + "perkdesc_spell_duplication": "Your projectile spells have a chance to duplicate, but you're more vulnerable to projectile damage", + "perk_faster_wands": "Faster Wands (One-off)", + "perkdesc_faster_wands": "All wands you're currently carrying gain a bonus to their cast delay & reload time.", + "log_surprise": "Uh oh!", + "logdesc_surprise": "What did you do???", + "item_gourd": "Refreshing gourd", + "itemdesc_gourd": "Can be thrown to deal damage. Upon breaking, releases a refreshing aura.", + "menu_streaming_eventliststartnewgame": "You can configure the enabled events here after entering the game.\n(The game will remember the settings.)", + "menu_streaming_eventkind": "Type: $0", + "menu_streaming_eventauthor": "Author: $0", + "streaming_integration_toofeweventsenabled": "Please enable at least four events\nvia the Streaming options menu!", + "streamingevent_nothing": "Nothing", + "streamingeventdesc_nothing": "Nothing happens.", + "NEWTEXTSINCE20201002": "", + "streamingevent_improve_wands": "Improve wands", + "streamingeventdesc_improve_wands": "All wands in your vicinity get slightly better stats", + "streamingevent_weaken_wands": "Weaken wands", + "streamingeventdesc_weaken_wands": "All wands in your vicinity get slightly worse stats", + "mat_templebrick_weak": "weak brickwork", + "mat_magic_liquid_unstable_polymorph": "unstable polymorphine", + "mat_magic_liquid_unstable_teleportation": "unstable teleportatium", + "mat_magic_liquid_unstable_hp_regeneration": "unstable healthium", + "mat_magic_liquid_unstable_berserk": "unstable berserkium", + "mat_magic_liquid_unstable_charm": "unstable pheromone", + "mat_magic_liquid_unstable_invisibility": "unstable invisiblium", + "action_line_arc": "Linear arc", + "actiondesc_line_arc": "Makes a projectile fly only in cardinal or diagonal lines", + "perk_orbit": "Phasing", + "perkdesc_orbit": "Projectiles seemingly phase through you.", + "greed_curse_damage": "Curse of Greed", + "perk_mana_from_kills": "Kills to mana", + "perkdesc_mana_from_kills": "Every time an enemy near you dies, you release mana-recharging liquid.", + "perk_mega_beam_stone": "Summon Sädekivi (One-off)", + "perkdesc_mega_laser": "You will gain a curious artefact", + "perk_foodclock": "Food clock", + "perkdesc_foodclock": "Being well nourished is good for you", + "log_hungry": "You feel hungry", + "log_starving": "You are starving", + "action_lifetime_infinite": "Infinite lifetime", + "actiondesc_lifetime_infinite": "Makes a projectile last forever, but also makes it hurt you", + "action_cloud_oil": "Oil cloud", + "actiondesc_cloud_oil": "Creates a rain of oil", + "menu_streaming_hidevotecounts": "Hide vote counts during voting: $0", + "menu_streaming_uiposleft": "Position UI to the left side of the screen: $0", + "menu_streaming_uiposleft_hint": "EXPERIMENTAL: UI might sometimes look funny", + "log_alchemist_key_alt_first": "The key listens...", + "logdesc_alchemist_key_alt_first": "It's taking in the music.", + "log_alchemist_key_alt_second": "The key has taken in the full song", + "logdesc_alchemist_key_alt_second": "It's ready.", + "log_alchemist_key_alt_reward": "The chest opens!", + "logdesc_alchemist_key_alt_reward": "But the key might have other stories to tell...", + "animal_greed_ghost": "Ghost of Greed", + "item_essence_greed": "Eternal Wealth", + "itemdesc_essence_greed": "You gain more gold but a curse will haunt you", + "log_greed_curse_away": "The crystal shatters!", + "logdesc_greed_curse_away": "The curse has gone away, but so have the treasures it grants.", + "mat_templebrick_golden_static": "Fool's gold", + "biome_greed_room": "Hall of Wealth", + "log_greed_curse_back": "The curse returns!", + "menuoptions_cosmeticparticlecoeff": "Cosmetic particle amount", + "menuoptions_cosmeticparticlecoeff_hint": "Particle amount will be reduced at this rate if there are lots of particles", + "biomemodifierdesc_plant_infested": "It smells like soil after rain", + "biomemodifierdesc_mechanical": "You can hear the sounds of machinery", + "biomemodifierdesc_furnished": "It feels cozy in here", + "biomemodifierdesc_booby_trapped": "You feel wary", + "biomemodifierdesc_perforated": "It feels roomy in here", + "biomemodifierdesc_tunneled": "You can hear faint sounds of construction", + "biomemodifierdesc_hiisi_invasion": "You can hear Hiisi grunts from the distance", + "biomemodifierdesc_pipes": "You can hear someone clanging on metal pipes", + "biomemodifierdesc_spooky": "The hair in the back of your neck stands up", + "biomemodifierdesc_twisted": "It feels like your head is spinning", + "biomemodifierdesc_cheery": "You feel cheery", + "biomemodifierdesc_ominous": "It feels ominous in here", + "mat_templebrick_diamond_static": "Diamond brickwork", + "log_alchemist_chest_opened_alt": "The chest opens again", + "logdesc_alchemist_chest_opened_alt": "It still remembers the song.", + "animal_thunderskull": "Sähkiö", + "item_chest_light": "Coral chest", + "item_mega_beam_stone": "Sädekivi", + "itemdesc_mega_beam_stone": "This artefact has a picture of a celestial beam.", + "log_beam_stone": "You feel like you should move...", + "logdesc_beam_stone": "Something terrible is going to happen", + "damage_plasmabeam": "plasma beam", + "mat_meat_spider": "spider meat", + "mat_blood_spider": "spider blood", + "mat_blood_frog": "frog blood", + "release_notes_10_highlights": "HIGHLIGHTS:\nNew Daily Practice Run game mode.\nTwitch integration - let stream viewers make your game even more more chaotic.\nBiome modifiers - biomes are sometimes a bit different from the usual form.\nSome biomes have simulated temperature effects.\nLots of gameplay and UI tweaks and additions.\nVisual and audio enhancements.\nNew spells, perks, enemies, materials, secrets, sounds and more.\nOver 15 new music music tracks: Underground Jungle, Vault, Temple of the Art and more.\nPerformance optimizations and bug fixes.\nOptions menu overhaul.", + "continue_10_warning": "We HIGHLY recommend that you don't try to load pre-1.0 saves. Everything will be broken and the gods will most definitely be angry. ", + "release_notes_title": "RELEASE NOTES", + "NEWTEXTSINCE20201013": "", + "menuoptions_configurecontrols_keyname_unknown": "Unknown", + "menuoptions_configurecontrols_action_unbound": "Unbound", + "menuoptions_configurecontrols_binding_primary": "Primary", + "menuoptions_configurecontrols_binding_secondary": "Secondary", + "menuoptions_configurecontrols_pressakey": "Press something", + "input_mouseleft": "Mouse left", + "input_mouseright": "Mouse right", + "input_mousemiddle": "Mouse middle", + "input_mousewheelup": "Mouse wheel up", + "input_mousewheeldown": "Mouse wheel down", + "input_space": "Space", + "input_tab": "TAB", + "input_xboxbutton_start": "START", + "input_xboxbutton_select": "SELECT", + "format_keybinding": "[$0]", + "biome_orbroom": "Orb room", + "menugameover_causeofdeath_killer_cause": "$0's $1", + "menugameover_causeofdeath_killer_cause_name_ends_in_s": "$0' $1", + "item_heart_cursed": "Cursed extra max health ", + "log_worldseed": "Seed: $0", + "menupause_worldseed": "Seed: $0", + "menupause_gamemode": " Mode: $0", + "menupause_location": " Location: $0", + "menupause_modsused": " Mods used: yes", + "menugameover_record": "RECORD!", + "dailyrun_time_left_hoursminutesseconds": "Time left: $0:$1.$0", + "dailyrun_dateformat_0day_1month_2year": "$0 $1 $2", + "month_0": "Jan", + "Month_1": "Feb", + "Month_2": "Mar", + "Month_3": "Apr", + "Month_4": "May", + "Month_5": "Jun", + "Month_6": "Jul", + "Month_7": "Aug", + "Month_8": "Sep", + "Month_9": "Oct", + "Month_10": "Nov", + "Month_11": "Dec", + "credits_and": "AND", + "credits_sound": "SOUND DESIGN, MUSIC LEAD AND MIXING", + "credits_musiccomposed": "MUSIC COMPOSED AND PERFORMED BY ", + "credits_musicrecording": "MUSIC RECORDING, MIXING AND MASTERING\nPetri Majuri at E-studio", + "credits_localization": "LOCALIZATION", + "credits_localization2": "LOCALIZATION & QA", + "credits_marketingandpr": "MARKETING & PR", + "credits_marketingandpr2": "MARKETING & PR CONSULTATION", + "credits_marketingandpr3": "EXTERNAL MARKETING & PR", + "credits_10trailers": "1.0 TRAILER EDITORS", + "credits_10trailers2": "1.0 LAUNCH TRAILERS BY", + "credits_testingandadditionalwork": "TESTING & ADDITIONAL WORK", + "credits_testing": "TESTING", + "credits_thankyou": "THANK YOU", + "credits_thankyou_andyou": "...And You!", + "credits_crypticscores": "CRYPTIC HIGHSCORES", + "credits_falling": "Noita is powdered by the Falling Everything Engine\nNoita uses FMOD Studio by Firelight Technologies Pty Ltd", + "credits_licenses": "Please see licenses/Attributions.txt for Creative Commons attribution list.", + "format_timer": "$0.$1", + "menustreaming_nsa": "Please turn on Online features to use this feature.", + "menu_oldsave_verybroken0": "Old save detected.", + "menu_oldsave_verybroken1": "We HIGHLY recommend that you don't try to load pre 1.0 saves. Everything will be broken and the Gods will most definitely be angry. ", + "menu_oldsave_verybroken2": "Old save detected", + "NEWTEXTSINCE20201015": "", + "item_kantele": "Kantele", + "item_ocarina": "Huilu", + "bookdesc02_forged": "The essence of life and death.", + "bookdesc04_forged": "Prove thine knowledge,\n from what is the west created of.", + "bookdesc05_forged": "Prove thine knowledge,\n from what is the east created of.", + "bookdesc06_forged": "To have true knowledge\n is to see in the darkness of ignorance.", + "bookdesc07_forged ": "To gain true knowledge,\n one must slow down and not hurry.", + "bookdesc08_forged": "Awaken, the flock of the shepherd and think for thyself!", + "bookdesc09_forged": "To walk a mile in someone else's boots.", + "bookdesc10_forged": "True knowledge is a slippery thing.\nThe unfortunate side effect of our divine stone.", + "stat_prev_best": "($0)", + "action_meteor_rain": "Meteorisade", + "actiondesc_meteor_rain": "Alea iacta est", + "action_worm_rain": "Matosade", + "actiondesc_worm_rain": "Alea iacta est", + "animal_boss_pit": "Sauvojen tuntija", + "NEWTEXTSINCE20201124": "", + "animal_wand": "Wand", + "animal_enlightened_laser_dark_wand": "Dark wand", + "animal_enlightened_laser_elec_wand": "Thunder wand", + "animal_enlightened_laser_fire_wand": "Fire wand", + "animal_enlightened_laser_light_wand": "Glowing wand", + "perk_high_gravity": "High Gravity", + "perkdesc_high_gravity": "All creatures, you included, have higher personal gravity.", + "streamingevent_heal_ghost": "Summon Healing Ghosts", + "streamingeventdesc_heal_ghost": "You get a few healing ghost friends", + "streamingevent_player_gas": "Excess Gas", + "streamingeventdesc_player_gas": "Your body exudes flammable gas for a time", + "streamingevent_areadamage_player": "Friendly Contact Damage", + "streamingeventdesc_areadamage_player": "You gain a field that deals damage to nearby enemies for a time.", + "streamingevent_areadamage_enemy": "Enemy Contact Damage", + "streamingeventdesc_areadamage_enemy": "Enemies near you gain fields that deal damage to you if you get close.", + "streamingevent_twitchy": "Twitchy!", + "streamingeventdesc_twitchy": "You have trouble controlling your wand for a time", + "streamingevent_spawn_perk": "Gain Random Perk", + "streamingeventdesc_spawn_perk": "You're granted a random perk", + "streamingevent_shield_ghost": "Summon Shielding Ghost", + "streamingeventdesc_shield_ghost": "You get a shielding ghost friend", + "streamingevent_matter_eater": "Matter Eater", + "streamingeventdesc_matter_eater": "All projectiles eat up the ground for a time", + "streamingevent_invisible_player": "Personal Invisibility", + "streamingeventdesc_invisible_player": "You become invisible for a time", + "streamingevent_invisible_enemy": "Invisible Enemies", + "streamingeventdesc_invisible_enemy": "Enemies become invisible for a time", + "streamingevent_neutralized": "Neutralized Spells", + "streamingeventdesc_neutralized": "All projectiles near you become neutralized for a time", + "streamingevent_high_spread": "Extreme Spread", + "streamingeventdesc_high_spread": "All projectiles have very high spread for a time", + "streamingevent_bubble": "Safety bubble", + "streamingeventdesc_bubble": "You're encased in a safe bubble for a time", + "streamingevent_spawn_perk_enemy": "Give Perks To Enemies", + "streamingeventdesc_spawn_perk_enemy": "Nearby enemies get random perks", + "animal_wizard_twitchy": "Sätkymestari", + "status_twitchy": "Twitchy", + "statusdesc_twitchy": "Your hand spasms randomly and your spells can hurt you!", + "mat_meat_fast": "Wobbly meat", + "hud_wand_castdelay": "Cast delay: $0 s", + "gamemode_dailyrun_desc_offline_mode": "Offline Daily Run\nThe seed is different from the Online Daily Run.\nBut you can play this seed as many times as you like\nwithin the 24 hours.\n", + "biomemodifierdesc_gravity_fields": "You feel an invisible force pushing and pulling you", + "biomemodifierdesc_fungal": "The air is filled with fungal spores", + "menuoptions_steamcloud": "Steam Cloud: $0", + "menuoptions_enableall": "Enable all", + "menuoptions_disableall": "Disable all", + "menu_streaming_usernames_visible": "Creatures can be named after viewers: $0", + "menu_mods_settings": "Mod settings", + "menu_modsettings_changes_restart": "Changes will be applied when you restart the game.", + "menu_modsettings_changes_worldgen": "Changes will be applied when you start a new game.", + "menu_mods_nosettings": "Enabled mods have no settings.", + "biomemodifierdesc_shielded": "This place feels exceptionally secure", + "mat_rock_static_cursed_green": "Greed-cursed rock", + "mat_cursed_liquid": "Greed-cursed liquid", + "log_greed_curse_away_full": "The curse relents.", + "logdesc_greed_curse": "You gain 3x gold, but are terribly cursed!", + "item_greed_crystal": "Greed-cursed crystal", + "log_moon_altar_extra": "The gods are confused", + "logdesc_moon_altar_extra": "What is that?!", + "itemdesc_alchemy_key_musicbox_1": "The key remembers a song.", + "itemdesc_alchemy_key_musicbox_2": "The key remembers two songs.", + "itemdesc_alchemy_key_musicbox_3": "The key remembers three songs.", + "itemdesc_alchemy_key_musicbox_4": "The key is ready.", + "perk_exploding_gold": "Exploding Gold", + "perkdesc_exploding_gold": "Gold dropped by enemies explodes when it disappears, is picked up or touched by other enemies!", + "action_quantum_split": "Quantum Split", + "actiondesc_quantum_split": "Makes a projectile split into three projectiles whose existences are entangled", + "log_fasttravel": "A portal appears!", + "logdesc_fasttravel": "This could be useful...", + "action_chain_shot": "Chain Spell", + "actiondesc_chain_shot": "Causes a projectile to cast a copy of itself upon expiring, up to 5 times", + "action_teleport_projectile_short": "Small Teleport Bolt", + "actiondesc_teleport_projectile_short": "A shortlived magical bolt that moves you wherever it ends up flying", + "perk_worm_smaller_holes": "Feared by Worms", + "perkdesc_worm_smaller_holes": "Worms run away from you, and worm and lukki enemies no longer destroy terrain while burrowing.", + "perk_worm_bigger_holes": "More Worm Digging", + "perkdesc_worm_bigger_holes": "Worms now dig a larger area around them.", + "animal_homunculus": "Homunculus", + "streamingevent_homunculus": "Summon Random Homunculi", + "streamingeventdesc_homunculus": "A group of helpful little homunculi appears to aid you", + "streamingevent_homunculus_dark": "Summon Digging Homunculus", + "streamingeventdesc_homunculus_dark": "A helpful little homunculus comes to your aid", + "streamingevent_homunculus_fire": "Summon Fiery Homunculus", + "streamingeventdesc_homunculus_fire": "A helpful little homunculus comes to your aid", + "streamingevent_homunculus_heal": "Summon Healer Homunculus", + "streamingeventdesc_homunculus_heal": "A helpful little homunculus comes to your aid", + "streamingevent_homunculus_laser": "Summon Glowing Homunculus", + "streamingeventdesc_homunculus_laser": "A helpful little homunculus comes to your aid", + "streamingevent_homunculus_punch": "Summon Puncher Homunculus", + "streamingeventdesc_homunculus_punch": "A helpful little homunculus comes to your aid", + "action_mu": "Mu", + "actiondesc_mu": "Every modifier-type spell in the current wand is applied to a projectile", + "action_reset": "Wand Refresh", + "actiondesc_reset": "Reloads the wand immediately", + "perk_extra_slots": "Extra Wand Capacity (One-off)", + "perkdesc_extra_slots": "The wands you're currently carrying gain 1-3 additional spell slots (to a maximum of 25).", + "perk_teleportitis_dodge": "Teleportitis Dodge", + "perkdesc_teleportitis_dodge": "You teleport a short distance away when an enemy projectile is near.", + "perk_extra_mana": "High Mana, Low Capacity (One-off)", + "perkdesc_extra_mana": "Your currently held wand loses half its capacity, but gains more mana.", + "perk_homunculus": "Homunculus", + "perkdesc_homunculus": "Every time you leave a Holy Mountain, a helpful homunculus is summoned.", + "action_larpa_death": "Larpa Explosion", + "actiondesc_larpa_death": "A projectile will shoot out 8 copies of itself when it expires or hits the ground", + "action_bounce_larpa": "Larpa Bounce", + "actiondesc_bounce_larpa": "A projectile will launch a copy of itself when it bounces", + "log_homunculus": "A homunculus is summoned!", + "animal_wizard_hearty": "Haavoittajamestari", + "status_hearty": "Heartache", + "statusdesc_hearty": "Your maximum health is temporarily halved.", + "item_safe_haven": "Kammi", + "item_description_safe_haven": "Can be thrown to summon a cozy hut", + "item_kakka": "Kakkakikkare", + "itemdesc_kakka": "This mysterious spiral-shaped artefact smells horrible and feels warm to the touch", + "mat_feces": "Feces", + "mat_gas_smelly": "Smelly vapour", + "mat_peat": "Peat", + "animal_drone_shield": "Turvalennokki", + "animal_wizard_weaken": "Turvattomuusmestari", + "animal_wizard_wither": "Kuihduttajamestari", + "status_weaken": "Vulnerable", + "statusdesc_weaken": "Your protective perks are temporarily disabled.", + "mat_meat_fruit": "Fruit flesh", + "biome_wizardcave": "Wizards' den", + "action_zeta": "Zeta", + "actiondesc_zeta": "Copies a random spell in another wand you're holding", + "perk_laser_aim": "Pinpointer", + "perkdesc_laser_aim": "Your spells fly faster and have lower spread, and you have a handy sightline for aiming!", + "item_vasta": "Vasta", + "item_vihta": "Vihta", + "action_ball_lightning": "Ball Lightning", + "actiondesc_ball_lightning": "Summons three short range electrical orbs", + "perk_low_recoil": "Low Recoil", + "perkdesc_low_recoil": "Recoil caused by your spells is greatly reduced, but your spells fly slightly slower.", + "perk_projectile_repulsion_sector": "Projectile Repulsion Sector", + "perkdesc_projectile_repulsion_sector": "Projectiles that fly into a small sector in front of you get blown away.", + "perk_projectile_eater_sector": "Projectile Eater", + "perkdesc_projectile_eater_sector": "Projectiles that fly into a small sector behind of you disappear.", + "status_wither": "Withered", + "statusdesc_wither": "You're temporarily more vulnerable to all damage types.", + "perk_projectile_slow_field": "Projectile Slower", + "perkdesc_projectile_slow_field": "Projectiles near you slow down.", + "action_nolla": "Nolla", + "actiondesc_nolla": "The duration of a projectile is set to zero", + "item_wand_good_1": "Wand of Swiftness", + "item_wand_good_2": "Wand of Destruction", + "item_wand_good_3": "Wand of Multitudes", + "perkdesc_revenge_projectile": "You return projectiles back to enemies upon taking damage, and gain 20% resistance against projectiles & explosions.", + "log_always_cast_failed": "Too many always cast spells!", + "logdesc_always_cast_failed": "This wand is already overloaded...", + "bookdesc07_forged": "To gain true knowledge,\n one must slow down and not hurry.", + "log_perk_fulltitle": "$0 - $1", + "mat_monster_powder_test": "Monstrous powder", + "action_homing_accelerating": "Accelerative Homing", + "actiondesc_homing_accelerating": "A projectile homes towards enemies at an increasing pace", + "action_teleport_closer": "Homebringer Teleport Bolt", + "actiondesc_teleport_closer": "Brings the target hit closer to you", + "action_fanning_shot": "Fanning Shot", + "actiondesc_fanning_shot": "Launches multiple projectiles in a fan-like pattern", + "action_projectile_fan": "Spell Fan", + "actiondesc_projectile_fan": "Pushes projectiles away from you", + "action_spells_to_power": "Spells to Power", + "actiondesc_spells_to_power": "Converts any nearby projectiles cast by you into extra damage", + "action_enemies_to_power": "Essence to Power", + "actiondesc_enemies_to_power": "Increases a projectile's damage based on the number of creatures nearby", + "action_explosion_light": "Magical Explosion", + "actiondesc_explosion_light": "A large explosion that doesn't damage the ground", + "action_phi": "Phi", + "actiondesc_phi": "Casts a copy of every projectile-type spell in the current wand", + "action_burst_x": "Myriad Spell", + "actiondesc_burst_x": "Simultaneously casts as many spells as you have left uncast in your wand", + "action_worm_launcher": "Summon Worm", + "actiondesc_worm_launcher": "Grabs a worm from a nether realm at high velocity for a short time", + "action_spiraling_shot": "Spiral Arc", + "actiondesc_spiraling_shot": "A projectile flies in a spiralling pattern", + "action_orbit_shot": "Orbiting Arc", + "actiondesc_orbit_shot": "A projectile orbits the point of its origin", + "action_form_potion": "Create potion", + "actiondesc_form_potion": "A small vortex sucks material and forms a small potion filled with it", + "action_omega_disc_bullet": "Summon Omega Sawblade", + "actiondesc_omega_disc_bullet": "That's a lot of sawblade", + "action_temporary_wall": "Summon Wall", + "actiondesc_temporary_wall": "Summons a shortlived obstacle", + "action_temporary_platform": "Summon Platform", + "actiondesc_temporary_platform": "Summons a shortlived bit of ground", + "action_summon_missile": "Summon Missile", + "actiondesc_summon_missile": "Summons a homing, explosive rocket", + "animal_maggot_tiny": "Limatoukka", + "animal_boss_wizard": "Mestarien mestari", + "animal_coward": "Raukka", + "animal_thundermage_big": "Suur-Ukko", + "animal_thunderhound": "Ukkoskoira", + "animal_boss_robot": "Kolmisilmän silmä", + "animal_skygazer": "Taivaankatse", + "animal_gazer_big": "Kolmisilmän kätyri", + "animal_dark_alchemist": "Pahan muisto", + "action_laser_emitter": "Plasma beam", + "actiondesc_laser_emitter": "An instantaneous, dangerous beam of light", + "action_laser_emitter_thrower": "Plasma show", + "actiondesc_laser_emitter_thrower": "A projectile fires beams of light in random directions", + "action_laser_cross": "Plasma beam X", + "actiondesc_laser_cross": "Plasma beams fly in an X-shaped pattern", + "perk_personal_laser": "Personal Plasma Beam", + "perkdesc_personal_laser": "You constantly fire a devastating plasma beam, but you fire spells much slower", + "mat_wizardstone": "Odd brickwork", + "mat_drape": "Drapes", + "mat_darkstone": "Dark rock", + "perk_moon_radar": "Moon Radar", + "perkdesc_moon_radar": "Points you towards the moon...?", + "logdesc_greed_curse_away2": "The curse has gone away.", + "log_greed_curse_crystal2": "The crystal breaks!", + "logdesc_greed_curse_crystal2": "The curse is active once again!", + "menu_mods_settings_short": "Mod settings", + "NEWTEXTSINCE20201125": "", + "animal_gate_monster_a": "Veska", + "animal_gate_monster_b": "Molari", + "animal_gate_monster_c": "Mokke", + "animal_gate_monster_d": "Seula", + "action_if_enemy": "Requirement - Enemies", + "actiondesc_if_enemy": "The next spell is skipped if there are less than 15 enemies nearby", + "action_if_projectile": "Requirement - Projectile Spells", + "actiondesc_if_projectile": "The next spell is skipped if there are less than 20 projectiles nearby", + "action_if_hp": "Requirement - Low Health", + "actiondesc_if_hp": "The next spell is skipped if you have more than 25% health left", + "action_if_end": "Requirement - Endpoint", + "actiondesc_if_end": "Any Requirement spells before this will skip all spells between them and this spell", + "action_if_half": "Requirement - Every Other", + "actiondesc_if_half": "The next spell is skipped every other time this spell is cast", + "action_if_else": "Requirement - Otherwise", + "actiondesc_if_else": "If a Requirement spell before this succeeds, the next spell is skipped", + "action_bloodlust": "Bloodlust", + "actiondesc_bloodlust": "A projectile gains a hefty damage boost, but is also able to hurt you", + "action_colour_red": "Red Glimmer", + "actiondesc_colour_red": "Gives a projectile a red sparkly trail", + "action_colour_green": "Green Glimmer", + "actiondesc_colour_green": "Gives a projectile a green sparkly trail", + "action_colour_purple": "Purple Glimmer", + "actiondesc_colour_purple": "Gives a projectile a purple sparkly trail", + "action_colour_orange": "Orange Glimmer", + "actiondesc_colour_orange": "Gives a projectile a orange sparkly trail", + "action_colour_blue": "Blue Glimmer", + "actiondesc_colour_blue": "Gives a projectile a blue sparkly trail", + "action_colour_yellow": "Yellow Glimmer", + "actiondesc_colour_yellow": "Gives a projectile a yellow sparkly trail", + "action_colour_invis": "Invisible Spell", + "actiondesc_colour_invis": "Turns a projectile invisible", + "action_colour_rainbow": "Rainbow Glimmer", + "actiondesc_colour_rainbow": "Gives a projectile a randomly colored sparkly trail", + "status_blindness": "Blinded", + "statusdesc_blindness": "You can barely see a thing!", + "perk_radar_item": "Item Radar", + "perkdesc_radar_item": "You can sense nearby items.", + "perk_radar_moon": "Moon Radar", + "perkdesc_radar_moon": "You can sense lunar energy.", + "action_explosion_remove": "Remove Explosion", + "actiondesc_explosion_remove": "Makes a projectile no longer explode", + "perk_extra_potion_capacity": "Extra Potion Capacity", + "perkdesc_extra_potion_capacity": "Potions store 80% more liquid", + "perk_vomit_rats": "Spontaneous Generation", + "perkdesc_vomit_rats": "Vomit near you evolves into helpful rat minions", + "mat_rat_powder": "Ratty powder", + "mat_poo_gas": "Nauseating gas", + "perk_revenge_rats": "Revenge Rats", + "perkdesc_revenge_rats": "When you take damage, there's a chance that a helpful rat minion is summoned", + "streamingevent_add_always_cast": "Always Cast", + "streamingeventdesc_add_always_cast": "Your currently-held wand gets a permanent always cast spell! (max. 4)", + "action_expanding_orb": "Expanding Sphere", + "actiondesc_expanding_orb": "A slow projectile that increases its damage over time", + "action_homing_projectile": "Follow Spells", + "actiondesc_homing_projectile": "Makes a projectile home towards other projectile spells", + "mat_orb_powder": "Guiding powder", + "action_vacuum_powder": "Powder Vacuum Field", + "actiondesc_vacuum_powder": "Sucks powder-like materials nearby and releases them upon expiring", + "action_vacuum_liquid": "Liquid Vacuum Field", + "actiondesc_vacuum_liquid": "Sucks liquid materials nearby and releases them upon expiring", + "item_essence_stone": "Essence Eater", + "animal_physics_pata": "Pata", + "item_wand_experimental_1": "Experimental Wand", + "item_wand_experimental_2": "Experimental Wand", + "booktitle_fisher": "Alchemist's Note", + "bookdesc_fisher": "”Here I'm safe. I am safe.\nI left the others behind, and I have locked my research so that only those with real understanding can reach it.\nI should not worry. As long as I resist the temptation, I will be safe.\nI know my limits. Here I am far away from them.\n\nI should not worry.”", + "biome_rainforest_dark": "Lukki lair", + "mat_darkness": "Ominous liquid", + "action_phasing_arc": "Phasing Arc", + "actiondesc_phasing_arc": "Makes a projectile fly much slower, but teleport short distances over its flight", + "status_homing_shooter": "Self-homing Spells", + "statusdesc_homing_shooter": "Your spells home towards yourself for a time.", + "status_drunk_ui": "Magic Drunkenness", + "statusdesc_drunk_ui": "Your spells are less accurate and you're more flammable for a time.", + "status_movement_slower_ui": "Slower Movement", + "statusdesc_movement_slower_ui": "You move slower for a time.", + "status_confusion_ui": "Confusion", + "statusdesc_confusion_ui": "Your movement is unsure for a time.", + "damage_orb_blood": "blood link", + "boss_wizard_1": "You're confused!", + "boss_wizard_2": "You're drunk!", + "boss_wizard_3": "Your health is halved!", + "boss_wizard_4": "You move more slowly!", + "boss_wizard_5": "You're twitchy!", + "boss_wizard_6": "You're weakened!", + "boss_wizard_7": "You're withering!", + "boss_wizard_8": "Your projectiles home back to you!", + "action_vacuum_entities": "Vacuum Field", + "actiondesc_vacuum_entities": "Sucks nearby projectiles and creatures into the middle of the field instantaneously", + "action_bloodtentacle": "Blood Tentacle", + "actiondesc_bloodtentacle": "When this tentacle hits an enemy, said enemy will also launch a tentacle", + "action_explosion_tiny": "Concentrated Explosion", + "actiondesc_explosion_tiny": "Limits the radius of a projectile's explosion heavily", + "action_liquid_to_explosion": "Liquid Detonation", + "actiondesc_liquid_to_explosion": "Converts nearby nonmagical liquids into explosive gunpowder", + "action_laser_emitter_four": "Plasma Beam Cross", + "actiondesc_laser_emitter_four": "Four deadly plasma beams in a cross-shape. Look out, they can hurt you as well!", + "action_laser_emitter_ray": "Plasma Beam Thrower", + "actiondesc_laser_emitter_ray": "A projectile fires plasma beams in all directions!", + "action_bounce_laser_emitter": "Plasma Beam Bounce", + "actiondesc_bounce_laser_emitter": "A projectile launches a plasma beam upon bouncing", + "action_homing_cursor": "Aiming Arc", + "actiondesc_homing_cursor": "A projectile rotates towards the direction you're aiming", + "booktitle_mestari": "A Cunning Contraption", + "bookdesc_mestari": "”The secret lies in music!\n\nThe key to the heavens' lock is borne from music all over the world.\n\nAnd in a way, as above, so below...”", + "biome_mestari_secret": "Throne room", + "streamingevent_fireworks": "Fireworks!", + "streamingeventdesc_fireworks": "Entirely safe (for a given value of safe)", + "streamingevent_holiday_mood": "Holiday Mood", + "streamingeventdesc_holiday_mood": "Let it be snow", + "streamingeventdesc_holiday_mood_2": "Let it snow", + "perk_contact_damage": "Contact Damage", + "perkdesc_contact_damage": "Enemies near you take damage; the damage is higher the lower your health gets.", + "mat_metal_sand": "Metal dust", + "mat_metal_sand_molten": "Molten metal", + "item_evil_eye": "Paha Silmä", + "item_description_evil_eye": "This eye-shaped artefact projects a malevolent glare", + "animal_lukki_dark": "Kammolukki", + "item_wand_kiekurakeppi": "Kiekurakeppi", + "item_wand_valtikka": "Valtikka", + "action_sigma": "Sigma", + "actiondesc_sigma": "Copies every static projectile -type spell in the wand when cast", + "action_tau": "Tau", + "actiondesc_tau": "Copies the two following spells in the wand when cast", + "material_transformed": "$0 (Transformed)", + "logdesc_reality_mutation": "You hear the word “$0” echoing and shifting in colours", + "action_laser_emitter_cutter": "Plasma Cutter", + "actiondesc_laser_emitter_cutter": "A plasma beam specialized in cutting materials!", + "action_laser_emitter_wider": "Plasma Beam Enhancer", + "actiondesc_laser_emitter_wider": "Makes plasma beam spell's beam wider", + "item_chest_treasure_pacifist": "A Pacifist's Reward", + "biomemodifierdesc_high_gravity": "The air feels heavy...", + "biomemodifierdesc_low_gravity": "The air feels light...", + "streamingevent_rain_blackhole": "Gravity Storm", + "streamingeventdesc_rain_blackhole": "Multiple black holes open in your vicinity!!", + "animal_necromancer_super": "Skoude", + "input_xboxbutton_dpad_up": "D-Pad up", + "input_xboxbutton_dpad_down": "D-Pad down", + "input_xboxbutton_dpad_left": "D-Pad left", + "input_xboxbutton_dpad_right": "D-Pad right", + "input_xboxbutton_back": "BACK", + "input_xboxbutton_left_thumb": "Left thumb", + "input_xboxbutton_right_thumb": "Right thumb", + "input_xboxbutton_left_shoulder": "Left shoulder", + "input_xboxbutton_right_shoulder": "Right shoulder", + "input_xboxbutton_left_stick_moved": "Left stick", + "input_xboxbutton_right_stick_moved": "Right stick", + "input_xboxbutton_a": "A", + "input_xboxbutton_b": "B", + "input_xboxbutton_x": "X", + "input_xboxbutton_y": "Y", + "input_xboxbutton_4": "Button #5", + "input_xboxbutton_5": "Button #6", + "input_xboxbutton_6": "Button #7", + "input_xboxbutton_7": "Button #8", + "input_xboxbutton_8": "Button #9", + "input_xboxbutton_9": "Button #10", + "input_xboxbutton_10": "Button #11", + "input_xboxbutton_11": "Button #12", + "input_xboxbutton_12": "Button #13", + "input_xboxbutton_13": "Button #14", + "input_xboxbutton_14": "Button #15", + "input_xboxbutton_15": "Button #16", + "input_xboxbutton_left_stick_left": "Left stick left", + "input_xboxbutton_left_stick_right": "Left stick right", + "input_xboxbutton_left_stick_up": "Left stick up", + "input_xboxbutton_left_stick_down": "Left stick down", + "input_xboxbutton_right_stick_left": "Right stick left", + "input_xboxbutton_right_stick_right": "Right stick right", + "input_xboxbutton_right_stick_up": "Right stick up", + "input_xboxbutton_right_stick_down": "Right stick down", + "input_xboxbutton_analog_00": "Left trigger", + "input_xboxbutton_analog_01": "Right trigger", + "input_xboxbutton_analog_02": "Analog button #3", + "input_xboxbutton_analog_03": "Analog button #4", + "input_xboxbutton_analog_04": "Analog button #5", + "input_xboxbutton_analog_05": "Analog button #6", + "input_xboxbutton_analog_06": "Analog button #7", + "input_xboxbutton_analog_07": "Analog button #8", + "input_xboxbutton_analog_08": "Analog button #9", + "input_xboxbutton_analog_09": "Analog button #10", + "input_leftshift": "left shift", + "input_rightshift": "right shift", + "controls_aim_stick": "aim", + "controls_drop_item": "(UI) drop item", + "controls_drink_potion": "(UI) drink potion", + "controls_ui_confirm": "(UI) confirm", + "controls_ui_drag": "(UI) drag", + "controls_takescreenshot": "take screenshot", + "controls_ui_quick_drag": "(UI) auto drag", + "perk_adventurer": "Healthy Exploration", + "perkdesc_adventurer": "Every time you visit a new area, you regain 60 health.", + "log_adventurer": "New area reached! You regain 60 health.", + "action_damage_forever": "Mana To Damage", + "actiondesc_damage_forever": "If the wand has more than 50 mana, all mana over that is converted into additional damage", + "action_homing_area": "Projectile Area Teleport", + "actiondesc_homing_area": "If a valid target appears somewhere in the proximity of a projectile, the projectile will teleport right on top of the target", + "animal_snowcrystal": "Haamukivi", + "ethereal_damage": "Ghostly touch", + "animal_ethereal_being": "Olematon", + "action_bomb_detonator": "Explosive Detonator", + "actiondesc_bomb_detonator": "All nearby explosive spells cast by you instantly detonate", + "logdesc_temple_upgrade_guardian": "The Gods are enraged", + "screenshot_saved": "Saved a screenshot to $0", + "item_wand_ruusu": "Ruusu", + "action_orbit_discs": "Sawblade Orbit", + "actiondesc_orbit_discs": "Makes four sawblades rotate around a projectile", + "action_orbit_fireballs": "Fireball Orbit", + "actiondesc_orbit_fireballs": "Makes four fireballs rotate around a projectile", + "action_orbit_nukes": "Nuke Orbit", + "actiondesc_orbit_nukes": "Makes four… nukes(?!) rotate around a projectile", + "action_orbit_lasers": "Plasma Beam Orbit", + "actiondesc_orbit_lasers": "Makes four plasma beams rotate around a projectile", + "action_orbit_larpa": "Orbit Larpa", + "actiondesc_orbit_larpa": "Makes four copies of a projectile rotate around it", + "log_greed_curse_return": "The curse has reactivated!", + "action_slow_but_steady": "Slow But Steady", + "actiondesc_slow_but_steady": "The reload time of the wand is set to exactly 1.5 seconds", + "item_wandstone": "Sauvan Ydin", + "itemdesc_wandstone": "This artefact can open the potential of wands to you even without perks...", + "item_greed_die": "Greed Die", + "itemdesc_greed_die": "The name may be more apt than one thinks.", + "item_greed_die_good": "Enjoy your riches!", + "item_greed_die_bad": "Gotcha!", + "mat_gem_box2d_turquoise": "Turquoise gemstone", + "item_powder_stash": "Material box", + "itemdesc_powder_stash": "A handy box for carrying powdery materials.", + "item_powder_stash_2": "Bag", + "itemdesc_powder_stash_2": "A handy bag for carrying powdery materials.", + "item_powder_stash_3": "Powder pouch", + "itemdesc_powder_stash_3": "A handy pouch for carrying powdery materials.", + "item_powder_stash_4": "Sack", + "itemdesc_powder_stash_4": "A handy sack for carrying powdery materials.", + "item_powder_stash_with_material": "$0 box", + "item_powder_stash_with_material_2": "$0 bag", + "item_powder_stash_with_material_3": "$0 pouch", + "item_powder_stash_with_material_4": "$0 sack", + "perk_hungry_ghost": "Hungry Ghost", + "perkdesc_hungry_ghost": "Summons a happy minion who'll eat enemy projectile every now and then.", + "status_damage_plus_small": "Damage Boost", + "statusdesc_damage_plus_small": "Your damage is boosted slightly for a time.", + "item_runestone_metal": "Runestone of Metal", + "perk_death_ghost": "Mournful Spirit", + "perkdesc_death_ghost": "Dying creatures leave behind a spirit that deals damage in a small area.", + "perk_risky_critical": "Close Call", + "perkdesc_risky_critical": "You gain additional chance to deal critical hits as long as there are enemies near you.", + "action_curse": "Venomous Curse", + "actiondesc_curse": "Imbues a projectile with a curse that makes the target hit by the projectile to waste away", + "damage_hitfx_curse": "Venomous Curse", + "action_exploding_ducks": "Flock of Ducks", + "actiondesc_exploding_ducks": "Summons a chaotic flock of spicy ducks", + "action_money_magic": "Gold to Power", + "actiondesc_money_magic": "Spends 5% of your current gold and adds damage to a projectile proportional to the amount spent", + "inventory_mod_damage_ice": "Dmg. Ice", + "inventory_mod_damage_slice": "Dmg. Slice", + "inventory_mod_damage_healing": "Dmg. Healing", + "inventory_mod_damage_curse": "Dmg. Curse", + "inventory_mod_damage_drill": "Dmg. Drill", + "inventory_dmg_healing": "Dmg. Healing", + "inventory_dmg_curse": "Dmg. Curse", + "status_curse_wither_projectile": "Weakening Curse - Projectiles", + "statusdesc_curse_wither_projectile": "You take 25% extra damage from projectiles.", + "status_curse_wither_explosion": "Weakening Curse - Explosives", + "statusdesc_curse_wither_explosion": "You take 25% extra damage from explosions.", + "status_curse_wither_melee": "Weakening Curse - Melee", + "statusdesc_curse_wither_melee": "You take 25% extra damage from melee attacks.", + "status_curse_wither_electricity": "Weakening Curse - Electricity", + "statusdesc_curse_wither_electricity": "You take 25% extra damage from electricity.", + "action_curse_wither_projectile": "Weakening Curse - Projectiles", + "actiondesc_curse_wither_projectile": "Target hit by a projectile takes 25% extra projectile damage for a time", + "action_curse_wither_explosion": "Weakening Curse - Explosives", + "actiondesc_curse_wither_explosion": "Target hit by a projectile takes 25% extra explosion damage for a time", + "action_curse_wither_melee": "Weakening Curse - Melee", + "actiondesc_curse_wither_melee": "Target hit by a projectile takes 25% extra melee damage for a time", + "action_curse_wither_electricity": "Weakening Curse - Electricity", + "actiondesc_curse_wither_electricity": "Target hit by a projectile takes 25% extra electricity damage for a time", + "action_worm_shot": "Worm Launcher", + "actiondesc_worm_shot": "Summons a giant worm to cause havoc for a moment!", + "action_black_hole_death_trigger": "Black Hole with Death Trigger", + "actiondesc_black_hole_death_trigger": "A slow orb of void that eats through all obstacles and casts another spell as it expires", + "perk_food_clock": "Eat Your Vegetables", + "perk_food_clock_2": "Food Clock", + "perkdesc_food_clock": "You inflict more damage the more satiated you are, but you start losing health if your stomach is empty.", + "damage_hunger": "Hunger", + "mat_porridge": "Hearty Porridge", + "log_greed_curse_away_short": "The curse dissipates for now...", + "logdesc_greed_curse_away_short": "...but it will be back!", + "animal_parallel_alchemist": "Alkemistin Varjo", + "animal_parallel_tentacles": "Kolmisilmän Kätyri", + "animal_hpcrystal": "Elvytyskristalli", + "status_rainbow_farts": "Rainbow farts", + "statusdesc_rainbow_farts": "Open your eyes, I see\nYour eyes are open\nWear no disguise for me\nCome into the open\n", + "mat_rainbow": "Rainbow", + "mat_rainbow_gas": "Unicorn farts", + "action_rainbow_trail": "Rainbow trail", + "actiondesc_rainbow_trail": "Gives a projectile a trail of rainbow", + "item_gold_orb": "Shiny orb", + "itemdesc_gold_orb": "It hums slightly. What happens if you kick it, you wonder...", + "item_stonestone": "Tannerkivi", + "itemdesc_stonestone": "It looks like it could stand the test of aeons.", + "log_dark_moon_altar_extra": "Heretic!", + "logdesc_dark_moon_altar_extra": "How dare you do this!", + "log_dark_moon_altar": "”From my blood...”", + "logdesc_dark_moon_altar": "from my blood... from my blood... from my blood... from my blood...", + "mat_steelrusted": "rusted steel", + "stat_streaks": "Streaks:", + "animal_necrobot": "Tuonelankone", + "animal_necrobot_super": "Marraskone", + "animal_minipit": "Pienkätyri", + "progress_killed_by": "Killed by: $0", + "animal_scavenger_glue": "Liimahiisi", + "mat_glue": "Glue", + "item_sunseed": "Auringonsiemen", + "itemdesc_sunseed": "It glows, full of promise.", + "animal_boss_ghost": "Unohdettu", + "animal_boss_ghost_polyp": "Häive", + "action_remove_bounce": "Remove Bounce", + "actiondesc_remove_bounce": "A normally bouncy projectile stops doing so", + "biome_ghost_secret": "Forgotten cave", + "hint_endingmcguffin_enter_newgameplus": "Press $0 to enter New Game$1", + "biome_winter_caves": "Snowy Chasm", + "item_mcguffin_33": "Amulet of Yendor", + "itemdesc_mcguffin_33": "It is said to possess powers which mere mortals can scarcely comprehend, let alone utilize", + "action_glue_shot": "Glue Ball", + "actiondesc_glue_shot": "A projectile that explodes into a sticky mess", + "action_petrify": "Petrify", + "actiondesc_petrify_a": "Turns a wounded enemy into stone", + "actiondesc_petrify_b": "A critical hit turns an enemy into stone", + "actiondesc_petrify_c": "A critical hit turns a wounded enemy into stone", + "perk_gamble": "Gamble (One-off)", + "perkdesc_gamble": "You gain two random perks.", + "item_wand_riimusauva": "Riimusauva", + "item_wand_arpaluu": "Arpaluu", + "item_wand_varpuluuta": "Varpuluuta", + "animal_surge": "Sähikäinen", + "animal_spiderbot": "Rautalukki", + "animal_piranha": "Kyrmyniska", + "animal_fish_giga": "Syväolento", + "action_worm_shot_big": "Giga Worm Launcher", + "actiondesc_worm_shot_big": "Summons a massive worm to cause havoc for a moment!", + "action_fan": "Projectile Fan", + "actiondesc_fan": "Pushes incoming projectiles away in a narrow cone formation", + "perk_fungal_disease": "Fungal Disease", + "perkdesc_fungal_disease": "When near danger, you sprout fungal growths.", + "perk_lukki_minion": "Lukki Minion", + "perkdesc_lukki_minion": "Summons a lukki minion to your help.", + "perk_angry_levitation": "Rage-fueled Levitation", + "perkdesc_angry_levitation": "Killing an enemy makes you replenish some of your levitation power.", + "perk_destructive_spells": "Destructive Magic", + "perkdesc_destructive_spells": "Your spells destroy ground more efficiently.", + "perk_mold": "Fungal Colony", + "perkdesc_mold": "Slime near you spontaneously turns into fungal creatures.", + "perk_cordyceps": "Cordyceps", + "perkdesc_cordyceps": "Fungal creatures spawn from the corpses of enemies killed by you.", + "action_pollen": "Pollen", + "actiondesc_pollen": "A small, floating projectile that homes towards nearby creatures", + "action_homing_short": "Short-range Homing", + "actiondesc_homing_short": "A projectile flies towards targets when near them", + "animal_fungus_giga": "Huhtasieni", + "animal_fungus_nest": "Rihmasto", + "log_new_step": "A transformation happens!", + "logdesc_new_step": "Something has changed...", + "item_seed_b": "Auringonmuna", + "itemdesc_seed_b": "It glows with high intensity now...", + "item_seed_c": "Aurinkokivi", + "itemdesc_seed_c": "The essence of the Sun, crystallized.", + "item_seed_d": "Tähdenpoikanen", + "itemdesc_seed_d": "It's still not fully grown but radiates heat.", + "item_seed_e": "Uusi Aurinko", + "itemdesc_seed_e": "It is done", + "material_mold": "Mold", + "material_cloth": "Cloth", + "biome_robobase": "Power plant", + "biome_fun": "Overgrown cavern", + "item_book_music_b": "Research Notes", + "itemdesc_book_music_b": "“One in the pond\nOne in the tree\nOne on the ledge\nOne under the sun”", + "item_book_music": "Alchemist's Notebook", + "itemdesc_book_music": "”The one below listens to my songs...\n \nG D# G E A\n \nE C B G# F”", + "animal_sentry": "Tarkkailija", + "animal_neutralizer": "Pysäyttäjä", + "animal_hidden": "Vakoilija", + "animal_soldier": "Teloittaja", + "item_book_s_a": "Notes on Grand Alchemy", + "itemdesc_book_s_a": "”Among the great Alchemical endeavours there are some that,\nwhile not equal to the Great Work, nonetheless are revered greatly\nfor the deific potence they instill to whomsoever succeeds\nin harnessing their Power.\n\nThe One I am to discuss calls for a Seed of great promise, hidden deep within the Soil of this Earth...”", + "itemdesc_book_s_b": "”...Bring the slumbering Seed to life by letting it soak in the rays of the Sun, on the pinnacle of past civilizations...”", + "itemdesc_book_s_c": "”...The Alchemical process requires great Fire and Heat; for this purpose,\nlay the Stone in Fiery Earth and bring forth its transformation with great magical Heat of Destruction...”", + "itemdesc_book_s_d": "”...Once finished, It will sustain life; to this end, its Creation asks for a substantial amount\nof Life Force. Let the Egg engulf One Hundred of your Foes and drink their Blood...”", + "itemdesc_book_s_e": "”...As a final step, imbue the Youngling with the crystallized Essences of\nthe Four Elements. But beware, for the Youngling is susceptible to corruptive influence...”", + "item_book_music_c": "Book of the Key", + "itemdesc_book_music_c": "”Once the Key has listened to you, bring it home...\nOne home in the sky, beyond the invisible steps...\nOne home in the underworld, below seas of magma...”", + "item_book_robot": "Musings of an Adventurer", + "itemdesc_book_robot": "”This machinery is unlike any I've seen before. Did the Hiisi create it? Or was it always here?”", + "item_d12": "12-sided Die", + "itemdesc_d12": "More sides, more potential rewards!", + "action_knife_ring": "Ring of Knives", + "actiondesc_knife_ring": "A shrinking ring of 8 knives is summoned", + "action_iceball": "Iceball", + "actiondesc_iceball": "A magical ball of frozen fire", + "item_d12_greed": "12-sided Greed Die", + "itemdesc_d12_greed": "Better not!", + "item_book_moon": "Book of Celestial Bodies", + "itemdesc_book_moon": "”As with everything else, every celestial body also has its counterpart.\nFor every golden star is a dark enigma, and for every silvery moon there is a hollow shadow.”", + "perk_minion_powerup": "Powerful Minions", + "perkdesc_minion_powerup": "Any minions spawned to your aid have increased damage output and health.", + "item_seed_f": "Pimeä Aurinko", + "itemdesc_seed_f": "Something went wrong...!", + "logdesc_new_step_b": "Everything is not right here...", + "perk_map": "Spatial Awareness", + "perkdesc_map": "If you stop for a moment, you can sense your location relative to the Mountain.", + "biome_underwater": "Sunken cavern", + "log_collision_1": "It is gone", + "logdesc_collision_1": "The old are devoured for the new to take their place", + "log_collision_2": "As Above, So Below...", + "logdesc_collision_2": "The new heart of the world is at balance", + "log_collision_3": "As Above, So Below, but...", + "logdesc_collision_3": "The new heart of the world grows with corruption at its center", + "item_goldnugget_200000": "Golden Idol (200000)", + "item_bloodmoney_200000": "Bloody golden Idol (200000)", + "NEWTEXTSINCE20210216": "", + "action_tntbox": "Summon Explosive Box", + "actiondesc_tntbox": "Summons a box of explosive matter", + "action_tntbox_big": "Summon Large Explosive Box", + "actiondesc_tntbox_big": "Summons a large box of explosive matter", + "streamingevent_all_access_teleport": "Free-for-all Portals", + "streamingeventdesc_all_access_teleport": "Creatures near you gain the ability to enter the Holy Mountain portals.", + "item_book_hint": "Book of Guidance", + "item_gold_orb_greed": "Cruel Orb", + "itemdesc_gold_orb_greed": "It seems to trickle with blood...", + "status_weaken_combined": "Weakened", + "statusdesc_weaken_combined": "Your resistances and protective perks are disabled temporarily.", + "damage_sun": "Valo", + "item_musicstone": "Kuulokivi", + "itemdesc_musicstone": "This artefact is covered in note-shaped engravings and is pulsing at a steady pace.\nIs that the sound of distant music?", + "damage_darksun": "Pimeys", + "animal_fungus_tiny": "Myrkkynääpikkä", + "perkdesc_mega_beam_stone": "You gain an artefact that allows you to call the celestial rage.", + "animal_fungus_tiny_perk": "Sappitatti", + "reward_sun": "Benign sunshine!", + "action_sun": "Summon A Sun", + "actiondesc_sun": "Creates an immensely powerful entity; Can be cast only once", + "action_darksun": "Summon A Dark Sun", + "actiondesc_darksun": "Creates an immensely powerful entity; Can be cast only once", + "achievement_excavationsite": "Reached Coal Pits", + "achievementdesc_excavationsite": "Reached Coal Pits", + "achievement_snowcave": "Reached Snowy Depths", + "achievementdesc_snowcave": "Reached Snowy Depths", + "achievement_snowcastle": "Reached Hiisi Base", + "achievementdesc_snowcastle": "Reached Hiisi Base", + "achievement_rainforest": "Reached Underground Jungle", + "achievementdesc_rainforest": "Reached Underground Jungle", + "achievement_vault": "Reached The Vault", + "achievementdesc_vault": "Reached The Vault", + "achievement_crypt": "Reached Temple of the Art", + "achievementdesc_crypt": "Reached Temple of the Art", + "achievement_victory": "Victory", + "achievementdesc_victory": "Victory", + "achievement_orbs": "Gathered All The Knowledge", + "achievementdesc_orbs": "Gathered All The Knowledge", + "achievement_progress_enemies": "100% Enemy Progress", + "achievementdesc_progress_enemies": "100% Enemy Progress", + "achievement_progress_spells": "100% Spell Progress", + "achievementdesc_progress_spells": "100% Spell Progress", + "achievement_progress_perks": "100% Perk Progress", + "achievementdesc_progress_perks": "100% Perk Progress", + "achievement_impressed": "The Gods Are Impressed", + "achievementdesc_impressed": "The Gods Are Impressed", + "achievement_afraid": "The Gods Are Afraid", + "achievementdesc_afraid": "The Gods Are Afraid", + "achievement_enraged": "The Gods Are Enraged", + "achievementdesc_enraged": "The Gods Are Enraged", + "action_nuke_giga": "Giga Nuke", + "actiondesc_nuke_giga": "What do you expect?", + "action_bomb_holy_giga": "Giga Holy Bomb", + "actiondesc_bomb_holy_giga": "Bigger and therefore holier", + "animal_friend": "Toveri", + "animal_wizard_homing": "Kohdennusmestari", + "animal_icemage": "Pakkasukko", + "building_altar_null": "Nullifying Altar", + "building_altar_always": "Permanence Altar", + "biomemodifierdesc_cool": "The air feels extremely cool...", + "animal_cook": "Kokkihiisi", + "log_balance_1": "The world is at a balance", + "log_balance_2": "The world is corrupted", + "log_balance_3": "The world is overburdened by light", + "log_balance_4": "The world is in chaos!", + "perk_gas_blood": "Gas Blood", + "perkdesc_gas_blood": "You bleed flammable gas instead of blood.", + "mat_healsand": "Lively powder", + "mat_steel_strong": "Hardened steel", + "damage_supernova": "Supernova", + "biomemodifierdesc_sunlight": "Everything is glowing in a mysterious light...!", + "biomemodifierdesc_sundark": "There's an ominous atmosphere here...!", + "biomemodifierdesc_fog_of_war_clear_at_player": "It feels gloomy in here", + "ui_million_shorthand": "$0M", + "ui_thousand_shorthand": "$0K", + "NEWTEXTSINCE20210316": "", + "menu_newgame_gamemodewithslotstooltip": "Start a new game or continue an existing save.", + "menu_newgame_saveandnewgame": "Save current world and start a new game", + "menu_main_continue_info": "Continue: $0", + "menu_saveslotselect_deleteslotfirst": "Delete the world in this slot\nto be able to start a new game.", + "menu_saveslotselect_continue": "Continue this world.", + "menu_saveslotselect_continuecurrent": "Continue current world.", + "menu_saveslotselect_modnotfound_withname": " [Mod not found - $0]", + "menu_saveslotselect_modnotfound": " [Mod not found]", + "menuoptions_steamcloud_warning_enabled": "Steam Cloud save size warning: $0", + "menuoptions_steamcloud_warning_limit": "Steam Cloud save size limit warning", + "menuoptions_steamcloud_warning_tooltip": "The game will warn you if the size of save data exceeds the given amount.", + "menu_steamcloud_size_warning": "Warning: Save size is over $0 MB.", + "menu_steamcloud_size_warning_desc": "Steam Cloud synchronization might take a long time.\nClick here to turn off Cloud sync.", + "menu_steamcloud_filecount_warning": "Warning: Save data exceeds 10000 files", + "menu_steamcloud_filecount_warning_desc": "Steam Cloud doesn't support that many files.\nThings probably aren't gonna work.\nClick here to turn off Cloud sync.", + "menu_steamcloud_warning_turnoff_hint": "(You can switch this warning off via Options.)", + "biomemodifierdesc_invisibility": "You suddenly have trouble focusing your eyes...", + "biomemodifierdesc_wormy": "You hear creepy crawling everywhere!", + "item_tntbox": "Explosive box", + "item_tntbox_big": "Large explosive box", + "item_book_essences": "Tome of Essences", + "itemdesc_book_essences": "”The four Essences represent the four Elements that form this visible World...\nImbued with their Terrible Power, one may do great deeds,\nbut one should be Afraid of their destructive Might. To this end,\nwe have Devised a way to remove these Dangerous Forces; seek it in the West and East.\n\nA Legend also tells that all the Elements originated from the Egg of Sky and return to It one day...”", + "action_black_hole_giga": "Omega Black Hole", + "actiondesc_black_hole_giga": "Even light dies eventually...", + "animal_firemage_big": "Suurstendari", + "itemdesc_book_hint": "”One of my brethren ran away in order to escape our predicament ...\nThey felt our understanding of this world was to be forbidden.\nThey hid something here, in this room, but...\n...I lack the ability to truly see what is here!”", + "NEWTEXTSINCE20210407": "", + "input_mousebutton4": "Mouse 4", + "input_mousebutton5": "Mouse 5", + "action_blood_to_power": "Blood to Power", + "actiondesc_blood_to_power": "A projectile gains additional damage at the cost of 20% of your health", + "action_meat_to_power": "Meat to Power", + "actiondesc_meat_to_power": "Gives a projectile the ability to suck up nearby blood and meat, increasing its damage", + "action_toxic_to_power": "Toxic Power", + "actiondesc_toxic_to_power": "Gives a projectile the ability to suck up nearby toxic sludge and poison, increasing its damage", + "item_book_diamond": "Book of the Jewel", + "itemdesc_book_diamond": "”In my dream I saw a great Diamond...\nIt invited me within, offering me Grand Treasures.\nThis it said to me:\n'If you wish to follow the Path I show you here, you must bring me one of these Two:\na terrible Curse of Avarice, or the most Singular being in this realm.'\nI do not fully understand these words, but I still see the Diamond in my mind's eye...”", + "mat_meat_warm": "Lightly-cooked meat", + "mat_meat_hot": "Cooked meat", + "mat_meat_done": "Fully-cooked meat", + "mat_meat_burned": "Burned meat", + "mat_peasoup_concentrate": "Pea soup concentrate", + "mat_mammi": "Mämmi", + "mat_juhannussima": "Juhannussima", + "item_hernekeittopurkki": "Hernekeittopurkki", + "item_kaljapullo": "Kaljapullo", + "perk_iron_stomach": "Iron Stomach", + "perkdesc_iron_stomach": "You no longer suffer from negative effects of eating.", +}; diff --git a/src/app/calc/__generated__/translations.ts b/src/app/calc/__generated__/translations.ts index 87a6a12..572fae5 100644 --- a/src/app/calc/__generated__/translations.ts +++ b/src/app/calc/__generated__/translations.ts @@ -1,4043 +1,3479 @@ export const translations = { - 'current_language': 'English', - 'booktitle00': 'Emerald Tablet - volume I', - 'bookdesc00': - 'Tis true without lying, certain and most true.\nThat which is below is like that which is above\nand that which is above is like that which is below\nto do the miracles of one only thing.\nAnd as all things have been and arose from one by the mediation of one: \nso all things have their birth from this one thing by adaptation.', - 'booktitle01': 'Emerald Tablet of Thoth', - 'bookdesc01': - 'The necessity of concealing the Art is\none of the chief anxieties of alchemists. \nWe are sworn to secrecy by heaven and earth and hell,\nby the four elements, by the height and the depth,\nby Hermes, by Anubis,and by the howlings of Kerkoros.\nAn oath has been required of us to reveal\nnothing clearly to any uninitiated being.', - 'booktitle02': 'Emerald Tablet - volume II', - 'bookdesc02': - 'Thence is born a spirit white as snow, \nand another spirit red as blood,\nwhich two spirits are contained in a third hidden thing.', - 'booktitle03': 'Emerald Tablet - volume III', - 'bookdesc03': 'Heed my warning or death and decay will follow.', - 'booktitle04': 'Emerald Tablet - volume IV', - 'bookdesc04': - 'The definition of death is the disjunction of the composite, \nbut there is no disjunction of that which is simple, for it is one.\nDeath consists in the separation of the soul from the body,\nbecause anything formed out of two, three,\nor four app.components must disintegrate, and this is death.\nUnderstand, further, that no complex substance which lacks fire eats, \ndrinks, or sleeps, because in all things which have a spirit \nfire is that which eats.\n', - 'booktitle05': 'Emerald Tablet - volume V', - 'bookdesc05': - "And the Lord spake, saying,\n'First shalt hou take out the Holy Pin.\nThen, shalt thou count to three. No more. No less.\nThree shalt be the number thou shalt count, \nand the number of the counting shall be three. \nFour shalt thou not count, neither count thou two,\nexcepting that thou then proceed to three.\nFive is right out. Once at the number three, \nbeing the third number be reached, then,\nlobbest thou thy Holy Hand Grenade of Antioch towards \nthy foe, who, being naughty in My sight, shall snuff it.'", - 'booktitle06': 'Emerald Tablet - volume VI', - 'bookdesc06': - 'Some Alchemists fancy that the work from beginning \nto end is a mere idle entertainment; but those who \nmake it so will reap what they have sown - nothing. \nWe know that next to the Divine Blessing,\nand the discovery of the proper foundation,\nnothing is so important as unwearied industry\nand perseverance in this First Operation.\nIt is no wonder, then, that so many students\nof this Art are reduced to beggary;\nthey are afraid of work, and look upon our Art as \nmere sport for their leisure moments. For no labour \nis more tedious than that which the preparatory part \nof our enterprise demands. \n', - 'booktitle07': 'Emerald Tablet - volume VII', - 'bookdesc07': - 'Among those who devote themselves to the transmutation of metals,\nhowever, there can be no such thing as mediocrity of attainment.\nA person who studies this Art, must have either everything or nothing.\nAn Alchemist who knows only half their craft, reaps nothing but disappointment \nand waste of time and money; moreover, they lay themselves open to the mockery \nof those who despise our Art. Those, indeed, who succeed in reaching the goal \nof the Magistery, have not only infinite riches, but the means of continued \nlife and health. Hence it is the most popular of all pursuits. ', - 'booktitle08': 'Emerald Tablet - volume VIII', - 'bookdesc08': - 'Woe unto all ye fools! \nHow ignorant are ye of this Art, for which ye would die if ye knew it! \nI swear to you that if kings were familiar with it, \nnone of us would ever attain this thing. \nO how this nature changeth body into spirit! \nO how admirable is Nature, how she presides over all, and overcomes all.\n', - 'booktitle09': 'Emerald Tablet - volume IX', - 'bookdesc09': - 'In this way, then, Nature generates by means of \nthis sulphur the different kinds of metals in the \nveins of the earth, according to the diversity of \ndegrees and alterations.\n', - 'booktitle10': 'Emerald Tablet - volume X', - 'bookdesc10': - 'Take, he tells us, the stone of gold, combine with humour which is \npermanent water, set in its vessel, over a gentle fire until liquefaction \ntakes place. Then leave it until the water dries, and the sand and \nwater are combined, one with another; then let the fire be more intense\nthan before, until it again becomes dry, and is made earth. When this is done, \nunderstand that here is the beginning of the arcanum; but do this many times,\nuntil two-thirds of the water perish, and colours manifest unto you.', - 'booktitle_corpse': 'Tabula Smaragdina', - 'bookdesc_corpse': - 'If all the mountains were of silver and gold, what would \nthey profit a man who lives in constant fear of death? \nHence there cannot be in the whole world anything better than our Medicine,\nwhich has power to heal all the diseases of the flesh.', - 'booktitle_tree': 'Secretorum Hermetis', - 'bookdesc_tree': - 'The sacrifice of oneself to the pursuit of \nknowledge is the highest tribute to the gods.', - 'menu_paused': 'PAUSED', - 'menu_continue': 'Continue', - 'menu_options': 'Options', - 'menu_stats': 'Stats', - 'menu_progress': 'Progress', - 'menu_releasenotes': 'Release Notes', - 'menu_credits': 'Credits', - 'menu_newgame': 'New Game', - 'menu_dailyrun': 'Daily Run', - 'menu_saveandquit': 'Save & Quit', - 'menu_return': 'Return', - 'menu_applyandreturn': 'Apply & Return', - 'menu_cancel': 'Cancel', - 'menu_yes': 'Yes', - 'menu_no': 'No', - 'menu_ok': 'Ok', - 'menu_high': 'High', - 'menu_medium': 'Medium', - 'menu_low': 'Low', - 'option_on': 'On', - 'option_off': 'Off', - 'option_adaptive': 'Adaptive', - 'menu_newgame_areyousure': - 'Are you sure you want to start a new game? All progress from current run will be lost.', - 'menuoptions_windowmode': 'Window mode: $0', - 'windowmode_windowed': 'Windowed', - 'windowmode_fullscreen': 'Fullscreen (windowed)', - 'windowmode_fullscreen_real': 'Fullscreen (real)', - 'menuoptions_resolution': 'Resolution: $0', - 'menuoptions_resolution_illegible': ' - WARNING: Might be illegible!', - 'menuoptions_matchresolution': "Use current display's resolution", - 'menuoptions_applydisplay': 'Apply display settings', - 'menuoptions_renderingquality': 'Rendering quality', - 'menuoptions_lowqualityrendering': 'Low quality rendering: $0', - 'menuoptions_vsync': 'Vsync: $0', - 'menuoptions_display_areyousure': - 'Do you want to keep the new display settings? Old settings will be restored in $0 seconds.', - 'menuoptions_resetsave': 'Reset all progress', - 'menuoptions_resetsave_areyousure': - 'Are you sure you want to reset all progress? This cannot be undone!', - 'menugameover_newgame': 'New Game', - 'menugameover_savereplay': 'Save death replay', - 'menugameover_quit': 'Quit', - 'menugameover_gamecompleted': 'COMPLETED THE GAME!', - 'menugameover_nextbutton': 'You are dead - click here for stats', - 'menugameover_records': 'RECORDS', - 'menuoptions_pixelart_aa': 'Pixel art anti-aliasing: $0', - 'menuoptions_lowres': 'Low resolution rendering: $0', - 'menuoptions_lowres_tooltip_exp': - 'EXPERIMENTAL. Might cause minor rendering glitches.', - 'menuoptions_lowres_tooltip': - 'Improves rendering performance, but might cause minor rendering glitches.', - 'menuoptions_brightness': 'Brightness', - 'menuoptions_contrast': 'Contrast', - 'menuoptions_gamma': 'Gamma', - 'menuoptions_reset_keyboard': 'Right click to reset to default.', - 'menuoptions_reset_gamepad': 'Press B to reset to default.', - 'menuoptions_musicvolume': 'Music volume', - 'menuoptions_soundsvolume': 'Sound effect volume', - 'menuoptions_configurecontrols': 'Configure controls', - 'menuoptions_configurecontrols_reset_all': 'Reset all to default', - 'menuoptions_configurecontrols_rebind_keyboard': - 'Press the key or button for $0', - 'menuoptions_configurecontrols_rebind_gamepad': 'Press the button for $0', - 'menuoptions_controls': 'Gamepad: $0', - 'menuoptions_mousesensitivity': 'Mouse sensitivity', - 'menuoptions_controls_keyboard': 'Mouse + Keyboard', - 'menuoptions_controls_autodetectgamepad': 'Auto-detect', - 'menuoptions_gamepad_rumble': 'Gamepad rumble intensity', - 'menuoptions_ui_inventory_icons_always_clickable': - 'Click on icon switches item: $0', - 'menuoptions_application_rendered_cursor': 'Game renders the cursor: $0', - 'menuoptions_screenshake_intensity': 'Screen shake intensity', - 'menuoptions_damagenumbers': 'Damage numbers: $0', - 'menuoptions_replayrecorder': 'Replay recorder: $0', - 'menuoptions_checkforupdates': 'Check for updates: $0', - 'menuoptions_language': 'Language: English', - 'menuupdatenotification_title': 'NEW UPDATE AVAILABLE', - 'menuupdatenotification_description_generic': - 'A new build of Noita is now available!\nClick here for release notes', - 'menureleasenotes_notavailable': 'No release notes available', - 'menureleasenotes_eawarning': - "Welcome to Noita!\nNoita is an early access game.\nIt contains bugs and may even sometimes crash!\nWe're working hard to fix things and add new features.", - 'controls_up': 'up', - 'controls_down': 'down', - 'controls_left': 'left', - 'controls_right': 'right', - 'controls_sprayflask': 'spray from potion', - 'controls_throw': 'throw', - 'controls_kick': 'kick', - 'controls_inventory': 'open/close inventory', - 'controls_itemnext': 'next item', - 'controls_itemprev': 'previous item', - 'controls_itemslot1': 'select item in slot 1', - 'controls_itemslot2': 'select item in slot 2', - 'controls_itemslot3': 'select item in slot 3', - 'controls_itemslot4': 'select item in slot 4', - 'controls_itemslot5': 'select item in slot 5', - 'controls_itemslot6': 'select item in slot 6', - 'controls_itemslot7': 'select item in slot 7', - 'controls_itemslot8': 'select item in slot 8', - 'controls_itemslot9': 'select item in slot 9', - 'controls_itemslot10': 'select item in slot 10', - 'controls_escape': 'pause/close', - 'hud_air_unit': 'o2', - 'hud_air': 'Air: $0 / $1', - 'hud_health': 'Health: $0 / $1', - 'hud_jetpack': 'Levitation energy: $0 / $1', - 'hud_wand_mana': 'Wand mana: $0 / $1', - 'hud_wand_reload': 'Wand recharge: $0 s', - 'hud_gold': 'Gold: $0', - 'hud_orbs': 'Orbs collected: $0', - 'hud_title_wands': 'WANDS', - 'hud_title_throwables': 'ITEMS', - 'hud_title_actionstorage': 'SPELLS', - 'menu_newwand_title': 'NEW WAND', - 'menu_newwand_pressagain_pick': 'Press $0 again to pick the wand', - 'menu_newwand_pressagain_cancel': 'Press $0 to cancel', - 'menu_newwand_whichwand_gamepad': 'WHICH WAND DO YOU WANT TO DROP?', - 'menu_newwand_whichwand_keyboard': - 'WHICH WAND DO YOU WANT TO DROP? (Click it!)', - 'menu_newwand_emptyslot': '$0 - empty slot', - 'menu_newbook_pressagain_pick': 'Press $0 again to pick the book', - 'menu_newbook_pressagain_close': 'Press $0 to close', - 'item_empty': 'Empty', - 'item_wand': 'Wand', - 'item_potion': 'Potion', - 'item_cocktail': 'Cocktail', - 'item_orb': 'Orb', - 'item_description_potion': 'Equip and throw', - 'item_description_egg': 'Equip and throw', - 'item_potion_with_material': '$0 potion', - 'item_potion_fullness': ' ($0% full)', - 'item_potion_empty': 'Empty', - 'item_egg': 'Egg', - 'item_chest_treasure': 'Treasure chest', - 'item_goldnugget': 'Gold nugget', - 'item_heart': 'Extra max HP', - 'item_heart_better': 'Large extra max HP', - 'item_heart_fullhp': 'Full health regeneration', - 'item_unidentified': 'Unidentified item', - 'itempickup_notenoughgold': "Not enough gold to purchase '$0'", - 'itempickup_purchase': "Press $0 to purchase '$1'", - 'itempickup_pick': "Press $0 to pick '$1'", - 'itempickup_read': "Press $0 to read '$1'", - 'itempickup_purchase_swap': - "Press $0 to purchase '$1' and swap an item with it", - 'itempickup_pick_swap': "Press $0 to swap an item with '$1'", - 'itempickup_cannotpick': - "Cannot pick '$0'. Please get rid of an item to make space for it", - 'itempickup_cannotpick_closeinventory': - "Close the inventory first to pick '$0'", - 'hint_editwands': 'Press $0 to tinker with wands', - 'hint_endingmcguffin_use': 'Press $0 to complete the Work', - 'log_pickedup_perk': '$0 ', - 'log_pickedup': 'Picked up $0', - 'log_equipped': 'Equipped $0', - 'log_entered': 'Entered $0', - 'log_damage': 'Damage: $0', - 'log_death': 'Death: $0', - 'log_teleported': 'Teleported!', - 'log_teleported_something': 'Something entered a teleport nearby', - 'log_gamefx_savinggrace': 'Saving Grace saved you!', - 'log_gamefx_respawn': 'You get one more chance!', - 'logdesc_gamefx_respawn': 'Extra life saved you', - 'log_recharging': 'RECHARGING..', - 'log_blindness': 'Temporarily blinded!', - 'log_polymorph': 'Polymorphed!', - 'log_block_attack': 'BLOCK', - 'log_coop_resurrected': 'RESURRECTED', - 'log_coop_resurrected_player': 'Resurrected player $0!', - 'log_coop_partner_is_dead': 'Partner is dead!', - 'log_coop_started': 'CO-OP!', - 'log_chest': 'Opened a treasure chest!', - 'logdesc_chest_gold': 'You got $0 gold!', - 'log_heart': 'Picked up Extra Max Health', - 'logdesc_heart': 'Increased maximum health to $0', - 'logdesc_heart_blocked': - 'Increased maximum health to $0 ..but some sort of curse blocked the increase of maximum health!', - 'log_heart_better': 'Picked up Extra Max Health', - 'logdesc_heart_better': 'Increased maximum health to $0', - 'log_heart_fullhp': 'Picked up Full Health Regeneration', - 'log_discovered': 'You have discovered $0', - 'inventory_sort': 'Sort', - 'inventory_shuffle': 'Shuffle', - 'inventory_shuffle_tooltip': - 'Wands that shuffle cast their spells in random order.', - 'inventory_actionspercast': 'Spells/Cast', - 'inventory_actionspercast_tooltip': - 'The number of spells this wand casts when used.', - 'inventory_castdelay': 'Cast delay', - 'inventory_castdelay_tooltip': 'The time between casts.', - 'inventory_rechargetime': 'Rechrg. Time', - 'inventory_rechargetime_tooltip': - 'The time it takes for this wand to recharge when all spells inside it have been cast.', - 'inventory_manamax': 'Mana max', - 'inventory_manamax_tooltip': 'Maximum amount of mana this wand can store.', - 'inventory_manachargespeed': 'Mana chg. Spd', - 'inventory_manachargespeed_tooltip': "This wand's mana regeneration speed.", - 'inventory_capacity': 'Capacity', - 'inventory_capacity_tooltip': - 'The number of spells that can be inserted into this wand.', - 'inventory_spread': 'Spread', - 'inventory_spread_tooltip': - 'The directional deviation of projectiles casted by this wand.', - 'inventory_chargecapacity': 'Charge capacity', - 'inventory_alwayscasts': 'Always casts', - 'inventory_alwayscasts_description': - "This wand casts some spells every time it's used.", - 'inventory_usesremaining': 'Uses remaining', - 'inventory_actiontype': 'Type', - 'inventory_manadrain': 'Mana drain', - 'inventory_damage': 'Damage', - 'inventory_dmg_explosion': 'Dmg. Expl', - 'inventory_explosion_radius': 'Expl. Radius', - 'inventory_dmg_slice': 'Dmg. Slice', - 'inventory_dmg_drill': 'Dmg. Drill', - 'inventory_dmg_fire': 'Dmg. Fire', - 'inventory_dmg_ice': 'Dmg. Ice', - 'inventory_speed': 'Speed', - 'inventory_mod_castdelay': 'Cast delay', - 'inventory_mod_rechargetime': 'Recharge time', - 'inventory_mod_bounces': 'Bounces', - 'inventory_mod_speed': 'Proj. Speed', - 'inventory_mod_explosion_radius': 'Expl. Radius', - 'inventory_mod_spread': 'Spread', - 'inventory_mod_knockback': 'Knockback', - 'inventory_mod_damage': 'Damage', - 'inventory_mod_damage_melee': 'Dmg. Melee', - 'inventory_mod_damage_electric': 'Dmg. Electric', - 'inventory_mod_damage_fire': 'Dmg. Fire', - 'inventory_mod_damage_explosion': 'Dmg. Expl', - 'inventory_mod_critchance': 'Crit. Chance', - 'inventory_warning_noactions': 'WARNING - This wand contains no spells', - 'inventory_warning_noactions_description': - "The wand doesn't do anything. Place some spells into the wand's slots.", - 'inventory_warning_notenoughmana': - "WARNING - This wand doesn't have enough mana for $0", - 'inventory_warning_notenoughmana_description': - 'Wand has max $0 mana. Casting $1 requires $2 mana.', - 'inventory_info_frozen': 'INFO - This wand has been frozen', - 'inventory_info_frozen_description': - 'A spell prevents the wand from being customized.', - 'inventory_seconds': '$0 s', - 'inventory_degrees': '$0 DEG', - 'inventory_actiontype_projectile': 'Projectile', - 'inventory_actiontype_staticprojectile': 'Static proj.', - 'inventory_actiontype_modifier': 'Proj. modifier', - 'inventory_actiontype_drawmany': 'Multicast', - 'inventory_actiontype_material': 'Material', - 'inventory_actiontype_other': 'Other', - 'inventory_actiontype_utility': 'Utility', - 'inventory_actiontype_passive': 'Passive', - 'item_spell_refresh': 'Spell refresher', - 'itemtitle_spell_refresh': 'Picked up Spell refresher', - 'itemdesc_spell_refresh': 'All spells refreshed', - 'itemtitle_wand_pickup': 'Picked up a new magic wand', - 'itemtitle_chest_open': 'Opened a treasure chest!', - 'itemtitle_chest_broken_open': 'A chest was broken open', - 'log_endcrystal': 'Touched the cursed crystal!', - 'logdesc_endcrystal': 'Something stirs above you', - 'logdesc_temple_spawn_guardian': 'You have angered the Gods', - 'logdesc_gods_are_angry': 'You have angered the Gods', - 'logdesc_gods_are_very_angry': 'The Gods are very angry with you', - 'damage_projectile': 'projectile', - 'damage_electricity': 'electricity', - 'damage_explosion': 'explosion', - 'damage_fire': 'fire', - 'damage_melee': 'melee', - 'damage_drill': 'drill', - 'damage_slice': 'slice', - 'damage_ice': 'ice', - 'damage_healing': 'healing', - 'damage_physicshit': 'heavy impact', - 'damage_radioactive': 'toxic', - 'damage_poison': 'poison', - 'damage_water': 'wetness', - 'damage_fall': 'fall', - 'damage_drowning': 'drowning', - 'damage_frommaterial': 'damage from material: $0', - 'damage_kick': 'kick', - 'damage_holy_mountains_curse': "Holy Mountain's curse", - 'stat_depth': 'Depth:', - 'stat_time': 'Time:', - 'stat_places_visited': 'Places visited:', - 'stat_enemies_slain': 'Enemies slain:', - 'stat_max_hp': 'Max HP:', - 'stat_gold': 'Gold:', - 'stat_items_found': 'Items found:', - 'stat_orbs': 'Orbs collected:', - 'stat_total_deaths': 'Total deaths:', - 'stat_total_play_time': 'Total play time:', - 'stat_total_wins': 'Total wins:', - 'stat_cause_of_death': "Cause of death: '$0'", - 'stat_best': '(Best: $0)', - 'credits_music': 'With music by From Grotto and Niilo Takalainen', - 'credits_sounddesign': 'Sound design by Niilo Takalainen', - 'credits_fmod': 'Noita uses FMOD Studio by Firelight Technologies Pty Ltd', - 'credits_copyright': 'Noita (c) Nolla Games Oy 2019', - 'progress_perks': 'Perks', - 'progress_actions': 'Spells', - 'progress_secrets': 'Secrets', - 'progress_enemies': 'Enemies', - 'progress_unlocked': 'Unlocks', - 'progress_completed': '$0 $1 secret(s) found', - 'progress_kills': 'Kills: $0', - 'progress_unknown': '???', - 'progress_ending0': 'Discovered the secret below - ', - 'progress_ending1': 'Discovered the secret above - ', - 'progress_ending01': 'Discovered the secrets above and below - ', - 'status_wet': 'Wet', - 'statusdesc_wet': 'Wet clothes protect you from fire.', - 'status_oiled': 'Oiled ', - 'statusdesc_oiled': 'Oil makes you slippery and more flammable.', - 'status_bloody': 'Bloody ', - 'statusdesc_bloody': - 'Bloody clothes protect you from fire.\nYou sense an increased chance of attaining critical hits.', - 'status_slimy': 'Slimy', - 'statusdesc_slimy': - 'Slimy clothes protect you from fire.\nThe mucus makes moving around difficult.', - 'status_radioactive': 'Toxic', - 'statusdesc_radioactive': - 'Toxic sludge in your clothes makes your health degrade slowly.\nWet clothes protect you from fire.\nCan be washed off by liquids.', - 'status_alcoholic': 'Alcoholic', - 'statusdesc_alcoholic': - 'Heavy scent of booze oozes of your clothes.\nAiming is disturbed.\nAnd alcohol is flammable!', - 'status_poisoned': 'Poisoned', - 'statusdesc_poisoned': 'A poisoning slowly degrades your health. ', - 'status_teleportation': 'Teleportitis', - 'statusdesc_teleportation': 'You teleport uncontrollably every now and then.', - 'status_hp_regeneration': 'Regeneration ', - 'statusdesc_hp_regeneration': 'A health regeneration spell affects you.', - 'status_polymorph': 'Polymorph', - 'statusdesc_polymorph': "You're a sheep.", - 'status_polymorph_random': 'Chaos polymorph', - 'statusdesc_polymorph_random': 'A polymorph curse affects you.', - 'status_berserk': 'Berserk', - 'statusdesc_berserk': 'A berserk curse affects you.', - 'status_charm': 'Charmed', - 'statusdesc_charm': 'A charm affects you.', - 'status_invisibility': 'Invisible', - 'statusdesc_invisibility': - 'The magical liquid on your clothes makes you invisible.\nThe spell is disturbed by stained or wet clothes.', - 'status_on_fire': 'On fire ', - 'statusdesc_on_fire': "You're on fire. Find some water!", - 'boss_limbs_limb_attacker': 'Spider leg', - 'biome_boss_arena': 'The Laboratory', - 'biome_boss_victoryroom': 'The Work', - 'biome_coalmine': 'mines', - 'biome_coalmine_alt': 'collapsed mines', - 'biome_crypt': 'Temple of the Art', - 'biome_desert': 'Desert', - 'biome_dragoncave': 'Dragoncave', - 'biome_ending_placeholder': 'Master Symbol Crypt', - 'biome_excavationsite': 'Coal Pits', - 'biome_fungicave': 'Fungal Caverns', - 'biome_gold': 'Gold', - 'biome_lake': 'Lake', - 'biome_lava': 'Volcanic Lake', - 'biome_lavacave': 'Volcanic Cave', - 'biome_magic_gate': 'Sanctuary', - 'biome_null': 'unknown', - 'biome_pyramid': 'Pyramid', - 'biome_rainforest': 'Underground Jungle', - 'biome_sandcave': 'Sandcave', - 'biome_secret_entrance': 'Mysterious Gate', - 'biome_shop_room': 'Secret Shop', - 'biome_snowcastle': 'Hiisi Base', - 'biome_snowcave': 'Snowy Depths', - 'biome_town_under': 'twisty passages', - 'biome_vault': 'The Vault', - 'biome_wandcave': 'magical temple', - 'biome_water': 'water', - 'biome_winter': 'snowy wasteland', - 'biome_holymountain': 'Holy Mountain', - 'biome_east': 'East $0', - 'biome_west': 'West $0', - 'animal_player': 'Minä', - 'animal_boss_centipede_minion': 'Kolmisilmän apuri', - 'animal_boss_limbs': 'Kolmisilmän koipi', - 'animal_boss_dragon_endcrystal': 'Mato', - 'animal_lukki': 'Hämähäkki', - 'animal_lukki_creepy': 'Kasvoton Hämähäkki', - 'animal_lukki_creepy_long': 'Kasvoton Lukki', - 'animal_lukki_longleg': 'Lukki', - 'animal_acidshooter': 'Happonuljaska', - 'animal_alchemist': 'Alkemisti', - 'animal_ant': 'Murkku', - 'animal_assassin': 'Salamurhaajarobotti', - 'animal_barfer': 'Turvonnu velho', - 'animal_bat': 'Lepakko', - 'animal_bigbat': 'Suurlepakko', - 'animal_bigfirebug': 'Suurtulikärpänen', - 'animal_bigzombie': 'Mätänevä ruumis', - 'animal_bigzombiehead': 'Mätänevä pää', - 'animal_bigzombietorso': 'Mätänevä kroppa', - 'animal_blob': 'Kiukkumöykky', - 'animal_bloodcrystal_physics': 'Verikristalli', - 'animal_bloom': 'Puska', - 'animal_boss_dragon': 'Suomuhauki', - 'animal_chest_mimic': 'Matkija', - 'animal_crystal_physics': 'Kirottu kristalli', - 'animal_darkghost': 'Haamu', - 'animal_deer': 'Nelikoipi', - 'animal_drone': 'Lennokki', - 'animal_drone_physics': 'Lennokki', - 'animal_duck': 'Ankka', - 'animal_eel': 'Nahkiainen', - 'animal_elk': 'Poro', - 'animal_firebug': 'Pikkutulikärpänen', - 'animal_firemage': 'Eldari', - 'animal_firemage_weak': 'Stendari', - 'animal_fireskull': 'Liekkiö', - 'animal_fish': 'Eväkäs', - 'animal_fish_large': 'Suureväkäs', - 'animal_flamer': 'Liekkari', - 'animal_fly': 'Amppari', - 'animal_frog': 'Konna', - 'animal_fungus': 'Laahustussieni', - 'animal_gazer': 'Helvetinkatse', - 'animal_ghost': 'Houre', - 'animal_ghoul': 'Sylkyri', - 'animal_giant': 'Hiidenkivi', - 'animal_giantshooter': 'Äitinuljaska', - 'animal_healerdrone_physics': 'Korjauslennokki', - 'animal_icer': 'Jäähdytyslaite', - 'animal_iceskull': 'Jäätiö', - 'animal_lasershooter': 'Mulkkio', - 'animal_longleg': 'Hämis', - 'animal_slimeshooter': 'Limanuljaska', - 'animal_slimeshooter_boss_limbs': 'Äitilimanuljaska', - 'animal_maggot': 'Toukka', - 'animal_mimic_physics': 'Matkija', - 'animal_miner': 'Tappurahiisi', - 'animal_miner_weak': 'Tappurahiisiläinen', - 'animal_miner_fire': 'Tulihiisi', - 'animal_miner_santa': 'Jouluhiisi', - 'animal_mine_scavenger': 'Miina', - 'animal_miniblob': 'Möykky', - 'animal_missilecrab': 'Heinäsirkka', - 'animal_pebble': 'Lohkare', - 'animal_pebble_player': 'Toveri lohkare', - 'animal_phantom_a': 'Spiraalikalma', - 'animal_phantom_b': 'Kiukkukalma', - 'animal_playerghost': 'Kummitus', - 'animal_rat': 'Rotta', - 'animal_roboguard': 'Robottikyttä', - 'animal_scavenger_clusterbomb': 'Isohiisi', - 'animal_scavenger_grenade': 'Kranuhiisi', - 'animal_scavenger_heal': 'Parantajahiisi', - 'animal_scavenger_leader': 'Toimari', - 'animal_scavenger_mine': 'Miinankylväjä', - 'animal_scavenger_poison': 'Myrkkyhiisi', - 'animal_scavenger_smg': 'Rynkkyhiisi', - 'animal_scorpion': 'Skorpioni', - 'animal_sheep': 'Lammas', - 'animal_sheep_bat': 'Lentolammas', - 'animal_sheep_fly': 'Suhiseva lammas', - 'animal_shooterflower': 'Plasmakukka', - 'animal_shotgunner_weak': 'Heikko haulikkohiisi', - 'animal_shotgunner': 'Haulikkohiisi', - 'animal_skullfly': 'Kallokärpänen', - 'animal_skullrat': 'Kallorotta', - 'animal_sniper': 'Snipuhiisi', - 'animal_spitmonster': 'Helvetin sylkijä', - 'animal_statue_physics': 'Hohtonaamio', - 'animal_tank': 'KK-Tankki', - 'animal_tank_rocket': 'IT-Tankki', - 'animal_tentacler': 'Turso', - 'animal_tentacler_small': 'Pikkuturso', - 'animal_thundermage': 'Ukko', - 'animal_turret': 'Torjuntalaite', - 'animal_wand_ghost': 'Taikasauva', - 'animal_wizard_dark': 'Sokaisunmestari', - 'animal_wizard_poly': 'Muodonmuutosmestari', - 'animal_wizard_tele': 'Siirtäjämestari', - 'animal_wolf': 'Susi', - 'animal_worm': 'Mato', - 'animal_worm_big': 'Jättimato', - 'animal_worm_end': 'Helvetinmato', - 'animal_worm_skull': 'Kalmamato', - 'animal_worm_tiny': 'Pikkumato', - 'animal_zombie_weak': 'Heikkohurtta', - 'animal_zombie': 'Hurtta', - 'action_burst_2': 'Double spell', - 'actiondesc_burst_2': 'Simultaneously casts 2 spells', - 'action_burst_3': 'Triple spell', - 'actiondesc_burst_3': 'Simultaneously casts 3 spells', - 'action_burst_4': 'Quadruple spell', - 'actiondesc_burst_4': 'Simultaneously casts 4 spells', - 'action_scatter_2': 'Double scatter spell', - 'actiondesc_scatter_2': 'Simultaneously casts 2 spells with low accuracy', - 'action_scatter_3': 'Triple scatter spell', - 'actiondesc_scatter_3': 'Simultaneously casts 3 spells with low accuracy', - 'action_scatter_4': 'Quadruple scatter spell', - 'actiondesc_scatter_4': 'Simultaneously casts 4 spells with low accuracy', - 'action_i_shape': 'Formation - behind your back', - 'actiondesc_i_shape': - 'Casts two spells: one ahead of and one behind the caster', - 'action_y_shape': 'Formation - bifurcated', - 'actiondesc_y_shape': 'Casts 2 spells in a bifurcated pattern', - 'action_t_shape': 'Formation - above and below', - 'actiondesc_t_shape': 'Casts 3 spells - ahead, above and below the caster', - 'action_w_shape': 'Formation - trifurcated', - 'actiondesc_w_shape': 'Casts 3 spells in a trifurcated pattern', - 'action_circle_shape': 'Formation - hexagon', - 'actiondesc_circle_shape': 'Casts 6 spells in a hexagonal pattern', - 'action_pentagram_shape': 'Formation - pentagon', - 'actiondesc_pentagram_shape': 'Casts 5 spells in a pentagonal pattern', - 'action_spread_reduce': 'Reduce spread', - 'actiondesc_spread_reduce': 'Reduces the spread of a spell', - 'action_recharge': 'Reduce recharge time', - 'actiondesc_recharge': 'Reduces the time between spellcasts', - 'action_gravity': 'Gravity', - 'actiondesc_gravity': 'Increases the effect gravity has on a projectile', - 'action_gravity_anti': 'Anti-gravity', - 'actiondesc_gravity_anti': 'Applies a lifting force to a projectile', - 'action_penetrate_walls': 'Penetrate walls', - 'actiondesc_penetrate_walls': 'Gives a projectile more penetration power', - 'action_sinewave': 'Slithering path', - 'actiondesc_sinewave': - 'Makes a projectile move rapidly in a slithering manner, like a snake', - 'action_bounce': 'Bounce', - 'actiondesc_bounce': 'Makes a projectile bounce on impact', - 'action_homing': 'Homing', - 'action_homing_shooter': 'Boomerang', - 'actiondesc_homing_shooter': - 'Gives a projectile a path that curves towards you', - 'action_damage': 'Damage Plus', - 'actiondesc_damage': 'Increases the damage done by a projectile', - 'action_critical_hit': 'Critical Plus', - 'actiondesc_critical_hit': 'Gives a projectile +15% chance of a critical hit', - 'action_damage_friendly': 'Cunning power', - 'actiondesc_damage_friendly': - 'Gives a projectile extra damage, but makes it capable of damaging you', - 'action_damage_x2': 'Intense power', - 'action_damage_x5': 'Sundering power', - 'action_heavy_shot': 'Heavy Shot', - 'actiondesc_heavy_shot': - 'Greatly increases the damage done by a projectile, at the cost of its speed', - 'action_knockback': 'Knockback', - 'actiondesc_knockback': - 'Gives a projectile the power to knock back the foes it hits', - 'action_recoil': 'Recoil', - 'actiondesc_recoil': 'Increases the recoil when casting spells', - 'action_recoil_damper': 'Recoil Damper', - 'actiondesc_recoil_damper': 'Reduces the recoil when casting spells', - 'action_speed': 'Speed Up', - 'actiondesc_speed': - 'Increases the speed at which a projectile flies through the air', - 'action_gore': 'Draw blood', - 'actiondesc_gore': 'Makes foes spill more blood when hit with a projectile', - 'actiondesc_explosive_projectile': - 'Makes a projectile more destructive to the environment', - 'action_water_to_poison': 'Water to poison', - 'actiondesc_water_to_poison': - "Makes any water within a projectile's range turns into poison", - 'action_blood_to_acid': 'Blood to acid', - 'actiondesc_blood_to_acid': - "Makes any blood within a projectile's range turns into acid", - 'action_lava_to_blood': 'Lava to blood', - 'actiondesc_lava_to_blood': - "Makes any lava within a projectile's range turn into blood", - 'action_necromancy': 'Necromancy', - 'actiondesc_necromancy': - 'Makes corpses of creatures killed by a projectile rise to your aid', - 'actiondesc_explosion': 'A powerful explosion', - 'action_fire_blast': 'Explosion of brimstone', - 'actiondesc_fire_blast': 'A fiery explosion', - 'action_poison_blast': 'Explosion of poison', - 'actiondesc_poison_blast': 'An alchemical explosion', - 'action_alcohol_blast': 'Explosion of spirits', - 'actiondesc_alcohol_blast': 'An inebriating explosion', - 'action_thunder_blast': 'Explosion of thunder', - 'actiondesc_thunder_blast': 'An electric explosion', - 'action_charm_field': 'Circle of persuasion', - 'actiondesc_charm_field': 'A field of charming magic', - 'action_berserk_field': 'Circle of fervour', - 'actiondesc_berserk_field': 'A field of berserk magic', - 'action_polymorph_field': 'Circle of transmogrification', - 'actiondesc_polymorph_field': 'A field of sheep-like magic', - 'action_chaos_polymorph_field': 'Circle of unstable metamorphosis', - 'actiondesc_chaos_polymorph_field': 'A field of transformative magic', - 'action_electrocution_field': 'Circle of thunder', - 'actiondesc_electrocution_field': 'A field of electrifying magic', - 'action_freeze_field': 'Circle of stillness', - 'actiondesc_freeze_field': 'A field of freezing magic', - 'action_regeneration_field': 'Circle of vigour', - 'actiondesc_regeneration_field': 'A field of regenerative magic', - 'action_teleportation_field': 'Circle of displacement', - 'actiondesc_teleportation_field': 'A field of teleportative magic', - 'action_levitation_field': 'Circle of buoyancy', - 'actiondesc_levitation_field': 'A field of levitative magic', - 'action_telepathy_field': 'Circle of seeing', - 'actiondesc_telepathy_field': 'A field of clairvoyant magic', - 'action_shield_field': 'Circle of shielding', - 'actiondesc_shield_field': 'A field of protective magic', - 'action_sea_lava': 'Sea of lava', - 'actiondesc_sea_lava': 'Summons a large body of lava below the caster', - 'action_sea_oil': 'Sea of oil', - 'actiondesc_sea_oil': 'Summons a large body of oil below the caster', - 'action_sea_water': 'Sea of water', - 'actiondesc_sea_water': 'Summons a large body of water below the caster', - 'action_sea_acid': 'Sea of acid', - 'actiondesc_sea_acid': 'Summons a large body of acid below the caster', - 'action_sea_acid_gas': 'Sea of flammable gas', - 'actiondesc_sea_acid_gas': - 'Summons a large body of flammable gas below the caster', - 'action_sea_alcohol': 'Sea of alcohol', - 'actiondesc_sea_alcohol': - 'Summons a large body of tasty alcohol below the caster', - 'action_cloud_water': 'Rain cloud', - 'actiondesc_cloud_water': 'Creates a watery weather phenomenon', - 'action_cloud_blood': 'Blood cloud', - 'actiondesc_cloud_blood': 'Creates a rain of blood', - 'action_cloud_acid': 'Acid cloud', - 'actiondesc_cloud_acid': 'Creates an rain of acid', - 'action_cloud_thunder': 'Thundercloud', - 'actiondesc_cloud_thunder': 'Creates a stormy cloud', - 'action_electric_charge': 'Electric charge', - 'actiondesc_electric_charge': - 'Gives a projectile an electric charge, that it will release on impact', - 'action_matter_eater': 'Matter eater', - 'actiondesc_matter_eater': - 'Makes a projectile eat the environment as it flies', - 'action_freeze': 'Freeze charge', - 'actiondesc_freeze': - 'Gives a projectile a frozen charge, that it will release on impact', - 'action_hitfx_burning_critical_hit': 'Critical on burning', - 'actiondesc_hitfx_burning_critical_hit': - 'Makes a projectile always do a critical hit on burning enemies', - 'action_hitfx_critical_water': 'Critical on wet (water) enemies', - 'actiondesc_hitfx_critical_water': - 'Makes a projectile always do a critical hit on wet (water) enemies', - 'action_hitfx_critical_oil': 'Critical on oiled enemies', - 'actiondesc_hitfx_critical_oil': - 'Makes a projectile always do a critical hit on oiled enemies', - 'action_hitfx_critical_blood': 'Critical on bloody enemies', - 'actiondesc_hitfx_critical_blood': - 'Makes a projectile always do a critical hit on bloody enemies', - 'action_hitfx_poltergeist': 'Poltergeist', - 'actiondesc_hitfx_poltergeist': - 'Gives a projectile the power to animate physical objects', - 'action_fireball_ray': 'Fireball thrower', - 'actiondesc_fireball_ray': - 'Makes a projectile cast fireballs in random directions', - 'action_hitfx_oiled_freeze': 'Oil freeze', - 'actiondesc_hitfx_oiled_freeze': - 'Makes a projectile freeze enemies drenched in oil', - 'action_alcohol_shot': 'Alcohol shot', - 'actiondesc_alcohol_shot': 'Makes a projectile get the enemies it hits drunk', - 'action_freeze_if_wet_shooter': 'Freeze if wet', - 'actiondesc_freeze_if_wet_shooter': - 'If caster is wet, makes a projectile freeze the enemies it hits', - 'action_blindness': 'Blindness', - 'actiondesc_blindness': "I can't see!", - 'action_teleportation': 'Teleportation', - 'actiondesc_teleportation': - 'Spells cast alongside this will teleport enemies', - 'action_telepathy': 'Telepathy', - 'actiondesc_telepathy': 'Sense other beings through walls', - 'action_arc_electric': 'Electric Arc', - 'action_arc_fire': 'Fire Arc', - 'action_arc_gunpowder': 'Gunpowder Arc', - 'action_arc_poison': 'Poison Arc', - 'action_polymorph': 'Polymorph charge', - 'actiondesc_polymorph': 'Baaaaa', - 'action_berserk': 'Berserk', - 'actiondesc_berserk': - 'Target enters a state of wild fury, attacking anyone nearby and getting a 2x damage boost', - 'action_charm': 'Charm', - 'actiondesc_charm': 'Target becomes friendly to the caster', - 'action_x_ray': 'All-seeing eye', - 'actiondesc_x_ray': 'See into the unexplored. But not everywhere...', - 'action_x_ray_modifier': 'X-ray modifier', - 'actiondesc_x_ray_modifier': 'Projectile lights the way in the darkness', - 'action_acid': 'Acid', - 'actiondesc_acid': 'Projectiles turn into acid on collision', - 'action_unstable_gunpowder': 'Firecrackers', - 'action_acid_trail': 'Acid trail', - 'actiondesc_acid_trail': 'Gives a projectile a trail of acid', - 'action_poison_trail': 'Poison trail', - 'actiondesc_poison_trail': 'Gives a projectile a trail of poison', - 'action_oil_trail': 'Oil trail', - 'actiondesc_oil_trail': 'Gives a projectile a trail of oil', - 'action_water_trail': 'Water trail', - 'actiondesc_water_trail': 'Gives a projectile a trail of water', - 'action_blood_trail': 'Blood trail', - 'actiondesc_blood_trail': 'Gives a projectile a trail of blood', - 'action_gunpowder_trail': 'Gunpowder trail', - 'actiondesc_gunpowder_trail': 'Gives a projectile a trail of gunpowder', - 'action_fire_trail': 'Fire trail', - 'actiondesc_fire_trail': 'Gives a projectile a trail of fiery particles', - 'action_burn_trail': 'Burning trail', - 'actiondesc_burn_trail': 'Gives a projectile a tail of fire', - 'action_torch': 'Torch', - 'actiondesc_torch': 'Lights your wand right up!', - 'action_torch_electric': 'Electric Torch', - 'actiondesc_torch_electric': - 'Gives your wand a bright but very dangerous light!', - 'action_light': 'Light', - 'actiondesc_light': 'Makes a projectile illuminate its surroundings', - 'action_energy_shield': 'Energy shield', - 'actiondesc_energy_shield': 'Deflects incoming projectiles', - 'action_energy_shield_sector': 'Energy shield sector', - 'actiondesc_energy_shield_sector': 'Deflects incoming projectiles', - 'action_duplicate_on_death': 'Duplicate', - 'actiondesc_duplicate_on_death': 'Projectile clones itself x2 on collision', - 'action_bee': 'Bee', - 'actiondesc_bee': 'Bee', - 'action_duck': 'Duck', - 'actiondesc_duck': 'Duck!', - 'action_sheep': 'Sheep', - 'actiondesc_sheep': 'Sheep!', - 'action_misfire': 'Misfire', - 'actiondesc_misfire': 'Discard 1 spell', - 'action_misfire_critical': 'Misfire (critical)', - 'actiondesc_misfire_critical': 'Permanently destroy 1 spell', - 'action_generate_random_deck_5': 'Generate random deck (5)', - 'actiondesc_generate_random_deck_5': - 'Current deck is replaced with a random deck of 5 cards', - 'action_testbullet': 'DEBUG BULLET', - 'actiondesc_testbullet': 'A weak but enchanting sparkling projectile', - 'action_light_bullet': 'Spark bolt', - 'actiondesc_light_bullet': 'A weak but enchanting sparkling projectile', - 'action_air_bullet': 'Burst of air', - 'actiondesc_air_bullet': - 'A brittle burst of air capable of greatly pushing objects', - 'action_light_bullet_trigger': 'Spark bolt with trigger', - 'actiondesc_light_bullet_trigger': - 'A spark bolt that casts another spell upon collision', - 'action_light_bullet_trigger_2': 'Spark bolt with double trigger', - 'actiondesc_light_bullet_trigger_2': - 'A spark bolt that casts two new spells upon collision', - 'action_light_bullet_timer': 'Spark bolt with timer', - 'actiondesc_light_bullet_timer': - 'A spark bolt that casts another spell after a timer runs out', - 'action_bullet': 'Magic arrow', - 'actiondesc_bullet': 'A handy magical arrow', - 'action_bullet_trigger': 'Magic arrow with trigger', - 'actiondesc_bullet_trigger': - 'A magical arrow that casts another spell upon collision', - 'action_bullet_timer': 'Magic arrow with timer', - 'actiondesc_bullet_timer': - 'A magical arrow that casts another spell after a timer runs out', - 'action_heavy_bullet': 'Magic bolt', - 'actiondesc_heavy_bullet': 'A powerful magical bolt', - 'action_heavy_bullet_trigger': 'Magic bolt with trigger', - 'actiondesc_heavy_bullet_trigger': - 'A powerful magical bolt that casts another spell upon collision', - 'action_heavy_bullet_timer': 'Magic bolt with timer', - 'actiondesc_heavy_bullet_timer': - 'A powerful magical bolt that casts another spell after a timer runs out', - 'action_slow_bullet': 'Energy orb', - 'actiondesc_slow_bullet': 'A slow but powerful orb of energy', - 'action_slow_bullet_trigger': 'Energy orb with a trigger', - 'actiondesc_slow_bullet_trigger': - 'A slow but powerful orb of energy that casts another spell upon collision', - 'action_slow_bullet_timer': 'Energy orb with a timer', - 'action_black_hole': 'Black hole', - 'actiondesc_black_hole': 'A slow orb of void that eats through all obstacles', - 'action_black_hole_big': 'Giga black hole', - 'actiondesc_black_hole_big': - 'A growing orb of negative energy that destroys everything in its reach', - 'action_decoy': 'Decoy', - 'actiondesc_decoy': 'Creates a decoy for distracting enemies', - 'action_decoy_trigger': 'Decoy with trigger', - 'actiondesc_decoy_trigger': - 'Creates a decoy for distracting enemies that casts another spell after a timer runs out', - 'action_spitter': 'Spitter bolt', - 'actiondesc_spitter': 'A short-lived magical bolt', - 'action_spitter_timer': 'Spitter bolt with timer', - 'actiondesc_spitter_timer': - 'A short-lived magical bolt that casts another spell after a timer runs out', - 'action_bubbleshot': 'Bubble spark', - 'actiondesc_bubbleshot': 'A bouncy, inaccurate spell', - 'action_bubbleshot_trigger': 'Bubble spark with trigger', - 'actiondesc_bubbleshot_trigger': - 'A bouncy, inaccurate spell that casts another spell upon collision', - 'action_disc_bullet': 'Disc projectile', - 'actiondesc_disc_bullet': 'Summons a sharp disc projectile', - 'action_bouncy_orb': 'Energy sphere', - 'actiondesc_bouncy_orb': 'A fast, arcing projectile', - 'action_bouncy_orb_timer': 'Energy sphere with timer', - 'action_rubber_ball': 'Bouncing burst', - 'actiondesc_rubber_ball': 'A very bouncy projectile', - 'action_arrow': 'Arrow', - 'actiondesc_arrow': 'Summons an arrow', - 'action_lance': 'Glowing lance', - 'actiondesc_lance': 'A magical lance that cuts through soft materials', - 'action_rocket': 'Magic missile', - 'actiondesc_rocket': 'A fiery, explosive projectile', - 'action_rocket_tier_2': 'Large magic missile', - 'actiondesc_rocket_tier_2': 'A more powerful version of Magic missile', - 'action_rocket_tier_3': 'Giant magic missile', - 'actiondesc_rocket_tier_3': 'The most powerful version of Magic missile', - 'action_grenade': 'Firebolt', - 'actiondesc_grenade': 'A bouncy, explosive bolt', - 'action_grenade_tier_2': 'Large firebolt', - 'actiondesc_grenade_tier_2': 'A more powerful version of Firebolt', - 'action_grenade_tier_3': 'Giant firebolt', - 'actiondesc_grenade_tier_3': 'The most powerful version of Firebolt', - 'action_grenade_trigger': 'Firebolt with trigger', - 'actiondesc_grenade_trigger': - 'A bouncy, explosive bolt that that casts another spell upon collision', - 'action_grenade_anti': 'Odd Firebolt', - 'actiondesc_grenade_anti': 'A somewhat peculiar bouncy, explosive bolt', - 'action_grenade_large': 'Dropper bolt', - 'actiondesc_grenade_large': 'A very heavy explosive bolt', - 'action_mine': 'Unstable crystal', - 'actiondesc_mine': 'A crystal that explodes when someone comes nearby', - 'action_mine_death_trigger': 'Unstable crystal with trigger', - 'actiondesc_mine_death_trigger': - 'A crystal that explodes and casts another spell when someone comes nearby', - 'action_pipe_bomb': 'Dormant crystal', - 'actiondesc_pipe_bomb': 'A crystal that explodes when caught in an explosion', - 'action_pipe_bomb_death_trigger': 'Dormant crystal with trigger', - 'actiondesc_pipe_bomb_death_trigger': - 'A crystal that explodes and casts another spell when caught in an explosion', - 'action_exploding_deer': 'Summon deercoy', - 'actiondesc_exploding_deer': 'Summons a seemingly-innocuous deer', - 'action_pipe_bomb_detonator': 'Dormant crystal detonation', - 'actiondesc_pipe_bomb_detonator': 'All nearby dormant crystals explode', - 'action_laser': 'Concentrated light', - 'actiondesc_laser': 'A pinpointed beam of light', - 'action_lightning': 'Lightning bolt', - 'actiondesc_lightning': 'The primordial force of nature', - 'action_digger': 'Digging bolt', - 'actiondesc_digger': 'A bolt that is ideal for mining operations', - 'action_powerdigger': 'Digging blast', - 'actiondesc_powerdigger': 'More powerful digging', - 'action_chainsaw': 'Chainsaw', - 'action_tentacle': 'Summon Tentacle', - 'actiondesc_tentacle': 'Calls a terrifying appendage from another dimension', - 'action_tentacle_timer': 'Summon Tentacle with timer', - 'actiondesc_tentacle_timer': - 'Calls a terrifying appendage from another dimension! Comes with a timer', - 'action_heal_bullet': 'Healing bolt', - 'action_spiral_shot': 'Spiral shot', - 'actiondesc_spiral_shot': 'A mystical whirlwind of magic sparks', - 'action_fireball': 'Fireball', - 'actiondesc_fireball': 'A powerful exploding spell', - 'action_meteor': 'Meteor', - 'actiondesc_meteor': 'A destructive projectile from the skies!', - 'action_flamethrower': 'Flamethrower', - 'actiondesc_flamethrower': 'A stream of fire!!', - 'action_icethrower': 'Icethrower', - 'actiondesc_icethrower': 'A stream of ice!!', - 'action_slimeball': 'Slimeball', - 'actiondesc_slimeball': 'A dripping ball of poisonous slime', - 'action_darkflame': 'Path of dark flame', - 'actiondesc_darkflame': 'A trail of dark, deadly flames', - 'action_missile': 'Summon missile', - 'actiondesc_missile': 'A missile!!!', - 'action_pebble': 'Summon rock spirit', - 'actiondesc_pebble': 'Summons an autonomous rock ally', - 'action_dynamite': 'Dynamite', - 'actiondesc_dynamite': 'Summons a small explosive', - 'action_bomb_legacy': 'Bomb', - 'actiondesc_bomb_legacy': - 'Summons a bomb that destroys ground very efficiently', - 'action_bomb': 'Bomb', - 'actiondesc_bomb': 'Summons a bomb that destroys ground very efficiently', - 'action_bomb_holy': 'Holy Bomb', - 'actiondesc_bomb_holy': 'Summons a bomb that... well...', - 'action_knife': 'Throwing Knife', - 'actiondesc_knife': 'Very deadly!', - 'action_crumbling_earth': 'Earthquake', - 'actiondesc_crumbling_earth': 'Calls the anger of the earth', - 'action_circleshot_a': 'Circle shot', - 'actiondesc_circleshot_a': 'Projectiles fly out in a circular pattern', - 'action_circleshot_b': 'Spiral shot', - 'actiondesc_circleshot_b': 'Projectiles fly out in a spiral pattern', - 'action_acidshot': 'Acid ball', - 'actiondesc_acidshot': 'A terrifying acidic projectile', - 'action_thunderball': 'Thunder charge', - 'actiondesc_thunderball': 'A projectile with immense stored electricity', - 'action_bloomshot': 'Slime arc', - 'actiondesc_bloomshot': - 'Spells cast alongside this will have arcs of slime flowing between them', - 'action_icecircle': 'Ice circle', - 'actiondesc_icecircle': 'Shoots icy projectiles in a circle', - 'action_firebomb': 'Firebomb', - 'actiondesc_firebomb': 'Slow, fiery bolt', - 'action_soilball': 'Chunk of soil', - 'actiondesc_soilball': "Don't soil yourself", - 'action_pink_orb': 'Homing orb', - 'actiondesc_pink_orb': 'A dangerous, homing orb', - 'action_death_cross': 'Death cross', - 'actiondesc_death_cross': - 'A deadly energy cross that explodes after a short time', - 'action_plasma_flare': 'Plasma flare', - 'actiondesc_plasma_flare': 'A magical projectile that accelerates quickly', - 'action_keyshot': 'Key shot', - 'actiondesc_keyshot': 'A powerful projectile. Nothing out of ordinary', - 'action_mana': 'Mana', - 'actiondesc_mana': 'Extra mana', - 'action_skull': 'Skull', - 'actiondesc_skull': 'Scary skull!!!', - 'action_material_debug': 'shoots debug material', - 'actiondesc_material_debug': 'ONLY TO BE USED IN DEBUG MODE!', - 'action_material_liquid': 'shoots liquid', - 'actiondesc_material_liquid': 'Drop it in liquid and shoot it!', - 'action_mist_radioactive': 'Toxic mist', - 'actiondesc_mist_radioactive': 'A cloud of toxic mist', - 'action_mist_alcohol': 'mist of spirits', - 'actiondesc_mist_alcohol': 'A cloud of potent alcohol', - 'action_mist_slime': 'Slime mist', - 'actiondesc_mist_slime': 'A cloud of slimy mist', - 'action_mist_blood': 'Blood mist', - 'actiondesc_mist_blood': 'A cloud of blood mist', - 'action_circle_fire': 'Circle of fire', - 'actiondesc_circle_fire': 'An expanding circle of burning air', - 'action_circle_acid': 'Circle of acid', - 'actiondesc_circle_acid': 'An expanding circle of dripping acid', - 'action_circle_oil': 'Circle of oil', - 'actiondesc_circle_oil': 'An expanding circle of slick oil', - 'action_circle_water': 'Circle of water', - 'actiondesc_circle_water': 'An expanding circle of water', - 'action_material_water': 'Water', - 'actiondesc_material_water': 'Transmute drops of water from nothing', - 'action_material_oil': 'Oil', - 'actiondesc_material_oil': 'Transmute drops of oil from nothing', - 'action_material_blood': 'Blood', - 'actiondesc_material_blood': 'Blood blood blood', - 'action_material_acid': 'Acid', - 'actiondesc_material_acid': 'Transmute drops of acid from nothing', - 'action_material_cement': 'Cement', - 'actiondesc_material_cement': 'Transmute drops of wet cement from nothing', - 'action_material_lava': 'Lava', - 'actiondesc_material_lava': 'Transmute globs of lava from nothing', - 'action_material_gunpowder_explosive': 'Explosive gunpowder', - 'actiondesc_material_gunpowder_explosive': - 'Transmute grains of gunpowder from nothing', - 'action_material_dirt': 'Dirt', - 'actiondesc_material_dirt': 'Transmute grains of dirt from nothing', - 'action_building_board_wood': 'Wooden mold', - 'actiondesc_building_board_wood': - 'Useful for cement construction. REQUIRES SOLAR POWER TO RECHARGE.', - 'action_building_back_wall_rock': 'Back wall (rock)', - 'actiondesc_building_back_wall_rock': - 'Provides structural support. REQUIRES SOLAR POWER TO RECHARGE.', - 'action_building_pressure_plate': 'Pressure plate', - 'actiondesc_building_pressure_plate': 'TODO', - 'action_building_physics_templedoor': 'Temple door', - 'actiondesc_building_physics_templedoor': 'TODO', - 'action_teleport_projectile': 'Teleport bolt', - 'actiondesc_teleport_projectile': - 'A magical bolt that moves you wherever it ends up flying', - 'action_teleport_home': 'Teleport home', - 'actiondesc_teleport_home': - 'Creates a portal to the surface that can be used once per each direction', - 'action_levitation_projectile': 'LEVITATION projectile', - 'actiondesc_levitation_projectile': 'Levitation stuff', - 'action_nuke': 'Nuke', - 'actiondesc_nuke': 'Take cover!', - 'action_high_explosive': 'TNT', - 'actiondesc_high_explosive': 'Extremely powerful explosive projectile', - 'action_drone': 'Drone', - 'actiondesc_drone': 'More powerful digging', - 'action_baab_is': 'IS', - 'actiondesc_baab_is': '', - 'action_baab_all': 'ALL', - 'actiondesc_baab_all': '', - 'action_baab_empty': 'ALL', - 'actiondesc_baab_empty': '', - 'action_baab_lava': 'LAVA', - 'actiondesc_baab_lava': '', - 'action_baab_water': 'WATER', - 'actiondesc_baab_water': '', - 'action_baab_poop': 'POOP', - 'actiondesc_baab_poop': '', - 'action_baab_love': 'LOVE', - 'actiondesc_baab_love': '', - 'action_firework': 'Fireworks!', - 'actiondesc_firework': 'A fiery, explosive projectile', - 'projectile_default': 'projectile', - 'perk_critical_hit': 'Critical Hit +', - 'perkdesc_critical_hit': 'You get more critical hits', - 'perk_breath_underwater': 'Breathless', - 'perkdesc_breath_underwater': - 'You can no longer drown, and can move in liquids with ease.', - 'perk_extra_money': 'Greed', - 'perkdesc_extra_money': 'You gain double the gold per nugget.', - 'perk_extra_money_trick_kill': 'Trick Greed', - 'perkdesc_extra_money_trick_kill': - '4x instead of 2x gold is dropped when death is an accident.', - 'perk_hover_boost': 'Strong Levitation', - 'perkdesc_hover_boost': 'You can fly 100% longer.', - 'perk_movement_faster': 'Faster Movement', - 'perkdesc_movement_faster': 'Your movement speed is increased.', - 'perk_repelling_cape': 'Repelling Cape', - 'perkdesc_repelling_cape': 'Stains drop at a fast rate (when moving).', - 'perk_exploding_corpses': 'Exploding Corpses', - 'perkdesc_exploding_corpses': - 'Enemies explode upon death, but you gain immunity to explosive damage.', - 'perk_saving_grace': 'Saving Grace', - 'perkdesc_saving_grace': - 'If you would die and have more than 1 HP, your HP is set to 1 instead.', - 'perk_invisibility': 'Invisibility', - 'perkdesc_invisibility': - "You're invisible. Stains, casting spells, kicking and taking damage makes you temporarily visible.", - 'perk_global_gore': 'More Blood', - 'perkdesc_global_gore': 'Blood blood blood.', - 'perk_no_damage_flash': 'No Damage Flash', - 'perkdesc_no_damage_flash': - 'Pain is inevitable, but damage flash is optional.', - 'perk_reverse_slowdown': 'Slicky Slime', - 'perkdesc_reverse_slowdown': - 'Instead of slowing you down, slime allows you to move faster.', - 'perk_extra_hp': 'Extra Health (One-off)', - 'perkdesc_extra_hp': 'You gain 50% extra maximum health.', - 'perk_glass_cannon': 'Glass Cannon', - 'perkdesc_glass_cannon': - 'Your spells are 5 times as powerful, but your maximum health becomes 50 and cannot be increased by normal hearts.', - 'perk_respawn': 'Extra Life (One-off)', - 'perkdesc_respawn': 'Upon death you respawn with 100 health.', - 'perk_protection_fire': 'Fire Immunity', - 'perkdesc_protection_fire': 'You take no damage from fire.', - 'perk_protection_radioactivity': 'Toxic Immunity', - 'perkdesc_protection_radioactivity': - 'You take no damage from toxic sludge and other toxic things.', - 'perk_protection_explosion': 'Explosion Immunity', - 'perkdesc_protection_explosion': 'You take no direct damage from explosions.', - 'perk_protection_melee': 'Melee Immunity', - 'perkdesc_protection_melee': - 'You take no damage from close-range enemy attacks.', - 'perk_protection_electricity': 'Electricity Immunity', - 'perkdesc_protection_electricity': 'You take no damage from electric shocks.', - 'perk_teleportitis': 'Teleportitis', - 'perkdesc_teleportitis': - "You take 20% less damage. You teleport away every time you're hurt.", - 'perk_stainless_armour': 'Stainless Armour', - 'perkdesc_stainless_armour': - 'You take 50% less damage as long as you have no active stain status effect.', - 'perk_edit_wands_everywhere': 'Tinker With Wands Everywhere', - 'perkdesc_edit_wands_everywhere': - 'A divine blessing allows you to tinker with wands everywhere.', - 'perk_projectile_homing': 'Homing Shots', - 'perkdesc_projectile_homing': - 'Your spells home towards enemies very slightly.', - 'perk_freeze_field': 'Freeze Field', - 'perkdesc_freeze_field': 'Liquids freeze in your presence.', - 'perk_dissolve_powders': 'Dissolve Powders', - 'perkdesc_dissolve_powders': - 'Sand and other soft, powdery materials dissolve quickly in your presence.', - 'perk_bleed_slime': 'Slime Blood', - 'perk_shield': 'Permanent Shield', - 'perkdesc_shield': 'You gain a small, permanent shield.', - 'perk_revenge_explosion': 'Revenge Explosion', - 'perkdesc_revenge_explosion': - 'You release a magical explosion upon taking damage, and gain 25% resistance against explosions.', - 'perk_electricity': 'Electricity', - 'perkdesc_electricity': - "You're immune to electric damage, but metal and liquids around you electrify constantly. Look out!", - 'perk_mystery_eggplant': 'Mystery Eggplant', - 'perkdesc_mystery_eggplant': 'It breaks easily.', - 'perk_double_hp': 'Double Health, No Regeneration', - 'perkdesc_double_hp': - 'Your maximum HP is doubled, but you take 20% more damage from projectiles.', - 'perk_berserk': 'Berserk', - 'perkdesc_berserk': - 'The less HP you have, the more damage your spells deal, up to +300% extra damage.', - 'perk_shuffle_wands': 'Shuffle Wands', - 'perkdesc_shuffle_wands': - 'All your wands are replaced with random wands of approximately equal power.', - 'perk_heavy_ammo': 'Heavy Ammo', - 'perkdesc_heavy_ammo': 'You gain a selection of 2 powerful spells.', - 'perk_liquid_movement': 'Liquid Movement', - 'perkdesc_liquid_movement': "Liquids don't affect your movement at all.", - 'perk_faster_swimming': 'Faster Swimming', - 'perkdesc_faster_swimming': 'You swim faster.', - 'perk_extra_shop_item': 'Extra Item In Holy Mountain', - 'perkdesc_extra_shop_item': - "There will be an additional item in every Holy Mountain you haven't discovered yet.", - 'perk_poison_burn': 'Burning Poison', - 'perkdesc_poison_burn': - 'Your projectiles have a chance to ignite poisoned enemies.', - 'perk_low_gravity': 'Low Gravity', - 'perkdesc_low_gravity': - 'All creatures, you included, have lower personal gravity.', - 'perk_destruction_enhancement': 'Destruction Enhancement', - 'perkdesc_destruction_enchancement': - 'You can destroy the environment more effectively.', - 'perk_damaging_aura': 'Damaging Aura', - 'perkdesc_damaging_aura': - "Your spells damage nearby enemies even if they don't hit them.", - 'perk_thunder_kick': 'Thunder Kick', - 'perkdesc_thunder_kick': - 'Your kicks instantly kill most foes, and push objects more.', - 'perk_vision': 'Better Vision', - 'perkdesc_vision': 'You can see more into the darkness.', - 'perk_telepathic_vision': 'Telepathic Presence', - 'perkdesc_telepathic_vision': - 'Darkness is no more, but enemies always know where you are.', - 'perk_no_more_knockback': 'No More Knockback', - 'perkdesc_no_more_knockback': 'Enemies can no longer knock you back.', - 'perk_knockback_control': 'Controllable Knockback', - 'perkdesc_knockback_control': 'You can steer while being knocked back.', - 'perk_roll_again': 'Roll Again', - 'perkdesc_roll_again': 'You get a new set of perks to choose from.', - 'perk_reveal_secrets': 'Reveal Secrets', - 'perkdesc_reveal_secrets': - 'Chests, hearts and other items shine through darkness.', - 'perk_potion_drop': 'Potion Drop', - 'perkdesc_potion_drop': - 'Enemies have a chance of dropping a random potion upon death.', - 'perk_mystery_egg': 'Mystery Egg', - 'perkdesc_mystery_egg': 'Something may hatch from it!', - 'perk_gold_no_disappear_while_seen': 'Golden I', - 'perkdesc_gold_no_disappear_while_seen': - "Gold doesn't disappear as long as it can be seen.", - 'perk_mana_discount': 'Mana Discount', - 'perkdesc_mana_discount': 'All spells cost 50% less mana.', - 'perk_juggernaut': 'Juggernaut Spells', - 'perkdesc_juggernaut': - 'Your projectiles deal 30% more damage, but are 30% slower.', - 'perk_big_potions': 'Big Potions', - 'perkdesc_big_potions': 'Potions you find contain double the liquid.', - 'perk_extra_charges': 'Extra Charges', - 'perkdesc_extra_charges': - 'Spells with limited uses can be used twice as many times.', - 'perk_fast_projectiles': 'Faster Projectiles', - 'perkdesc_fast_projectiles': 'Your projectile spells fly faster than before.', - 'perk_deadly_environment': 'Deadly Environment', - 'perkdesc_deadly_environment': - 'Creatures take increased damage from poison and other liquids, fire, and more.', - 'perk_cursed_power': 'Cursed Power', - 'perkdesc_cursed_power': - 'All your wands gain extra damage but become uncustomizable.', - 'perk_randomize_spells': 'Randomize Spells', - 'perkdesc_randomize_spells': - 'All spells in your inventory are replaced with a random spell.', - 'perk_personal_raincloud': 'Personal Raincloud', - 'perkdesc_personal_raincloud': - 'You gather water when standing in a pool, and release it if you shoot at the cloud that follows you.', - 'perk_helper_orb': 'Helper Orb', - 'perkdesc_helper_orb': 'An orb flies near you and attacks your enemies.', - 'perk_extra_wand_slot': 'Extra Wand Storage', - 'perkdesc_extra_wand_slot': 'You can carry one extra wand.', - 'perk_extra_potion_slot': 'Extra Item Storage', - 'perkdesc_extra_potion_slot': 'You can carry one extra item.', - 'perk_extra_action_storage': 'Extra Spell Storage', - 'perkdesc_extra_action_storage': 'You gain more room for spells', - 'perk_persuasion': 'Persuasion', - 'perkdesc_persuasion': 'Enemies with low health may start fighting for you.', - 'perk_permanent_flying': 'Floor Is Lava', - 'perkdesc_permanent_flying': - 'You can fly forever, but standing on the ground deals you damage over time.', - 'perk_melt': 'Melting Corpses', - 'perkdesc_melt': "Your enemies' corpses melt into slime.", - 'perk_double_cast': 'Double Cast', - 'perkdesc_double_cast': 'Your wands cast one extra spell when used.', - 'perk_ability_actions_materialized': 'Bombs Materialized', - 'perkdesc_ability_actions_materialized': - 'Bomb-like spells can be placed in the ITEMS space in inventory and used like throwable items.', - 'mat_air': 'air', - 'mat_fire': 'fire', - 'mat_spark': 'spark', - 'mat_spark_green': 'spark', - 'mat_spark_blue': 'spark', - 'mat_spark_red': 'spark', - 'mat_spark_white': 'spark', - 'mat_spark_yellow': 'spark', - 'mat_spark_purple': 'spark', - 'mat_spark_player': 'spark', - 'mat_spark_teal': 'spark', - 'mat_spark_electric': 'electric spark', - 'mat_flame': 'fire', - 'mat_sand_static': 'ground', - 'mat_sand_static_rainforest': 'lush ground', - 'mat_bone_static': 'bone wall', - 'mat_rust_static': 'rusted metal', - 'mat_sand_static_bright': 'granite ground', - 'mat_sand_static_red': 'rusty ground', - 'mat_nest_static': 'nest', - 'mat_bluefungi_static': 'blue fungus', - 'mat_cheese_static': 'cheese', - 'mat_rock_static': 'rock', - 'mat_rock_static_intro': 'rock', - 'mat_water_static': 'Water', - 'mat_endslime_static': 'hell slime', - 'mat_slime_static': 'slime', - 'mat_rock_hard': 'dense rock', - 'mat_rock_static_noedge': 'rock', - 'mat_rock_hard_border': 'extremely dense rock', - 'mat_rock_magic_gate': 'magic gate', - 'mat_rock_magic_bottom': 'magic wall', - 'mat_rock_eroding': 'eroding rock', - 'mat_rock_vault': 'vault rock', - 'mat_coal_static': 'coal vein', - 'mat_rock_static_grey': 'grey rock', - 'mat_rock_static_radioactive': 'toxic rock', - 'mat_rock_static_poison': 'poisonous rock', - 'mat_skullrock': 'hell rock', - 'mat_rock_static_wet': 'damp rock', - 'mat_lavarock_static': 'volcanic rock', - 'mat_lava': 'lava', - 'mat_meteorite_static': 'meteorite', - 'mat_templerock_static': 'brickwork', - 'mat_templebrick_static': 'brickwork', - 'mat_templebrick_noedge_static': 'brickwork', - 'mat_templebrick_thick_static': 'brickwork', - 'mat_templebrickdark_static': 'brickwork', - 'mat_templeslab_static': 'brickwork', - 'mat_templeslab_crumbling_static': 'brickwork', - 'mat_glowstone': 'glowing stone', - 'mat_glowstone_altar': 'glowing stone', - 'mat_glowstone_potion': 'glowing stone', - 'mat_templebrick_red': 'brickwork', - 'mat_templebrick_moss_static': 'mossy brickwork', - 'mat_the_end': 'hell rock', - 'mat_steel_static': 'steel', - 'mat_steelmoss_static': 'mossy steel', - 'mat_steelmoss_slanted': 'mossy steel', - 'mat_steelsmoke_static': 'smoking steel', - 'mat_steelpipe_static': 'metal pipe', - 'mat_steel_static_strong': 'dense steel', - 'mat_steel_static_unmeltable': 'hardened steel', - 'mat_rock_static_glow': 'glowing matter', - 'mat_snow_static': 'packed snow', - 'mat_ice_static': 'ice', - 'mat_rock_static_intro_breakable': 'rock', - 'mat_ice_blood_static': 'frozen blood', - 'mat_ice_acid_static': 'frozen acid', - 'mat_ice_cold_static': 'ice', - 'mat_ice_radioactive_static': 'toxic ice', - 'mat_ice_meteor_static': 'ice', - 'mat_tubematerial': 'neon tube', - 'mat_glass_static': 'glass', - 'mat_waterrock': 'rock', - 'mat_ice_glass': 'ice', - 'mat_tube_physics': 'neon tube', - 'mat_ice_acid_glass': 'frozen acid', - 'mat_ice_cold_glass': 'ice', - 'mat_ice_radioactive_glass': 'toxic ice', - 'mat_ice_glass_b2': 'ice', - 'mat_glass_brittle': 'brittle glass', - 'mat_snowrock_static': 'frozen rock', - 'mat_concrete_static': 'concrete', - 'mat_wood_static': 'wood', - 'mat_wood_static_wet': 'damp wood', - 'mat_creepy_liquid_emitter': 'brick wall', - 'mat_gold_static': 'gold vein', - 'mat_gold_static_dark': 'vibrant gold vein', - 'mat_wood_static_vertical': 'wood', - 'mat_wood_static_gas': 'pressurized wood', - 'mat_corruption_static': 'corrupted rock', - 'mat_smoke': 'smoke', - 'mat_smoke_explosion': 'smoke', - 'mat_steam': 'steam', - 'mat_acid_gas': 'flammable gas', - 'mat_acid_gas_static': 'flammable gas', - 'mat_smoke_static': 'smoke', - 'mat_poison_gas': 'poison gas', - 'mat_fungal_gas': 'fungal gas', - 'mat_blood_cold_vapour': 'freezing vapour', - 'mat_sand_herb_vapour': 'funky vapour', - 'mat_radioactive_gas': 'toxic gas', - 'mat_radioactive_gas_static': 'toxic gas', - 'mat_water': 'Water', - 'mat_water_fading': 'Water', - 'mat_water_salt': 'brine', - 'mat_water_temp': 'Water', - 'mat_water_ice': 'chilly water', - 'mat_water_swamp': 'swamp', - 'mat_oil': 'oil', - 'mat_liquid_fire_weak': 'liquid fire', - 'mat_alcohol': 'whiskey', - 'mat_midas_precursor': 'alchemic precursor', - 'mat_midas': 'draught of midas', - 'mat_magic_liquid': 'gate-opener', - 'mat_magic_liquid_teleportation': 'teleportatium', - 'mat_magic_liquid_hp_regeneration': 'healthium', - 'mat_magic_liquid_hp_regeneration_unstable': 'lively concoction', - 'mat_magic_liquid_polymorph': 'polymorphine', - 'mat_magic_liquid_random_polymorph': 'chaotic polymorphine', - 'mat_magic_liquid_berserk': 'berserkium', - 'mat_magic_liquid_charm': 'pheromone', - 'mat_magic_liquid_invisibility': 'invisiblium', - 'mat_cloud': 'cloud', - 'mat_cloud_radioactive': 'toxic mist', - 'mat_cloud_alcohol': 'alcohol mist', - 'mat_cloud_blood': 'blood mist', - 'mat_cloud_slime': 'slime mist', - 'mat_swamp': 'swamp', - 'mat_mud': 'mud', - 'mat_blood_fading_slow': 'fungal blood', - 'mat_blood_worm': 'worm blood', - 'mat_blood_cold': 'freezing liquid', - 'mat_radioactive_liquid': 'toxic sludge', - 'mat_radioactive_liquid_fading': 'toxic sludge', - 'mat_plasma_fading': 'magical liquid', - 'mat_plasma_fading_green': 'magical liquid', - 'mat_plasma_fading_pink': 'magical liquid', - 'mat_gold_molten': 'molten gold', - 'mat_steel_static_molten': 'molten steel', - 'mat_steelmoss_slanted_molten': 'molten steel', - 'mat_steelmoss_static_molten': 'molten steel', - 'mat_steelsmoke_static_molten': 'molten steel', - 'mat_metal_molten': 'molten metal', - 'mat_metal_rust_molten': 'molten metal', - 'mat_metal_nohit_molten': 'molten metal', - 'mat_aluminium_molten': 'molten aluminium', - 'mat_aluminium_robot_molten': 'molten aluminium', - 'mat_metal_prop_molten': 'molten metal', - 'mat_steel_rust_molten': 'molten steel', - 'mat_aluminium_oxide_molten': 'molten aluminium', - 'mat_wax_molten': 'molten wax', - 'mat_silver_molten': 'molten silver', - 'mat_copper_molten': 'molten copper', - 'mat_brass_molten': 'molten brass', - 'mat_glass_molten': 'molten glass', - 'mat_glass_broken_molten': 'molten glass', - 'mat_steel_molten': 'molten metal', - 'mat_creepy_liquid': 'creepy liquid', - 'mat_cement': 'cement', - 'mat_sand': 'sand', - 'mat_sand_blue': 'blue sand', - 'mat_lavasand': 'volcanic sand', - 'mat_bone': 'bone dust', - 'mat_soil': 'soil', - 'mat_soil_dead': 'barren soil', - 'mat_sandstone': 'sandstone', - 'mat_fungisoil': 'fungal soil', - 'mat_honey': 'honey', - 'mat_pea_soup': 'pea soup', - 'mat_endslime': 'hell slime', - 'mat_endslime_blood': 'hell slime', - 'mat_explosion_dirt': 'dirt', - 'mat_vine': 'vine', - 'mat_root': 'vine', - 'mat_snow': 'snow', - 'mat_rotten_meat': 'rotten meat', - 'mat_meat_slime_sand': 'slimy meat', - 'mat_meat_slime_green': 'green slimy meat', - 'mat_meat_slime_orange': 'slimy meat', - 'mat_rotten_meat_radioactive': 'toxic meat', - 'mat_meat_worm': 'worm meat', - 'mat_ice': 'ice', - 'mat_wax': 'wax', - 'mat_gold': 'gold', - 'mat_gold_radioactive': 'toxic gold', - 'mat_copper': 'copper', - 'mat_silver': 'silver', - 'mat_coal': 'coal', - 'mat_brass': 'brass', - 'mat_burning_powder': 'burning powder', - 'mat_sodium_unstable': 'wet sodium', - 'mat_gunpowder': 'gunpowder', - 'mat_gunpowder_tnt': 'gunpowder', - 'mat_gunpowder_unstable': 'gunpowder', - 'mat_gunpowder_unstable_boss_limbs': 'slimy meat', - 'mat_plastic_red': 'plastic', - 'mat_plastic_red_molten': 'molten plastic', - 'mat_plastic_molten': 'molten plastic', - 'mat_plastic_prop_molten': 'molten plastic', - 'mat_grass': 'grass', - 'mat_moss': 'moss', - 'mat_moss_rust': 'rusty moss', - 'mat_fungi_green': 'fungus', - 'mat_spore': 'seed', - 'mat_plant_material_red': 'seed', - 'mat_ceiling_plant_material': 'seed', - 'mat_mushroom_seed': 'fungal spore', - 'mat_plant_seed': 'plant seed', - 'mat_mushroom': 'fungal spore', - 'mat_mushroom_giant_red': 'fungal spore', - 'mat_mushroom_giant_blue': 'fungal spore', - 'mat_bush_seed': 'evergreen seed', - 'mat_acid': 'acid', - 'mat_wood_player_b2': 'wood', - 'mat_wood_player_b2_vertical': 'wood', - 'mat_wood': 'wood', - 'mat_fuse': 'bomb', - 'mat_fuse_tnt': 'tnt', - 'mat_fuse_holy': 'holy matter', - 'mat_templebrick_box2d': 'brickwork', - 'mat_wood_trailer': 'wood', - 'mat_wood_wall': 'wood', - 'mat_cactus': 'grass', - 'mat_grass_loose': 'fungal matter', - 'mat_wood_prop': 'wood', - 'mat_wood_prop_durable': 'tough wood', - 'mat_nest_box2d': 'nest', - 'mat_cocoon_box2d': 'cocoon', - 'mat_wood_loose': 'wood', - 'mat_rock_loose': 'rock', - 'mat_ice_ceiling': 'ice', - 'mat_brick': 'brick wall', - 'mat_concrete_collapsed': 'collapsed concrete', - 'mat_tnt': 'tnt', - 'mat_trailer_text': 'text', - 'mat_meteorite': 'meteorite', - 'mat_meteorite_crackable': 'meteorite', - 'mat_meteorite_green': 'green meteorite', - 'mat_steel': 'steel', - 'mat_steel_rust': 'rusted steel', - 'mat_metal_rust_rust': 'rusted metal', - 'mat_metal_rust_barrel_rust': 'rusted metal', - 'mat_plastic': 'plastic', - 'mat_aluminium': 'aluminium', - 'mat_metal_prop': 'metal', - 'mat_metal': 'metal', - 'mat_rock_box2d_hard': 'rock', - 'mat_rock_box2d_nohit': 'rock', - 'mat_rock_box2d_nohit_hard': 'dense rock', - 'mat_rock_static_box2d': 'rock', - 'mat_rock_box2d': 'rock', - 'mat_item_box2d': 'item', - 'mat_gem_box2d': 'gem', - 'mat_potion_glass_box2d': 'glass', - 'mat_glass_box2d': 'glass', - 'mat_gem_box2d_pink': 'gem', - 'mat_gem_box2d_red': 'gem', - 'mat_gem_box2d_green': 'gem', - 'mat_gem_box2d_orange': 'gem', - 'mat_gold_box2d': 'gold', - 'mat_metal_nohit': 'metal', - 'mat_metal_rust': 'rusted metal', - 'mat_metal_rust_barrel': 'rusted metal', - 'mat_bone_box2d': 'bone', - 'mat_crystal': 'crystal', - 'mat_crystal_purple': 'purple crystal', - 'mat_crystal_magic': 'crystal', - 'mat_aluminium_oxide': 'aluminium', - 'mat_meat': 'meat', - 'mat_urine': 'urine', - 'mat_poo': 'excrement', - 'mat_rocket_particles': 'smoke', - 'mat_ice_melting_perf_killer': 'ice', - 'mat_ice_b2': 'ice', - 'mat_glass': 'glass', - 'mat_neon_tube_purple': 'neon tube', - 'mat_neon_tube_cyan': 'neon tube', - 'mat_neon_tube_blood_red': 'neon tube', - 'mat_blood_thick': 'blood', - 'mat_snow_b2': 'snow', - 'mat_diamond': 'diamond', - 'mat_meat_slime': 'slimy meat', - 'mat_concrete_sand': 'concrete', - 'mat_blood': 'blood', - 'mat_blood_fading': 'blood', - 'mat_gunpowder_explosive': 'gunpowder', - 'mat_fungi': 'fungus', - 'mat_plant_material': 'plant material', - 'mat_wood_player': 'wood', - 'mat_wax_b2': 'wax', - 'mat_physics_throw_material_part2': 'who knows', - 'mat_fire_blue': 'fire', - 'mat_gold_b2': 'gold', - 'mat_fungus_loose': 'fungus', - 'mat_sodium': 'sodium', - 'mat_sulphur': 'sulphur', - 'mat_salt': 'salt', - 'mat_steel_sand': 'steel', - 'mat_slime_green': 'slime', - 'mat_slime_pink': 'slime', - 'mat_soil_lush': 'soil', - 'mat_radioactive_liquid_yellow': 'toxic sludge', - 'mat_liquid_fire': 'fire', - 'mat_smoke_magic': 'smoke', - 'mat_sand_herb': 'herb', - 'ENTIRELY NEW TEXT AFTER THIS LINE': '', - 'biome_tower': 'Tower', - 'biome_vault_frozen': 'Frozen vault', - 'biome_clouds': 'Cloudscape', - 'biome_liquidcave': 'Ancient laboratory', - 'biome_secret_lab': 'Abandoned alchemy lab', - 'biome_weathercrystal': 'Crystal Chamber', - 'mat_ice_poison_static': 'Frozen poison', - 'mat_ice_poison_glass': 'Frozen poison', - 'mat_ice_slime_static': 'Frozen slime', - 'mat_ice_slime_glass': 'Frozen slime', - 'mat_ice_blood_glass': 'Frozen blood', - 'mat_void_liquid': 'Void liquid', - 'mat_fungi_creeping': 'Mystery fungus', - 'mat_purifying_powder': 'Purifying powder', - 'mat_magic_crystal': 'Magical crystal', - 'mat_rock_static_cursed': 'Cursed rock', - 'mat_steelfrost_static': 'Frozen steel', - 'mat_slush': 'Slush', - 'mat_poison': 'Poison', - 'mat_alcohol_gas': 'Whiskey fumes', - 'mat_vomit': 'Vomit', - 'mat_blood_fungi': 'fungus blood', - 'mat_glowshroom': 'glowing fungal spore', - 'mat_fungi_trippy': 'weird fungus', - 'mat_sima': 'Sima', - 'mat_glass_liquidcave': 'Tempered glass', - 'mat_templebrick_static_ruined': 'Ruined brick wall', - 'mat_templebrick_brittle': 'Brittle brickwork', - 'mat_rock_brittle': 'Brittle rock', - 'mat_antidote': 'Antidote', - 'mat_confusion': 'flummoxium', - 'mat_magic_liquid_movement_faster': 'acceleratium', - 'mat_magic_liquid_worm_attractor': 'worm pheromone', - 'mat_magic_liquid_protection_all': 'ambrosia', - 'mat_magic_liquid_mana_regeneration': 'concentrated mana', - 'mat_meat_helpless': 'Meat of an innocent creature', - 'mat_meat_trippy': 'Weird meat', - 'mat_meat_cursed': 'Cursed meat', - 'mat_meat_slime_cursed': 'Slimy cursed meat', - 'mat_meat_teleport': 'Ethereal meat', - 'mat_meat_polymorph': 'Unstable meat', - 'mat_meat_confusion': 'Ambiguous meat', - 'mat_bloodgold_box2d': 'Ruby', - 'mat_magic_liquid_faster_levitation': 'levitatium', - 'mat_magic_liquid_faster_levitation_and_movement': 'hastium', - 'mat_magic_gas_hp_regeneration': 'Healium', - 'mat_meat_polymorph_protection': 'Stinky meat', - 'animal_slimeshooter_weak': 'Heikko limanuljaska', - 'animal_wraith': 'Hyypiö', - 'animal_wraith_glowing': 'Hohtava hyypiö', - 'animal_necromancer_shop': 'Stevari', - 'animal_mine': 'Maamiina', - 'animal_fungus_big': 'Nuijamalikka', - 'animal_lurker': 'Varjokupla', - 'animal_scavenger_invis': 'Häivehiisi', - 'animal_scavenger_shield': 'Kilpihiisi', - 'animal_frog_big': 'Jättikonna', - 'animal_tank_super': 'Laser-tankki', - 'animal_plague_rats_rat': 'Ruttorotta', - 'animal_giantshooter_weak': 'Heikko äitinuljaska', - 'animal_acidshooter_weak': 'Heikko happonuljaska', - 'animal_wraith_storm': 'Ukkoshyypiö', - 'animal_skycrystal_physics': 'Taivaskristalli', - 'animal_slimeshooter_nontoxic': 'Limanuljaska', - 'animal_turret_right': 'Torjuntalaite', - 'animal_turret_left': 'Torjuntalaite', - 'animal_necromancer': 'Hahmonvaihtaja', - 'animal_lukki_tiny': 'Pikkuhämähäkki', - 'animal_spearbot': 'Peitsivartija', - 'animal_ultimate_killer': 'Kauhuhirviö', - 'animal_goblin_bomb': 'Sähikäismenninkäinen', - 'animal_pebble_physics': 'Lohkare', - 'animal_chest_leggy': 'Jalkamatkatavara', - 'animal_boss_centipede': 'Kolmisilmä', - 'animal_failed_alchemist': 'Kadotettu alkemisti', - 'animal_failed_alchemist_b': 'Epäalkemisti', - 'animal_enlightened_alchemist': 'Valaistunut alkemisti', - 'animal_lasergun': 'Laserkanuuna', - 'animal_monk': 'Munkki', - 'animal_statue': 'Patsas', - 'animal_boss_alchemist': 'Ylialkemisti', - 'animal_wizard_returner': 'Palauttajamestari', - 'animal_wizard_swapper': 'Vaihdosmestari', - 'animal_drone_lasership': 'Jättilaser-lennokki', - 'animal_shaman': 'Märkiäinen', - 'actiondesc_cloud_acid ': 'Creates a rain of acid ', - 'actiondesc_damage_x2': 'Spells cast alongside this spell deal double damage', - 'actiondesc_damage_x5': - 'Spells cast alongside this spell deal quintuple damage', - 'actiondesc_unstable_gunpowder': - 'Makes a projectile release firecrackers when it disappears', - 'actiondesc_slow_bullet_timer': - 'A slow but powerful orb of energy that casts another spell after a timer runs out', - 'actiondesc_bouncy_orb_timer': - 'A fast, arcing projectile that casts another spell after a timer runs out', - 'actiondesc_heal_bullet': 'A magical bolt with rejuvenative powers', - 'action_explosive_projectile': 'Explosive projectile', - 'action_explosion': 'Explosion', - 'actiondesc_arc_electric': - 'Creates arcs of lightning between projectiles (requires 2 projectile spells)', - 'actiondesc_arc_fire': - 'Creates arcs of fire between projectiles (requires 2 projectile spells)', - 'actiondesc_arc_gunpowder': - 'Creates arcs of gunpowder between projectiles (requires 2 projectile spells)', - 'actiondesc_arc_poison': - 'Creates arcs of poison between projectiles (requires 2 projectile spells)', - 'action_death_cross_big': 'Giga death cross', - 'actiondesc_death_cross_big': - 'A giant, deadly energy cross that explodes after a short time', - 'action_area_damage': 'Damage field', - 'actiondesc_area_damage': - 'Gives a projectile an energy field that constantly deals 3.5 damage to nearby creatures', - 'action_summon_rock': 'Rock', - 'actiondesc_summon_rock': 'Create a mighty rock out of thin air', - 'action_summon_egg': 'Summon egg', - 'actiondesc_summon_egg': 'Summons an egg that houses a friendly creature', - 'action_spitter_tier_2': 'Large spitter bolt', - 'actiondesc_spitter_tier_2': 'A more powerful version of Spitter Bolt', - 'action_spitter_tier_2_timer': 'Large spitter bolt with timer', - 'actiondesc_spitter_tier_2_timer': - 'A more powerful version of Spitter Bolt that casts another spell after a timer runs out', - 'action_spitter_tier_3': 'Giant spitter bolt', - 'actiondesc_spitter_tier_3': 'The most powerful version of Spitter Bolt', - 'action_spitter_tier_3_timer': 'Giant spitter bolt with timer', - 'actiondesc_spitter_tier_3_timer': - 'The most powerful version of Spitter Bolt that casts another spell after a timer runs out', - 'action_transmutation': 'Chaotic transmutation', - 'actiondesc_transmutation': - "Transmutes various liquids and powdery substances within a projectile's range into something else", - 'action_toxic_to_acid': 'Toxic sludge to acid', - 'actiondesc_toxic_to_acid': - "Makes any toxic sludge within a projectile's range turn into acid", - 'action_summon_wandghost': 'Summon Taikasauva', - 'actiondesc_summon_wandghost': 'Summons a possessed wand to aid you', - 'action_touch_gold': 'Touch of Gold', - 'actiondesc_touch_gold': - 'Transmutes everything in a short radius into gold, including walls, creatures... and you', - 'action_touch_water': 'Touch of Water', - 'actiondesc_touch_water': - 'Transmutes everything in a short radius into water, including walls, creatures... and you', - 'action_touch_oil': 'Touch of Oil', - 'actiondesc_touch_oil': - 'Transmutes everything in a short radius into oil, including walls, creatures... and you', - 'action_touch_alcohol': 'Touch of Spirits', - 'actiondesc_touch_alcohol': - 'Transmutes everything in a short radius into alcohol, including walls, creatures... and you', - 'action_touch_blood': 'Touch of Blood', - 'actiondesc_touch_blood': - 'Transmutes everything in a short radius into blood, including walls, creatures... and you', - 'action_touch_smoke': 'Touch of Smoke', - 'actiondesc_touch_smoke': - 'Transmutes everything in a short radius into smoke, including walls, creatures... and you', - 'action_destruction': 'Destruction', - 'actiondesc_destruction': - 'Instantly decimates foes around you, at the cost of your HP', - 'action_projectile_transmutation_field': 'Projectile transmutation field', - 'actiondesc_projectile_transmutation_field': - 'Projectiles caught within the field transform into harmless critters', - 'action_chaotic_arc': 'Chaotic path', - 'actiondesc_chaotic_arc': - 'Causes a projectile to chaotically fly wherever it wishes', - 'action_projectile_thunder_field': 'Projectile thunder field', - 'actiondesc_projectile_thunder_field': - 'Projectiles caught within the field transform into blasts of lightning', - 'action_projectile_gravity_field': 'Projectile gravity field', - 'actiondesc_projectile_gravity_field': - 'Projectiles caught within the field are attracted towards its center', - 'action_fly_downwards': 'Fly downwards', - 'actiondesc_fly_downwards': - 'Causes a projectile to aim straight downwards a short time after casting', - 'action_fly_upwards': 'Fly upwards', - 'actiondesc_fly_upwards': - 'Causes a projectile to aim straight upwards a short time after casting', - 'action_horizontal_arc': 'Horizontal path', - 'actiondesc_horizontal_arc': - 'Forces a projectile on a horizontal path, but increases its damage', - 'action_luminous_drill': 'Luminous drill', - 'actiondesc_luminous_drill': - 'A pinpointed, short-ranged beam of concentrated light', - 'action_luminous_drill_timer': 'Luminous drill with timer', - 'actiondesc_luminous_drill_timer': - 'A pinpointed, short-ranged beam of concentrated light that casts another spell after a timer runs out', - 'action_hitfx_explosion_slime': 'Explosion on slimy enemies', - 'actiondesc_hitfx_explosion_slime': - 'Makes a projectile explode upon collision with creatures covered in slime', - 'action_hitfx_explosion_slime_giga': 'Giant explosion on slimy enemies', - 'actiondesc_hitfx_explosion_slime_giga': - 'Makes a projectile explode powerfully upon collision with creatures covered in slime', - 'action_hitfx_explosion_alcohol': 'Explosion on drunk enemies', - 'actiondesc_hitfx_explosion_alcohol': - 'Makes a projectile explode upon collision with creatures covered in alcohol', - 'action_hitfx_explosion_alcohol_giga': 'Giant explosion on drunk enemies', - 'actiondesc_hitfx_explosion_alcohol_giga': - 'Makes a projectile explode powerfully upon collision with creatures covered in alcohol', - 'action_fireball_ray_enemy': 'Personal fireball thrower', - 'actiondesc_fireball_ray_enemy': - 'Makes a projectile turn the creatures it hits into living fireball throwers', - 'action_lightning_ray': 'Lightning thrower', - 'actiondesc_lightning_ray': - 'Makes a projectile cast lightning in random directions', - 'action_lightning_ray_enemy': 'Personal lightning caster', - 'actiondesc_lightning_ray_enemy': - 'Makes a projectile turn the creatures it hits into living thunderstorms', - 'action_tentacle_ray': 'Tentacler', - 'actiondesc_tentacle_ray': - 'Makes a projectile cast tentacles in random directions', - 'action_tentacle_ray_enemy': 'Personal tentacler', - 'actiondesc_tentacle_ray_enemy': - 'Makes creatures hit by a projectile grow tentacles in a chaotic manner', - 'action_hitfx_toxic_charm': 'Charm on toxic sludge', - 'actiondesc_hitfx_toxic_charm': - 'Makes a projectile charm creatures covered in toxic sludge', - 'action_tentacle_portal': 'Eldritch portal', - 'actiondesc_tentacle_portal': 'Summons a one-way portal to a sinister realm', - 'action_static_to_sand': 'Ground to sand', - 'actiondesc_static_to_sand': - "Makes any hard, solid materials within a projectile's range turn into sand", - 'action_gravity_field_enemy': 'Personal gravity field', - 'actiondesc_gravity_field_enemy': - 'Makes creatures hit by a projectile gain a temporary gravity well that draws projectiles in', - 'action_summon_hollow_egg': 'Summon hollow egg', - 'actiondesc_summon_hollow_egg': - 'Summons an otherwise empty egg that casts a spell upon cracking open', - 'action_buckshot': 'Triplicate bolt', - 'actiondesc_buckshot': 'A formation of three small, fast bolts', - 'action_lifetime': 'Increase lifetime', - 'actiondesc_lifetime': 'Increases the lifetime of a spell', - 'action_mana_reduce': 'Add mana', - 'actiondesc_mana_reduce': 'Adds 30 mana to the wand', - 'action_shortlived_shot': 'Shortlived spell', - 'actiondesc_shortlived_shot': - 'Makes a projectile lasts only a very short amount of time, but deal more damage', - 'action_wall_horizontal': 'Horizontal barrier', - 'actiondesc_wall_horizontal': - 'A thin, horizontal barrier that harms passing creatures, including you', - 'action_wall_vertical': 'Vertical barrier', - 'actiondesc_wall_vertical': - 'A thin, vertical barrier that harms passing creatures, including you', - 'action_wall_square': 'Square barrier', - 'actiondesc_wall_square': - 'A thin, square-shaped barrier that harms passing creatures, including you', - 'action_purple_explosion_field': 'Glittering field', - 'actiondesc_purple_explosion_field': - 'Small explosions appear randomly over a large area', - 'action_light_shot': 'Light shot', - 'actiondesc_light_shot': - 'Makes a projectile move considerably faster, but deal less damage', - 'action_commander_bullet': 'Commander bolt', - 'actiondesc_commander_bullet': - 'Any projectiles shot alongside the command bolt will be attracted to it. Casts 3 extra spells upon being cast', - 'action_disc_bullet_big': 'Giga disc projectile', - 'actiondesc_disc_bullet_big': - 'Summons a large, serrated disc with a curious flight pattern', - 'action_bounce_explosion': 'Explosive bounce', - 'actiondesc_bounce_explosion': 'Makes a projectile explode as it bounces', - 'action_rocket_downwards': 'Downwards bolt bundle', - 'actiondesc_rocket_downwards': - 'Makes a projectile separate into a bundle of 5 explosive bolts as soon as it moves downwards', - 'action_piercing_shot': 'Piercing shot', - 'actiondesc_piercing_shot': - 'Makes a projectile fly through enemies, but harmful to the caster', - 'action_clipping_shot': 'Drilling shot', - 'actiondesc_clipping_shot': - 'Gives a projectile the power to go through the ground', - 'action_delayed_spell': 'Delayed spellcast', - 'actiondesc_delayed_spell': - 'A static, magical phenomenon that casts 3 extra spells after a short while', - 'action_turret_spell': 'Guarding spellcast', - 'actiondesc_turret_spell': - 'A static, magical phenomenon that casts 3 extra spells if an enemy approaches it', - 'action_accelerating_shot': 'Accelerating shot', - 'actiondesc_accelerating_shot': - 'Causes a projectile to accelerate as it flies', - 'action_avoiding_arc': 'Avoiding arc', - 'actiondesc_avoiding_arc': 'Makes a projectile shy away from obstacles', - 'action_lifetime_down': 'Reduce lifetime', - 'actiondesc_lifetime_down': 'Reduces the lifetime of a spell', - 'action_long_distance_cast': 'Long-distance cast', - 'actiondesc_long_distance_cast': - 'Casts a spell some distance away from the caster', - 'action_teleport_cast': 'Teleporting cast', - 'actiondesc_teleport_cast': 'Casts a spell from the closest enemy', - 'action_heavy_spread': 'Heavy spread', - 'actiondesc_heavy_spread': - 'Gives a projectile a much lower cast delay, but no respect to your aim', - 'action_ocarina_a': 'Ocarina - note A', - 'actiondesc_ocarina_a': 'Music for your ears!', - 'action_ocarina_b': 'Ocarina - note B', - 'actiondesc_ocarina_b': 'Music for your ears!', - 'action_ocarina_c': 'Ocarina - note C', - 'actiondesc_ocarina_c': 'Music for your ears!', - 'action_ocarina_d': 'Ocarina - note D', - 'actiondesc_ocarina_d': 'Music for your ears!', - 'action_ocarina_e': 'Ocarina - note E', - 'actiondesc_ocarina_e': 'Music for your ears!', - 'action_ocarina_f': 'Ocarina - note F', - 'actiondesc_ocarina_f': 'Music for your ears!', - 'action_ocarina_gsharp': 'Ocarina - note G#', - 'actiondesc_ocarina_gsharp': 'Music for your ears!', - 'action_ocarina_a2': 'Ocarina - note A2', - 'actiondesc_ocarina_a2': 'Music for your ears!', - 'action_chain_bolt': 'Chain bolt', - 'actiondesc_chain_bolt': - 'Fires a mysterious bolt that jumps from enemy to enemy', - 'action_glitter_bomb': 'Glitter bomb', - 'actiondesc_glitter_bomb': - 'Summons a bomb that explodes into volatile fragments', - 'action_fireball_ray_line': 'Two-way fireball thrower', - 'actiondesc_fireball_ray_line': - 'Makes a projectile fire small fireballs perpendicular to its trajectory', - 'action_pingpong_path': 'Ping-pong path', - 'actiondesc_pingpong_path': 'Makes a projectile fly back and forth', - 'action_floating_arc': 'Floating arc', - 'actiondesc_floating_arc': 'Makes a projectile float above the ground', - 'action_teleport_projectile_static': 'Return', - 'actiondesc_teleport_projectile_static': - "After a period of time, you'll be returned to where you cast this spell", - 'action_freezing_gaze': 'Freezing gaze', - 'actiondesc_freezing_gaze': 'A heart-freezingly sinister aura', - 'action_glowing_bolt': 'Pinpoint of light', - 'actiondesc_glowing_bolt': - 'An extremely concentrated point of light that explodes after a moment', - 'action_random_explosion': 'Chaos magic', - 'actiondesc_random_explosion': - 'Makes a projectile launch a random spell (out of a limited selection) when it hits something', - 'action_decelerating_shot': 'Decelerating shot', - 'actiondesc_decelerating_shot': 'Makes a projectile decelerate as it flies', - 'action_rocket_octagon': 'Octagonal bolt bundle', - 'actiondesc_rocket_octagon': - 'Makes a projectile launch 8 magical bolts if it moves slowly enough', - 'action_blood_magic': 'Blood magic', - 'actiondesc_blood_magic': - "Reduces a spell's mana cost and recharge time greatly, at the costs of four health points", - 'action_fizzle': 'Fizzle', - 'actiondesc_fizzle': 'Gives a spell a small probability of short-circuiting', - 'action_super_teleport_cast': 'Warp cast', - 'actiondesc_super_teleport_cast': - 'Makes a spell immediately jump a long distance, stopped by walls', - 'action_bounce_laser': 'Concentrated light bounce', - 'actiondesc_bounce_laser': - 'Makes a projectile release a bundle of concentrated light as it bounces', - 'action_magic_shield': 'Magic guard', - 'actiondesc_magic_shield': - 'Four guarding lights rotate around you for a time', - 'action_big_magic_shield': 'Big magic guard', - 'actiondesc_big_magic_shield': - 'Eight guarding lights rotate around you for a time', - 'action_swarm_fly': 'Summon fly swarm', - 'actiondesc_swarm_fly': 'Summons five flies to aid you in battle', - 'action_swarm_firebug': 'Summon Firebug swarm', - 'actiondesc_swarm_firebug': 'Summons four fire bugs to aid you in battle', - 'action_swarm_wasp': 'Summon Wasp swarm', - 'actiondesc_swarm_wasp': 'Summon six wasps to aid you in battle', - 'action_friend_fly': 'Summon Friendly fly', - 'actiondesc_friend_fly': 'Summons a friendly fly that attacks your enemies!', - 'action_duplicate': 'Spell duplication', - 'actiondesc_duplicate': 'Duplicates every spell cast before it', - 'action_infestation': 'Infestation', - 'actiondesc_infestation': - 'A bunch of magical sparks that fly in every direction', - 'action_crumbling_earth_projectile': 'Earthquake shot', - 'actiondesc_crumbling_earth_projectile': - 'Makes a projectile crumble the earth it hits', - 'action_random_spell': 'Random spell', - 'actiondesc_random_spell': 'Casts a spell, any spell, at random!', - 'action_random_projectile': 'Random projectile spell', - 'actiondesc_random_projectile': 'Casts one random projectile spell', - 'action_random_modifier': 'Random modifier spell', - 'actiondesc_random_modifier': 'Casts one random modifier spell', - 'action_random_static_projectile': 'Random static projectile spell', - 'actiondesc_random_static_projectile': - 'Casts one random static projectile spell', - 'action_draw_random': 'Copy random spell', - 'actiondesc_draw_random': - 'Casts a random spell among the spells in your wand', - 'action_draw_random_x3': 'Copy random spell thrice', - 'actiondesc_draw_random_x3': - 'Casts a random spell among the spells in your wand three times!', - 'action_draw_3_random': 'Copy three random spells', - 'actiondesc_draw_3_random': - 'Casts three random spells among the spells in your wand', - 'action_damage_random': 'Random damage', - 'actiondesc_damage_random': - 'Randomly increases or lowers the damage done by projectiles', - 'action_alpha': 'Alpha', - 'actiondesc_alpha': 'Casts a copy of the first spell in your wand', - 'action_omega': 'Omega', - 'actiondesc_omega': 'Casts copies of every spell in your wand', - 'action_gamma': 'Gamma', - 'actiondesc_gamma': 'Casts a copy of the last spell in your wand', - 'action_divide_2': 'Divide by 2', - 'actiondesc_divide_2': 'Casts the next spell twice, but with reduced damage', - 'action_divide_3': 'Divide by 3', - 'actiondesc_divide_3': - 'Casts the next spell 3 times, but with reduced damage', - 'action_divide_4': 'Divide by 4', - 'actiondesc_divide_4': - 'Casts the next spell 4 times, but with reduced damage', - 'action_divide_10': 'Divide by 10', - 'actiondesc_divide_10': - 'Casts the next spell 10 times, but with reduced damage', - 'action_all_nukes': 'Spells to nukes', - 'actiondesc_all_nukes': - 'Transforms every projectile currently in the air into a nuke; not a good idea', - 'action_all_discs': 'Spells to giga sawblades', - 'actiondesc_all_discs': - 'Transforms every projectile currently in the air into a giant sawblade', - 'action_all_blackholes': 'Spells to black holes', - 'actiondesc_all_blackholes': - 'Transforms every projectile currently in the air into a black hole', - 'action_all_rockets': 'Spells to magic missiles', - 'actiondesc_all_rockets': - 'Transforms every projectile currently in the air into a magic missile', - 'action_all_deathcrosses': 'Spells to death crosses', - 'actiondesc_all_deathcrosses': - 'Transforms every projectile currently in the air into a death cross', - 'action_all_acid': 'Spells to acid', - 'actiondesc_all_acid': - 'Transforms every projectile currently in the air into a pool of acid', - 'action_all_spells': 'The end of everything', - 'actiondesc_all_spells': "You're heavily advised not to cast this spell.", - 'action_add_trigger': 'Add trigger', - 'actiondesc_add_trigger': - 'Makes a projectile cast another spell upon collision', - 'action_add_timer': 'Add timer', - 'actiondesc_add_timer': - 'Makes a projectile cast another spell after a short time', - 'action_add_death_trigger': 'Add expiration trigger', - 'actiondesc_add_death_trigger': - 'Makes a projectile cast another spell upon expiring', - 'action_copy_spell': 'Copy spell', - 'actiondesc_copy_spell': 'Copies a projectile near you', - 'action_copy_field': 'Copy field', - 'actiondesc_copy_field': - 'A magical field that copies any projectiles near it', - 'action_larpa_chaos': 'Chaos larpa', - 'actiondesc_larpa_chaos': - 'Makes a projectile cast copies of itself in random directions', - 'action_larpa_downwards': 'Downwards larpa', - 'actiondesc_larpa_downwards': - 'Makes a projectile cast copies of itself with a downwards trajectory', - 'action_larpa_upwards': 'Upwards larpa', - 'actiondesc_larpa_upwards': - 'Makes a projectile cast copies of itself with an upwards trajectory', - 'action_delta': 'Delta', - 'actiondesc_delta': 'Casts a copy of the next spell in your wand', - 'action_larpa_chaos_2': 'Copy trail', - 'actiondesc_larpa_chaos_2': - 'Makes a projectile leave a trail of copies of itself', - 'actiondesc_chainsaw': - 'A good tool for cutting meat. Also has some magical properties...', - 'action_spore_pod': 'Prickly Spore Pod', - 'actiondesc_spore_pod': - 'Summons a spore pod that attaches to a surface and then grows and explodes into spikes', - 'action_energy_shield_shot': 'Projectile energy shield', - 'actiondesc_energy_shield_shot': - 'Gives a projectile a shield that deflects other projectiles', - 'action_autoaim': 'Auto-Aim', - 'actiondesc_autoaim': - 'Makes a projectile turns towards the nearest visible enemy', - 'action_homing_rotate': 'Rotate towards foes', - 'actiondesc_homing_rotate': 'Makes a projectile turn towards your foes', - 'actiondesc_homing': 'Makes a projectile accelerate towards your foes', - 'action_swapper_projectile': 'Swapper', - 'actiondesc_swapper_projectile': - 'It was theorized that the source of qualia would be transferred …But it turns out it was the whole body all along.', - 'action_propane_tank': 'Propane tank', - 'actiondesc_propane_tank': - 'Summons a propane tank. Be careful what you wish for.', - 'action_megalaser': 'Intense concentrated light', - 'actiondesc_megalaser': - 'A spectral wand is summoned that casts a huge beam of light', - 'action_bomb_cart': 'Bomb cart', - 'actiondesc_bomb_cart': - 'Summons a self-propeled mine cart loaded with explosives', - 'action_tiny_ghost': 'Summon Tiny Ghost', - 'actiondesc_tiny_ghost': - 'Summons a tiny ethereal being to your help. It may cast stronger spells depending on how much damage you have suffered.', - 'action_bounce_spark': 'Bubbly bounce', - 'actiondesc_bounce_spark': - 'Makes a projectile shoot bubble sparks as it bounces', - 'action_cursed_orb': 'Cursed sphere', - 'actiondesc_cursed_orb': - 'A projectile that brings bad luck to anyone it hits', - 'action_kantele_a': 'Kantele - note A', - 'actiondesc_kantele_a': 'Music for your ears!', - 'action_kantele_b': 'Kantele - note B', - 'actiondesc_kantele_b': 'Music for your ears!', - 'action_kantele_c': 'Kantele - note C', - 'actiondesc_kantele_c': 'Music for your ears!', - 'action_kantele_d': 'Kantele - note D', - 'actiondesc_kantele_d': 'Music for your ears!', - 'action_kantele_e': 'Kantele - note E', - 'actiondesc_kantele_e': 'Music for your ears!', - 'action_kantele_f': 'Kantele - note F', - 'actiondesc_kantele_f': 'Music for your ears!', - 'action_kantele_gsharp': 'Kantele - note G#', - 'actiondesc_kantele_gsharp': 'Music for your ears!', - 'action_kantele_a2': 'Kantele - note A2', - 'actiondesc_kantele_a2': 'Music for your ears!', - 'action_kantele_dis': 'Kantele - note D#', - 'actiondesc_kantele_dis': 'Music for your ears!', - 'action_kantele_g': 'Kantele - note G', - 'actiondesc_kantele_g': 'Music for your ears!', - 'perk_hearts_more_extra_hp': 'Stronger Hearts', - 'perkdesc_hearts_more_extra_hp': 'Hearts bestow more maximum health.', - 'perk_extra_perk': 'Extra Perk', - 'perkdesc_extra_perk': - 'From now on you will find an extra perk in every Holy Mountain.', - 'perk_perks_lottery': 'Perk Lottery', - 'perkdesc_perks_lottery': - "When you pick a perk, there's a 50% chance the others won't disappear.", - 'perk_genome_more_hatred': 'More Hatred', - 'perkdesc_genome_more_hatred': - 'Creatures become more aggressive towards each other.', - 'perk_genome_more_love': 'More Love', - 'perkdesc_genome_more_love': - 'Creatures become more friendly towards each other.', - 'perk_random_allies': 'Random Allies', - 'perkdesc_random_allies': "You're allies with a random enemy group.", - 'perk_remove_fog_of_war': 'All-Seeing Eye', - 'perkdesc_remove_fog_of_war': 'You can see everywhere.', - 'perk_attract_items': 'Attract Gold', - 'perkdesc_attract_items': 'Gold nuggets gravitate towards you.', - 'perk_strong_kick': 'Never Skip Leg Day', - 'perkdesc_strong_kick': 'Your kicks deal extra damage and knockback.', - 'perk_projectile_repulsion': 'Projectile Repulsion Field', - 'perkdesc_projectile_repulsion': - 'Most projectiles are repulsed by your presence, but you take slightly more projectile damage.', - 'perkdesc_bleed_slime': - 'You bleed slime, but slime no longer slows you down and you have higher projectile resistance.', - 'perk_multiply_hp': 'Multiplied HP, No Healing', - 'perkdesc_multiply_hp': - 'Your HP has been multiplied but you can no longer regain HP.', - 'perk_bleed_oil': 'Oil Blood', - 'perkdesc_bleed_oil': 'You bleed flammable oil, but are immune to fire.', - 'perk_golden_i': 'Golden I', - 'perkdesc_golden_i': "Gold that you've seen no longer disappears over time.", - 'perk_no_player_knockback': 'Knockback Immunity', - 'perkdesc_no_player_knockback': 'Knockback does not affect you.', - 'perk_extra_knockback': 'Extra Knockback on Spells', - 'perkdesc_extra_knockback': - 'Your spells knock enemies around with more force.', - 'perk_lower_spread': 'Concentrated Spells', - 'perkdesc_lower_spread': - 'Your spells have lower spread and extra damage, but have increased cast delay.', - 'perk_bounce': 'Bouncing Spells', - 'perkdesc_bounce': 'Almost all your spells bounce around and last longer.', - 'perk_projectile_homing_shooter': 'Boomerang Spells', - 'perkdesc_projectile_homing_shooter': - 'Your spells arc towards you, but gain extra speed and deal extra damage.', - 'perk_worm_attractor': 'Worm Attractor', - 'perkdesc_worm_attractor': 'Worms find you attractive.', - 'perk_worm_detractor': 'Worm Detractor', - 'perkdesc_worm_detractor': 'Worms run from you.', - 'perk_speed_diver': 'Fast Swimming', - 'perkdesc_speed_diver': 'You are an expert swimmer!', - 'perk_revenge_tentacle': 'Revenge Tentacle', - 'perkdesc_revenge_tentacle': - 'You summon a monstrous tentacle upon taking damage, and gain 25% resistance against projectiles.', - 'perk_attack_foot': 'Lukki Mutation', - 'perkdesc_attack_foot': - 'You grow curious additional limbs that fight for you.', - 'perk_plague_rats': 'Plague Rats', - 'perkdesc_plague_rats': - 'Dying enemies release rats to serve your bidding! All rats become your friend.', - 'perk_radar_enemy': 'Enemy Radar', - 'perkdesc_radar_enemy': 'You can sense nearby enemies.', - 'perk_radar_wand': 'Wand Radar', - 'perkdesc_radar_wand': 'You can sense nearby wands.', - 'perk_unlimited_spells': 'Unlimited Spells', - 'perkdesc_unlimited_spells': 'Most spells are now unlimited.', - 'perk_leggy_feet': 'Leggy Mutation', - 'perkdesc_leggy_feet': - 'You grow disturbing looking limbs that fight for you.', - 'perk_always_cast': 'Always Cast (One-off)', - 'perkdesc_always_cast': - 'A random Always Cast spell is added to the wand in your hand, up to a maximum of 4.', - 'perk_no_more_shuffle': 'No More Shuffle', - 'perkdesc_no_more_shuffle': - 'Most of the wands will be non shuffling. The wands you carry with you turn into non-shufflers too.', - 'perk_vampirism': 'Vampirism', - 'perkdesc_vampirism': - "You lose 25% maximum health, but can replenish health by drinking blood. Blood doesn't affect satiation level.", - 'perk_no_wand_editing': 'No Wand Tinkering', - 'perkdesc_no_wand_editing': - 'Wands cannot be tinkered with, but enemies may drop blood money.', - 'perk_telekinesis': 'Telekinetic Kick', - 'perkdesc_telekinesis': 'You gain new telekinetic powers.', - 'perk_projectile_duplicate': 'Duplicated shots', - 'perkdesc_projectile_duplicate': - 'Your spells duplicate as they hit obstacles.', - 'perk_low_hp_damage_boost': 'Living on the Edge', - 'perkdesc_low_hp_damage_boost': - "Your spells deal 3x damage when you're under 25 HP or 25% of maximum health.", - 'perk_faster_levitation': 'Faster Levitation', - 'perkdesc_faster_levitation': 'You levitate 75% faster.', - 'perk_peace_with_steve': 'Peace with Gods', - 'perkdesc_peace_with_steve': 'You make peace with your Gods.', - 'perk_gold_is_forever': 'Gold Is Forever', - 'perkdesc_gold_is_forever': 'Gold nuggets never disappear.', - 'perk_wand_experimenter': 'Wand Experimenter', - 'perk_trick_blood_money': 'Trick Blood Money', - 'perkdesc_trick_blood_money': - 'Blood money is dropped when death is an accident.', - 'perk_levitation_trail': 'Levitation Trail', - 'perkdesc_levitation_trail': - 'When levitating, you leave a trail of magical sparks that harm passing creatures.', - 'perkdesc_wand_experimenter': - 'Firing newly found and unmodified wands heals you.', - 'perk_protection_freeze': 'Freezing Immunity', - 'perkdesc_protection_freeze': 'You cannot be frozen.', - 'item_mcguffin': 'Missing Key', - 'itemdesc_mcguffin': 'This has been said to complete the Work', - 'item_mcguffin_0': 'The Salt', - 'itemdesc_mcguffin_0': 'This has been said to complete the Work', - 'item_mcguffin_1': 'Our Matter', - 'itemdesc_mcguffin_1': 'This has been said to complete the Work', - 'item_mcguffin_2': 'Hermes bird', - 'itemdesc_mcguffin_2': 'This has been said to complete the Work', - 'item_mcguffin_3': 'White Eagle', - 'itemdesc_mcguffin_3': 'This has been said to complete the Work', - 'item_mcguffin_4': 'The Green Lion', - 'itemdesc_mcguffin_4': 'This has been said to complete the Work', - 'item_mcguffin_5': 'Red Lion', - 'itemdesc_mcguffin_5': 'This has been said to complete the Work', - 'item_mcguffin_6': 'Celestial Ruby', - 'itemdesc_mcguffin_6': 'This has been said to complete the Work', - 'item_mcguffin_7': 'Magnesia', - 'itemdesc_mcguffin_7': 'This has been said to complete the Work', - 'item_mcguffin_8': 'The Vessel of the Philosophers', - 'itemdesc_mcguffin_8': 'This has been said to complete the Work', - 'item_mcguffin_9': 'Our Blessed Stone', - 'itemdesc_mcguffin_9': 'This has been said to complete the Work', - 'item_mcguffin_10': 'Magnum Opus', - 'itemdesc_mcguffin_10': 'This has been said to complete the Work', - 'item_mcguffin_11': "Philosopher's Stone", - 'itemdesc_mcguffin_11': 'This has been said to complete the Work', - 'item_mcguffin_12': 'Sampo', - 'itemdesc_mcguffin_12': 'This has been said to complete the Work', - 'item_mcguffin_13': 'True Knowledge', - 'itemdesc_mcguffin_13': 'You have completed the Work', - 'item_perk_reroll': 'Perk reroll', - 'item_essence_fire': 'Essence of Fire', - 'itemdesc_essence_fire': 'Your entire being is fluctuating!', - 'item_essence_laser': 'Essence of Earth', - 'itemdesc_essence_laser': 'Your being releases damaging light!', - 'item_essence_air': 'Essence of Air', - 'itemdesc_essence_air': 'Your being controls the air around you!', - 'item_essence_water': 'Essence of Water', - 'itemdesc_essence_water': 'The earth flows around you!', - 'item_essence_alcohol': 'Essence of Spirits', - 'itemdesc_essence_alcohol': 'That was not the best of ideas', - 'item_chest_treasure_super': 'Great treasure chest', - 'item_rock': 'Rock', - 'itemdesc_rock': "It's a rock.", - 'item_egg_hollow': 'Hollow egg', - 'itemdesc_egg_hollow': "I wonder if there's anything inside?", - 'item_egg_worm': 'Wiggling egg', - 'item_description_egg_worm': 'Something wiggles inside', - 'item_egg_purple': 'Chilly egg', - 'item_description_egg_purple': 'The egg feels cold', - 'item_egg_fire': 'Toasty egg', - 'item_description_egg_fire': 'The egg feels very warm', - 'item_egg_slime': 'Slimy egg', - 'item_description_egg_slime': 'The egg is covered in slime', - 'item_flute': "Flutist's wand", - 'item_weathercrystal_book': 'Book of Balance', - 'itemdesc_weathercrystal_book': - "It is said that to attain great wealth one must be ready to break the very foundation of this world. However, would one do that, they'd be cursed. Yet their own greed is a curse on its own...", - 'item_chest_dark': 'Dark chest', - 'item_weathercrystal': 'Crystal of Balance', - 'item_goldnugget_10': 'Gold nugget (10)', - 'item_goldnugget_50': 'Gold nugget (50)', - 'item_goldnugget_200': 'Gold nugget (200)', - 'item_goldnugget_1000': 'Gold nugget (1000)', - 'item_goldnugget_10000': 'Golden Idol (10000)', - 'item_runestone_laser': 'Runestone of light', - 'item_runestone_fireball': 'Runestone of fire', - 'item_runestone_lava': 'Runestone of magma', - 'item_runestone_disc': 'Runestone of edges', - 'item_runestone_null': 'Runestone of emptiness', - 'item_runestone_slow': 'Runestone of weight', - 'itemdesc_runestone': - 'A runestone with a strong magical aura. You feel like kicking it.', - 'item_key': 'Crystal key', - 'itemdesc_key_0': 'The key is voiceless.', - 'itemdesc_key_1': 'The key hums, but something is missing...', - 'itemdesc_key_2': 'The key whispers secrets and promises; it is ready.', - 'item_description_potion_usage': '\n$0 on item - drink', - 'item_jar': 'Jar', - 'item_description_jar': 'Equip and spray or throw', - 'item_jar_with_material': '$0 jar', - 'item_broken_wand': 'Broken wand', - 'item_description_broken_wand': - 'This wand has snapped in half but it still crackles with magical energy', - 'item_thunderstone': 'Ukkoskivi', - 'item_description_thunderstone': - 'This small rock makes you feel very charged.', - 'item_brimstone': 'Kiuaskivi', - 'item_description_brimstone': - 'This tiny rock looks most fiery, but when touched only a pleasant warmth can be felt.', - 'item_moon': 'Kuu', - 'item_description_moon': - 'This tiny celestial object has a strong gravitational pull.', - 'item_waterstone': 'Vuoksikivi', - 'item_description_waterstone': - 'This small rock is hard and solid, yet seems to be gushing with water.', - 'item_bloodmoney': 'Bloody gold nugget', - 'item_bloodmoney_10': 'Bloody gold nugget (10)', - 'item_bloodmoney_50': 'Bloody gold nugget (50)', - 'item_bloodmoney_200': 'Bloody gold nugget (200)', - 'item_bloodmoney_1000': 'Bloody gold nugget (1000)', - 'item_bloodmoney_10000': 'Bloody golden Idol (10000)', - 'item_die_roll': 'The die is rolling...', - 'item_die_1': 'The die rolled a 1!', - 'item_die_2': 'The die rolled a 2!', - 'item_die_3': 'The die rolled a 3!', - 'item_die_4': 'The die rolled a 4!', - 'item_die_5': 'The die rolled a 5!', - 'item_die_6': 'The die rolled a 6!', - 'item_die_bad': "You're extremely unlucky...!", - 'item_die_good': "You're extremely lucky!", - 'item_die': 'Chaos die', - 'itemdesc_die': 'Roll it for various prizes!', - 'itempickup_open': "Press $0 to open '$1'", - 'itempickup_orb': 'You discovered an orb of true Knowledge', - 'itempickup_orb_evil': 'You discovered an orb of corrupted Knowledge', - 'itempickup_orb_discovered': 'You found a familiar orb of true Knowledge', - 'itempickupdesc_orb_discovered': "You're rewarded with additional health", - 'itempickupdesc_orb_00': 'Secrets of endless lava have been unlocked to you.', - 'itempickupdesc_orb_01': - "Secrets of Earth's anger have been unlocked to you.", - 'itempickupdesc_orb_02': - 'Secrets of otherworldly life have been unlocked to you.', - 'itempickupdesc_orb_03': - 'Secrets of utter destruction have been unlocked to you.', - 'itempickupdesc_orb_04': 'Secrets of Undeath have been unlocked to you.', - 'itempickupdesc_orb_05': - 'Secrets of fire and brimstone have been unlocked to you.', - 'itempickupdesc_orb_06': 'Secrets of the Spiral have been unlocked to you.', - 'itempickupdesc_orb_07': 'Secrets of stormy skies have been unlocked to you.', - 'itempickupdesc_orb_08': 'Secrets of jubilation have been unlocked to you.', - 'itempickupdesc_orb_09': - 'Secrets of hidden danger have been unlocked to you.', - 'itempickupdesc_orb_10': 'Secrets of rebuilding have been unlocked to you.', - 'itempickupdesc_orb_11': - 'This secret should not have been available for you.', - 'itempickupdesc_orb_13': - 'Secrets of great undoing have been unlocked to you.', - 'menu_mods': 'Mods', - 'menu_mods_availablemods': 'Available mods', - 'menu_mods_availablemods_none': 'No mods installed', - 'menu_mods_enabled': 'Enabled', - 'menu_mods_moveup': 'Move up', - 'menu_mods_movedown': 'Move down', - 'menu_mods_help_exp': - 'This is an experimental feature.\nUse at your own risk. Only run mods from trusted sources!\nUpmost enabled mod will be loaded first.\nClick mod name to enable/disable the mod.', - 'menu_mods_help': - 'Use mods at your own risk. Only run mods from trusted sources!\nUpmost enabled mod will be loaded first.\nClick mod name to enable/disable the mod.', - 'menu_mods_help_paused': 'Changes will be applied on next restart.', - 'menu_mods_openmodfolder': 'Open mod folder', - 'menu_mods_restart': 'Restart with enabled mods active', - 'menu_mods_restart_tooltip': - 'Warning: some mods may not handle enabling/disabling ingame well - weirdness, bugs or crashes may occur.', - 'menu_mods_newgame': 'Start a new game with enabled mods active', - 'menu_mods_refresh': 'Refresh', - 'menu_mods_reenablenotificiation': - 'This version changes how mods behave.\nMods need to be re-enabled via the “Mods” menu.', - 'menu_mods_extraprivilegesareyousure': - 'This mod has requested extra privileges.\nIf enabled, it has full access to your computer,\neven without using possible exploits in the game code.\nAre you sure you want to trust this mod?', - 'menu_mods_extraprivilegesnotification': - 'This mod has requested extra privileges.\nUnsafe mods need to be enabled to run this mod.', - 'menu_mods_workshopsandboxnotification': - 'Workshop mods cannot be enabled while unsafe mods are on.', - 'menu_mods_enablinginvalid': - 'This mod is broken and cannot be enabled [Error code #N0174H4X].', - 'menu_mods_sandboxoffareyousure': - 'Enabling unsafe mods gives all installed mods full access to your computer.\nAre you sure?', - 'menu_mods_sandboxoffareyousure_steam': - 'Enabling unsafe mods gives all installed mods full access to your computer.\nAre you sure?', - 'menu_mods_sandboxoption': 'Unsafe mods: $0', - 'menu_mods_initerrors_title': 'Errors occurred while initializing mods:', - 'menu_mods_customactivation': '\nPlay this mod via the “New game” menu.', - 'menu_mods_translationactivation': - '\nEnable this translation via “Language” in the “Options” menu.', - 'menu_mods_nameconflict': 'Cannot enable multiple mods with the id “$0”.', - 'menu_mods_installmods': 'Get mods', - 'menu_mods_installmods_steam': 'Install mods using Workshop', - 'menu_mods_workshopdownloading': 'Downloading Workshop content $0', - 'menu_mods_workshop_mod_tooltip': 'This is a Steam Workshop mod.', - 'menu_mods_disclaimernotification_exp': - 'This is an experimental feature.\nUse is at your own risk!\nYou should only run mods from trusted sources.', - 'menu_mods_disclaimernotification': - 'Use of mods is at your own risk!\nYou should only run mods from trusted sources.', - 'menu_mods_initerrors_log': - 'There were errors when initializing following mods: $0', - 'menu_mods_workshopdownloading_noprogress': - "Downloading Workshop content $0\nIf the downloads don't seem to progress,\nyou might need to change their priority in the Steam library downloads list.", - 'menu_mods_modversion_older': - 'This mod has not been tested with the latest version of the modding interface.', - 'menu_mods_modversion_newer': - 'This mod has been built with a newer version of the modding interface.\nA newer version of the game might be required.\nOr maybe the mod developer is just using a new version of the game,\nand everything is compatible.', - 'menu_mods_incompatibilities': 'Mods (!)', - 'menu_mods_incompatibilities_tooltip': - 'Some mods have possible incompatibilities', - 'option_allowed': 'Allowed', - 'option_disabled': 'Disabled', - 'menu_newgame_selectgamemode': 'Select game mode', - 'menu_quit': 'Quit', - 'menuautosave_text': - 'Autosave found. Looks like the game crashed?\nShould the game attempt to restore the autosave?', - 'menuautosave_text_mods': - 'Some mods were enabled and might have caused the crash.', - 'menuautosave_text_earlyaccess': - "Noita is in early access, we'll try to fix this. :/", - 'menuautosave_yes': 'Restore', - 'menuautosave_no': 'Nah. Destroy it', - 'menuoptions_configurecontrols_hint_gamepad': - 'Press B on a control to reset it to default ', - 'menuoptions_configurecontrols_hint_keyboard': - 'Right click on a key binding to reset it to default', - 'menuoptions_privacypolicy': 'Privacy policy', - 'menuoptions_showhoverinfonexttomouse': - 'Show hovered material/item name next to mouse: $0', - 'menuoptions_replayrecorder_tooltip_exp': - 'EXPERIMENTAL FEATURE\nPress $0 to save a replay at any point in the game.\n\nSetting “Replay budget” too high might decrease performance\nor make the game crash. Use at your own risk!', - 'menuoptions_replayrecorder_tooltip': - 'Press $0 to save a replay at any point in the game.\n\nSetting “Replay budget” too high might decrease performance\nor make the game crash. Use at your own risk!', - 'menuoptions_application_rendered_cursor_hint': - "Turn this on in case you can't see the mouse cursor.", - 'menuoptions_general': 'General', - 'menuoptions_graphics': 'Graphics', - 'menuoptions_audio': 'Audio', - 'menuoptions_input': 'Input', - 'menuoptions_streaming': 'Streaming', - 'menuoptions_teleport_flash_brightness': 'Teleport flash brightness', - 'menuoptions_gamepaddetected': - 'Gamepad detected!\nEnable gamepads via the Input tab.', - 'menuoptions_replaybudget': 'Replay budget', - 'menuoptions_heading_window': 'WINDOW', - 'menuoptions_heading_replayrecorder': 'REPLAY RECORDER', - 'menuoptions_heading_misc': 'MISCELLANEOUS', - 'menuoptions_heading_rendering': 'RENDERING', - 'menuoptions_heading_userinterface_graphics': 'USER INTERFACE', - 'menuoptions_heading_accessibility': 'ACCESSIBILITY', - 'menuoptions_heading_volume': 'VOLUME', - 'menuoptions_heading_userinterface_input': 'USER INTERFACE', - 'menuoptions_heading_gamepad': 'GAMEPAD', - 'menuoptions_heading_gameplay': 'GAMEPLAY', - 'menuoptions_heading_compatibility': 'COMPATIBILITY', - 'menuoptions_heading_streaming_integration': 'TWITCH CHANNEL', - 'menuoptions_heading_streaming_integration_config': 'CONFIG', - 'menuoptions_heading_streaming_integration_mods': 'MODDING', - 'menuoptions_heading_streaming_enabled_events': 'ENABLED EVENTS', - 'menuoptions_format_seconds': '$0 s', - 'menuoptions_format_megabytes': '$0 MB', - 'menuoptions_heading_online': 'ONLINE', - 'menuoptions_heading_userinterface_mouse': 'MOUSE', - 'menuoptions_heading_controls': 'KEYBOARD/MOUSE', - 'menuoptions_display_number': 'Display number: $0', - 'menuoptions_online_features': 'Online features: $0', - 'menuoptions_online_features_hint': - "Turn off to prevent the game from connecting to Nolla Games' servers.\nThis may prevent some features from working.", - 'menuoptions_capturemouseinsidewindow': 'Lock mouse inside the window: $0', - 'menuoptions_pause_the_game_when_unfocused': - 'Pause the game when unfocused: $0', - 'menuoptions_ui_snappy_hover_boxes': 'Inventory hover box animations: $0', - 'menuoptions_dithering': 'Anti color banding (dithering): $0', - 'menuoptions_configuregamepad': 'Configure gamepad controls', - 'menuoptions_gamepad_analog_flying': 'Gamepad analog flying: $0', - 'menuoptions_ui_allow_shooting_while_inventory_open': - 'Allow firing of wands while inventory is open: $0', - 'menuoptions_gamepad_throwsprayscheme': 'New gamepad throw/spray scheme: $0', - 'menuoldsavegame_text': - 'A save game with old version was detected.\nWould you like to continue it? (Weird things may occur.)', - 'menuoldsavegame_text_update9': - 'Empty chunks may appear in the world after loading.\nHeed my warning - this may anger the Gods!\nWould you like to continue?', - 'menu_secretmode': 'Secret Mode', - 'menu_selectworld': 'Select world', - 'menu_playtime': '$0h $1 min', - 'menu_startnewworld': 'Start new world', - 'menu_worldselect_deleteareyousure': - 'Are you sure you want to delete the world in slot $0?\nThis cannot be undone.', - 'menu_worldselect_deleteareyousure_playing': - "Are you sure you want to delete the world you're currently playing?\nThis cannot be undone.", - 'menu_worldselect_slot': 'World $0', - 'menu_worldselect_slot_playing': 'World $0 – PLAYING', - 'menu_switchthrowandspray': - "We've changed the default values of a few settings:\n-Input bindings for Throw and Spray have been swapped around.\n-Inventory needs to be closed to cast spells.\nWould you like to enable the new defaults? These can be changed in the Options menu.", - 'menu_newgame_modschangedrestart': - 'The game will restart due to mod changes.', - 'menu_progress_new': 'Progress ($0 new)', - 'menu_streamermode': 'Streamer mode: $0', - 'menu_streaming_description': - 'Let stream viewers interact with your game through the Twitch chat.', - 'menu_streaming_description_details': - 'Chat messages “1”, “2”, “3” and “4” will be counted as votes towards\nvarious events that are selected from a random pool.', - 'menu_streaming_connect': 'Connect', - 'menu_streaming_disconnect': 'Disconnect', - 'menu_streaming_connect_twitch': 'Connect to Twitch account', - 'menu_streaming_status_connecting': ' - CONNECTING...', - 'menu_streaming_status_connected': ' - CONNECTED', - 'menu_streaming_status_failed_unknown': ' - CONNECTION FAILED', - 'menu_streaming_status_failed_serverconnection': " - COULDN'T FIND SERVER", - 'menu_streaming_status_failed_timeout': ' - TIMEOUT - NO SUCH CHANNEL?', - 'menu_streaming_connected': 'Connected to Twitch account: $0', - 'menu_streaming_connect_failed': 'Twitch authentication failed', - 'menu_streaming_option': 'Streaming integration: $0', - 'menu_streaming_channelname': 'Channel name:', - 'menu_streaming_voting': 'Chat votes: $0', - 'menu_streaming_voting_hint': - 'Allow stream viewers to vote on events that take place in the game.', - 'menu_streaming_allowusernames': 'Display user names', - 'menu_streaming_allowusernames_hint': - 'Allow events that display chat user names', - 'menu_streaming_timebetweenvotes': 'Time between votes', - 'menu_streaming_timebetweenvotes_hint': '', - 'menu_streaming_timevoting': 'Voting time', - 'menu_streaming_timevoting_hint': 'The duration of a single vote', - 'menu_streaming_playvotesound': 'Play sound on new vote: $0', - 'menu_streaming_distribution': 'Vote event distribution', - 'menu_streaming_distribution_hint': - 'Awful = very likely to ruin your run..\nBad = bad things can happen.\nNeutral = not necessarily goot or bad.\nGood = more health and other helpful events.', - 'menu_streaming_distribution_awful': 'Awful', - 'menu_streaming_distribution_bad': 'Bad', - 'menu_streaming_distribution_neutral': 'Neutral', - 'menu_streaming_distribution_good': 'Good', - 'menu_streaming_usernames_ghosts': - 'Tiny ghosts can be named after viewers: $0', - 'menu_streaming_usernames_rats': 'Rats can be named after viewers: $0', - 'menu_streaming_installmods': 'Install streaming integration mods', - 'menu_streaming_mod': 'Streaming integration content mod', - 'streaming_integration_connectionerror': 'Connection error!', - 'streaming_integration_nextvotein': 'Next vote in $0 s', - 'streaming_integration_voteendsin': 'Voting ends in $0 s', - 'streaming_integration_voteoptionformat': '$0 ($1) <$2', - 'streaming_integration_votetie': "It's a tie! Picking random winner", - 'streaming_integration_winner': 'The winner is:', - 'menu_replayedit_writinggif': - 'Writing gif - please wait – press $0 to cancel', - 'menu_replayedit_writinggif_frameprogress': 'Frame - $0 / $1 - $2%', - 'menu_replayedit_writinggif_timeremaining': '$0 s remaining', - 'menu_replayedit_returntogame': 'Return to game $0', - 'menu_replayedit_title_keyboard_exp': - 'REPLAY CLIP EDITOR (experimental) - Right/Left click on frames to set clip start and end points.', - 'menu_replayedit_title_gamepad_exp': - 'REPLAY CLIP EDITOR (experimental) - [A] - start clip on hovered frame. [B] - end clip on hovered frame.', - 'menu_replayedit_title_keyboard': - 'REPLAY CLIP EDITOR - Right/Left click on frames to set clip start and end points.', - 'menu_replayedit_title_gamepad': - 'REPLAY CLIP EDITOR - [A] - start clip on hovered frame. [B] - end clip on hovered frame.', - 'menu_replayedit_saveasgif': 'Save as Gif [ENTER]', - 'menu_replayedit_opengifdir': 'Open gif directory', - 'menu_replayedit_size': 'Size: ', - 'menu_replayedit_full': 'Full', - 'menu_replayedit_sizeformat': '$0x$1', - 'menu_replayedit_outputscale': 'Output scale: $0%', - 'menu_replayedit_outputinfo1': 'Output: $0 frames - $1s', - 'menu_replayedit_outputinfo2': ' - $0x$1 px', - 'menu_replayedit_startclip_gamepad': '[A] - start clip on hovered frame. ', - 'menu_replayedit_startclip_keyboard': - 'Left click - start clip on hovered frame. ', - 'menu_replayedit_endclip_gamepad': '[B] - end clip on hovered frame. ', - 'menu_replayedit_endclip_keyboard': - 'Right click - end clip on hovered frame.', - 'menu_replayedit_frame': ' Frame = $0', - 'menu_replayedit_imagecenter': 'Left click - set image center.', - 'progress_new': '$0 (new)', - 'log_golden_statue': 'Picked a golden statue', - 'logdesc_golden_statue': 'You got $0 gold!', - 'logdesc_heart_evil': - 'Increased maximum health to $0 ...with the cost of being cursed!', - 'log_altar_magic': 'Your curiosity is rewarded', - 'log_altar_magic_monster': 'Your curiosity is rewarded, but...', - 'log_altar_magic_worm': 'That is not what you seek!', - 'log_moon_altar': 'The four essences reveal their secret', - 'logdesc_moon_altar': - "The moon's egg cracks open. Its contents have been unlocked", - 'logdesc_moon_altar_drunk': - 'The moon spills and unlocks its inebriating contents', - 'log_heart_fullhp_temple': 'Picked up Full Health Regeneration', - 'logdesc_heart_fullhp_temple': - 'Increased maximum health by $0 and restored health to $1 (regained $2 health)', - 'log_worm_deflector_death': 'The worm crystal has shattered!', - 'logdesc_worm_deflector_death': 'You feel less safe...', - 'logdesc_heart_fullhp': 'Restored health to $0 (regained $1 health)', - 'log_ocarina': 'The world around you changes!', - 'logdesc_ocarina': 'Your music released strange energies', - 'log_ocarina_done': 'Seems like the musical energy is gone...', - 'log_overingestion_00': "You're choking on food", - 'log_overingestion_01': 'Eating any more might kill you', - 'log_overingestion_02': "You're choking on food", - 'log_overingestion_03': 'Eating any more might kill you', - 'log_overingestion_04': "You're choking on food", - 'log_overingestion_05': 'Eating any more might kill you', - 'log_overingestion_exploding_00': "You're bursting at the seams", - 'log_overingestion_exploding_01': "You're feeling like you'll soon explode", - 'log_overingestion_exploding_02': "You're bursting at the seams", - 'log_overingestion_exploding_03': "You're feeling like you'll soon explode", - 'log_overingestion_exploding_04': - "You're feeling an explosive tightness in your stomach", - 'log_overingestion_exploding_05': - "You're feeling an explosive tightness in your stomach", - 'log_kantele': 'The world around you changes!', - 'logdesc_kantele': 'Your music released strange energies', - 'log_kantele_done': 'Seems like the musical energy is gone...', - 'log_alchemist_key_first': 'The key begins to hum!', - 'logdesc_alchemist_key_first': 'Something is still missing...', - 'log_alchemist_key_second': 'The key begins to whisper!', - 'logdesc_alchemist_key_second': '”I can give you so much in exchange for...”', - 'log_alchemist_key_invalid': 'Nothing seemed to happen...', - 'log_alchemist_chest_open': 'The glass key speaks!', - 'logdesc_alchemist_chest_open': 'The chest listens', - 'log_alchemist_chest_opened': 'The glass key speaks again!', - 'logdesc_alchemist_chest_opened': 'The chest keeps listening', - 'log_castdelaying': 'CAST DELAY...', - 'log_weathercrystal_broken': 'Cursed by greed!', - 'logdesc_weathercrystal_broken': - 'Your desire for treasures will surely be your undoing.', - 'log_curse_fade': 'The curse fades away', - 'logdesc_curse_fade': "You're safe again... for now", - 'logdesc_gods_are_impressed': 'The Gods are very impressed with you', - 'logdesc_gods_are_afraid': 'The Gods are afraid', - 'logdesc_gods_are_curious': 'The Gods are very curious', - 'logdesc_temple_peace_temple_break': 'The Gods look the other way', - 'log_altar_success_00': 'The Gods accept your sacrifice', - 'log_altar_success_01': 'The Gods are satisfied with your sacrifice', - 'log_altar_success_02': 'The Gods are happy with your sacrifice', - 'log_altar_fail_00': "The Gods aren't happy with your sacrifice", - 'log_altar_fail_01': 'The Gods sneer at your untrained sacrifice', - 'log_altar_fail_02': 'The Gods mock your crude sacrifice', - 'log_altar_fail_03': 'The Gods scorn at your illiterate sacrifice', - 'log_reality_mutation_00': 'Your reality is shaken', - 'log_reality_mutation_01': - 'You sense things are no longer what they used to be', - 'log_reality_mutation_02': 'You feel something has changed', - 'log_reality_mutation_03': 'You feel the rules of the Cosmos have shifted', - 'log_reality_mutation_04': 'You sense the reality has shifted', - 'log_reality_mutation_05': 'The reality has shifted', - 'status_reality_mutation': 'The reality has shifted', - 'statusdesc_reality_mutation': - 'You sense things are no longer what they used to be.', - 'booktitle_allspells': 'Map of Gnosis', - 'bookdesc_allspells': - 'None other than you is teacher of the truth,\nwherever and from whatever source it is manifest.\n \nYou hear nothing true from me which you have not first told me.\n \nTruth, when did you ever fail to walk with me,\nteaching me what to avoid and what to seek....\nWithout you I could discern none of these things.', - 'reward_gold_statue': 'Golden statue', - 'reward_clock': 'Dedicated to 5 minutes', - 'reward_minit': '1 minute?!', - 'reward_nolla': 'No gold', - 'reward_dollar': 'All the monies', - 'reward_peace': 'Pacifist', - 'reward_crown': 'King', - 'reward_nohit': 'Undamaged', - 'controls_use': 'interact', - 'controls_replayeditopen': 'save replay', - 'controls_usewand': 'use wand', - 'teleport_mystery': 'Portal to the Tower', - 'teleport_mystery_back': 'Portal back to the Mountain', - 'teleport_world': 'Portal to a faraway land', - 'teleport_deeper': 'Portal deeper', - 'teleport_ending': 'Portal to The Laboratory', - 'teleport_ending_victory': 'Portal to The Work', - 'teleport_end_wall': 'Portal to Crystal vault', - 'teleport_generic': 'Portal', - 'teleport_back': 'Portal back', - 'gamemode_normal': 'New Game', - 'gamemode_normal_desc': - 'Explore a new world.\nThe original Noita experience.', - 'gamemode_dailyrun': 'Daily Run', - 'gamemode_dailyrun_desc': - 'New day, new world.\nSome starting items are randomized.\nEvery player is playing the same seed.\nBe careful, you can only play once in 24 hours.', - 'gamemode_nightmare_exp': 'Nightmare (experimental)', - 'gamemode_nightmare': 'Nightmare', - 'gamemode_nightmare_desc': - 'For a more challenging experience.\nUnlock this mode by completing the game.', - 'gamemode_newgameplus': 'New Game+ (experimental)', - 'gamemode_newgameplus_desc': - 'For a more challenging experience.\nUnlock this mode by completing the game.', - 'gamemode_laboratory': 'Spell Lab', - 'gamemode_laboratory_desc': - "Play around with magic to your heart's content.\nDeath is not a problem.\nUnlock new spells for this mode by casting them.", - 'gamemode_comingsoon': 'Coming soon!', - 'gamemode_comingsoon_desc': "It's a mystery.", - 'gamemode_nightmare_desc_PETRI_is_this_correct_new_nightmare_description': - 'Every day a new run setup and a\n chance to play later biomes.\n Play the same seed as many times as you want.', - 'gamemode_daily_practice_run': 'Daily Practice Run', - 'gamemode_daily_practice_run_desc': - 'Start a run from a randomized spot,\nwith randomized items.\nYou can try the same seed as many times as you like\nwithin 24 hours.', - 'new_game_for_newgame_plus': 'NEW GAME', - 'building_worm_deflector': 'Worm crystal', - 'stat_modsenabled': 'Mods enabled:', - 'damage_curse': 'curse', - 'damage_rock_curse': 'cursed rock', - 'damage_overeating': 'overeating', - 'damage_midas': 'midas', - 'menureleasenotes_betawarning': - 'Welcome to the Noita 1.0 Beta version!\nBe warned, the game will probably be less stable here compared to the master branch.\nHappy noiting!', - 'menureleasenotes_betawarning2': - 'Welcome to the Noita beta branch!\nBe warned, the game will probably be less stable here compared to the master branch.', - 'inventory_chargecapacity_tooltip': - 'The amount of charge this wand can store.', - 'infinity_symbol': '∞', - 'credits_game_by': 'A GAME BY', - 'ingestion_status_caused_by': 'Cause: Ingesting $0.', - 'ingestion_status_caused_by_many': 'Cause: Ingesting $0 and more.', - 'ingestion_status_caused_by_overingestion': 'Cause: Overeating', - 'status_confusion': 'Confused', - 'statusdesc_confusion': 'You feel confused.', - 'status_movement_faster': 'Greased lightning.', - 'statusdesc_movement_faster': 'You feel extremely fast.', - 'status_worm_attractor': 'Worm food', - 'statusdesc_worm_attractor': "You feel like you're future worm food.", - 'status_protection_all': 'Protection from all', - 'statusdesc_protection_all': 'You feel strange strength in your body.', - 'status_mana_regeneration': 'Mana regeneration', - 'statusdesc_mana_regeneration': 'You gain mana back faster.', - 'status_internal_fire': 'Internal fire ', - 'statusdesc_internal_fire': "You're burning inside.", - 'status_cryptpoison': 'Ancient venom poisoning', - 'statusdesc_cryptpoison': 'You lose health until you locate a rare antidote.', - 'status_satiated00': 'Minimally satiated', - 'statusdesc_satiated00': 'Your stomach is almost empty.', - 'status_satiated01': 'Satiated', - 'statusdesc_satiated01': 'You can still fit more in your stomach.', - 'status_satiated02': 'Fully satiated', - 'statusdesc_satiated02': - "You're feeling full. Any more food will make movement difficult.", - 'status_satiated03': 'Oversatiated', - 'statusdesc_satiated03': "You're feeling really full.", - 'status_satiated04': 'Terribly oversatiated', - 'statusdesc_satiated04': - "You're feeling sickly full. Any more food might hurt you.", - 'status_satiated05': 'Choking', - 'statusdesc_satiated05': "You're feeling sickly full and choking.", - 'status_satiated06': 'Choking and bloated', - 'statusdesc_satiated06': "You most certainly don't feel like eating more.", - 'status_ingestion_damage': 'Choking', - 'statusdesc_ingestion_damage': 'Any more food or drinking will hurt you.', - 'status_ingestion_exploding': 'Bursting at the seams', - 'statusdesc_ingestion_exploding': "You're feeling so full you might explode.", - 'status_ingestion_alcoholic_00': 'Mildly boozed', - 'statusdesc_ingestion_alcoholic_00': "You're feeling a little tipsy.", - 'status_ingestion_alcoholic_01': 'Drunk', - 'statusdesc_ingestion_alcoholic_01': - 'You drank too much.\nAiming is disturbed.', - 'status_ingestion_alcoholic_02': 'Wasted', - 'statusdesc_ingestion_alcoholic_02': - 'You drank way too much.\nAiming is disturbed.\nDrinking more will make you Poisoned', - 'status_ingestion_alcoholic_03': 'Wasted', - 'statusdesc_ingestion_alcoholic_03': - 'You drank way too much.\nAiming is disturbed.\nDrinking more will give you brain damage', - 'status_brain_damage': 'Brain Damage', - 'statusdesc_brain_damage': 'Your aim is permanently disturbed.', - 'status_trip_00': 'Tripping', - 'statusdesc_trip_00': 'You sense that something is off.', - 'status_trip_01': 'Tripping some', - 'statusdesc_trip_01': 'You feel in harmony with the magical forces.', - 'status_trip_02': 'Heavily tripping', - 'statusdesc_trip_02': 'Maan, that colour smells interesting.', - 'status_trip_03': 'Tripping balls', - 'statusdesc_trip_03': "Usual concepts don't apply.", - 'status_nightvision': 'Wormy vision', - 'statusdesc_nightvision': "You're seeing things more clearly.", - 'status_food_poisoning': 'Food poisoning', - 'statusdesc_food_poisoning': "You're feeling sick. Nothing stays inside.", - 'status_ingestion_movement_slower': 'Clumsy movement', - 'statusdesc_ingestion_movement_slower': 'Movement is difficult.', - 'status_ingestion_freezing': 'Chilly', - 'statusdesc_ingestion_freezing': - "You're feeling cold inside. Movement is difficult.", - 'status_farts': 'Gassy', - 'statusdesc_farts': "You're feeling pressure inside.", - 'status_curse_cloud_00': 'Rain Curse', - 'statusdesc_curse_cloud_00': - "You feel like there's a dark cloud hanging over you.", - 'status_curse_cloud_01': 'Thunder Curse', - 'statusdesc_curse_cloud_01': - 'The weight of the cloud is almost unbearable. Your head hurts.', - 'status_curse_cloud_02': 'Acid Rain Curse', - 'statusdesc_curse_cloud_02': - 'All the foul thoughts you have ever had wash over you.', - 'status_jarate': 'Jarated', - 'statusdesc_jarate': - 'Wet clothes protect you from fire.\nYou sense an increased danger of receiving a critical hit.', - 'status_protection_polymorph': 'Polymorph immunity', - 'statusdesc_protection_polymorph': 'You cannot be polymorphed.', - 'status_faster_levitation': 'Faster levitation', - 'statusdesc_faster_levitation': 'You levitate 75% faster.', - 'ending_above_part_a': 'World has been restored', - 'ending_above_part_b': 'And everyone is much happier', - 'inventory_perks_many': '$0 x $1', - 'death_curse': 'Curse', - 'death_polymorph': ', while polymorphed to $0', - 'streamingevent_speedy_enemies': 'Speedy Creatures', - 'streamingeventdesc_speedy_enemies': 'Nearby creatures move faster', - 'streamingevent_protect_enemies': 'Protect Creatures', - 'streamingeventdesc_protect_enemies': - 'Nearby creatures temporarily block all incoming damage', - 'streamingevent_teleporting_enemies': 'Teleporting Creatures', - 'streamingeventdesc_teleporting_enemies': - 'Nearby creatures start teleporting around', - 'streamingevent_polymorph_enemies': 'Polymorph Creatures', - 'streamingeventdesc_polymorph_enemies': - 'Nearby creatures polymorph into random beings', - 'streamingevent_tiny_ghost_player': 'Summon Friendly Ghosts', - 'streamingeventdesc_tiny_ghost_player': 'You get a few tiny ghost friends', - 'streamingevent_tiny_ghost_enemy': 'Summon Hostile Ghosts', - 'streamingeventdesc_tiny_ghost_enemy': - 'Nearby creatures get tiny ghost friends', - 'streamingevent_homing_enemy_projectiles': 'Homing for Hostiles', - 'streamingeventdesc_homing_enemy_projectiles': - "Nearby enemies' projectiles accelerate toward you", - 'streamingevent_health_plus': 'Health Plus', - 'streamingeventdesc_health_plus': 'You gain 80 HP', - 'streamingevent_health_minus': 'Health Minus', - 'streamingeventdesc_health_minus': 'You lose 40 HP', - 'streamingevent_max_health_plus': 'Max Health Plus', - 'streamingeventdesc_max_health_plus': 'You gain 50 maximum HP', - 'streamingevent_max_health_minus': 'Max Health Minus', - 'streamingeventdesc_max_health_minus': 'You lose 25 maximum HP', - 'streamingevent_regeneration_field': 'Regeneration Field', - 'streamingeventdesc_regeneration_field': "You're given a regenerative field", - 'streamingevent_protect_player': 'Temporary Immortality', - 'streamingeventdesc_protect_player': 'You become invincible for some time', - 'streamingevent_shield_enemies': 'Shielded Creatures', - 'streamingeventdesc_shield_enemies': 'All creatures gain a shield', - 'streamingevent_shield_player': 'Friendly Shield', - 'streamingeventdesc_shield_player': 'You gain a shield', - 'streamingevent_faster_player': 'Speedy Movement', - 'streamingeventdesc_faster_player': 'You can move faster for a time', - 'streamingevent_slimy_player': 'Slimy', - 'streamingeventdesc_slimy_player': 'Everyone gets covered in slime', - 'streamingevent_wet_player': 'Shower', - 'streamingeventdesc_wet_player': 'A raincloud spawns on you', - 'streamingevent_oiled_player': 'Glisten', - 'streamingeventdesc_oiled_player': 'A cloud of oil spawns on you', - 'streamingevent_drunk_player': 'Booze', - 'streamingeventdesc_drunk_player': 'You become drunk', - 'streamingevent_drunk_enemies': 'Drunk Creatures', - 'streamingeventdesc_drunk_enemies': 'Nearby creatures become drunk', - 'streamingevent_spell_refresh': 'Spell Refresh', - 'streamingeventdesc_spell_refresh': 'Your spells are refreshed', - 'streamingevent_sea_of_x': 'Sea of Random', - 'streamingeventdesc_sea_of_x': 'A huge body of random liquid is summoned', - 'streamingevent_sea_of_water': 'Sea of Water', - 'streamingeventdesc_sea_of_water': 'A huge body of water is summoned', - 'streamingevent_sea_of_oil': 'Sea of Oil', - 'streamingeventdesc_sea_of_oil': 'A huge body of oil is summoned', - 'streamingevent_sea_of_lava': 'Sea of Lava', - 'streamingeventdesc_sea_of_lava': 'A huge body of lava is summoned', - 'streamingevent_nuke': 'Boom!', - 'streamingeventdesc_nuke': 'Take cover!', - 'streamingevent_spawn_worm': 'Summon Worm', - 'streamingeventdesc_spawn_worm': 'A huge worm appears', - 'streamingevent_spawn_shopkeeper': 'Summon Stevari', - 'streamingeventdesc_spawn_shopkeeper': 'Stevari appears', - 'streamingevent_bouncy_shots': 'Bouncy Spells', - 'streamingeventdesc_bouncy_shots': - 'Your projectiles become bouncy for a time', - 'streamingevent_boomerang_shots': 'Boomerang Spells', - 'streamingeventdesc_boomerang_shots': - 'Your projectiles home back to you for a time', - 'streamingevent_fizzle': 'Fizzle Spells', - 'streamingeventdesc_fizzle': - 'Your projectiles have a chance to fizzle out for a time', - 'streamingevent_explosive_projectile': 'Explosive Spells', - 'streamingeventdesc_explosive_projectile': - 'Your projectiles become explosive for a time', - 'streamingevent_give_wand_to_enemy': 'Armed Creature', - 'streamingeventdesc_give_wand_to_enemy': - 'A nearby creature gets a random wand', - 'streamingevent_give_wand_to_player': 'New Wand', - 'streamingeventdesc_give_wand_to_player': 'A random wand appears', - 'streamingevent_remove_liquid': 'Remove Liquids', - 'streamingeventdesc_remove_liquid': 'All nearby liquids disappears', - 'streamingevent_remove_ground': 'Remove Ground', - 'streamingeventdesc_remove_ground': 'All nearby solid ground disappears', - 'streamingevent_berserk': 'Rage', - 'streamingeventdesc_berserk': 'Everyone becomes berserk', - 'streamingevent_fireball_thrower_player': 'Fireball Thrower', - 'streamingeventdesc_fireball_thrower_player': - 'You start spewing fireballs for a time', - 'streamingevent_fireball_thrower_enemies': 'Fireball Thrower Creatures', - 'streamingeventdesc_fireball_thrower_enemies': - 'Creatures start spewing fireballs for a time', - 'streamingevent_spawn_chest': 'Loot!', - 'streamingeventdesc_spawn_chest': 'A chest appears!', - 'streamingevent_transform_giga_discs': 'Giga Sawblades Everywhere', - 'streamingeventdesc_transform_giga_discs': - 'For a time, all projectiles become giant sawblades(!)', - 'streamingevent_transform_nukes': 'Projectiles Into Nukes', - 'streamingeventdesc_transform_nukes': - 'All airborne projectiles become nukes(!!!)', - 'streamingevent_rain_gold': 'Treasure Rain', - 'streamingeventdesc_rain_gold': "It's raining gold", - 'streamingevent_rain_barrel': 'Barrel Rain', - 'streamingeventdesc_rain_barrel': - 'Barrels and other explosives appear out of thin air', - 'streamingevent_rain_hiisi': 'Hiisi Rain', - 'streamingeventdesc_rain_hiisi': 'A bunch of Hiisi appear out of thin air', - 'streamingevent_rain_worm': 'Worm Rain', - 'streamingeventdesc_rain_worm': 'Worms appear out of thin air', - 'streamingevent_rain_potion': 'Potion Rain', - 'streamingeventdesc_rain_potion': 'Potions appear out of thin air', - 'streamingevent_rain_bomb': 'Bomb Rain', - 'streamingeventdesc_rain_bomb': 'Bombs appear out of thin air', - 'streamingevent_gravity_player': 'Personal Gravity Field', - 'streamingeventdesc_gravity_player': 'You attract projectiles for a while', - 'streamingevent_gravity_enemies': 'Creature Gravity Field', - 'streamingeventdesc_gravity_enemies': - 'Creatures start attracting projectiles for a while', - 'streamingevent_portal_east': 'Portal to East', - 'streamingeventdesc_portal_east': 'A portal leading somewhere far away', - 'streamingevent_portal_beginning': 'Portal to Surface', - 'streamingeventdesc_portal_beginning': 'A portal leading to the surface', - 'streamingevent_portal_random': 'Portal to Some Place', - 'streamingeventdesc_portal_random': 'A portal leading somewhere', - 'streamingevent_slow_enemies': 'Slow Creatures', - 'streamingeventdesc_slow_enemies': 'Creatures slow down', - 'streamingevent_slow_player': 'Slowdown', - 'streamingeventdesc_slow_player': 'You slow down', - 'streamingevent_trail_water': 'Water Trail', - 'streamingeventdesc_trail_water': 'Your projectiles leave a trail of water', - 'streamingevent_trail_oil': 'Oil Trail', - 'streamingeventdesc_trail_oil': 'Your projectiles leave a trail of oil', - 'streamingevent_trail_acid': 'Acid Trail', - 'streamingeventdesc_trail_acid': 'Your projectiles leave a trail of acid', - 'streamingevent_trail_fire': 'Fire Trail', - 'streamingeventdesc_trail_fire': 'Your projectiles leave a trail of fire', - 'streamingevent_trail_lava': 'Lava Trail', - 'streamingeventdesc_trail_lava': 'Your projectiles leave a trail of lava', - 'streamingevent_trail_poison': 'Poison Trail', - 'streamingeventdesc_trail_poison': 'Your projectiles leave a trail of poison', - 'streamingevent_trail_gunpowder': 'Gunpowder Trail', - 'streamingeventdesc_trail_gunpowder': - 'Your projectiles leave a trail of gunpowder', - 'streamingevent_trail_alcohol': 'Alcohol Trail', - 'streamingeventdesc_trail_alcohol': - 'Your projectiles leave a trail of alcohol', - 'streamingevent_player_trip': 'Trip', - 'streamingeventdesc_player_trip': 'You trip out', - 'streamingevent_transmutation': 'Transmutation', - 'streamingeventdesc_transmutation': - 'Nearby materials transmute into acid for some time', - 'streamingevent_slow_bullets': 'Bullet Time', - 'streamingeventdesc_slow_bullets': 'Projectiles slow down heavily', - 'streamingevent_gravity': 'Projectile Gravity', - 'streamingeventdesc_gravity': 'Your projectiles gain extra gravity', - 'streamingevent_antigravity': 'Projectile Antigravity', - 'streamingeventdesc_antigravity': 'Your projectiles gain antigravity', - 'biomemodifierdesc_moist': 'The air feels extremely humid', - 'biomemodifierdesc_fog_of_war_reappears': - 'A mysterious darkness lingers in this place', - 'biomemodifierdesc_conductive': 'The air smells ionized', - 'biomemodifierdesc_freezing': 'The air feels freezing', - 'biomemodifierdesc_hot': 'The air feels hot', - 'biomemodifierdesc_dry': 'The air feels dry', - 'biomemodifierdesc_bouncy': 'The floors look bouncy', - 'biomemodifierdesc_gold_vein': 'You sense lucrative opportunities', - 'biomemodifierdesc_gold_vein_super': - 'You sense extremely lucrative opportunities', - 'biomemodifierdesc_corrupted': 'Something is not right here', - 'biomemodifierdesc_flooded': 'Where did all this water come from?', - 'biomemodifierdesc_gas_glooded': "There's a smell of gas in the air", - 'biomemodifierdesc_toxic': 'The air smells toxic', - 'biomemodifierdesc_vulcanous': 'The air smells vulcanic', - 'biomemodifierdesc_haunted': 'A terrible chill runs down your spine', - 'biomemodifierdesc_rat_infested': 'The air smells of rats', - 'biomemodifierdesc_worm_infested': 'The air smells of worms', - 'biomemodifierdesc_alchemic': "There's a spirit of Ancient Art in the air", - 'biomemodifierdesc_peaceful': 'You feel a sense of peace', - 'biomemodifierdesc_portal_upwards': "You feel there's a special route nearby", - 'biomemodifierdesc_portal_downwards': - "You feel there's a special route nearby", - 'NEWTEXTSINCE20200928': '', - 'reward_nowands': 'No wands', - 'reward_almostpacifist': 'Almost a pacifist', - 'reward_notinkeringofwands': 'Abstained from wand tinkering', - 'reward_kicksonly': 'The Mighty Foot', - 'gamemode_dailyrun_desc_played': - "You've played the daily. Try again tomorrow.", - 'gamemode_dailyrun_desc_played2': - 'You already had your chance at the daily run. Try again tomorrow.', - 'gamemode_dailyrun_desc_played3': - 'You already had your chance. Try again tomorrow.', - 'perk_revenge_bullet': 'Revenge bullets', - 'perkdesc_revenge_bullet': - 'You return fire when hit by projectiles, and you gain 20% resistance against explosions and projectiles.', - 'logdesk_curse_ghost': 'Your greed will haunt you wherever you go...', - 'logdesk_curse_permaoil': 'Your greed sticks to you like tar...', - 'logdesk_curse_nofly': 'Your greed weighs you down heavily...', - 'logdesk_curse_strongenemies': 'Your greed makes others dislike you...', - 'logdesk_curse_keepmoving': 'Your greed makes you overly hasty...', - 'log_curse': 'Curse of greed!', - 'log_curse_info': 'Seek refreshment to cure the curse.', - 'log_curse_reward': 'You gain additional gold while the curse is active.', - 'log_curse_secret': 'The air trembles!', - 'logdesc_curse_secret': - 'Ancient alchemists sought to utilize even the power of a curse...', - 'animal_wizard_neutral': 'Maadoittajamestari', - 'action_burst_8': 'Octuple spell', - 'actiondesc_burst_8': 'Simultaneously cast 8 spells', - 'action_broken_spell': 'Broken spell', - 'actiondesc_broken_spell': 'A malfunctioning spell', - 'action_summon_portal': 'Summon portal', - 'actiondesc_summon_portal': 'Summons a strange portal', - 'teleport_strange_unstable': 'Unstable portal', - 'teleport_strange_stable': 'Stable portal', - 'log_repair_spell': 'The spell is mended', - 'log_repair_wand': 'The wand is mended', - 'gamemode_dailyrun_desc_offline': - 'Please turn on Online features to play this mode.', - 'gamemode_dailyrun_desc_connection_failed': 'Connection failed.', - 'mat_meat_frog': 'frog meat', - 'menureleasenotes_noita10': - 'Welcome to Noita Epilogue Update!\nNoita used be an Early Access game, so we want to send a huge thank you to all of you\nwho played Noita during its first year. Your feedback has been invaluable!\nAnd to all the new Noita players... Welcome and best of luck!\n- Devs\n', - 'item_mcguffin_14': 'Truest of Knowledge', - 'itemdesc_mcguffin_14': 'Was it worth it?', - 'perk_angry_ghost': 'Angry ghost', - 'perkdesc_angry_ghost': - 'An angry spirit comes to your aid, copying nearby spells and projectiles.', - 'effect_neutralized': 'Neutralized spells', - 'effectdesc_neutralized': 'Projectile spells you cast short-circuit.', - 'log_all_spells': 'You were warned!', - 'logdesc_all_spells': 'One does not escape quite so easily!', - 'perk_gourd': 'Refreshing gourd', - 'perkdesc_gourd': 'Just a nice gourd.', - 'perk_gas_fire': 'Gas fire', - 'perkdesc_gas_fire': 'Gases near you ignite automatically.', - 'perk_spell_duplication': 'Projectile duplication', - 'perkdesc_spell_duplication': - "Your projectile spells have a chance to duplicate, but you're more vulnerable to projectile damage", - 'perk_faster_wands': 'Faster Wands (One-off)', - 'perkdesc_faster_wands': - "All wands you're currently carrying gain a bonus to their cast delay & reload time.", - 'log_surprise': 'Uh oh!', - 'logdesc_surprise': 'What did you do???', - 'item_gourd': 'Refreshing gourd', - 'itemdesc_gourd': - 'Can be thrown to deal damage. Upon breaking, releases a refreshing aura.', - 'menu_streaming_eventliststartnewgame': - 'You can configure the enabled events here after entering the game.\n(The game will remember the settings.)', - 'menu_streaming_eventkind': 'Type: $0', - 'menu_streaming_eventauthor': 'Author: $0', - 'streaming_integration_toofeweventsenabled': - 'Please enable at least four events\nvia the Streaming options menu!', - 'streamingevent_nothing': 'Nothing', - 'streamingeventdesc_nothing': 'Nothing happens.', - 'NEWTEXTSINCE20201002': '', - 'streamingevent_improve_wands': 'Improve wands', - 'streamingeventdesc_improve_wands': - 'All wands in your vicinity get slightly better stats', - 'streamingevent_weaken_wands': 'Weaken wands', - 'streamingeventdesc_weaken_wands': - 'All wands in your vicinity get slightly worse stats', - 'mat_templebrick_weak': 'weak brickwork', - 'mat_magic_liquid_unstable_polymorph': 'unstable polymorphine', - 'mat_magic_liquid_unstable_teleportation': 'unstable teleportatium', - 'mat_magic_liquid_unstable_hp_regeneration': 'unstable healthium', - 'mat_magic_liquid_unstable_berserk': 'unstable berserkium', - 'mat_magic_liquid_unstable_charm': 'unstable pheromone', - 'mat_magic_liquid_unstable_invisibility': 'unstable invisiblium', - 'action_line_arc': 'Linear arc', - 'actiondesc_line_arc': - 'Makes a projectile fly only in cardinal or diagonal lines', - 'perk_orbit': 'Phasing', - 'perkdesc_orbit': 'Projectiles seemingly phase through you.', - 'greed_curse_damage': 'Curse of Greed', - 'perk_mana_from_kills': 'Kills to mana', - 'perkdesc_mana_from_kills': - 'Every time an enemy near you dies, you release mana-recharging liquid.', - 'perk_mega_beam_stone': 'Summon Sädekivi (One-off)', - 'perkdesc_mega_laser': 'You will gain a curious artefact', - 'perk_foodclock': 'Food clock', - 'perkdesc_foodclock': 'Being well nourished is good for you', - 'log_hungry': 'You feel hungry', - 'log_starving': 'You are starving', - 'action_lifetime_infinite': 'Infinite lifetime', - 'actiondesc_lifetime_infinite': - 'Makes a projectile last forever, but also makes it hurt you', - 'action_cloud_oil': 'Oil cloud', - 'actiondesc_cloud_oil': 'Creates a rain of oil', - 'menu_streaming_hidevotecounts': 'Hide vote counts during voting: $0', - 'menu_streaming_uiposleft': 'Position UI to the left side of the screen: $0', - 'menu_streaming_uiposleft_hint': - 'EXPERIMENTAL: UI might sometimes look funny', - 'log_alchemist_key_alt_first': 'The key listens...', - 'logdesc_alchemist_key_alt_first': "It's taking in the music.", - 'log_alchemist_key_alt_second': 'The key has taken in the full song', - 'logdesc_alchemist_key_alt_second': "It's ready.", - 'log_alchemist_key_alt_reward': 'The chest opens!', - 'logdesc_alchemist_key_alt_reward': - 'But the key might have other stories to tell...', - 'animal_greed_ghost': 'Ghost of Greed', - 'item_essence_greed': 'Eternal Wealth', - 'itemdesc_essence_greed': 'You gain more gold but a curse will haunt you', - 'log_greed_curse_away': 'The crystal shatters!', - 'logdesc_greed_curse_away': - 'The curse has gone away, but so have the treasures it grants.', - 'mat_templebrick_golden_static': "Fool's gold", - 'biome_greed_room': 'Hall of Wealth', - 'log_greed_curse_back': 'The curse returns!', - 'menuoptions_cosmeticparticlecoeff': 'Cosmetic particle amount', - 'menuoptions_cosmeticparticlecoeff_hint': - 'Particle amount will be reduced at this rate if there are lots of particles', - 'biomemodifierdesc_plant_infested': 'It smells like soil after rain', - 'biomemodifierdesc_mechanical': 'You can hear the sounds of machinery', - 'biomemodifierdesc_furnished': 'It feels cozy in here', - 'biomemodifierdesc_booby_trapped': 'You feel wary', - 'biomemodifierdesc_perforated': 'It feels roomy in here', - 'biomemodifierdesc_tunneled': 'You can hear faint sounds of construction', - 'biomemodifierdesc_hiisi_invasion': - 'You can hear Hiisi grunts from the distance', - 'biomemodifierdesc_pipes': 'You can hear someone clanging on metal pipes', - 'biomemodifierdesc_spooky': 'The hair in the back of your neck stands up', - 'biomemodifierdesc_twisted': 'It feels like your head is spinning', - 'biomemodifierdesc_cheery': 'You feel cheery', - 'biomemodifierdesc_ominous': 'It feels ominous in here', - 'mat_templebrick_diamond_static': 'Diamond brickwork', - 'log_alchemist_chest_opened_alt': 'The chest opens again', - 'logdesc_alchemist_chest_opened_alt': 'It still remembers the song.', - 'animal_thunderskull': 'Sähkiö', - 'item_chest_light': 'Coral chest', - 'item_mega_beam_stone': 'Sädekivi', - 'itemdesc_mega_beam_stone': - 'This artefact has a picture of a celestial beam.', - 'log_beam_stone': 'You feel like you should move...', - 'logdesc_beam_stone': 'Something terrible is going to happen', - 'damage_plasmabeam': 'plasma beam', - 'mat_meat_spider': 'spider meat', - 'mat_blood_spider': 'spider blood', - 'mat_blood_frog': 'frog blood', - 'release_notes_10_highlights': - 'HIGHLIGHTS:\nNew Daily Practice Run game mode.\nTwitch integration - let stream viewers make your game even more more chaotic.\nBiome modifiers - biomes are sometimes a bit different from the usual form.\nSome biomes have simulated temperature effects.\nLots of gameplay and UI tweaks and additions.\nVisual and audio enhancements.\nNew spells, perks, enemies, materials, secrets, sounds and more.\nOver 15 new music music tracks: Underground Jungle, Vault, Temple of the Art and more.\nPerformance optimizations and bug fixes.\nOptions menu overhaul.', - 'continue_10_warning': - "We HIGHLY recommend that you don't try to load pre-1.0 saves. Everything will be broken and the gods will most definitely be angry. ", - 'release_notes_title': 'RELEASE NOTES', - 'NEWTEXTSINCE20201013': '', - 'menuoptions_configurecontrols_keyname_unknown': 'Unknown', - 'menuoptions_configurecontrols_action_unbound': 'Unbound', - 'menuoptions_configurecontrols_binding_primary': 'Primary', - 'menuoptions_configurecontrols_binding_secondary': 'Secondary', - 'menuoptions_configurecontrols_pressakey': 'Press something', - 'input_mouseleft': 'Mouse left', - 'input_mouseright': 'Mouse right', - 'input_mousemiddle': 'Mouse middle', - 'input_mousewheelup': 'Mouse wheel up', - 'input_mousewheeldown': 'Mouse wheel down', - 'input_space': 'Space', - 'input_tab': 'TAB', - 'input_xboxbutton_start': 'START', - 'input_xboxbutton_select': 'SELECT', - 'format_keybinding': '[$0]', - 'biome_orbroom': 'Orb room', - 'menugameover_causeofdeath_killer_cause': "$0's $1", - 'menugameover_causeofdeath_killer_cause_name_ends_in_s': "$0' $1", - 'item_heart_cursed': 'Cursed extra max health ', - 'log_worldseed': 'Seed: $0', - 'menupause_worldseed': 'Seed: $0', - 'menupause_gamemode': ' Mode: $0', - 'menupause_location': ' Location: $0', - 'menupause_modsused': ' Mods used: yes', - 'menugameover_record': 'RECORD!', - 'dailyrun_time_left_hoursminutesseconds': 'Time left: $0:$1.$0', - 'dailyrun_dateformat_0day_1month_2year': '$0 $1 $2', - 'month_0': 'Jan', - 'Month_1': 'Feb', - 'Month_2': 'Mar', - 'Month_3': 'Apr', - 'Month_4': 'May', - 'Month_5': 'Jun', - 'Month_6': 'Jul', - 'Month_7': 'Aug', - 'Month_8': 'Sep', - 'Month_9': 'Oct', - 'Month_10': 'Nov', - 'Month_11': 'Dec', - 'credits_and': 'AND', - 'credits_sound': 'SOUND DESIGN, MUSIC LEAD AND MIXING', - 'credits_musiccomposed': 'MUSIC COMPOSED AND PERFORMED BY ', - 'credits_musicrecording': - 'MUSIC RECORDING, MIXING AND MASTERING\nPetri Majuri at E-studio', - 'credits_localization': 'LOCALIZATION', - 'credits_localization2': 'LOCALIZATION & QA', - 'credits_marketingandpr': 'MARKETING & PR', - 'credits_marketingandpr2': 'MARKETING & PR CONSULTATION', - 'credits_marketingandpr3': 'EXTERNAL MARKETING & PR', - 'credits_10trailers': '1.0 TRAILER EDITORS', - 'credits_10trailers2': '1.0 LAUNCH TRAILERS BY', - 'credits_testingandadditionalwork': 'TESTING & ADDITIONAL WORK', - 'credits_testing': 'TESTING', - 'credits_thankyou': 'THANK YOU', - 'credits_thankyou_andyou': '...And You!', - 'credits_crypticscores': 'CRYPTIC HIGHSCORES', - 'credits_falling': - 'Noita is powdered by the Falling Everything Engine\nNoita uses FMOD Studio by Firelight Technologies Pty Ltd', - 'credits_licenses': - 'Please see licenses/Attributions.txt for Creative Commons attribution list.', - 'format_timer': '$0.$1', - 'menustreaming_nsa': 'Please turn on Online features to use this feature.', - 'menu_oldsave_verybroken0': 'Old save detected.', - 'menu_oldsave_verybroken1': - "We HIGHLY recommend that you don't try to load pre 1.0 saves. Everything will be broken and the Gods will most definitely be angry. ", - 'menu_oldsave_verybroken2': 'Old save detected', - 'NEWTEXTSINCE20201015': '', - 'item_kantele': 'Kantele', - 'item_ocarina': 'Huilu', - 'bookdesc02_forged': 'The essence of life and death.', - 'bookdesc04_forged': - 'Prove thine knowledge,\n from what is the west created of.', - 'bookdesc05_forged': - 'Prove thine knowledge,\n from what is the east created of.', - 'bookdesc06_forged': - 'To have true knowledge\n is to see in the darkness of ignorance.', - 'bookdesc07_forged ': - 'To gain true knowledge,\n one must slow down and not hurry.', - 'bookdesc08_forged': - 'Awaken, the flock of the shepherd and think for thyself!', - 'bookdesc09_forged': "To walk a mile in someone else's boots.", - 'bookdesc10_forged': - 'True knowledge is a slippery thing.\nThe unfortunate side effect of our divine stone.', - 'stat_prev_best': '($0)', - 'action_meteor_rain': 'Meteorisade', - 'actiondesc_meteor_rain': 'Alea iacta est', - 'action_worm_rain': 'Matosade', - 'actiondesc_worm_rain': 'Alea iacta est', - 'animal_boss_pit': 'Sauvojen tuntija', - 'NEWTEXTSINCE20201124': '', - 'animal_wand': 'Wand', - 'animal_enlightened_laser_dark_wand': 'Dark wand', - 'animal_enlightened_laser_elec_wand': 'Thunder wand', - 'animal_enlightened_laser_fire_wand': 'Fire wand', - 'animal_enlightened_laser_light_wand': 'Glowing wand', - 'perk_high_gravity': 'High Gravity', - 'perkdesc_high_gravity': - 'All creatures, you included, have higher personal gravity.', - 'streamingevent_heal_ghost': 'Summon Healing Ghosts', - 'streamingeventdesc_heal_ghost': 'You get a few healing ghost friends', - 'streamingevent_player_gas': 'Excess Gas', - 'streamingeventdesc_player_gas': 'Your body exudes flammable gas for a time', - 'streamingevent_areadamage_player': 'Friendly Contact Damage', - 'streamingeventdesc_areadamage_player': - 'You gain a field that deals damage to nearby enemies for a time.', - 'streamingevent_areadamage_enemy': 'Enemy Contact Damage', - 'streamingeventdesc_areadamage_enemy': - 'Enemies near you gain fields that deal damage to you if you get close.', - 'streamingevent_twitchy': 'Twitchy!', - 'streamingeventdesc_twitchy': - 'You have trouble controlling your wand for a time', - 'streamingevent_spawn_perk': 'Gain Random Perk', - 'streamingeventdesc_spawn_perk': "You're granted a random perk", - 'streamingevent_shield_ghost': 'Summon Shielding Ghost', - 'streamingeventdesc_shield_ghost': 'You get a shielding ghost friend', - 'streamingevent_matter_eater': 'Matter Eater', - 'streamingeventdesc_matter_eater': - 'All projectiles eat up the ground for a time', - 'streamingevent_invisible_player': 'Personal Invisibility', - 'streamingeventdesc_invisible_player': 'You become invisible for a time', - 'streamingevent_invisible_enemy': 'Invisible Enemies', - 'streamingeventdesc_invisible_enemy': 'Enemies become invisible for a time', - 'streamingevent_neutralized': 'Neutralized Spells', - 'streamingeventdesc_neutralized': - 'All projectiles near you become neutralized for a time', - 'streamingevent_high_spread': 'Extreme Spread', - 'streamingeventdesc_high_spread': - 'All projectiles have very high spread for a time', - 'streamingevent_bubble': 'Safety bubble', - 'streamingeventdesc_bubble': "You're encased in a safe bubble for a time", - 'streamingevent_spawn_perk_enemy': 'Give Perks To Enemies', - 'streamingeventdesc_spawn_perk_enemy': 'Nearby enemies get random perks', - 'animal_wizard_twitchy': 'Sätkymestari', - 'status_twitchy': 'Twitchy', - 'statusdesc_twitchy': - 'Your hand spasms randomly and your spells can hurt you!', - 'mat_meat_fast': 'Wobbly meat', - 'hud_wand_castdelay': 'Cast delay: $0 s', - 'gamemode_dailyrun_desc_offline_mode': - 'Offline Daily Run\nThe seed is different from the Online Daily Run.\nBut you can play this seed as many times as you like\nwithin the 24 hours.\n', - 'biomemodifierdesc_gravity_fields': - 'You feel an invisible force pushing and pulling you', - 'biomemodifierdesc_fungal': 'The air is filled with fungal spores', - 'menuoptions_steamcloud': 'Steam Cloud: $0', - 'menuoptions_enableall': 'Enable all', - 'menuoptions_disableall': 'Disable all', - 'menu_streaming_usernames_visible': - 'Creatures can be named after viewers: $0', - 'menu_mods_settings': 'Mod settings', - 'menu_modsettings_changes_restart': - 'Changes will be applied when you restart the game.', - 'menu_modsettings_changes_worldgen': - 'Changes will be applied when you start a new game.', - 'menu_mods_nosettings': 'Enabled mods have no settings.', - 'biomemodifierdesc_shielded': 'This place feels exceptionally secure', - 'mat_rock_static_cursed_green': 'Greed-cursed rock', - 'mat_cursed_liquid': 'Greed-cursed liquid', - 'log_greed_curse_away_full': 'The curse relents.', - 'logdesc_greed_curse': 'You gain 3x gold, but are terribly cursed!', - 'item_greed_crystal': 'Greed-cursed crystal', - 'log_moon_altar_extra': 'The gods are confused', - 'logdesc_moon_altar_extra': 'What is that?!', - 'itemdesc_alchemy_key_musicbox_1': 'The key remembers a song.', - 'itemdesc_alchemy_key_musicbox_2': 'The key remembers two songs.', - 'itemdesc_alchemy_key_musicbox_3': 'The key remembers three songs.', - 'itemdesc_alchemy_key_musicbox_4': 'The key is ready.', - 'perk_exploding_gold': 'Exploding Gold', - 'perkdesc_exploding_gold': - 'Gold dropped by enemies explodes when it disappears, is picked up or touched by other enemies!', - 'action_quantum_split': 'Quantum Split', - 'actiondesc_quantum_split': - 'Makes a projectile split into three projectiles whose existences are entangled', - 'log_fasttravel': 'A portal appears!', - 'logdesc_fasttravel': 'This could be useful...', - 'action_chain_shot': 'Chain Spell', - 'actiondesc_chain_shot': - 'Causes a projectile to cast a copy of itself upon expiring, up to 5 times', - 'action_teleport_projectile_short': 'Small Teleport Bolt', - 'actiondesc_teleport_projectile_short': - 'A shortlived magical bolt that moves you wherever it ends up flying', - 'perk_worm_smaller_holes': 'Feared by Worms', - 'perkdesc_worm_smaller_holes': - 'Worms run away from you, and worm and lukki enemies no longer destroy terrain while burrowing.', - 'perk_worm_bigger_holes': 'More Worm Digging', - 'perkdesc_worm_bigger_holes': 'Worms now dig a larger area around them.', - 'animal_homunculus': 'Homunculus', - 'streamingevent_homunculus': 'Summon Random Homunculi', - 'streamingeventdesc_homunculus': - 'A group of helpful little homunculi appears to aid you', - 'streamingevent_homunculus_dark': 'Summon Digging Homunculus', - 'streamingeventdesc_homunculus_dark': - 'A helpful little homunculus comes to your aid', - 'streamingevent_homunculus_fire': 'Summon Fiery Homunculus', - 'streamingeventdesc_homunculus_fire': - 'A helpful little homunculus comes to your aid', - 'streamingevent_homunculus_heal': 'Summon Healer Homunculus', - 'streamingeventdesc_homunculus_heal': - 'A helpful little homunculus comes to your aid', - 'streamingevent_homunculus_laser': 'Summon Glowing Homunculus', - 'streamingeventdesc_homunculus_laser': - 'A helpful little homunculus comes to your aid', - 'streamingevent_homunculus_punch': 'Summon Puncher Homunculus', - 'streamingeventdesc_homunculus_punch': - 'A helpful little homunculus comes to your aid', - 'action_mu': 'Mu', - 'actiondesc_mu': - 'Every modifier-type spell in the current wand is applied to a projectile', - 'action_reset': 'Wand Refresh', - 'actiondesc_reset': 'Reloads the wand immediately', - 'perk_extra_slots': 'Extra Wand Capacity (One-off)', - 'perkdesc_extra_slots': - "The wands you're currently carrying gain 1-3 additional spell slots (to a maximum of 25).", - 'perk_teleportitis_dodge': 'Teleportitis Dodge', - 'perkdesc_teleportitis_dodge': - 'You teleport a short distance away when an enemy projectile is near.', - 'perk_extra_mana': 'High Mana, Low Capacity (One-off)', - 'perkdesc_extra_mana': - 'Your currently held wand loses half its capacity, but gains more mana.', - 'perk_homunculus': 'Homunculus', - 'perkdesc_homunculus': - 'Every time you leave a Holy Mountain, a helpful homunculus is summoned.', - 'action_larpa_death': 'Larpa Explosion', - 'actiondesc_larpa_death': - 'A projectile will shoot out 8 copies of itself when it expires or hits the ground', - 'action_bounce_larpa': 'Larpa Bounce', - 'actiondesc_bounce_larpa': - 'A projectile will launch a copy of itself when it bounces', - 'log_homunculus': 'A homunculus is summoned!', - 'animal_wizard_hearty': 'Haavoittajamestari', - 'status_hearty': 'Heartache', - 'statusdesc_hearty': 'Your maximum health is temporarily halved.', - 'item_safe_haven': 'Kammi', - 'item_description_safe_haven': 'Can be thrown to summon a cozy hut', - 'item_kakka': 'Kakkakikkare', - 'itemdesc_kakka': - 'This mysterious spiral-shaped artefact smells horrible and feels warm to the touch', - 'mat_feces': 'Feces', - 'mat_gas_smelly': 'Smelly vapour', - 'mat_peat': 'Peat', - 'animal_drone_shield': 'Turvalennokki', - 'animal_wizard_weaken': 'Turvattomuusmestari', - 'animal_wizard_wither': 'Kuihduttajamestari', - 'status_weaken': 'Vulnerable', - 'statusdesc_weaken': 'Your protective perks are temporarily disabled.', - 'mat_meat_fruit': 'Fruit flesh', - 'biome_wizardcave': "Wizards' den", - 'action_zeta': 'Zeta', - 'actiondesc_zeta': "Copies a random spell in another wand you're holding", - 'perk_laser_aim': 'Pinpointer', - 'perkdesc_laser_aim': - 'Your spells fly faster and have lower spread, and you have a handy sightline for aiming!', - 'item_vasta': 'Vasta', - 'item_vihta': 'Vihta', - 'action_ball_lightning': 'Ball Lightning', - 'actiondesc_ball_lightning': 'Summons three short range electrical orbs', - 'perk_low_recoil': 'Low Recoil', - 'perkdesc_low_recoil': - 'Recoil caused by your spells is greatly reduced, but your spells fly slightly slower.', - 'perk_projectile_repulsion_sector': 'Projectile Repulsion Sector', - 'perkdesc_projectile_repulsion_sector': - 'Projectiles that fly into a small sector in front of you get blown away.', - 'perk_projectile_eater_sector': 'Projectile Eater', - 'perkdesc_projectile_eater_sector': - 'Projectiles that fly into a small sector behind of you disappear.', - 'status_wither': 'Withered', - 'statusdesc_wither': - "You're temporarily more vulnerable to all damage types.", - 'perk_projectile_slow_field': 'Projectile Slower', - 'perkdesc_projectile_slow_field': 'Projectiles near you slow down.', - 'action_nolla': 'Nolla', - 'actiondesc_nolla': 'The duration of a projectile is set to zero', - 'item_wand_good_1': 'Wand of Swiftness', - 'item_wand_good_2': 'Wand of Destruction', - 'item_wand_good_3': 'Wand of Multitudes', - 'perkdesc_revenge_projectile': - 'You return projectiles back to enemies upon taking damage, and gain 20% resistance against projectiles & explosions.', - 'log_always_cast_failed': 'Too many always cast spells!', - 'logdesc_always_cast_failed': 'This wand is already overloaded...', - 'bookdesc07_forged': - 'To gain true knowledge,\n one must slow down and not hurry.', - 'log_perk_fulltitle': '$0 - $1', - 'mat_monster_powder_test': 'Monstrous powder', - 'action_homing_accelerating': 'Accelerative Homing', - 'actiondesc_homing_accelerating': - 'A projectile homes towards enemies at an increasing pace', - 'action_teleport_closer': 'Homebringer Teleport Bolt', - 'actiondesc_teleport_closer': 'Brings the target hit closer to you', - 'action_fanning_shot': 'Fanning Shot', - 'actiondesc_fanning_shot': - 'Launches multiple projectiles in a fan-like pattern', - 'action_projectile_fan': 'Spell Fan', - 'actiondesc_projectile_fan': 'Pushes projectiles away from you', - 'action_spells_to_power': 'Spells to Power', - 'actiondesc_spells_to_power': - 'Converts any nearby projectiles cast by you into extra damage', - 'action_enemies_to_power': 'Essence to Power', - 'actiondesc_enemies_to_power': - "Increases a projectile's damage based on the number of creatures nearby", - 'action_explosion_light': 'Magical Explosion', - 'actiondesc_explosion_light': - "A large explosion that doesn't damage the ground", - 'action_phi': 'Phi', - 'actiondesc_phi': - 'Casts a copy of every projectile-type spell in the current wand', - 'action_burst_x': 'Myriad Spell', - 'actiondesc_burst_x': - 'Simultaneously casts as many spells as you have left uncast in your wand', - 'action_worm_launcher': 'Summon Worm', - 'actiondesc_worm_launcher': - 'Grabs a worm from a nether realm at high velocity for a short time', - 'action_spiraling_shot': 'Spiral Arc', - 'actiondesc_spiraling_shot': 'A projectile flies in a spiralling pattern', - 'action_orbit_shot': 'Orbiting Arc', - 'actiondesc_orbit_shot': 'A projectile orbits the point of its origin', - 'action_form_potion': 'Create potion', - 'actiondesc_form_potion': - 'A small vortex sucks material and forms a small potion filled with it', - 'action_omega_disc_bullet': 'Summon Omega Sawblade', - 'actiondesc_omega_disc_bullet': "That's a lot of sawblade", - 'action_temporary_wall': 'Summon Wall', - 'actiondesc_temporary_wall': 'Summons a shortlived obstacle', - 'action_temporary_platform': 'Summon Platform', - 'actiondesc_temporary_platform': 'Summons a shortlived bit of ground', - 'action_summon_missile': 'Summon Missile', - 'actiondesc_summon_missile': 'Summons a homing, explosive rocket', - 'animal_maggot_tiny': 'Limatoukka', - 'animal_boss_wizard': 'Mestarien mestari', - 'animal_coward': 'Raukka', - 'animal_thundermage_big': 'Suur-Ukko', - 'animal_thunderhound': 'Ukkoskoira', - 'animal_boss_robot': 'Kolmisilmän silmä', - 'animal_skygazer': 'Taivaankatse', - 'animal_gazer_big': 'Kolmisilmän kätyri', - 'animal_dark_alchemist': 'Pahan muisto', - 'action_laser_emitter': 'Plasma beam', - 'actiondesc_laser_emitter': 'An instantaneous, dangerous beam of light', - 'action_laser_emitter_thrower': 'Plasma show', - 'actiondesc_laser_emitter_thrower': - 'A projectile fires beams of light in random directions', - 'action_laser_cross': 'Plasma beam X', - 'actiondesc_laser_cross': 'Plasma beams fly in an X-shaped pattern', - 'perk_personal_laser': 'Personal Plasma Beam', - 'perkdesc_personal_laser': - 'You constantly fire a devastating plasma beam, but you fire spells much slower', - 'mat_wizardstone': 'Odd brickwork', - 'mat_drape': 'Drapes', - 'mat_darkstone': 'Dark rock', - 'perk_moon_radar': 'Moon Radar', - 'perkdesc_moon_radar': 'Points you towards the moon...?', - 'logdesc_greed_curse_away2': 'The curse has gone away.', - 'log_greed_curse_crystal2': 'The crystal breaks!', - 'logdesc_greed_curse_crystal2': 'The curse is active once again!', - 'menu_mods_settings_short': 'Mod settings', - 'NEWTEXTSINCE20201125': '', - 'animal_gate_monster_a': 'Veska', - 'animal_gate_monster_b': 'Molari', - 'animal_gate_monster_c': 'Mokke', - 'animal_gate_monster_d': 'Seula', - 'action_if_enemy': 'Requirement - Enemies', - 'actiondesc_if_enemy': - 'The next spell is skipped if there are less than 15 enemies nearby', - 'action_if_projectile': 'Requirement - Projectile Spells', - 'actiondesc_if_projectile': - 'The next spell is skipped if there are less than 20 projectiles nearby', - 'action_if_hp': 'Requirement - Low Health', - 'actiondesc_if_hp': - 'The next spell is skipped if you have more than 25% health left', - 'action_if_end': 'Requirement - Endpoint', - 'actiondesc_if_end': - 'Any Requirement spells before this will skip all spells between them and this spell', - 'action_if_half': 'Requirement - Every Other', - 'actiondesc_if_half': - 'The next spell is skipped every other time this spell is cast', - 'action_if_else': 'Requirement - Otherwise', - 'actiondesc_if_else': - 'If a Requirement spell before this succeeds, the next spell is skipped', - 'action_bloodlust': 'Bloodlust', - 'actiondesc_bloodlust': - 'A projectile gains a hefty damage boost, but is also able to hurt you', - 'action_colour_red': 'Red Glimmer', - 'actiondesc_colour_red': 'Gives a projectile a red sparkly trail', - 'action_colour_green': 'Green Glimmer', - 'actiondesc_colour_green': 'Gives a projectile a green sparkly trail', - 'action_colour_purple': 'Purple Glimmer', - 'actiondesc_colour_purple': 'Gives a projectile a purple sparkly trail', - 'action_colour_orange': 'Orange Glimmer', - 'actiondesc_colour_orange': 'Gives a projectile a orange sparkly trail', - 'action_colour_blue': 'Blue Glimmer', - 'actiondesc_colour_blue': 'Gives a projectile a blue sparkly trail', - 'action_colour_yellow': 'Yellow Glimmer', - 'actiondesc_colour_yellow': 'Gives a projectile a yellow sparkly trail', - 'action_colour_invis': 'Invisible Spell', - 'actiondesc_colour_invis': 'Turns a projectile invisible', - 'action_colour_rainbow': 'Rainbow Glimmer', - 'actiondesc_colour_rainbow': - 'Gives a projectile a randomly colored sparkly trail', - 'status_blindness': 'Blinded', - 'statusdesc_blindness': 'You can barely see a thing!', - 'perk_radar_item': 'Item Radar', - 'perkdesc_radar_item': 'You can sense nearby items.', - 'perk_radar_moon': 'Moon Radar', - 'perkdesc_radar_moon': 'You can sense lunar energy.', - 'action_explosion_remove': 'Remove Explosion', - 'actiondesc_explosion_remove': 'Makes a projectile no longer explode', - 'perk_extra_potion_capacity': 'Extra Potion Capacity', - 'perkdesc_extra_potion_capacity': 'Potions store 80% more liquid', - 'perk_vomit_rats': 'Spontaneous Generation', - 'perkdesc_vomit_rats': 'Vomit near you evolves into helpful rat minions', - 'mat_rat_powder': 'Ratty powder', - 'mat_poo_gas': 'Nauseating gas', - 'perk_revenge_rats': 'Revenge Rats', - 'perkdesc_revenge_rats': - "When you take damage, there's a chance that a helpful rat minion is summoned", - 'streamingevent_add_always_cast': 'Always Cast', - 'streamingeventdesc_add_always_cast': - 'Your currently-held wand gets a permanent always cast spell! (max. 4)', - 'action_expanding_orb': 'Expanding Sphere', - 'actiondesc_expanding_orb': - 'A slow projectile that increases its damage over time', - 'action_homing_projectile': 'Follow Spells', - 'actiondesc_homing_projectile': - 'Makes a projectile home towards other projectile spells', - 'mat_orb_powder': 'Guiding powder', - 'action_vacuum_powder': 'Powder Vacuum Field', - 'actiondesc_vacuum_powder': - 'Sucks powder-like materials nearby and releases them upon expiring', - 'action_vacuum_liquid': 'Liquid Vacuum Field', - 'actiondesc_vacuum_liquid': - 'Sucks liquid materials nearby and releases them upon expiring', - 'item_essence_stone': 'Essence Eater', - 'animal_physics_pata': 'Pata', - 'item_wand_experimental_1': 'Experimental Wand', - 'item_wand_experimental_2': 'Experimental Wand', - 'booktitle_fisher': "Alchemist's Note", - 'bookdesc_fisher': - "”Here I'm safe. I am safe.\nI left the others behind, and I have locked my research so that only those with real understanding can reach it.\nI should not worry. As long as I resist the temptation, I will be safe.\nI know my limits. Here I am far away from them.\n\nI should not worry.”", - 'biome_rainforest_dark': 'Lukki lair', - 'mat_darkness': 'Ominous liquid', - 'action_phasing_arc': 'Phasing Arc', - 'actiondesc_phasing_arc': - 'Makes a projectile fly much slower, but teleport short distances over its flight', - 'status_homing_shooter': 'Self-homing Spells', - 'statusdesc_homing_shooter': 'Your spells home towards yourself for a time.', - 'status_drunk_ui': 'Magic Drunkenness', - 'statusdesc_drunk_ui': - "Your spells are less accurate and you're more flammable for a time.", - 'status_movement_slower_ui': 'Slower Movement', - 'statusdesc_movement_slower_ui': 'You move slower for a time.', - 'status_confusion_ui': 'Confusion', - 'statusdesc_confusion_ui': 'Your movement is unsure for a time.', - 'damage_orb_blood': 'blood link', - 'boss_wizard_1': "You're confused!", - 'boss_wizard_2': "You're drunk!", - 'boss_wizard_3': 'Your health is halved!', - 'boss_wizard_4': 'You move more slowly!', - 'boss_wizard_5': "You're twitchy!", - 'boss_wizard_6': "You're weakened!", - 'boss_wizard_7': "You're withering!", - 'boss_wizard_8': 'Your projectiles home back to you!', - 'action_vacuum_entities': 'Vacuum Field', - 'actiondesc_vacuum_entities': - 'Sucks nearby projectiles and creatures into the middle of the field instantaneously', - 'action_bloodtentacle': 'Blood Tentacle', - 'actiondesc_bloodtentacle': - 'When this tentacle hits an enemy, said enemy will also launch a tentacle', - 'action_explosion_tiny': 'Concentrated Explosion', - 'actiondesc_explosion_tiny': - "Limits the radius of a projectile's explosion heavily", - 'action_liquid_to_explosion': 'Liquid Detonation', - 'actiondesc_liquid_to_explosion': - 'Converts nearby nonmagical liquids into explosive gunpowder', - 'action_laser_emitter_four': 'Plasma Beam Cross', - 'actiondesc_laser_emitter_four': - 'Four deadly plasma beams in a cross-shape. Look out, they can hurt you as well!', - 'action_laser_emitter_ray': 'Plasma Beam Thrower', - 'actiondesc_laser_emitter_ray': - 'A projectile fires plasma beams in all directions!', - 'action_bounce_laser_emitter': 'Plasma Beam Bounce', - 'actiondesc_bounce_laser_emitter': - 'A projectile launches a plasma beam upon bouncing', - 'action_homing_cursor': 'Aiming Arc', - 'actiondesc_homing_cursor': - "A projectile rotates towards the direction you're aiming", - 'booktitle_mestari': 'A Cunning Contraption', - 'bookdesc_mestari': - "”The secret lies in music!\n\nThe key to the heavens' lock is borne from music all over the world.\n\nAnd in a way, as above, so below...”", - 'biome_mestari_secret': 'Throne room', - 'streamingevent_fireworks': 'Fireworks!', - 'streamingeventdesc_fireworks': 'Entirely safe (for a given value of safe)', - 'streamingevent_holiday_mood': 'Holiday Mood', - 'streamingeventdesc_holiday_mood': 'Let it be snow', - 'streamingeventdesc_holiday_mood_2': 'Let it snow', - 'perk_contact_damage': 'Contact Damage', - 'perkdesc_contact_damage': - 'Enemies near you take damage; the damage is higher the lower your health gets.', - 'mat_metal_sand': 'Metal dust', - 'mat_metal_sand_molten': 'Molten metal', - 'item_evil_eye': 'Paha Silmä', - 'item_description_evil_eye': - 'This eye-shaped artefact projects a malevolent glare', - 'animal_lukki_dark': 'Kammolukki', - 'item_wand_kiekurakeppi': 'Kiekurakeppi', - 'item_wand_valtikka': 'Valtikka', - 'action_sigma': 'Sigma', - 'actiondesc_sigma': - 'Copies every static projectile -type spell in the wand when cast', - 'action_tau': 'Tau', - 'actiondesc_tau': 'Copies the two following spells in the wand when cast', - 'material_transformed': '$0 (Transformed)', - 'logdesc_reality_mutation': - 'You hear the word “$0” echoing and shifting in colours', - 'action_laser_emitter_cutter': 'Plasma Cutter', - 'actiondesc_laser_emitter_cutter': - 'A plasma beam specialized in cutting materials!', - 'action_laser_emitter_wider': 'Plasma Beam Enhancer', - 'actiondesc_laser_emitter_wider': "Makes plasma beam spell's beam wider", - 'item_chest_treasure_pacifist': "A Pacifist's Reward", - 'biomemodifierdesc_high_gravity': 'The air feels heavy...', - 'biomemodifierdesc_low_gravity': 'The air feels light...', - 'streamingevent_rain_blackhole': 'Gravity Storm', - 'streamingeventdesc_rain_blackhole': - 'Multiple black holes open in your vicinity!!', - 'animal_necromancer_super': 'Skoude', - 'input_xboxbutton_dpad_up': 'D-Pad up', - 'input_xboxbutton_dpad_down': 'D-Pad down', - 'input_xboxbutton_dpad_left': 'D-Pad left', - 'input_xboxbutton_dpad_right': 'D-Pad right', - 'input_xboxbutton_back': 'BACK', - 'input_xboxbutton_left_thumb': 'Left thumb', - 'input_xboxbutton_right_thumb': 'Right thumb', - 'input_xboxbutton_left_shoulder': 'Left shoulder', - 'input_xboxbutton_right_shoulder': 'Right shoulder', - 'input_xboxbutton_left_stick_moved': 'Left stick', - 'input_xboxbutton_right_stick_moved': 'Right stick', - 'input_xboxbutton_a': 'A', - 'input_xboxbutton_b': 'B', - 'input_xboxbutton_x': 'X', - 'input_xboxbutton_y': 'Y', - 'input_xboxbutton_4': 'Button #5', - 'input_xboxbutton_5': 'Button #6', - 'input_xboxbutton_6': 'Button #7', - 'input_xboxbutton_7': 'Button #8', - 'input_xboxbutton_8': 'Button #9', - 'input_xboxbutton_9': 'Button #10', - 'input_xboxbutton_10': 'Button #11', - 'input_xboxbutton_11': 'Button #12', - 'input_xboxbutton_12': 'Button #13', - 'input_xboxbutton_13': 'Button #14', - 'input_xboxbutton_14': 'Button #15', - 'input_xboxbutton_15': 'Button #16', - 'input_xboxbutton_left_stick_left': 'Left stick left', - 'input_xboxbutton_left_stick_right': 'Left stick right', - 'input_xboxbutton_left_stick_up': 'Left stick up', - 'input_xboxbutton_left_stick_down': 'Left stick down', - 'input_xboxbutton_right_stick_left': 'Right stick left', - 'input_xboxbutton_right_stick_right': 'Right stick right', - 'input_xboxbutton_right_stick_up': 'Right stick up', - 'input_xboxbutton_right_stick_down': 'Right stick down', - 'input_xboxbutton_analog_00': 'Left trigger', - 'input_xboxbutton_analog_01': 'Right trigger', - 'input_xboxbutton_analog_02': 'Analog button #3', - 'input_xboxbutton_analog_03': 'Analog button #4', - 'input_xboxbutton_analog_04': 'Analog button #5', - 'input_xboxbutton_analog_05': 'Analog button #6', - 'input_xboxbutton_analog_06': 'Analog button #7', - 'input_xboxbutton_analog_07': 'Analog button #8', - 'input_xboxbutton_analog_08': 'Analog button #9', - 'input_xboxbutton_analog_09': 'Analog button #10', - 'input_leftshift': 'left shift', - 'input_rightshift': 'right shift', - 'controls_aim_stick': 'aim', - 'controls_drop_item': '(UI) drop item', - 'controls_drink_potion': '(UI) drink potion', - 'controls_ui_confirm': '(UI) confirm', - 'controls_ui_drag': '(UI) drag', - 'controls_takescreenshot': 'take screenshot', - 'controls_ui_quick_drag': '(UI) auto drag', - 'perk_adventurer': 'Healthy Exploration', - 'perkdesc_adventurer': - 'Every time you visit a new area, you regain 60 health.', - 'log_adventurer': 'New area reached! You regain 60 health.', - 'action_damage_forever': 'Mana To Damage', - 'actiondesc_damage_forever': - 'If the wand has more than 50 mana, all mana over that is converted into additional damage', - 'action_homing_area': 'Projectile Area Teleport', - 'actiondesc_homing_area': - 'If a valid target appears somewhere in the proximity of a projectile, the projectile will teleport right on top of the target', - 'animal_snowcrystal': 'Haamukivi', - 'ethereal_damage': 'Ghostly touch', - 'animal_ethereal_being': 'Olematon', - 'action_bomb_detonator': 'Explosive Detonator', - 'actiondesc_bomb_detonator': - 'All nearby explosive spells cast by you instantly detonate', - 'logdesc_temple_upgrade_guardian': 'The Gods are enraged', - 'screenshot_saved': 'Saved a screenshot to $0', - 'item_wand_ruusu': 'Ruusu', - 'action_orbit_discs': 'Sawblade Orbit', - 'actiondesc_orbit_discs': 'Makes four sawblades rotate around a projectile', - 'action_orbit_fireballs': 'Fireball Orbit', - 'actiondesc_orbit_fireballs': - 'Makes four fireballs rotate around a projectile', - 'action_orbit_nukes': 'Nuke Orbit', - 'actiondesc_orbit_nukes': 'Makes four… nukes(?!) rotate around a projectile', - 'action_orbit_lasers': 'Plasma Beam Orbit', - 'actiondesc_orbit_lasers': - 'Makes four plasma beams rotate around a projectile', - 'action_orbit_larpa': 'Orbit Larpa', - 'actiondesc_orbit_larpa': - 'Makes four copies of a projectile rotate around it', - 'log_greed_curse_return': 'The curse has reactivated!', - 'action_slow_but_steady': 'Slow But Steady', - 'actiondesc_slow_but_steady': - 'The reload time of the wand is set to exactly 1.5 seconds', - 'item_wandstone': 'Sauvan Ydin', - 'itemdesc_wandstone': - 'This artefact can open the potential of wands to you even without perks...', - 'item_greed_die': 'Greed Die', - 'itemdesc_greed_die': 'The name may be more apt than one thinks.', - 'item_greed_die_good': 'Enjoy your riches!', - 'item_greed_die_bad': 'Gotcha!', - 'mat_gem_box2d_turquoise': 'Turquoise gemstone', - 'item_powder_stash': 'Material box', - 'itemdesc_powder_stash': 'A handy box for carrying powdery materials.', - 'item_powder_stash_2': 'Bag', - 'itemdesc_powder_stash_2': 'A handy bag for carrying powdery materials.', - 'item_powder_stash_3': 'Powder pouch', - 'itemdesc_powder_stash_3': 'A handy pouch for carrying powdery materials.', - 'item_powder_stash_4': 'Sack', - 'itemdesc_powder_stash_4': 'A handy sack for carrying powdery materials.', - 'item_powder_stash_with_material': '$0 box', - 'item_powder_stash_with_material_2': '$0 bag', - 'item_powder_stash_with_material_3': '$0 pouch', - 'item_powder_stash_with_material_4': '$0 sack', - 'perk_hungry_ghost': 'Hungry Ghost', - 'perkdesc_hungry_ghost': - "Summons a happy minion who'll eat enemy projectile every now and then.", - 'status_damage_plus_small': 'Damage Boost', - 'statusdesc_damage_plus_small': 'Your damage is boosted slightly for a time.', - 'item_runestone_metal': 'Runestone of Metal', - 'perk_death_ghost': 'Mournful Spirit', - 'perkdesc_death_ghost': - 'Dying creatures leave behind a spirit that deals damage in a small area.', - 'perk_risky_critical': 'Close Call', - 'perkdesc_risky_critical': - 'You gain additional chance to deal critical hits as long as there are enemies near you.', - 'action_curse': 'Venomous Curse', - 'actiondesc_curse': - 'Imbues a projectile with a curse that makes the target hit by the projectile to waste away', - 'damage_hitfx_curse': 'Venomous Curse', - 'action_exploding_ducks': 'Flock of Ducks', - 'actiondesc_exploding_ducks': 'Summons a chaotic flock of spicy ducks', - 'action_money_magic': 'Gold to Power', - 'actiondesc_money_magic': - 'Spends 5% of your current gold and adds damage to a projectile proportional to the amount spent', - 'inventory_mod_damage_ice': 'Dmg. Ice', - 'inventory_mod_damage_slice': 'Dmg. Slice', - 'inventory_mod_damage_healing': 'Dmg. Healing', - 'inventory_mod_damage_curse': 'Dmg. Curse', - 'inventory_mod_damage_drill': 'Dmg. Drill', - 'inventory_dmg_healing': 'Dmg. Healing', - 'inventory_dmg_curse': 'Dmg. Curse', - 'status_curse_wither_projectile': 'Weakening Curse - Projectiles', - 'statusdesc_curse_wither_projectile': - 'You take 25% extra damage from projectiles.', - 'status_curse_wither_explosion': 'Weakening Curse - Explosives', - 'statusdesc_curse_wither_explosion': - 'You take 25% extra damage from explosions.', - 'status_curse_wither_melee': 'Weakening Curse - Melee', - 'statusdesc_curse_wither_melee': - 'You take 25% extra damage from melee attacks.', - 'status_curse_wither_electricity': 'Weakening Curse - Electricity', - 'statusdesc_curse_wither_electricity': - 'You take 25% extra damage from electricity.', - 'action_curse_wither_projectile': 'Weakening Curse - Projectiles', - 'actiondesc_curse_wither_projectile': - 'Target hit by a projectile takes 25% extra projectile damage for a time', - 'action_curse_wither_explosion': 'Weakening Curse - Explosives', - 'actiondesc_curse_wither_explosion': - 'Target hit by a projectile takes 25% extra explosion damage for a time', - 'action_curse_wither_melee': 'Weakening Curse - Melee', - 'actiondesc_curse_wither_melee': - 'Target hit by a projectile takes 25% extra melee damage for a time', - 'action_curse_wither_electricity': 'Weakening Curse - Electricity', - 'actiondesc_curse_wither_electricity': - 'Target hit by a projectile takes 25% extra electricity damage for a time', - 'action_worm_shot': 'Worm Launcher', - 'actiondesc_worm_shot': 'Summons a giant worm to cause havoc for a moment!', - 'action_black_hole_death_trigger': 'Black Hole with Death Trigger', - 'actiondesc_black_hole_death_trigger': - 'A slow orb of void that eats through all obstacles and casts another spell as it expires', - 'perk_food_clock': 'Eat Your Vegetables', - 'perk_food_clock_2': 'Food Clock', - 'perkdesc_food_clock': - 'You inflict more damage the more satiated you are, but you start losing health if your stomach is empty.', - 'damage_hunger': 'Hunger', - 'mat_porridge': 'Hearty Porridge', - 'log_greed_curse_away_short': 'The curse dissipates for now...', - 'logdesc_greed_curse_away_short': '...but it will be back!', - 'animal_parallel_alchemist': 'Alkemistin Varjo', - 'animal_parallel_tentacles': 'Kolmisilmän Kätyri', - 'animal_hpcrystal': 'Elvytyskristalli', - 'status_rainbow_farts': 'Rainbow farts', - 'statusdesc_rainbow_farts': - 'Open your eyes, I see\nYour eyes are open\nWear no disguise for me\nCome into the open\n', - 'mat_rainbow': 'Rainbow', - 'mat_rainbow_gas': 'Unicorn farts', - 'action_rainbow_trail': 'Rainbow trail', - 'actiondesc_rainbow_trail': 'Gives a projectile a trail of rainbow', - 'item_gold_orb': 'Shiny orb', - 'itemdesc_gold_orb': - 'It hums slightly. What happens if you kick it, you wonder...', - 'item_stonestone': 'Tannerkivi', - 'itemdesc_stonestone': 'It looks like it could stand the test of aeons.', - 'log_dark_moon_altar_extra': 'Heretic!', - 'logdesc_dark_moon_altar_extra': 'How dare you do this!', - 'log_dark_moon_altar': '”From my blood...”', - 'logdesc_dark_moon_altar': - 'from my blood... from my blood... from my blood... from my blood...', - 'mat_steelrusted': 'rusted steel', - 'stat_streaks': 'Streaks:', - 'animal_necrobot': 'Tuonelankone', - 'animal_necrobot_super': 'Marraskone', - 'animal_minipit': 'Pienkätyri', - 'progress_killed_by': 'Killed by: $0', - 'animal_scavenger_glue': 'Liimahiisi', - 'mat_glue': 'Glue', - 'item_sunseed': 'Auringonsiemen', - 'itemdesc_sunseed': 'It glows, full of promise.', - 'animal_boss_ghost': 'Unohdettu', - 'animal_boss_ghost_polyp': 'Häive', - 'action_remove_bounce': 'Remove Bounce', - 'actiondesc_remove_bounce': 'A normally bouncy projectile stops doing so', - 'biome_ghost_secret': 'Forgotten cave', - 'hint_endingmcguffin_enter_newgameplus': 'Press $0 to enter New Game$1', - 'biome_winter_caves': 'Snowy Chasm', - 'item_mcguffin_33': 'Amulet of Yendor', - 'itemdesc_mcguffin_33': - 'It is said to possess powers which mere mortals can scarcely comprehend, let alone utilize', - 'action_glue_shot': 'Glue Ball', - 'actiondesc_glue_shot': 'A projectile that explodes into a sticky mess', - 'action_petrify': 'Petrify', - 'actiondesc_petrify_a': 'Turns a wounded enemy into stone', - 'actiondesc_petrify_b': 'A critical hit turns an enemy into stone', - 'actiondesc_petrify_c': 'A critical hit turns a wounded enemy into stone', - 'perk_gamble': 'Gamble (One-off)', - 'perkdesc_gamble': 'You gain two random perks.', - 'item_wand_riimusauva': 'Riimusauva', - 'item_wand_arpaluu': 'Arpaluu', - 'item_wand_varpuluuta': 'Varpuluuta', - 'animal_surge': 'Sähikäinen', - 'animal_spiderbot': 'Rautalukki', - 'animal_piranha': 'Kyrmyniska', - 'animal_fish_giga': 'Syväolento', - 'action_worm_shot_big': 'Giga Worm Launcher', - 'actiondesc_worm_shot_big': - 'Summons a massive worm to cause havoc for a moment!', - 'action_fan': 'Projectile Fan', - 'actiondesc_fan': - 'Pushes incoming projectiles away in a narrow cone formation', - 'perk_fungal_disease': 'Fungal Disease', - 'perkdesc_fungal_disease': 'When near danger, you sprout fungal growths.', - 'perk_lukki_minion': 'Lukki Minion', - 'perkdesc_lukki_minion': 'Summons a lukki minion to your help.', - 'perk_angry_levitation': 'Rage-fueled Levitation', - 'perkdesc_angry_levitation': - 'Killing an enemy makes you replenish some of your levitation power.', - 'perk_destructive_spells': 'Destructive Magic', - 'perkdesc_destructive_spells': 'Your spells destroy ground more efficiently.', - 'perk_mold': 'Fungal Colony', - 'perkdesc_mold': 'Slime near you spontaneously turns into fungal creatures.', - 'perk_cordyceps': 'Cordyceps', - 'perkdesc_cordyceps': - 'Fungal creatures spawn from the corpses of enemies killed by you.', - 'action_pollen': 'Pollen', - 'actiondesc_pollen': - 'A small, floating projectile that homes towards nearby creatures', - 'action_homing_short': 'Short-range Homing', - 'actiondesc_homing_short': - 'A projectile flies towards targets when near them', - 'animal_fungus_giga': 'Huhtasieni', - 'animal_fungus_nest': 'Rihmasto', - 'log_new_step': 'A transformation happens!', - 'logdesc_new_step': 'Something has changed...', - 'item_seed_b': 'Auringonmuna', - 'itemdesc_seed_b': 'It glows with high intensity now...', - 'item_seed_c': 'Aurinkokivi', - 'itemdesc_seed_c': 'The essence of the Sun, crystallized.', - 'item_seed_d': 'Tähdenpoikanen', - 'itemdesc_seed_d': "It's still not fully grown but radiates heat.", - 'item_seed_e': 'Uusi Aurinko', - 'itemdesc_seed_e': 'It is done', - 'material_mold': 'Mold', - 'material_cloth': 'Cloth', - 'biome_robobase': 'Power plant', - 'biome_fun': 'Overgrown cavern', - 'item_book_music_b': 'Research Notes', - 'itemdesc_book_music_b': - '“One in the pond\nOne in the tree\nOne on the ledge\nOne under the sun”', - 'item_book_music': "Alchemist's Notebook", - 'itemdesc_book_music': - '”The one below listens to my songs...\n \nG D# G E A\n \nE C B G# F”', - 'animal_sentry': 'Tarkkailija', - 'animal_neutralizer': 'Pysäyttäjä', - 'animal_hidden': 'Vakoilija', - 'animal_soldier': 'Teloittaja', - 'item_book_s_a': 'Notes on Grand Alchemy', - 'itemdesc_book_s_a': - '”Among the great Alchemical endeavours there are some that,\nwhile not equal to the Great Work, nonetheless are revered greatly\nfor the deific potence they instill to whomsoever succeeds\nin harnessing their Power.\n\nThe One I am to discuss calls for a Seed of great promise, hidden deep within the Soil of this Earth...”', - 'itemdesc_book_s_b': - '”...Bring the slumbering Seed to life by letting it soak in the rays of the Sun, on the pinnacle of past civilizations...”', - 'itemdesc_book_s_c': - '”...The Alchemical process requires great Fire and Heat; for this purpose,\nlay the Stone in Fiery Earth and bring forth its transformation with great magical Heat of Destruction...”', - 'itemdesc_book_s_d': - '”...Once finished, It will sustain life; to this end, its Creation asks for a substantial amount\nof Life Force. Let the Egg engulf One Hundred of your Foes and drink their Blood...”', - 'itemdesc_book_s_e': - '”...As a final step, imbue the Youngling with the crystallized Essences of\nthe Four Elements. But beware, for the Youngling is susceptible to corruptive influence...”', - 'item_book_music_c': 'Book of the Key', - 'itemdesc_book_music_c': - '”Once the Key has listened to you, bring it home...\nOne home in the sky, beyond the invisible steps...\nOne home in the underworld, below seas of magma...”', - 'item_book_robot': 'Musings of an Adventurer', - 'itemdesc_book_robot': - "”This machinery is unlike any I've seen before. Did the Hiisi create it? Or was it always here?”", - 'item_d12': '12-sided Die', - 'itemdesc_d12': 'More sides, more potential rewards!', - 'action_knife_ring': 'Ring of Knives', - 'actiondesc_knife_ring': 'A shrinking ring of 8 knives is summoned', - 'action_iceball': 'Iceball', - 'actiondesc_iceball': 'A magical ball of frozen fire', - 'item_d12_greed': '12-sided Greed Die', - 'itemdesc_d12_greed': 'Better not!', - 'item_book_moon': 'Book of Celestial Bodies', - 'itemdesc_book_moon': - '”As with everything else, every celestial body also has its counterpart.\nFor every golden star is a dark enigma, and for every silvery moon there is a hollow shadow.”', - 'perk_minion_powerup': 'Powerful Minions', - 'perkdesc_minion_powerup': - 'Any minions spawned to your aid have increased damage output and health.', - 'item_seed_f': 'Pimeä Aurinko', - 'itemdesc_seed_f': 'Something went wrong...!', - 'logdesc_new_step_b': 'Everything is not right here...', - 'perk_map': 'Spatial Awareness', - 'perkdesc_map': - 'If you stop for a moment, you can sense your location relative to the Mountain.', - 'biome_underwater': 'Sunken cavern', - 'log_collision_1': 'It is gone', - 'logdesc_collision_1': 'The old are devoured for the new to take their place', - 'log_collision_2': 'As Above, So Below...', - 'logdesc_collision_2': 'The new heart of the world is at balance', - 'log_collision_3': 'As Above, So Below, but...', - 'logdesc_collision_3': - 'The new heart of the world grows with corruption at its center', - 'item_goldnugget_200000': 'Golden Idol (200000)', - 'item_bloodmoney_200000': 'Bloody golden Idol (200000)', - 'NEWTEXTSINCE20210216': '', - 'action_tntbox': 'Summon Explosive Box', - 'actiondesc_tntbox': 'Summons a box of explosive matter', - 'action_tntbox_big': 'Summon Large Explosive Box', - 'actiondesc_tntbox_big': 'Summons a large box of explosive matter', - 'streamingevent_all_access_teleport': 'Free-for-all Portals', - 'streamingeventdesc_all_access_teleport': - 'Creatures near you gain the ability to enter the Holy Mountain portals.', - 'item_book_hint': 'Book of Guidance', - 'item_gold_orb_greed': 'Cruel Orb', - 'itemdesc_gold_orb_greed': 'It seems to trickle with blood...', - 'status_weaken_combined': 'Weakened', - 'statusdesc_weaken_combined': - 'Your resistances and protective perks are disabled temporarily.', - 'damage_sun': 'Valo', - 'item_musicstone': 'Kuulokivi', - 'itemdesc_musicstone': - 'This artefact is covered in note-shaped engravings and is pulsing at a steady pace.\nIs that the sound of distant music?', - 'damage_darksun': 'Pimeys', - 'animal_fungus_tiny': 'Myrkkynääpikkä', - 'perkdesc_mega_beam_stone': - 'You gain an artefact that allows you to call the celestial rage.', - 'animal_fungus_tiny_perk': 'Sappitatti', - 'reward_sun': 'Benign sunshine!', - 'action_sun': 'Summon A Sun', - 'actiondesc_sun': - 'Creates an immensely powerful entity; Can be cast only once', - 'action_darksun': 'Summon A Dark Sun', - 'actiondesc_darksun': - 'Creates an immensely powerful entity; Can be cast only once', - 'achievement_excavationsite': 'Reached Coal Pits', - 'achievementdesc_excavationsite': 'Reached Coal Pits', - 'achievement_snowcave': 'Reached Snowy Depths', - 'achievementdesc_snowcave': 'Reached Snowy Depths', - 'achievement_snowcastle': 'Reached Hiisi Base', - 'achievementdesc_snowcastle': 'Reached Hiisi Base', - 'achievement_rainforest': 'Reached Underground Jungle', - 'achievementdesc_rainforest': 'Reached Underground Jungle', - 'achievement_vault': 'Reached The Vault', - 'achievementdesc_vault': 'Reached The Vault', - 'achievement_crypt': 'Reached Temple of the Art', - 'achievementdesc_crypt': 'Reached Temple of the Art', - 'achievement_victory': 'Victory', - 'achievementdesc_victory': 'Victory', - 'achievement_orbs': 'Gathered All The Knowledge', - 'achievementdesc_orbs': 'Gathered All The Knowledge', - 'achievement_progress_enemies': '100% Enemy Progress', - 'achievementdesc_progress_enemies': '100% Enemy Progress', - 'achievement_progress_spells': '100% Spell Progress', - 'achievementdesc_progress_spells': '100% Spell Progress', - 'achievement_progress_perks': '100% Perk Progress', - 'achievementdesc_progress_perks': '100% Perk Progress', - 'achievement_impressed': 'The Gods Are Impressed', - 'achievementdesc_impressed': 'The Gods Are Impressed', - 'achievement_afraid': 'The Gods Are Afraid', - 'achievementdesc_afraid': 'The Gods Are Afraid', - 'achievement_enraged': 'The Gods Are Enraged', - 'achievementdesc_enraged': 'The Gods Are Enraged', - 'action_nuke_giga': 'Giga Nuke', - 'actiondesc_nuke_giga': 'What do you expect?', - 'action_bomb_holy_giga': 'Giga Holy Bomb', - 'actiondesc_bomb_holy_giga': 'Bigger and therefore holier', - 'animal_friend': 'Toveri', - 'animal_wizard_homing': 'Kohdennusmestari', - 'animal_icemage': 'Pakkasukko', - 'building_altar_null': 'Nullifying Altar', - 'building_altar_always': 'Permanence Altar', - 'biomemodifierdesc_cool': 'The air feels extremely cool...', - 'animal_cook': 'Kokkihiisi', - 'log_balance_1': 'The world is at a balance', - 'log_balance_2': 'The world is corrupted', - 'log_balance_3': 'The world is overburdened by light', - 'log_balance_4': 'The world is in chaos!', - 'perk_gas_blood': 'Gas Blood', - 'perkdesc_gas_blood': 'You bleed flammable gas instead of blood.', - 'mat_healsand': 'Lively powder', - 'mat_steel_strong': 'Hardened steel', - 'damage_supernova': 'Supernova', - 'biomemodifierdesc_sunlight': - 'Everything is glowing in a mysterious light...!', - 'biomemodifierdesc_sundark': "There's an ominous atmosphere here...!", - 'biomemodifierdesc_fog_of_war_clear_at_player': 'It feels gloomy in here', - 'ui_million_shorthand': '$0M', - 'ui_thousand_shorthand': '$0K', - 'NEWTEXTSINCE20210316': '', - 'menu_newgame_gamemodewithslotstooltip': - 'Start a new game or continue an existing save.', - 'menu_newgame_saveandnewgame': 'Save current world and start a new game', - 'menu_main_continue_info': 'Continue: $0', - 'menu_saveslotselect_deleteslotfirst': - 'Delete the world in this slot\nto be able to start a new game.', - 'menu_saveslotselect_continue': 'Continue this world.', - 'menu_saveslotselect_continuecurrent': 'Continue current world.', - 'menu_saveslotselect_modnotfound_withname': ' [Mod not found - $0]', - 'menu_saveslotselect_modnotfound': ' [Mod not found]', - 'menuoptions_steamcloud_warning_enabled': 'Steam Cloud save size warning: $0', - 'menuoptions_steamcloud_warning_limit': 'Steam Cloud save size limit warning', - 'menuoptions_steamcloud_warning_tooltip': - 'The game will warn you if the size of save data exceeds the given amount.', - 'menu_steamcloud_size_warning': 'Warning: Save size is over $0 MB.', - 'menu_steamcloud_size_warning_desc': - 'Steam Cloud synchronization might take a long time.\nClick here to turn off Cloud sync.', - 'menu_steamcloud_filecount_warning': 'Warning: Save data exceeds 10000 files', - 'menu_steamcloud_filecount_warning_desc': - "Steam Cloud doesn't support that many files.\nThings probably aren't gonna work.\nClick here to turn off Cloud sync.", - 'menu_steamcloud_warning_turnoff_hint': - '(You can switch this warning off via Options.)', - 'biomemodifierdesc_invisibility': - 'You suddenly have trouble focusing your eyes...', - 'biomemodifierdesc_wormy': 'You hear creepy crawling everywhere!', - 'item_tntbox': 'Explosive box', - 'item_tntbox_big': 'Large explosive box', - 'item_book_essences': 'Tome of Essences', - 'itemdesc_book_essences': - '”The four Essences represent the four Elements that form this visible World...\nImbued with their Terrible Power, one may do great deeds,\nbut one should be Afraid of their destructive Might. To this end,\nwe have Devised a way to remove these Dangerous Forces; seek it in the West and East.\n\nA Legend also tells that all the Elements originated from the Egg of Sky and return to It one day...”', - 'action_black_hole_giga': 'Omega Black Hole', - 'actiondesc_black_hole_giga': 'Even light dies eventually...', - 'animal_firemage_big': 'Suurstendari', - 'itemdesc_book_hint': - '”One of my brethren ran away in order to escape our predicament ...\nThey felt our understanding of this world was to be forbidden.\nThey hid something here, in this room, but...\n...I lack the ability to truly see what is here!”', - 'NEWTEXTSINCE20210407': '', - 'input_mousebutton4': 'Mouse 4', - 'input_mousebutton5': 'Mouse 5', - 'action_blood_to_power': 'Blood to Power', - 'actiondesc_blood_to_power': - 'A projectile gains additional damage at the cost of 20% of your health', - 'action_meat_to_power': 'Meat to Power', - 'actiondesc_meat_to_power': - 'Gives a projectile the ability to suck up nearby blood and meat, increasing its damage', - 'action_toxic_to_power': 'Toxic Power', - 'actiondesc_toxic_to_power': - 'Gives a projectile the ability to suck up nearby toxic sludge and poison, increasing its damage', - 'item_book_diamond': 'Book of the Jewel', - 'itemdesc_book_diamond': - "”In my dream I saw a great Diamond...\nIt invited me within, offering me Grand Treasures.\nThis it said to me:\n'If you wish to follow the Path I show you here, you must bring me one of these Two:\na terrible Curse of Avarice, or the most Singular being in this realm.'\nI do not fully understand these words, but I still see the Diamond in my mind's eye...”", - 'mat_meat_warm': 'Lightly-cooked meat', - 'mat_meat_hot': 'Cooked meat', - 'mat_meat_done': 'Fully-cooked meat', - 'mat_meat_burned': 'Burned meat', - 'mat_peasoup_concentrate': 'Pea soup concentrate', - 'mat_mammi': 'Mämmi', - 'mat_juhannussima': 'Juhannussima', - 'item_hernekeittopurkki': 'Hernekeittopurkki', - 'item_kaljapullo': 'Kaljapullo', - 'perk_iron_stomach': 'Iron Stomach', - 'perkdesc_iron_stomach': - 'You no longer suffer from negative effects of eating.', + "current_language": "English", + "booktitle00": "Emerald Tablet - volume I", + "bookdesc00": "Tis true without lying, certain and most true.\nThat which is below is like that which is above\nand that which is above is like that which is below\nto do the miracles of one only thing.\nAnd as all things have been and arose from one by the mediation of one: \nso all things have their birth from this one thing by adaptation.", + "booktitle02": "Emerald Tablet - volume II", + "bookdesc02": "Thence is born a spirit white as snow, \nand another spirit red as blood,\nwhich two spirits are contained in a third hidden thing.", + "booktitle03": "Emerald Tablet - volume III", + "bookdesc03": "Heed my warning or death and decay will follow.", + "booktitle04": "Emerald Tablet - volume IV", + "bookdesc04": "The definition of death is the disjunction of the composite, \nbut there is no disjunction of that which is simple, for it is one.\nDeath consists in the separation of the soul from the body,\nbecause anything formed out of two, three,\nor four components must disintegrate, and this is death.\nUnderstand, further, that no complex substance which lacks fire eats, \ndrinks, or sleeps, because in all things which have a spirit \nfire is that which eats.\n", + "booktitle05": "Emerald Tablet - volume V", + "bookdesc05": "And the Lord spake, saying,\n'First shalt hou take out the Holy Pin.\nThen, shalt thou count to three. No more. No less.\nThree shalt be the number thou shalt count, \nand the number of the counting shall be three. \nFour shalt thou not count, neither count thou two,\nexcepting that thou then proceed to three.\nFive is right out. Once at the number three, \nbeing the third number be reached, then,\nlobbest thou thy Holy Hand Grenade of Antioch towards \nthy foe, who, being naughty in My sight, shall snuff it.'", + "booktitle06": "Emerald Tablet - volume VI", + "bookdesc06": "Some Alchemists fancy that the work from beginning \nto end is a mere idle entertainment; but those who \nmake it so will reap what they have sown - nothing. \nWe know that next to the Divine Blessing,\nand the discovery of the proper foundation,\nnothing is so important as unwearied industry\nand perseverance in this First Operation.\nIt is no wonder, then, that so many students\nof this Art are reduced to beggary;\nthey are afraid of work, and look upon our Art as \nmere sport for their leisure moments. For no labour \nis more tedious than that which the preparatory part \nof our enterprise demands. \n", + "booktitle07": "Emerald Tablet - volume VII", + "bookdesc07": "Among those who devote themselves to the transmutation of metals,\nhowever, there can be no such thing as mediocrity of attainment.\nA person who studies this Art, must have either everything or nothing.\nAn Alchemist who knows only half their craft, reaps nothing but disappointment \nand waste of time and money; moreover, they lay themselves open to the mockery \nof those who despise our Art. Those, indeed, who succeed in reaching the goal \nof the Magistery, have not only infinite riches, but the means of continued \nlife and health. Hence it is the most popular of all pursuits. ", + "booktitle08": "Emerald Tablet - volume VIII", + "bookdesc08": "Woe unto all ye fools! \nHow ignorant are ye of this Art, for which ye would die if ye knew it! \nI swear to you that if kings were familiar with it, \nnone of us would ever attain this thing. \nO how this nature changeth body into spirit! \nO how admirable is Nature, how she presides over all, and overcomes all.\n", + "booktitle09": "Emerald Tablet - volume IX", + "bookdesc09": "In this way, then, Nature generates by means of \nthis sulphur the different kinds of metals in the \nveins of the earth, according to the diversity of \ndegrees and alterations.\n", + "booktitle10": "Emerald Tablet - volume X", + "bookdesc10": "Take, he tells us, the stone of gold, combine with humour which is \npermanent water, set in its vessel, over a gentle fire until liquefaction \ntakes place. Then leave it until the water dries, and the sand and \nwater are combined, one with another; then let the fire be more intense\nthan before, until it again becomes dry, and is made earth. When this is done, \nunderstand that here is the beginning of the arcanum; but do this many times,\nuntil two-thirds of the water perish, and colours manifest unto you.", + "booktitle_corpse": "Tabula Smaragdina", + "bookdesc_corpse": "If all the mountains were of silver and gold, what would \nthey profit a man who lives in constant fear of death? \nHence there cannot be in the whole world anything better than our Medicine,\nwhich has power to heal all the diseases of the flesh.", + "booktitle_tree": "Secretorum Hermetis", + "bookdesc_tree": "The sacrifice of oneself to the pursuit of \nknowledge is the highest tribute to the gods.", + "menu_paused": "PAUSED", + "menu_continue": "Continue", + "menu_options": "Options", + "menu_stats": "Stats", + "menu_progress": "Progress", + "menu_releasenotes": "Release Notes", + "menu_credits": "Credits", + "menu_newgame": "New Game", + "menu_dailyrun": "Daily Run", + "menu_saveandquit": "Save & Quit", + "menu_return": "Return", + "menu_applyandreturn": "Apply & Return", + "menu_cancel": "Cancel", + "menu_yes": "Yes", + "menu_no": "No", + "menu_ok": "Ok", + "menu_high": "High", + "menu_medium": "Medium", + "menu_low": "Low", + "option_on": "On", + "option_off": "Off", + "option_adaptive": "Adaptive", + "menu_newgame_areyousure": "Are you sure you want to start a new game? All progress from current run will be lost.", + "menuoptions_windowmode": "Window mode: $0", + "windowmode_windowed": "Windowed", + "windowmode_fullscreen": "Fullscreen (windowed)", + "windowmode_fullscreen_real": "Fullscreen (real)", + "menuoptions_resolution": "Resolution: $0", + "menuoptions_resolution_illegible": " - WARNING: Might be illegible!", + "menuoptions_matchresolution": "Use current display's resolution", + "menuoptions_applydisplay": "Apply display settings", + "menuoptions_renderingquality": "Rendering quality", + "menuoptions_lowqualityrendering": "Low quality rendering: $0", + "menuoptions_vsync": "Vsync: $0", + "menuoptions_display_areyousure": "Do you want to keep the new display settings? Old settings will be restored in $0 seconds.", + "menuoptions_resetsave": "Reset all progress", + "menuoptions_resetsave_areyousure": "Are you sure you want to reset all progress? This cannot be undone!", + "menugameover_newgame": "New Game", + "menugameover_savereplay": "Save death replay", + "menugameover_quit": "Quit", + "menugameover_gamecompleted": "COMPLETED THE GAME!", + "menugameover_nextbutton": "You are dead - click here for stats", + "menugameover_records": "RECORDS", + "menuoptions_pixelart_aa": "Pixel art anti-aliasing: $0", + "menuoptions_lowres": "Low resolution rendering: $0", + "menuoptions_lowres_tooltip_exp": "EXPERIMENTAL. Might cause minor rendering glitches.", + "menuoptions_lowres_tooltip": "Improves rendering performance, but might cause minor rendering glitches.", + "menuoptions_brightness": "Brightness", + "menuoptions_contrast": "Contrast", + "menuoptions_gamma": "Gamma", + "menuoptions_reset_keyboard": "Right click to reset to default.", + "menuoptions_reset_gamepad": "Press B to reset to default.", + "menuoptions_musicvolume": "Music volume", + "menuoptions_soundsvolume": "Sound effect volume", + "menuoptions_configurecontrols": "Configure controls", + "menuoptions_configurecontrols_reset_all": "Reset all to default", + "menuoptions_configurecontrols_rebind_keyboard": "Press the key or button for $0", + "menuoptions_configurecontrols_rebind_gamepad": "Press the button for $0", + "menuoptions_controls": "Gamepad: $0", + "menuoptions_mousesensitivity": "Mouse sensitivity", + "menuoptions_controls_keyboard": "Mouse + Keyboard", + "menuoptions_controls_autodetectgamepad": "Auto-detect", + "menuoptions_gamepad_rumble": "Gamepad rumble intensity", + "menuoptions_ui_inventory_icons_always_clickable": "Click on icon switches item: $0", + "menuoptions_application_rendered_cursor": "Game renders the cursor: $0", + "menuoptions_screenshake_intensity": "Screen shake intensity", + "menuoptions_damagenumbers": "Damage numbers: $0", + "menuoptions_replayrecorder": "Replay recorder: $0", + "menuoptions_checkforupdates": "Check for updates: $0", + "menuoptions_language": "Language: English", + "menuupdatenotification_title": "NEW UPDATE AVAILABLE", + "menuupdatenotification_description_generic": "A new build of Noita is now available!\nClick here for release notes", + "menureleasenotes_notavailable": "No release notes available", + "menureleasenotes_eawarning": "Welcome to Noita!\nNoita is an early access game.\nIt contains bugs and may even sometimes crash!\nWe're working hard to fix things and add new features.", + "controls_up": "up", + "controls_down": "down", + "controls_left": "left", + "controls_right": "right", + "controls_sprayflask": "spray from potion", + "controls_throw": "throw", + "controls_kick": "kick", + "controls_inventory": "open/close inventory", + "controls_itemnext": "next item", + "controls_itemprev": "previous item", + "controls_itemslot1": "select item in slot 1", + "controls_itemslot2": "select item in slot 2", + "controls_itemslot3": "select item in slot 3", + "controls_itemslot4": "select item in slot 4", + "controls_itemslot5": "select item in slot 5", + "controls_itemslot6": "select item in slot 6", + "controls_itemslot7": "select item in slot 7", + "controls_itemslot8": "select item in slot 8", + "controls_itemslot9": "select item in slot 9", + "controls_itemslot10": "select item in slot 10", + "controls_escape": "pause/close", + "hud_air_unit": "o2", + "hud_air": "Air: $0 / $1", + "hud_health": "Health: $0 / $1", + "hud_jetpack": "Levitation energy: $0 / $1", + "hud_wand_mana": "Wand mana: $0 / $1", + "hud_wand_reload": "Wand recharge: $0 s", + "hud_gold": "Gold: $0", + "hud_orbs": "Orbs collected: $0", + "hud_title_wands": "WANDS", + "hud_title_throwables": "ITEMS", + "hud_title_actionstorage": "SPELLS", + "menu_newwand_title": "NEW WAND", + "menu_newwand_pressagain_pick": "Press $0 again to pick the wand", + "menu_newwand_pressagain_cancel": "Press $0 to cancel", + "menu_newwand_whichwand_gamepad": "WHICH WAND DO YOU WANT TO DROP?", + "menu_newwand_whichwand_keyboard": "WHICH WAND DO YOU WANT TO DROP? (Click it!)", + "menu_newwand_emptyslot": "$0 - empty slot", + "menu_newbook_pressagain_pick": "Press $0 again to pick the book", + "menu_newbook_pressagain_close": "Press $0 to close", + "item_empty": "Empty", + "item_wand": "Wand", + "item_potion": "Potion", + "item_cocktail": "Cocktail", + "item_orb": "Orb", + "item_description_potion": "Equip and throw", + "item_description_egg": "Equip and throw", + "item_potion_with_material": "$0 potion", + "item_potion_fullness": " ($0% full)", + "item_potion_empty": "Empty", + "item_egg": "Egg", + "item_chest_treasure": "Treasure chest", + "item_goldnugget": "Gold nugget", + "item_heart": "Extra max HP", + "item_heart_better": "Large extra max HP", + "item_heart_fullhp": "Full health regeneration", + "item_unidentified": "Unidentified item", + "itempickup_notenoughgold": "Not enough gold to purchase '$0'", + "itempickup_purchase": "Press $0 to purchase '$1'", + "itempickup_pick": "Press $0 to pick '$1'", + "itempickup_read": "Press $0 to read '$1'", + "itempickup_purchase_swap": "Press $0 to purchase '$1' and swap an item with it", + "itempickup_pick_swap": "Press $0 to swap an item with '$1'", + "itempickup_cannotpick": "Cannot pick '$0'. Please get rid of an item to make space for it", + "itempickup_cannotpick_closeinventory": "Close the inventory first to pick '$0'", + "hint_editwands": "Press $0 to tinker with wands", + "hint_endingmcguffin_use": "Press $0 to complete the Work", + "log_pickedup_perk": "$0 ", + "log_pickedup": "Picked up $0", + "log_equipped": "Equipped $0", + "log_entered": "Entered $0", + "log_damage": "Damage: $0", + "log_death": "Death: $0", + "log_teleported": "Teleported!", + "log_teleported_something": "Something entered a teleport nearby", + "log_gamefx_savinggrace": "Saving Grace saved you!", + "log_gamefx_respawn": "You get one more chance!", + "logdesc_gamefx_respawn": "Extra life saved you", + "log_recharging": "RECHARGING..", + "log_blindness": "Temporarily blinded!", + "log_polymorph": "Polymorphed!", + "log_block_attack": "BLOCK", + "log_coop_resurrected": "RESURRECTED", + "log_coop_resurrected_player": "Resurrected player $0!", + "log_coop_partner_is_dead": "Partner is dead!", + "log_coop_started": "CO-OP!", + "log_chest": "Opened a treasure chest!", + "logdesc_chest_gold": "You got $0 gold!", + "log_heart": "Picked up Extra Max Health", + "logdesc_heart": "Increased maximum health to $0", + "logdesc_heart_blocked": "Increased maximum health to $0 ..but some sort of curse blocked the increase of maximum health!", + "log_heart_better": "Picked up Extra Max Health", + "logdesc_heart_better": "Increased maximum health to $0", + "log_heart_fullhp": "Picked up Full Health Regeneration", + "log_discovered": "You have discovered $0", + "inventory_sort": "Sort", + "inventory_shuffle": "Shuffle", + "inventory_shuffle_tooltip": "Wands that shuffle cast their spells in random order.", + "inventory_actionspercast": "Spells/Cast", + "inventory_actionspercast_tooltip": "The number of spells this wand casts when used.", + "inventory_castdelay": "Cast delay", + "inventory_castdelay_tooltip": "The time between casts.", + "inventory_rechargetime": "Rechrg. Time", + "inventory_rechargetime_tooltip": "The time it takes for this wand to recharge when all spells inside it have been cast.", + "inventory_manamax": "Mana max", + "inventory_manamax_tooltip": "Maximum amount of mana this wand can store.", + "inventory_manachargespeed": "Mana chg. Spd", + "inventory_manachargespeed_tooltip": "This wand's mana regeneration speed.", + "inventory_capacity": "Capacity", + "inventory_capacity_tooltip": "The number of spells that can be inserted into this wand.", + "inventory_spread": "Spread", + "inventory_spread_tooltip": "The directional deviation of projectiles casted by this wand.", + "inventory_chargecapacity": "Charge capacity", + "inventory_alwayscasts": "Always casts", + "inventory_alwayscasts_description": "This wand casts some spells every time it's used.", + "inventory_usesremaining": "Uses remaining", + "inventory_actiontype": "Type", + "inventory_manadrain": "Mana drain", + "inventory_damage": "Damage", + "inventory_dmg_explosion": "Dmg. Expl", + "inventory_explosion_radius": "Expl. Radius", + "inventory_dmg_slice": "Dmg. Slice", + "inventory_dmg_drill": "Dmg. Drill", + "inventory_dmg_fire": "Dmg. Fire", + "inventory_dmg_ice": "Dmg. Ice", + "inventory_speed": "Speed", + "inventory_mod_castdelay": "Cast delay", + "inventory_mod_rechargetime": "Recharge time", + "inventory_mod_bounces": "Bounces", + "inventory_mod_speed": "Proj. Speed", + "inventory_mod_explosion_radius": "Expl. Radius", + "inventory_mod_spread": "Spread", + "inventory_mod_knockback": "Knockback", + "inventory_mod_damage": "Damage", + "inventory_mod_damage_melee": "Dmg. Melee", + "inventory_mod_damage_electric": "Dmg. Electric", + "inventory_mod_damage_fire": "Dmg. Fire", + "inventory_mod_damage_explosion": "Dmg. Expl", + "inventory_mod_critchance": "Crit. Chance", + "inventory_warning_noactions": "WARNING - This wand contains no spells", + "inventory_warning_noactions_description": "The wand doesn't do anything. Place some spells into the wand's slots.", + "inventory_warning_notenoughmana": "WARNING - This wand doesn't have enough mana for $0", + "inventory_warning_notenoughmana_description": "Wand has max $0 mana. Casting $1 requires $2 mana.", + "inventory_info_frozen": "INFO - This wand has been frozen", + "inventory_info_frozen_description": "A spell prevents the wand from being customized.", + "inventory_seconds": "$0 s", + "inventory_degrees": "$0 DEG", + "inventory_actiontype_projectile": "Projectile", + "inventory_actiontype_staticprojectile": "Static proj.", + "inventory_actiontype_modifier": "Proj. modifier", + "inventory_actiontype_drawmany": "Multicast", + "inventory_actiontype_material": "Material", + "inventory_actiontype_other": "Other", + "inventory_actiontype_utility": "Utility", + "inventory_actiontype_passive": "Passive", + "item_spell_refresh": "Spell refresher", + "itemtitle_spell_refresh": "Picked up Spell refresher", + "itemdesc_spell_refresh": "All spells refreshed", + "itemtitle_wand_pickup": "Picked up a new magic wand", + "itemtitle_chest_open": "Opened a treasure chest!", + "itemtitle_chest_broken_open": "A chest was broken open", + "log_endcrystal": "Touched the cursed crystal!", + "logdesc_endcrystal": "Something stirs above you", + "logdesc_temple_spawn_guardian": "You have angered the Gods", + "logdesc_gods_are_angry": "You have angered the Gods", + "logdesc_gods_are_very_angry": "The Gods are very angry with you", + "damage_projectile": "projectile", + "damage_electricity": "electricity", + "damage_explosion": "explosion", + "damage_fire": "fire", + "damage_melee": "melee", + "damage_drill": "drill", + "damage_slice": "slice", + "damage_ice": "ice", + "damage_healing": "healing", + "damage_physicshit": "heavy impact", + "damage_radioactive": "toxic", + "damage_poison": "poison", + "damage_water": "wetness", + "damage_fall": "fall", + "damage_drowning": "drowning", + "damage_frommaterial": "damage from material: $0", + "damage_kick": "kick", + "damage_holy_mountains_curse": "Holy Mountain's curse", + "stat_depth": "Depth:", + "stat_time": "Time:", + "stat_places_visited": "Places visited:", + "stat_enemies_slain": "Enemies slain:", + "stat_max_hp": "Max HP:", + "stat_gold": "Gold:", + "stat_items_found": "Items found:", + "stat_orbs": "Orbs collected:", + "stat_total_deaths": "Total deaths:", + "stat_total_play_time": "Total play time:", + "stat_total_wins": "Total wins:", + "stat_cause_of_death": "Cause of death: '$0'", + "stat_best": "(Best: $0)", + "credits_music": "With music by From Grotto and Niilo Takalainen", + "credits_sounddesign": "Sound design by Niilo Takalainen", + "credits_fmod": "Noita uses FMOD Studio by Firelight Technologies Pty Ltd", + "credits_copyright": "Noita (c) Nolla Games Oy 2019", + "progress_perks": "Perks", + "progress_actions": "Spells", + "progress_secrets": "Secrets", + "progress_enemies": "Enemies", + "progress_unlocked": "Unlocks", + "progress_completed": "$0 $1 secret(s) found", + "progress_kills": "Kills: $0", + "progress_unknown": "???", + "progress_ending0": "Discovered the secret below - ", + "progress_ending1": "Discovered the secret above - ", + "progress_ending01": "Discovered the secrets above and below - ", + "status_wet": "Wet", + "statusdesc_wet": "Wet clothes protect you from fire.", + "status_oiled": "Oiled ", + "statusdesc_oiled": "Oil makes you slippery and more flammable.", + "status_bloody": "Bloody ", + "statusdesc_bloody": "Bloody clothes protect you from fire.\nYou sense an increased chance of attaining critical hits.", + "status_slimy": "Slimy", + "statusdesc_slimy": "Slimy clothes protect you from fire.\nThe mucus makes moving around difficult.", + "status_radioactive": "Toxic", + "statusdesc_radioactive": "Toxic sludge in your clothes makes your health degrade slowly.\nWet clothes protect you from fire.\nCan be washed off by liquids.", + "status_alcoholic": "Alcoholic", + "statusdesc_alcoholic": "Heavy scent of booze oozes of your clothes.\nAiming is disturbed.\nAnd alcohol is flammable!", + "status_poisoned": "Poisoned", + "statusdesc_poisoned": "A poisoning slowly degrades your health. ", + "status_teleportation": "Teleportitis", + "statusdesc_teleportation": "You teleport uncontrollably every now and then.", + "status_hp_regeneration": "Regeneration ", + "statusdesc_hp_regeneration": "A health regeneration spell affects you.", + "status_polymorph": "Polymorph", + "statusdesc_polymorph": "You're a sheep.", + "status_polymorph_random": "Chaos polymorph", + "statusdesc_polymorph_random": "A polymorph curse affects you.", + "status_berserk": "Berserk", + "statusdesc_berserk": "A berserk curse affects you.", + "status_charm": "Charmed", + "statusdesc_charm": "A charm affects you.", + "status_invisibility": "Invisible", + "statusdesc_invisibility": "The magical liquid on your clothes makes you invisible.\nThe spell is disturbed by stained or wet clothes.", + "status_on_fire": "On fire ", + "statusdesc_on_fire": "You're on fire. Find some water!", + "boss_limbs_limb_attacker": "Spider leg", + "biome_boss_arena": "The Laboratory", + "biome_boss_victoryroom": "The Work", + "biome_coalmine": "mines", + "biome_coalmine_alt": "collapsed mines", + "biome_crypt": "Temple of the Art", + "biome_desert": "Desert", + "biome_dragoncave": "Dragoncave", + "biome_ending_placeholder": "Master Symbol Crypt", + "biome_excavationsite": "Coal Pits", + "biome_fungicave": "Fungal Caverns", + "biome_gold": "Gold", + "biome_lake": "Lake", + "biome_lava": "Volcanic Lake", + "biome_lavacave": "Volcanic Cave", + "biome_magic_gate": "Sanctuary", + "biome_null": "unknown", + "biome_pyramid": "Pyramid", + "biome_rainforest": "Underground Jungle", + "biome_sandcave": "Sandcave", + "biome_secret_entrance": "Mysterious Gate", + "biome_shop_room": "Secret Shop", + "biome_snowcastle": "Hiisi Base", + "biome_snowcave": "Snowy Depths", + "biome_town_under": "twisty passages", + "biome_vault": "The Vault", + "biome_wandcave": "magical temple", + "biome_water": "water", + "biome_winter": "snowy wasteland", + "biome_holymountain": "Holy Mountain", + "biome_east": "East $0", + "biome_west": "West $0", + "animal_player": "Minä", + "animal_boss_centipede_minion": "Kolmisilmän apuri", + "animal_boss_limbs": "Kolmisilmän koipi", + "animal_boss_dragon_endcrystal": "Mato", + "animal_lukki": "Hämähäkki", + "animal_lukki_creepy": "Kasvoton Hämähäkki", + "animal_lukki_creepy_long": "Kasvoton Lukki", + "animal_lukki_longleg": "Lukki", + "animal_acidshooter": "Happonuljaska", + "animal_alchemist": "Alkemisti", + "animal_ant": "Murkku", + "animal_assassin": "Salamurhaajarobotti", + "animal_barfer": "Turvonnu velho", + "animal_bat": "Lepakko", + "animal_bigbat": "Suurlepakko", + "animal_bigfirebug": "Suurtulikärpänen", + "animal_bigzombie": "Mätänevä ruumis", + "animal_bigzombiehead": "Mätänevä pää", + "animal_bigzombietorso": "Mätänevä kroppa", + "animal_blob": "Kiukkumöykky", + "animal_bloodcrystal_physics": "Verikristalli", + "animal_bloom": "Puska", + "animal_boss_dragon": "Suomuhauki", + "animal_chest_mimic": "Matkija", + "animal_crystal_physics": "Kirottu kristalli", + "animal_darkghost": "Haamu", + "animal_deer": "Nelikoipi", + "animal_drone": "Lennokki", + "animal_drone_physics": "Lennokki", + "animal_duck": "Ankka", + "animal_eel": "Nahkiainen", + "animal_elk": "Poro", + "animal_firebug": "Pikkutulikärpänen", + "animal_firemage": "Eldari", + "animal_firemage_weak": "Stendari", + "animal_fireskull": "Liekkiö", + "animal_fish": "Eväkäs", + "animal_fish_large": "Suureväkäs", + "animal_flamer": "Liekkari", + "animal_fly": "Amppari", + "animal_frog": "Konna", + "animal_fungus": "Laahustussieni", + "animal_gazer": "Helvetinkatse", + "animal_ghost": "Houre", + "animal_ghoul": "Sylkyri", + "animal_giant": "Hiidenkivi", + "animal_giantshooter": "Äitinuljaska", + "animal_healerdrone_physics": "Korjauslennokki", + "animal_icer": "Jäähdytyslaite", + "animal_iceskull": "Jäätiö", + "animal_lasershooter": "Mulkkio", + "animal_longleg": "Hämis", + "animal_slimeshooter": "Limanuljaska", + "animal_slimeshooter_boss_limbs": "Äitilimanuljaska", + "animal_maggot": "Toukka", + "animal_mimic_physics": "Matkija", + "animal_miner": "Tappurahiisi", + "animal_miner_weak": "Tappurahiisiläinen", + "animal_miner_fire": "Tulihiisi", + "animal_miner_santa": "Jouluhiisi", + "animal_mine_scavenger": "Miina", + "animal_miniblob": "Möykky", + "animal_missilecrab": "Heinäsirkka", + "animal_pebble": "Lohkare", + "animal_pebble_player": "Toveri lohkare", + "animal_phantom_a": "Spiraalikalma", + "animal_phantom_b": "Kiukkukalma", + "animal_playerghost": "Kummitus", + "animal_rat": "Rotta", + "animal_roboguard": "Robottikyttä", + "animal_scavenger_clusterbomb": "Isohiisi", + "animal_scavenger_grenade": "Kranuhiisi", + "animal_scavenger_heal": "Parantajahiisi", + "animal_scavenger_leader": "Toimari", + "animal_scavenger_mine": "Miinankylväjä", + "animal_scavenger_poison": "Myrkkyhiisi", + "animal_scavenger_smg": "Rynkkyhiisi", + "animal_scorpion": "Skorpioni", + "animal_sheep": "Lammas", + "animal_sheep_bat": "Lentolammas", + "animal_sheep_fly": "Suhiseva lammas", + "animal_shooterflower": "Plasmakukka", + "animal_shotgunner_weak": "Heikko haulikkohiisi", + "animal_shotgunner": "Haulikkohiisi", + "animal_skullfly": "Kallokärpänen", + "animal_skullrat": "Kallorotta", + "animal_sniper": "Snipuhiisi", + "animal_spitmonster": "Helvetin sylkijä", + "animal_statue_physics": "Hohtonaamio", + "animal_tank": "KK-Tankki", + "animal_tank_rocket": "IT-Tankki", + "animal_tentacler": "Turso", + "animal_tentacler_small": "Pikkuturso", + "animal_thundermage": "Ukko", + "animal_turret": "Torjuntalaite", + "animal_wand_ghost": "Taikasauva", + "animal_wizard_dark": "Sokaisunmestari", + "animal_wizard_poly": "Muodonmuutosmestari", + "animal_wizard_tele": "Siirtäjämestari", + "animal_wolf": "Susi", + "animal_worm": "Mato", + "animal_worm_big": "Jättimato", + "animal_worm_end": "Helvetinmato", + "animal_worm_skull": "Kalmamato", + "animal_worm_tiny": "Pikkumato", + "animal_zombie_weak": "Heikkohurtta", + "animal_zombie": "Hurtta", + "action_burst_2": "Double spell", + "actiondesc_burst_2": "Simultaneously casts 2 spells", + "action_burst_3": "Triple spell", + "actiondesc_burst_3": "Simultaneously casts 3 spells", + "action_burst_4": "Quadruple spell", + "actiondesc_burst_4": "Simultaneously casts 4 spells", + "action_scatter_2": "Double scatter spell", + "actiondesc_scatter_2": "Simultaneously casts 2 spells with low accuracy", + "action_scatter_3": "Triple scatter spell", + "actiondesc_scatter_3": "Simultaneously casts 3 spells with low accuracy", + "action_scatter_4": "Quadruple scatter spell", + "actiondesc_scatter_4": "Simultaneously casts 4 spells with low accuracy", + "action_i_shape": "Formation - behind your back", + "actiondesc_i_shape": "Casts two spells: one ahead of and one behind the caster", + "action_y_shape": "Formation - bifurcated", + "actiondesc_y_shape": "Casts 2 spells in a bifurcated pattern", + "action_t_shape": "Formation - above and below", + "actiondesc_t_shape": "Casts 3 spells - ahead, above and below the caster", + "action_w_shape": "Formation - trifurcated", + "actiondesc_w_shape": "Casts 3 spells in a trifurcated pattern", + "action_circle_shape": "Formation - hexagon", + "actiondesc_circle_shape": "Casts 6 spells in a hexagonal pattern", + "action_pentagram_shape": "Formation - pentagon", + "actiondesc_pentagram_shape": "Casts 5 spells in a pentagonal pattern", + "action_spread_reduce": "Reduce spread", + "actiondesc_spread_reduce": "Reduces the spread of a spell", + "action_recharge": "Reduce recharge time", + "actiondesc_recharge": "Reduces the time between spellcasts", + "action_gravity": "Gravity", + "actiondesc_gravity": "Increases the effect gravity has on a projectile", + "action_gravity_anti": "Anti-gravity", + "actiondesc_gravity_anti": "Applies a lifting force to a projectile", + "action_penetrate_walls": "Penetrate walls", + "actiondesc_penetrate_walls": "Gives a projectile more penetration power", + "action_sinewave": "Slithering path", + "actiondesc_sinewave": "Makes a projectile move rapidly in a slithering manner, like a snake", + "action_bounce": "Bounce", + "actiondesc_bounce": "Makes a projectile bounce on impact", + "action_homing": "Homing", + "action_homing_shooter": "Boomerang", + "actiondesc_homing_shooter": "Gives a projectile a path that curves towards you", + "action_damage": "Damage Plus", + "actiondesc_damage": "Increases the damage done by a projectile", + "action_critical_hit": "Critical Plus", + "actiondesc_critical_hit": "Gives a projectile +15% chance of a critical hit", + "action_damage_friendly": "Cunning power", + "actiondesc_damage_friendly": "Gives a projectile extra damage, but makes it capable of damaging you", + "action_damage_x2": "Intense power", + "action_damage_x5": "Sundering power", + "action_heavy_shot": "Heavy Shot", + "actiondesc_heavy_shot": "Greatly increases the damage done by a projectile, at the cost of its speed", + "action_knockback": "Knockback", + "actiondesc_knockback": "Gives a projectile the power to knock back the foes it hits", + "action_recoil": "Recoil", + "actiondesc_recoil": "Increases the recoil when casting spells", + "action_recoil_damper": "Recoil Damper", + "actiondesc_recoil_damper": "Reduces the recoil when casting spells", + "action_speed": "Speed Up", + "actiondesc_speed": "Increases the speed at which a projectile flies through the air", + "action_gore": "Draw blood", + "actiondesc_gore": "Makes foes spill more blood when hit with a projectile", + "actiondesc_explosive_projectile": "Makes a projectile more destructive to the environment", + "action_water_to_poison": "Water to poison", + "actiondesc_water_to_poison": "Makes any water within a projectile's range turns into poison", + "action_blood_to_acid": "Blood to acid", + "actiondesc_blood_to_acid": "Makes any blood within a projectile's range turns into acid", + "action_lava_to_blood": "Lava to blood", + "actiondesc_lava_to_blood": "Makes any lava within a projectile's range turn into blood", + "action_necromancy": "Necromancy", + "actiondesc_necromancy": "Makes corpses of creatures killed by a projectile rise to your aid", + "actiondesc_explosion": "A powerful explosion", + "action_fire_blast": "Explosion of brimstone", + "actiondesc_fire_blast": "A fiery explosion", + "action_poison_blast": "Explosion of poison", + "actiondesc_poison_blast": "An alchemical explosion", + "action_alcohol_blast": "Explosion of spirits", + "actiondesc_alcohol_blast": "An inebriating explosion", + "action_thunder_blast": "Explosion of thunder", + "actiondesc_thunder_blast": "An electric explosion", + "action_charm_field": "Circle of persuasion", + "actiondesc_charm_field": "A field of charming magic", + "action_berserk_field": "Circle of fervour", + "actiondesc_berserk_field": "A field of berserk magic", + "action_polymorph_field": "Circle of transmogrification", + "actiondesc_polymorph_field": "A field of sheep-like magic", + "action_chaos_polymorph_field": "Circle of unstable metamorphosis", + "actiondesc_chaos_polymorph_field": "A field of transformative magic", + "action_electrocution_field": "Circle of thunder", + "actiondesc_electrocution_field": "A field of electrifying magic", + "action_freeze_field": "Circle of stillness", + "actiondesc_freeze_field": "A field of freezing magic", + "action_regeneration_field": "Circle of vigour", + "actiondesc_regeneration_field": "A field of regenerative magic", + "action_teleportation_field": "Circle of displacement", + "actiondesc_teleportation_field": "A field of teleportative magic", + "action_levitation_field": "Circle of buoyancy", + "actiondesc_levitation_field": "A field of levitative magic", + "action_telepathy_field": "Circle of seeing", + "actiondesc_telepathy_field": "A field of clairvoyant magic", + "action_shield_field": "Circle of shielding", + "actiondesc_shield_field": "A field of protective magic", + "action_sea_lava": "Sea of lava", + "actiondesc_sea_lava": "Summons a large body of lava below the caster", + "action_sea_oil": "Sea of oil", + "actiondesc_sea_oil": "Summons a large body of oil below the caster", + "action_sea_water": "Sea of water", + "actiondesc_sea_water": "Summons a large body of water below the caster", + "action_sea_acid": "Sea of acid", + "actiondesc_sea_acid": "Summons a large body of acid below the caster", + "action_sea_acid_gas": "Sea of flammable gas", + "actiondesc_sea_acid_gas": "Summons a large body of flammable gas below the caster", + "action_sea_alcohol": "Sea of alcohol", + "actiondesc_sea_alcohol": "Summons a large body of tasty alcohol below the caster", + "action_cloud_water": "Rain cloud", + "actiondesc_cloud_water": "Creates a watery weather phenomenon", + "action_cloud_blood": "Blood cloud", + "actiondesc_cloud_blood": "Creates a rain of blood", + "action_cloud_acid": "Acid cloud", + "actiondesc_cloud_acid": "Creates an rain of acid", + "action_cloud_thunder": "Thundercloud", + "actiondesc_cloud_thunder": "Creates a stormy cloud", + "action_electric_charge": "Electric charge", + "actiondesc_electric_charge": "Gives a projectile an electric charge, that it will release on impact", + "action_matter_eater": "Matter eater", + "actiondesc_matter_eater": "Makes a projectile eat the environment as it flies", + "action_freeze": "Freeze charge", + "actiondesc_freeze": "Gives a projectile a frozen charge, that it will release on impact", + "action_hitfx_burning_critical_hit": "Critical on burning", + "actiondesc_hitfx_burning_critical_hit": "Makes a projectile always do a critical hit on burning enemies", + "action_hitfx_critical_water": "Critical on wet (water) enemies", + "actiondesc_hitfx_critical_water": "Makes a projectile always do a critical hit on wet (water) enemies", + "action_hitfx_critical_oil": "Critical on oiled enemies", + "actiondesc_hitfx_critical_oil": "Makes a projectile always do a critical hit on oiled enemies", + "action_hitfx_critical_blood": "Critical on bloody enemies", + "actiondesc_hitfx_critical_blood": "Makes a projectile always do a critical hit on bloody enemies", + "action_hitfx_poltergeist": "Poltergeist", + "actiondesc_hitfx_poltergeist": "Gives a projectile the power to animate physical objects", + "action_fireball_ray": "Fireball thrower", + "actiondesc_fireball_ray": "Makes a projectile cast fireballs in random directions", + "action_hitfx_oiled_freeze": "Oil freeze", + "actiondesc_hitfx_oiled_freeze": "Makes a projectile freeze enemies drenched in oil", + "action_alcohol_shot": "Alcohol shot", + "actiondesc_alcohol_shot": "Makes a projectile get the enemies it hits drunk", + "action_freeze_if_wet_shooter": "Freeze if wet", + "actiondesc_freeze_if_wet_shooter": "If caster is wet, makes a projectile freeze the enemies it hits", + "action_blindness": "Blindness", + "actiondesc_blindness": "I can't see!", + "action_teleportation": "Teleportation", + "actiondesc_teleportation": "Spells cast alongside this will teleport enemies", + "action_telepathy": "Telepathy", + "actiondesc_telepathy": "Sense other beings through walls", + "action_arc_electric": "Electric Arc", + "action_arc_fire": "Fire Arc", + "action_arc_gunpowder": "Gunpowder Arc", + "action_arc_poison": "Poison Arc", + "action_polymorph": "Polymorph charge", + "actiondesc_polymorph": "Baaaaa", + "action_berserk": "Berserk", + "actiondesc_berserk": "Target enters a state of wild fury, attacking anyone nearby and getting a 2x damage boost", + "action_charm": "Charm", + "actiondesc_charm": "Target becomes friendly to the caster", + "action_x_ray": "All-seeing eye", + "actiondesc_x_ray": "See into the unexplored. But not everywhere...", + "action_x_ray_modifier": "X-ray modifier", + "actiondesc_x_ray_modifier": "Projectile lights the way in the darkness", + "action_acid": "Acid", + "actiondesc_acid": "Projectiles turn into acid on collision", + "action_unstable_gunpowder": "Firecrackers", + "action_acid_trail": "Acid trail", + "actiondesc_acid_trail": "Gives a projectile a trail of acid", + "action_poison_trail": "Poison trail", + "actiondesc_poison_trail": "Gives a projectile a trail of poison", + "action_oil_trail": "Oil trail", + "actiondesc_oil_trail": "Gives a projectile a trail of oil", + "action_water_trail": "Water trail", + "actiondesc_water_trail": "Gives a projectile a trail of water", + "action_blood_trail": "Blood trail", + "actiondesc_blood_trail": "Gives a projectile a trail of blood", + "action_gunpowder_trail": "Gunpowder trail", + "actiondesc_gunpowder_trail": "Gives a projectile a trail of gunpowder", + "action_fire_trail": "Fire trail", + "actiondesc_fire_trail": "Gives a projectile a trail of fiery particles", + "action_burn_trail": "Burning trail", + "actiondesc_burn_trail": "Gives a projectile a tail of fire", + "action_torch": "Torch", + "actiondesc_torch": "Lights your wand right up!", + "action_torch_electric": "Electric Torch", + "actiondesc_torch_electric": "Gives your wand a bright but very dangerous light!", + "action_light": "Light", + "actiondesc_light": "Makes a projectile illuminate its surroundings", + "action_energy_shield": "Energy shield", + "actiondesc_energy_shield": "Deflects incoming projectiles", + "action_energy_shield_sector": "Energy shield sector", + "actiondesc_energy_shield_sector": "Deflects incoming projectiles", + "action_duplicate_on_death": "Duplicate", + "actiondesc_duplicate_on_death": "Projectile clones itself x2 on collision", + "action_bee": "Bee", + "actiondesc_bee": "Bee", + "action_duck": "Duck", + "actiondesc_duck": "Duck!", + "action_sheep": "Sheep", + "actiondesc_sheep": "Sheep!", + "action_misfire": "Misfire", + "actiondesc_misfire": "Discard 1 spell", + "action_misfire_critical": "Misfire (critical)", + "actiondesc_misfire_critical": "Permanently destroy 1 spell", + "action_generate_random_deck_5": "Generate random deck (5)", + "actiondesc_generate_random_deck_5": "Current deck is replaced with a random deck of 5 cards", + "action_testbullet": "DEBUG BULLET", + "actiondesc_testbullet": "A weak but enchanting sparkling projectile", + "action_light_bullet": "Spark bolt", + "actiondesc_light_bullet": "A weak but enchanting sparkling projectile", + "action_air_bullet": "Burst of air", + "actiondesc_air_bullet": "A brittle burst of air capable of greatly pushing objects", + "action_light_bullet_trigger": "Spark bolt with trigger", + "actiondesc_light_bullet_trigger": "A spark bolt that casts another spell upon collision", + "action_light_bullet_trigger_2": "Spark bolt with double trigger", + "actiondesc_light_bullet_trigger_2": "A spark bolt that casts two new spells upon collision", + "action_light_bullet_timer": "Spark bolt with timer", + "actiondesc_light_bullet_timer": "A spark bolt that casts another spell after a timer runs out", + "action_bullet": "Magic arrow", + "actiondesc_bullet": "A handy magical arrow", + "action_bullet_trigger": "Magic arrow with trigger", + "actiondesc_bullet_trigger": "A magical arrow that casts another spell upon collision", + "action_bullet_timer": "Magic arrow with timer", + "actiondesc_bullet_timer": "A magical arrow that casts another spell after a timer runs out", + "action_heavy_bullet": "Magic bolt", + "actiondesc_heavy_bullet": "A powerful magical bolt", + "action_heavy_bullet_trigger": "Magic bolt with trigger", + "actiondesc_heavy_bullet_trigger": "A powerful magical bolt that casts another spell upon collision", + "action_heavy_bullet_timer": "Magic bolt with timer", + "actiondesc_heavy_bullet_timer": "A powerful magical bolt that casts another spell after a timer runs out", + "action_slow_bullet": "Energy orb", + "actiondesc_slow_bullet": "A slow but powerful orb of energy", + "action_slow_bullet_trigger": "Energy orb with a trigger", + "actiondesc_slow_bullet_trigger": "A slow but powerful orb of energy that casts another spell upon collision", + "action_slow_bullet_timer": "Energy orb with a timer", + "action_black_hole": "Black hole", + "actiondesc_black_hole": "A slow orb of void that eats through all obstacles", + "action_black_hole_big": "Giga black hole", + "actiondesc_black_hole_big": "A growing orb of negative energy that destroys everything in its reach", + "action_decoy": "Decoy", + "actiondesc_decoy": "Creates a decoy for distracting enemies", + "action_decoy_trigger": "Decoy with trigger", + "actiondesc_decoy_trigger": "Creates a decoy for distracting enemies that casts another spell after a timer runs out", + "action_spitter": "Spitter bolt", + "actiondesc_spitter": "A short-lived magical bolt", + "action_spitter_timer": "Spitter bolt with timer", + "actiondesc_spitter_timer": "A short-lived magical bolt that casts another spell after a timer runs out", + "action_bubbleshot": "Bubble spark", + "actiondesc_bubbleshot": "A bouncy, inaccurate spell", + "action_bubbleshot_trigger": "Bubble spark with trigger", + "actiondesc_bubbleshot_trigger": "A bouncy, inaccurate spell that casts another spell upon collision", + "action_disc_bullet": "Disc projectile", + "actiondesc_disc_bullet": "Summons a sharp disc projectile", + "action_bouncy_orb": "Energy sphere", + "actiondesc_bouncy_orb": "A fast, arcing projectile", + "action_bouncy_orb_timer": "Energy sphere with timer", + "action_rubber_ball": "Bouncing burst", + "actiondesc_rubber_ball": "A very bouncy projectile", + "action_arrow": "Arrow", + "actiondesc_arrow": "Summons an arrow", + "action_lance": "Glowing lance", + "actiondesc_lance": "A magical lance that cuts through soft materials", + "action_rocket": "Magic missile", + "actiondesc_rocket": "A fiery, explosive projectile", + "action_rocket_tier_2": "Large magic missile", + "actiondesc_rocket_tier_2": "A more powerful version of Magic missile", + "action_rocket_tier_3": "Giant magic missile", + "actiondesc_rocket_tier_3": "The most powerful version of Magic missile", + "action_grenade": "Firebolt", + "actiondesc_grenade": "A bouncy, explosive bolt", + "action_grenade_tier_2": "Large firebolt", + "actiondesc_grenade_tier_2": "A more powerful version of Firebolt", + "action_grenade_tier_3": "Giant firebolt", + "actiondesc_grenade_tier_3": "The most powerful version of Firebolt", + "action_grenade_trigger": "Firebolt with trigger", + "actiondesc_grenade_trigger": "A bouncy, explosive bolt that that casts another spell upon collision", + "action_grenade_anti": "Odd Firebolt", + "actiondesc_grenade_anti": "A somewhat peculiar bouncy, explosive bolt", + "action_grenade_large": "Dropper bolt", + "actiondesc_grenade_large": "A very heavy explosive bolt", + "action_mine": "Unstable crystal", + "actiondesc_mine": "A crystal that explodes when someone comes nearby", + "action_mine_death_trigger": "Unstable crystal with trigger", + "actiondesc_mine_death_trigger": "A crystal that explodes and casts another spell when someone comes nearby", + "action_pipe_bomb": "Dormant crystal", + "actiondesc_pipe_bomb": "A crystal that explodes when caught in an explosion", + "action_pipe_bomb_death_trigger": "Dormant crystal with trigger", + "actiondesc_pipe_bomb_death_trigger": "A crystal that explodes and casts another spell when caught in an explosion", + "action_exploding_deer": "Summon deercoy", + "actiondesc_exploding_deer": "Summons a seemingly-innocuous deer", + "action_pipe_bomb_detonator": "Dormant crystal detonation", + "actiondesc_pipe_bomb_detonator": "All nearby dormant crystals explode", + "action_laser": "Concentrated light", + "actiondesc_laser": "A pinpointed beam of light", + "action_lightning": "Lightning bolt", + "actiondesc_lightning": "The primordial force of nature", + "action_digger": "Digging bolt", + "actiondesc_digger": "A bolt that is ideal for mining operations", + "action_powerdigger": "Digging blast", + "actiondesc_powerdigger": "More powerful digging", + "action_chainsaw": "Chainsaw", + "action_tentacle": "Summon Tentacle", + "actiondesc_tentacle": "Calls a terrifying appendage from another dimension", + "action_tentacle_timer": "Summon Tentacle with timer", + "actiondesc_tentacle_timer": "Calls a terrifying appendage from another dimension! Comes with a timer", + "action_heal_bullet": "Healing bolt", + "action_spiral_shot": "Spiral shot", + "actiondesc_spiral_shot": "A mystical whirlwind of magic sparks", + "action_fireball": "Fireball", + "actiondesc_fireball": "A powerful exploding spell", + "action_meteor": "Meteor", + "actiondesc_meteor": "A destructive projectile from the skies!", + "action_flamethrower": "Flamethrower", + "actiondesc_flamethrower": "A stream of fire!!", + "action_icethrower": "Icethrower", + "actiondesc_icethrower": "A stream of ice!!", + "action_slimeball": "Slimeball", + "actiondesc_slimeball": "A dripping ball of poisonous slime", + "action_darkflame": "Path of dark flame", + "actiondesc_darkflame": "A trail of dark, deadly flames", + "action_missile": "Summon missile", + "actiondesc_missile": "A missile!!!", + "action_pebble": "Summon rock spirit", + "actiondesc_pebble": "Summons an autonomous rock ally", + "action_dynamite": "Dynamite", + "actiondesc_dynamite": "Summons a small explosive", + "action_bomb_legacy": "Bomb", + "actiondesc_bomb_legacy": "Summons a bomb that destroys ground very efficiently", + "action_bomb": "Bomb", + "actiondesc_bomb": "Summons a bomb that destroys ground very efficiently", + "action_bomb_holy": "Holy Bomb", + "actiondesc_bomb_holy": "Summons a bomb that... well...", + "action_knife": "Throwing Knife", + "actiondesc_knife": "Very deadly!", + "action_crumbling_earth": "Earthquake", + "actiondesc_crumbling_earth": "Calls the anger of the earth", + "action_circleshot_a": "Circle shot", + "actiondesc_circleshot_a": "Projectiles fly out in a circular pattern", + "action_circleshot_b": "Spiral shot", + "actiondesc_circleshot_b": "Projectiles fly out in a spiral pattern", + "action_acidshot": "Acid ball", + "actiondesc_acidshot": "A terrifying acidic projectile", + "action_thunderball": "Thunder charge", + "actiondesc_thunderball": "A projectile with immense stored electricity", + "action_bloomshot": "Slime arc", + "actiondesc_bloomshot": "Spells cast alongside this will have arcs of slime flowing between them", + "action_icecircle": "Ice circle", + "actiondesc_icecircle": "Shoots icy projectiles in a circle", + "action_firebomb": "Firebomb", + "actiondesc_firebomb": "Slow, fiery bolt", + "action_soilball": "Chunk of soil", + "actiondesc_soilball": "Don't soil yourself", + "action_pink_orb": "Homing orb", + "actiondesc_pink_orb": "A dangerous, homing orb", + "action_death_cross": "Death cross", + "actiondesc_death_cross": "A deadly energy cross that explodes after a short time", + "action_plasma_flare": "Plasma flare", + "actiondesc_plasma_flare": "A magical projectile that accelerates quickly", + "action_keyshot": "Key shot", + "actiondesc_keyshot": "A powerful projectile. Nothing out of ordinary", + "action_mana": "Mana", + "actiondesc_mana": "Extra mana", + "action_skull": "Skull", + "actiondesc_skull": "Scary skull!!!", + "action_material_debug": "shoots debug material", + "actiondesc_material_debug": "ONLY TO BE USED IN DEBUG MODE!", + "action_material_liquid": "shoots liquid", + "actiondesc_material_liquid": "Drop it in liquid and shoot it!", + "action_mist_radioactive": "Toxic mist", + "actiondesc_mist_radioactive": "A cloud of toxic mist", + "action_mist_alcohol": "mist of spirits", + "actiondesc_mist_alcohol": "A cloud of potent alcohol", + "action_mist_slime": "Slime mist", + "actiondesc_mist_slime": "A cloud of slimy mist", + "action_mist_blood": "Blood mist", + "actiondesc_mist_blood": "A cloud of blood mist", + "action_circle_fire": "Circle of fire", + "actiondesc_circle_fire": "An expanding circle of burning air", + "action_circle_acid": "Circle of acid", + "actiondesc_circle_acid": "An expanding circle of dripping acid", + "action_circle_oil": "Circle of oil", + "actiondesc_circle_oil": "An expanding circle of slick oil", + "action_circle_water": "Circle of water", + "actiondesc_circle_water": "An expanding circle of water", + "action_material_water": "Water", + "actiondesc_material_water": "Transmute drops of water from nothing", + "action_material_oil": "Oil", + "actiondesc_material_oil": "Transmute drops of oil from nothing", + "action_material_blood": "Blood", + "actiondesc_material_blood": "Blood blood blood", + "action_material_acid": "Acid", + "actiondesc_material_acid": "Transmute drops of acid from nothing", + "action_material_cement": "Cement", + "actiondesc_material_cement": "Transmute drops of wet cement from nothing", + "action_material_lava": "Lava", + "actiondesc_material_lava": "Transmute globs of lava from nothing", + "action_material_gunpowder_explosive": "Explosive gunpowder", + "actiondesc_material_gunpowder_explosive": "Transmute grains of gunpowder from nothing", + "action_material_dirt": "Dirt", + "actiondesc_material_dirt": "Transmute grains of dirt from nothing", + "action_building_board_wood": "Wooden mold", + "actiondesc_building_board_wood": "Useful for cement construction. REQUIRES SOLAR POWER TO RECHARGE.", + "action_building_back_wall_rock": "Back wall (rock)", + "actiondesc_building_back_wall_rock": "Provides structural support. REQUIRES SOLAR POWER TO RECHARGE.", + "action_building_pressure_plate": "Pressure plate", + "actiondesc_building_pressure_plate": "TODO", + "action_building_physics_templedoor": "Temple door", + "actiondesc_building_physics_templedoor": "TODO", + "action_teleport_projectile": "Teleport bolt", + "actiondesc_teleport_projectile": "A magical bolt that moves you wherever it ends up flying", + "action_teleport_home": "Teleport home", + "actiondesc_teleport_home": "Creates a portal to the surface that can be used once per each direction", + "action_levitation_projectile": "LEVITATION projectile", + "actiondesc_levitation_projectile": "Levitation stuff", + "action_nuke": "Nuke", + "actiondesc_nuke": "Take cover!", + "action_high_explosive": "TNT", + "actiondesc_high_explosive": "Extremely powerful explosive projectile", + "action_drone": "Drone", + "actiondesc_drone": "More powerful digging", + "action_baab_is": "IS", + "actiondesc_baab_is": "", + "action_baab_all": "ALL", + "actiondesc_baab_all": "", + "action_baab_empty": "ALL", + "actiondesc_baab_empty": "", + "action_baab_lava": "LAVA", + "actiondesc_baab_lava": "", + "action_baab_water": "WATER", + "actiondesc_baab_water": "", + "action_baab_poop": "POOP", + "actiondesc_baab_poop": "", + "action_baab_love": "LOVE", + "actiondesc_baab_love": "", + "action_firework": "Fireworks!", + "actiondesc_firework": "A fiery, explosive projectile", + "projectile_default": "projectile", + "perk_critical_hit": "Critical Hit +", + "perkdesc_critical_hit": "You get more critical hits", + "perk_breath_underwater": "Breathless", + "perkdesc_breath_underwater": "You can no longer drown, and can move in liquids with ease.", + "perk_extra_money": "Greed", + "perkdesc_extra_money": "You gain double the gold per nugget.", + "perk_extra_money_trick_kill": "Trick Greed", + "perkdesc_extra_money_trick_kill": "4x instead of 2x gold is dropped when death is an accident.", + "perk_hover_boost": "Strong Levitation", + "perkdesc_hover_boost": "You can fly 100% longer.", + "perk_movement_faster": "Faster Movement", + "perkdesc_movement_faster": "Your movement speed is increased.", + "perk_repelling_cape": "Repelling Cape", + "perkdesc_repelling_cape": "Stains drop at a fast rate (when moving).", + "perk_exploding_corpses": "Exploding Corpses", + "perkdesc_exploding_corpses": "Enemies explode upon death, but you gain immunity to explosive damage.", + "perk_saving_grace": "Saving Grace", + "perkdesc_saving_grace": "If you would die and have more than 1 HP, your HP is set to 1 instead.", + "perk_invisibility": "Invisibility", + "perkdesc_invisibility": "You're invisible. Stains, casting spells, kicking and taking damage makes you temporarily visible.", + "perk_global_gore": "More Blood", + "perkdesc_global_gore": "Blood blood blood.", + "perk_no_damage_flash": "No Damage Flash", + "perkdesc_no_damage_flash": "Pain is inevitable, but damage flash is optional.", + "perk_reverse_slowdown": "Slicky Slime", + "perkdesc_reverse_slowdown": "Instead of slowing you down, slime allows you to move faster.", + "perk_extra_hp": "Extra Health (One-off)", + "perkdesc_extra_hp": "You gain 50% extra maximum health.", + "perk_glass_cannon": "Glass Cannon", + "perkdesc_glass_cannon": "Your spells are 5 times as powerful, but your maximum health becomes 50 and cannot be increased by normal hearts.", + "perk_respawn": "Extra Life (One-off)", + "perkdesc_respawn": "Upon death you respawn with 100 health.", + "perk_protection_fire": "Fire Immunity", + "perkdesc_protection_fire": "You take no damage from fire.", + "perk_protection_radioactivity": "Toxic Immunity", + "perkdesc_protection_radioactivity": "You take no damage from toxic sludge and other toxic things.", + "perk_protection_explosion": "Explosion Immunity", + "perkdesc_protection_explosion": "You take no direct damage from explosions.", + "perk_protection_melee": "Melee Immunity", + "perkdesc_protection_melee": "You take no damage from close-range enemy attacks.", + "perk_protection_electricity": "Electricity Immunity", + "perkdesc_protection_electricity": "You take no damage from electric shocks.", + "perk_teleportitis": "Teleportitis", + "perkdesc_teleportitis": "You take 20% less damage. You teleport away every time you're hurt.", + "perk_stainless_armour": "Stainless Armour", + "perkdesc_stainless_armour": "You take 50% less damage as long as you have no active stain status effect.", + "perk_edit_wands_everywhere": "Tinker With Wands Everywhere", + "perkdesc_edit_wands_everywhere": "A divine blessing allows you to tinker with wands everywhere.", + "perk_projectile_homing": "Homing Shots", + "perkdesc_projectile_homing": "Your spells home towards enemies very slightly.", + "perk_freeze_field": "Freeze Field", + "perkdesc_freeze_field": "Liquids freeze in your presence.", + "perk_dissolve_powders": "Dissolve Powders", + "perkdesc_dissolve_powders": "Sand and other soft, powdery materials dissolve quickly in your presence.", + "perk_bleed_slime": "Slime Blood", + "perk_shield": "Permanent Shield", + "perkdesc_shield": "You gain a small, permanent shield.", + "perk_revenge_explosion": "Revenge Explosion", + "perkdesc_revenge_explosion": "You release a magical explosion upon taking damage, and gain 25% resistance against explosions.", + "perk_electricity": "Electricity", + "perkdesc_electricity": "You're immune to electric damage, but metal and liquids around you electrify constantly. Look out!", + "perk_mystery_eggplant": "Mystery Eggplant", + "perkdesc_mystery_eggplant": "It breaks easily.", + "perk_double_hp": "Double Health, No Regeneration", + "perkdesc_double_hp": "Your maximum HP is doubled, but you take 20% more damage from projectiles.", + "perk_berserk": "Berserk", + "perkdesc_berserk": "The less HP you have, the more damage your spells deal, up to +300% extra damage.", + "perk_shuffle_wands": "Shuffle Wands", + "perkdesc_shuffle_wands": "All your wands are replaced with random wands of approximately equal power.", + "perk_heavy_ammo": "Heavy Ammo", + "perkdesc_heavy_ammo": "You gain a selection of 2 powerful spells.", + "perk_liquid_movement": "Liquid Movement", + "perkdesc_liquid_movement": "Liquids don't affect your movement at all.", + "perk_faster_swimming": "Faster Swimming", + "perkdesc_faster_swimming": "You swim faster.", + "perk_extra_shop_item": "Extra Item In Holy Mountain", + "perkdesc_extra_shop_item": "There will be an additional item in every Holy Mountain you haven't discovered yet.", + "perk_poison_burn": "Burning Poison", + "perkdesc_poison_burn": "Your projectiles have a chance to ignite poisoned enemies.", + "perk_low_gravity": "Low Gravity", + "perkdesc_low_gravity": "All creatures, you included, have lower personal gravity.", + "perk_destruction_enhancement": "Destruction Enhancement", + "perkdesc_destruction_enchancement": "You can destroy the environment more effectively.", + "perk_damaging_aura": "Damaging Aura", + "perkdesc_damaging_aura": "Your spells damage nearby enemies even if they don't hit them.", + "perk_thunder_kick": "Thunder Kick", + "perkdesc_thunder_kick": "Your kicks instantly kill most foes, and push objects more.", + "perk_vision": "Better Vision", + "perkdesc_vision": "You can see more into the darkness.", + "perk_telepathic_vision": "Telepathic Presence", + "perkdesc_telepathic_vision": "Darkness is no more, but enemies always know where you are.", + "perk_no_more_knockback": "No More Knockback", + "perkdesc_no_more_knockback": "Enemies can no longer knock you back.", + "perk_knockback_control": "Controllable Knockback", + "perkdesc_knockback_control": "You can steer while being knocked back.", + "perk_roll_again": "Roll Again", + "perkdesc_roll_again": "You get a new set of perks to choose from.", + "perk_reveal_secrets": "Reveal Secrets", + "perkdesc_reveal_secrets": "Chests, hearts and other items shine through darkness.", + "perk_potion_drop": "Potion Drop", + "perkdesc_potion_drop": "Enemies have a chance of dropping a random potion upon death.", + "perk_mystery_egg": "Mystery Egg", + "perkdesc_mystery_egg": "Something may hatch from it!", + "perk_gold_no_disappear_while_seen": "Golden I", + "perkdesc_gold_no_disappear_while_seen": "Gold doesn't disappear as long as it can be seen.", + "perk_mana_discount": "Mana Discount", + "perkdesc_mana_discount": "All spells cost 50% less mana.", + "perk_juggernaut": "Juggernaut Spells", + "perkdesc_juggernaut": "Your projectiles deal 30% more damage, but are 30% slower.", + "perk_big_potions": "Big Potions", + "perkdesc_big_potions": "Potions you find contain double the liquid.", + "perk_extra_charges": "Extra Charges", + "perkdesc_extra_charges": "Spells with limited uses can be used twice as many times.", + "perk_fast_projectiles": "Faster Projectiles", + "perkdesc_fast_projectiles": "Your projectile spells fly faster than before.", + "perk_deadly_environment": "Deadly Environment", + "perkdesc_deadly_environment": "Creatures take increased damage from poison and other liquids, fire, and more.", + "perk_cursed_power": "Cursed Power", + "perkdesc_cursed_power": "All your wands gain extra damage but become uncustomizable.", + "perk_randomize_spells": "Randomize Spells", + "perkdesc_randomize_spells": "All spells in your inventory are replaced with a random spell.", + "perk_personal_raincloud": "Personal Raincloud", + "perkdesc_personal_raincloud": "You gather water when standing in a pool, and release it if you shoot at the cloud that follows you.", + "perk_helper_orb": "Helper Orb", + "perkdesc_helper_orb": "An orb flies near you and attacks your enemies.", + "perk_extra_wand_slot": "Extra Wand Storage", + "perkdesc_extra_wand_slot": "You can carry one extra wand.", + "perk_extra_potion_slot": "Extra Item Storage", + "perkdesc_extra_potion_slot": "You can carry one extra item.", + "perk_extra_action_storage": "Extra Spell Storage", + "perkdesc_extra_action_storage": "You gain more room for spells", + "perk_persuasion": "Persuasion", + "perkdesc_persuasion": "Enemies with low health may start fighting for you.", + "perk_permanent_flying": "Floor Is Lava", + "perkdesc_permanent_flying": "You can fly forever, but standing on the ground deals you damage over time.", + "perk_melt": "Melting Corpses", + "perkdesc_melt": "Your enemies' corpses melt into slime.", + "perk_double_cast": "Double Cast", + "perkdesc_double_cast": "Your wands cast one extra spell when used.", + "perk_ability_actions_materialized": "Bombs Materialized", + "perkdesc_ability_actions_materialized": "Bomb-like spells can be placed in the ITEMS space in inventory and used like throwable items.", + "mat_air": "air", + "mat_fire": "fire", + "mat_spark": "spark", + "mat_spark_green": "spark", + "mat_spark_blue": "spark", + "mat_spark_red": "spark", + "mat_spark_white": "spark", + "mat_spark_yellow": "spark", + "mat_spark_purple": "spark", + "mat_spark_player": "spark", + "mat_spark_teal": "spark", + "mat_spark_electric": "electric spark", + "mat_flame": "fire", + "mat_sand_static": "ground", + "mat_sand_static_rainforest": "lush ground", + "mat_bone_static": "bone wall", + "mat_rust_static": "rusted metal", + "mat_sand_static_bright": "granite ground", + "mat_sand_static_red": "rusty ground", + "mat_nest_static": "nest", + "mat_bluefungi_static": "blue fungus", + "mat_cheese_static": "cheese", + "mat_rock_static": "rock", + "mat_rock_static_intro": "rock", + "mat_water_static": "Water", + "mat_endslime_static": "hell slime", + "mat_slime_static": "slime", + "mat_rock_hard": "dense rock", + "mat_rock_static_noedge": "rock", + "mat_rock_hard_border": "extremely dense rock", + "mat_rock_magic_gate": "magic gate", + "mat_rock_magic_bottom": "magic wall", + "mat_rock_eroding": "eroding rock", + "mat_rock_vault": "vault rock", + "mat_coal_static": "coal vein", + "mat_rock_static_grey": "grey rock", + "mat_rock_static_radioactive": "toxic rock", + "mat_rock_static_poison": "poisonous rock", + "mat_skullrock": "hell rock", + "mat_rock_static_wet": "damp rock", + "mat_lavarock_static": "volcanic rock", + "mat_lava": "lava", + "mat_meteorite_static": "meteorite", + "mat_templerock_static": "brickwork", + "mat_templebrick_static": "brickwork", + "mat_templebrick_noedge_static": "brickwork", + "mat_templebrick_thick_static": "brickwork", + "mat_templebrickdark_static": "brickwork", + "mat_templeslab_static": "brickwork", + "mat_templeslab_crumbling_static": "brickwork", + "mat_glowstone": "glowing stone", + "mat_glowstone_altar": "glowing stone", + "mat_glowstone_potion": "glowing stone", + "mat_templebrick_red": "brickwork", + "mat_templebrick_moss_static": "mossy brickwork", + "mat_the_end": "hell rock", + "mat_steel_static": "steel", + "mat_steelmoss_static": "mossy steel", + "mat_steelmoss_slanted": "mossy steel", + "mat_steelsmoke_static": "smoking steel", + "mat_steelpipe_static": "metal pipe", + "mat_steel_static_strong": "dense steel", + "mat_steel_static_unmeltable": "hardened steel", + "mat_rock_static_glow": "glowing matter", + "mat_snow_static": "packed snow", + "mat_ice_static": "ice", + "mat_rock_static_intro_breakable": "rock", + "mat_ice_blood_static": "frozen blood", + "mat_ice_acid_static": "frozen acid", + "mat_ice_cold_static": "ice", + "mat_ice_radioactive_static": "toxic ice", + "mat_ice_meteor_static": "ice", + "mat_tubematerial": "neon tube", + "mat_glass_static": "glass", + "mat_waterrock": "rock", + "mat_ice_glass": "ice", + "mat_tube_physics": "neon tube", + "mat_ice_acid_glass": "frozen acid", + "mat_ice_cold_glass": "ice", + "mat_ice_radioactive_glass": "toxic ice", + "mat_ice_glass_b2": "ice", + "mat_glass_brittle": "brittle glass", + "mat_snowrock_static": "frozen rock", + "mat_concrete_static": "concrete", + "mat_wood_static": "wood", + "mat_wood_static_wet": "damp wood", + "mat_creepy_liquid_emitter": "brick wall", + "mat_gold_static": "gold vein", + "mat_gold_static_dark": "vibrant gold vein", + "mat_wood_static_vertical": "wood", + "mat_wood_static_gas": "pressurized wood", + "mat_corruption_static": "corrupted rock", + "mat_smoke": "smoke", + "mat_smoke_explosion": "smoke", + "mat_steam": "steam", + "mat_acid_gas": "flammable gas", + "mat_acid_gas_static": "flammable gas", + "mat_smoke_static": "smoke", + "mat_poison_gas": "poison gas", + "mat_fungal_gas": "fungal gas", + "mat_blood_cold_vapour": "freezing vapour", + "mat_sand_herb_vapour": "funky vapour", + "mat_radioactive_gas": "toxic gas", + "mat_radioactive_gas_static": "toxic gas", + "mat_water": "Water", + "mat_water_fading": "Water", + "mat_water_salt": "brine", + "mat_water_temp": "Water", + "mat_water_ice": "chilly water", + "mat_water_swamp": "swamp", + "mat_oil": "oil", + "mat_liquid_fire_weak": "liquid fire", + "mat_alcohol": "whiskey", + "mat_midas_precursor": "alchemic precursor", + "mat_midas": "draught of midas", + "mat_magic_liquid": "gate-opener", + "mat_magic_liquid_teleportation": "teleportatium", + "mat_magic_liquid_hp_regeneration": "healthium", + "mat_magic_liquid_hp_regeneration_unstable": "lively concoction", + "mat_magic_liquid_polymorph": "polymorphine", + "mat_magic_liquid_random_polymorph": "chaotic polymorphine", + "mat_magic_liquid_berserk": "berserkium", + "mat_magic_liquid_charm": "pheromone", + "mat_magic_liquid_invisibility": "invisiblium", + "mat_cloud": "cloud", + "mat_cloud_radioactive": "toxic mist", + "mat_cloud_alcohol": "alcohol mist", + "mat_cloud_blood": "blood mist", + "mat_cloud_slime": "slime mist", + "mat_swamp": "swamp", + "mat_mud": "mud", + "mat_blood_fading_slow": "fungal blood", + "mat_blood_worm": "worm blood", + "mat_blood_cold": "freezing liquid", + "mat_radioactive_liquid": "toxic sludge", + "mat_radioactive_liquid_fading": "toxic sludge", + "mat_plasma_fading": "magical liquid", + "mat_plasma_fading_green": "magical liquid", + "mat_plasma_fading_pink": "magical liquid", + "mat_gold_molten": "molten gold", + "mat_steel_static_molten": "molten steel", + "mat_steelmoss_slanted_molten": "molten steel", + "mat_steelmoss_static_molten": "molten steel", + "mat_steelsmoke_static_molten": "molten steel", + "mat_metal_molten": "molten metal", + "mat_metal_rust_molten": "molten metal", + "mat_metal_nohit_molten": "molten metal", + "mat_aluminium_molten": "molten aluminium", + "mat_aluminium_robot_molten": "molten aluminium", + "mat_metal_prop_molten": "molten metal", + "mat_steel_rust_molten": "molten steel", + "mat_aluminium_oxide_molten": "molten aluminium", + "mat_wax_molten": "molten wax", + "mat_silver_molten": "molten silver", + "mat_copper_molten": "molten copper", + "mat_brass_molten": "molten brass", + "mat_glass_molten": "molten glass", + "mat_glass_broken_molten": "molten glass", + "mat_steel_molten": "molten metal", + "mat_creepy_liquid": "creepy liquid", + "mat_cement": "cement", + "mat_sand": "sand", + "mat_sand_blue": "blue sand", + "mat_lavasand": "volcanic sand", + "mat_bone": "bone dust", + "mat_soil": "soil", + "mat_soil_dead": "barren soil", + "mat_sandstone": "sandstone", + "mat_fungisoil": "fungal soil", + "mat_honey": "honey", + "mat_pea_soup": "pea soup", + "mat_endslime": "hell slime", + "mat_endslime_blood": "hell slime", + "mat_explosion_dirt": "dirt", + "mat_vine": "vine", + "mat_root": "vine", + "mat_snow": "snow", + "mat_rotten_meat": "rotten meat", + "mat_meat_slime_sand": "slimy meat", + "mat_meat_slime_green": "green slimy meat", + "mat_meat_slime_orange": "slimy meat", + "mat_rotten_meat_radioactive": "toxic meat", + "mat_meat_worm": "worm meat", + "mat_ice": "ice", + "mat_wax": "wax", + "mat_gold": "gold", + "mat_gold_radioactive": "toxic gold", + "mat_copper": "copper", + "mat_silver": "silver", + "mat_coal": "coal", + "mat_brass": "brass", + "mat_burning_powder": "burning powder", + "mat_sodium_unstable": "wet sodium", + "mat_gunpowder": "gunpowder", + "mat_gunpowder_tnt": "gunpowder", + "mat_gunpowder_unstable": "gunpowder", + "mat_gunpowder_unstable_boss_limbs": "slimy meat", + "mat_plastic_red": "plastic", + "mat_plastic_red_molten": "molten plastic", + "mat_plastic_molten": "molten plastic", + "mat_plastic_prop_molten": "molten plastic", + "mat_grass": "grass", + "mat_moss": "moss", + "mat_moss_rust": "rusty moss", + "mat_fungi_green": "fungus", + "mat_spore": "seed", + "mat_plant_material_red": "seed", + "mat_ceiling_plant_material": "seed", + "mat_mushroom_seed": "fungal spore", + "mat_plant_seed": "plant seed", + "mat_mushroom": "fungal spore", + "mat_mushroom_giant_red": "fungal spore", + "mat_mushroom_giant_blue": "fungal spore", + "mat_bush_seed": "evergreen seed", + "mat_acid": "acid", + "mat_wood_player_b2": "wood", + "mat_wood_player_b2_vertical": "wood", + "mat_wood": "wood", + "mat_fuse": "bomb", + "mat_fuse_tnt": "tnt", + "mat_fuse_holy": "holy matter", + "mat_templebrick_box2d": "brickwork", + "mat_wood_trailer": "wood", + "mat_wood_wall": "wood", + "mat_cactus": "grass", + "mat_grass_loose": "fungal matter", + "mat_wood_prop": "wood", + "mat_wood_prop_durable": "tough wood", + "mat_nest_box2d": "nest", + "mat_cocoon_box2d": "cocoon", + "mat_wood_loose": "wood", + "mat_rock_loose": "rock", + "mat_ice_ceiling": "ice", + "mat_brick": "brick wall", + "mat_concrete_collapsed": "collapsed concrete", + "mat_tnt": "tnt", + "mat_trailer_text": "text", + "mat_meteorite": "meteorite", + "mat_meteorite_crackable": "meteorite", + "mat_meteorite_green": "green meteorite", + "mat_steel": "steel", + "mat_steel_rust": "rusted steel", + "mat_metal_rust_rust": "rusted metal", + "mat_metal_rust_barrel_rust": "rusted metal", + "mat_plastic": "plastic", + "mat_aluminium": "aluminium", + "mat_metal_prop": "metal", + "mat_metal": "metal", + "mat_rock_box2d_hard": "rock", + "mat_rock_box2d_nohit": "rock", + "mat_rock_box2d_nohit_hard": "dense rock", + "mat_rock_static_box2d": "rock", + "mat_rock_box2d": "rock", + "mat_item_box2d": "item", + "mat_gem_box2d": "gem", + "mat_potion_glass_box2d": "glass", + "mat_glass_box2d": "glass", + "mat_gem_box2d_pink": "gem", + "mat_gem_box2d_red": "gem", + "mat_gem_box2d_green": "gem", + "mat_gem_box2d_orange": "gem", + "mat_gold_box2d": "gold", + "mat_metal_nohit": "metal", + "mat_metal_rust": "rusted metal", + "mat_metal_rust_barrel": "rusted metal", + "mat_bone_box2d": "bone", + "mat_crystal": "crystal", + "mat_crystal_purple": "purple crystal", + "mat_crystal_magic": "crystal", + "mat_aluminium_oxide": "aluminium", + "mat_meat": "meat", + "mat_urine": "urine", + "mat_poo": "excrement", + "mat_rocket_particles": "smoke", + "mat_ice_melting_perf_killer": "ice", + "mat_ice_b2": "ice", + "mat_glass": "glass", + "mat_neon_tube_purple": "neon tube", + "mat_neon_tube_cyan": "neon tube", + "mat_neon_tube_blood_red": "neon tube", + "mat_blood_thick": "blood", + "mat_snow_b2": "snow", + "mat_diamond": "diamond", + "mat_meat_slime": "slimy meat", + "mat_concrete_sand": "concrete", + "mat_blood": "blood", + "mat_blood_fading": "blood", + "mat_gunpowder_explosive": "gunpowder", + "mat_fungi": "fungus", + "mat_plant_material": "plant material", + "mat_wood_player": "wood", + "mat_wax_b2": "wax", + "mat_physics_throw_material_part2": "who knows", + "mat_fire_blue": "fire", + "mat_gold_b2": "gold", + "mat_fungus_loose": "fungus", + "mat_sodium": "sodium", + "mat_sulphur": "sulphur", + "mat_salt": "salt", + "mat_steel_sand": "steel", + "mat_slime_green": "slime", + "mat_slime_pink": "slime", + "mat_soil_lush": "soil", + "mat_radioactive_liquid_yellow": "toxic sludge", + "mat_liquid_fire": "fire", + "mat_smoke_magic": "smoke", + "mat_sand_herb": "herb", + "ENTIRELY NEW TEXT AFTER THIS LINE": "", + "biome_tower": "Tower", + "biome_vault_frozen": "Frozen vault", + "biome_clouds": "Cloudscape", + "biome_liquidcave": "Ancient laboratory", + "biome_secret_lab": "Abandoned alchemy lab", + "biome_weathercrystal": "Crystal Chamber", + "mat_ice_poison_static": "Frozen poison", + "mat_ice_poison_glass": "Frozen poison", + "mat_ice_slime_static": "Frozen slime", + "mat_ice_slime_glass": "Frozen slime", + "mat_ice_blood_glass": "Frozen blood", + "mat_void_liquid": "Void liquid", + "mat_fungi_creeping": "Mystery fungus", + "mat_purifying_powder": "Purifying powder", + "mat_magic_crystal": "Magical crystal", + "mat_rock_static_cursed": "Cursed rock", + "mat_steelfrost_static": "Frozen steel", + "mat_slush": "Slush", + "mat_poison": "Poison", + "mat_alcohol_gas": "Whiskey fumes", + "mat_vomit": "Vomit", + "mat_blood_fungi": "fungus blood", + "mat_glowshroom": "glowing fungal spore", + "mat_fungi_trippy": "weird fungus", + "mat_sima": "Sima", + "mat_glass_liquidcave": "Tempered glass", + "mat_templebrick_static_ruined": "Ruined brick wall", + "mat_templebrick_brittle": "Brittle brickwork", + "mat_rock_brittle": "Brittle rock", + "mat_antidote": "Antidote", + "mat_confusion": "flummoxium", + "mat_magic_liquid_movement_faster": "acceleratium", + "mat_magic_liquid_worm_attractor": "worm pheromone", + "mat_magic_liquid_protection_all": "ambrosia", + "mat_magic_liquid_mana_regeneration": "concentrated mana", + "mat_meat_helpless": "Meat of an innocent creature", + "mat_meat_trippy": "Weird meat", + "mat_meat_cursed": "Cursed meat", + "mat_meat_slime_cursed": "Slimy cursed meat", + "mat_meat_teleport": "Ethereal meat", + "mat_meat_polymorph": "Unstable meat", + "mat_meat_confusion": "Ambiguous meat", + "mat_bloodgold_box2d": "Ruby", + "mat_magic_liquid_faster_levitation": "levitatium", + "mat_magic_liquid_faster_levitation_and_movement": "hastium", + "mat_magic_gas_hp_regeneration": "Healium", + "mat_meat_polymorph_protection": "Stinky meat", + "animal_slimeshooter_weak": "Heikko limanuljaska", + "animal_wraith": "Hyypiö", + "animal_wraith_glowing": "Hohtava hyypiö", + "animal_necromancer_shop": "Stevari", + "animal_mine": "Maamiina", + "animal_fungus_big": "Nuijamalikka", + "animal_lurker": "Varjokupla", + "animal_scavenger_invis": "Häivehiisi", + "animal_scavenger_shield": "Kilpihiisi", + "animal_frog_big": "Jättikonna", + "animal_tank_super": "Laser-tankki", + "animal_plague_rats_rat": "Ruttorotta", + "animal_giantshooter_weak": "Heikko äitinuljaska", + "animal_acidshooter_weak": "Heikko happonuljaska", + "animal_wraith_storm": "Ukkoshyypiö", + "animal_skycrystal_physics": "Taivaskristalli", + "animal_slimeshooter_nontoxic": "Limanuljaska", + "animal_turret_right": "Torjuntalaite", + "animal_turret_left": "Torjuntalaite", + "animal_necromancer": "Hahmonvaihtaja", + "animal_lukki_tiny": "Pikkuhämähäkki", + "animal_spearbot": "Peitsivartija", + "animal_ultimate_killer": "Kauhuhirviö", + "animal_goblin_bomb": "Sähikäismenninkäinen", + "animal_pebble_physics": "Lohkare", + "animal_chest_leggy": "Jalkamatkatavara", + "animal_boss_centipede": "Kolmisilmä", + "animal_failed_alchemist": "Kadotettu alkemisti", + "animal_failed_alchemist_b": "Epäalkemisti", + "animal_enlightened_alchemist": "Valaistunut alkemisti", + "animal_lasergun": "Laserkanuuna", + "animal_monk": "Munkki", + "animal_statue": "Patsas", + "animal_boss_alchemist": "Ylialkemisti", + "animal_wizard_returner": "Palauttajamestari", + "animal_wizard_swapper": "Vaihdosmestari", + "animal_drone_lasership": "Jättilaser-lennokki", + "animal_shaman": "Märkiäinen", + "actiondesc_cloud_acid ": "Creates a rain of acid ", + "actiondesc_damage_x2": "Spells cast alongside this spell deal double damage", + "actiondesc_damage_x5": "Spells cast alongside this spell deal quintuple damage", + "actiondesc_unstable_gunpowder": "Makes a projectile release firecrackers when it disappears", + "actiondesc_slow_bullet_timer": "A slow but powerful orb of energy that casts another spell after a timer runs out", + "actiondesc_bouncy_orb_timer": "A fast, arcing projectile that casts another spell after a timer runs out", + "actiondesc_heal_bullet": "A magical bolt with rejuvenative powers", + "action_explosive_projectile": "Explosive projectile", + "action_explosion": "Explosion", + "actiondesc_arc_electric": "Creates arcs of lightning between projectiles (requires 2 projectile spells)", + "actiondesc_arc_fire": "Creates arcs of fire between projectiles (requires 2 projectile spells)", + "actiondesc_arc_gunpowder": "Creates arcs of gunpowder between projectiles (requires 2 projectile spells)", + "actiondesc_arc_poison": "Creates arcs of poison between projectiles (requires 2 projectile spells)", + "action_death_cross_big": "Giga death cross", + "actiondesc_death_cross_big": "A giant, deadly energy cross that explodes after a short time", + "action_area_damage": "Damage field", + "actiondesc_area_damage": "Gives a projectile an energy field that constantly deals 3.5 damage to nearby creatures", + "action_summon_rock": "Rock", + "actiondesc_summon_rock": "Create a mighty rock out of thin air", + "action_summon_egg": "Summon egg", + "actiondesc_summon_egg": "Summons an egg that houses a friendly creature", + "action_spitter_tier_2": "Large spitter bolt", + "actiondesc_spitter_tier_2": "A more powerful version of Spitter Bolt", + "action_spitter_tier_2_timer": "Large spitter bolt with timer", + "actiondesc_spitter_tier_2_timer": "A more powerful version of Spitter Bolt that casts another spell after a timer runs out", + "action_spitter_tier_3": "Giant spitter bolt", + "actiondesc_spitter_tier_3": "The most powerful version of Spitter Bolt", + "action_spitter_tier_3_timer": "Giant spitter bolt with timer", + "actiondesc_spitter_tier_3_timer": "The most powerful version of Spitter Bolt that casts another spell after a timer runs out", + "action_transmutation": "Chaotic transmutation", + "actiondesc_transmutation": "Transmutes various liquids and powdery substances within a projectile's range into something else", + "action_toxic_to_acid": "Toxic sludge to acid", + "actiondesc_toxic_to_acid": "Makes any toxic sludge within a projectile's range turn into acid", + "action_summon_wandghost": "Summon Taikasauva", + "actiondesc_summon_wandghost": "Summons a possessed wand to aid you", + "action_touch_gold": "Touch of Gold", + "actiondesc_touch_gold": "Transmutes everything in a short radius into gold, including walls, creatures... and you", + "action_touch_water": "Touch of Water", + "actiondesc_touch_water": "Transmutes everything in a short radius into water, including walls, creatures... and you", + "action_touch_oil": "Touch of Oil", + "actiondesc_touch_oil": "Transmutes everything in a short radius into oil, including walls, creatures... and you", + "action_touch_alcohol": "Touch of Spirits", + "actiondesc_touch_alcohol": "Transmutes everything in a short radius into alcohol, including walls, creatures... and you", + "action_touch_blood": "Touch of Blood", + "actiondesc_touch_blood": "Transmutes everything in a short radius into blood, including walls, creatures... and you", + "action_touch_smoke": "Touch of Smoke", + "actiondesc_touch_smoke": "Transmutes everything in a short radius into smoke, including walls, creatures... and you", + "action_destruction": "Destruction", + "actiondesc_destruction": "Instantly decimates foes around you, at the cost of your HP", + "action_projectile_transmutation_field": "Projectile transmutation field", + "actiondesc_projectile_transmutation_field": "Projectiles caught within the field transform into harmless critters", + "action_chaotic_arc": "Chaotic path", + "actiondesc_chaotic_arc": "Causes a projectile to chaotically fly wherever it wishes", + "action_projectile_thunder_field": "Projectile thunder field", + "actiondesc_projectile_thunder_field": "Projectiles caught within the field transform into blasts of lightning", + "action_projectile_gravity_field": "Projectile gravity field", + "actiondesc_projectile_gravity_field": "Projectiles caught within the field are attracted towards its center", + "action_fly_downwards": "Fly downwards", + "actiondesc_fly_downwards": "Causes a projectile to aim straight downwards a short time after casting", + "action_fly_upwards": "Fly upwards", + "actiondesc_fly_upwards": "Causes a projectile to aim straight upwards a short time after casting", + "action_horizontal_arc": "Horizontal path", + "actiondesc_horizontal_arc": "Forces a projectile on a horizontal path, but increases its damage", + "action_luminous_drill": "Luminous drill", + "actiondesc_luminous_drill": "A pinpointed, short-ranged beam of concentrated light", + "action_luminous_drill_timer": "Luminous drill with timer", + "actiondesc_luminous_drill_timer": "A pinpointed, short-ranged beam of concentrated light that casts another spell after a timer runs out", + "action_hitfx_explosion_slime": "Explosion on slimy enemies", + "actiondesc_hitfx_explosion_slime": "Makes a projectile explode upon collision with creatures covered in slime", + "action_hitfx_explosion_slime_giga": "Giant explosion on slimy enemies", + "actiondesc_hitfx_explosion_slime_giga": "Makes a projectile explode powerfully upon collision with creatures covered in slime", + "action_hitfx_explosion_alcohol": "Explosion on drunk enemies", + "actiondesc_hitfx_explosion_alcohol": "Makes a projectile explode upon collision with creatures covered in alcohol", + "action_hitfx_explosion_alcohol_giga": "Giant explosion on drunk enemies", + "actiondesc_hitfx_explosion_alcohol_giga": "Makes a projectile explode powerfully upon collision with creatures covered in alcohol", + "action_fireball_ray_enemy": "Personal fireball thrower", + "actiondesc_fireball_ray_enemy": "Makes a projectile turn the creatures it hits into living fireball throwers", + "action_lightning_ray": "Lightning thrower", + "actiondesc_lightning_ray": "Makes a projectile cast lightning in random directions", + "action_lightning_ray_enemy": "Personal lightning caster", + "actiondesc_lightning_ray_enemy": "Makes a projectile turn the creatures it hits into living thunderstorms", + "action_tentacle_ray": "Tentacler", + "actiondesc_tentacle_ray": "Makes a projectile cast tentacles in random directions", + "action_tentacle_ray_enemy": "Personal tentacler", + "actiondesc_tentacle_ray_enemy": "Makes creatures hit by a projectile grow tentacles in a chaotic manner", + "action_hitfx_toxic_charm": "Charm on toxic sludge", + "actiondesc_hitfx_toxic_charm": "Makes a projectile charm creatures covered in toxic sludge", + "action_tentacle_portal": "Eldritch portal", + "actiondesc_tentacle_portal": "Summons a one-way portal to a sinister realm", + "action_static_to_sand": "Ground to sand", + "actiondesc_static_to_sand": "Makes any hard, solid materials within a projectile's range turn into sand", + "action_gravity_field_enemy": "Personal gravity field", + "actiondesc_gravity_field_enemy": "Makes creatures hit by a projectile gain a temporary gravity well that draws projectiles in", + "action_summon_hollow_egg": "Summon hollow egg", + "actiondesc_summon_hollow_egg": "Summons an otherwise empty egg that casts a spell upon cracking open", + "action_buckshot": "Triplicate bolt", + "actiondesc_buckshot": "A formation of three small, fast bolts", + "action_lifetime": "Increase lifetime", + "actiondesc_lifetime": "Increases the lifetime of a spell", + "action_mana_reduce": "Add mana", + "actiondesc_mana_reduce": "Adds 30 mana to the wand", + "action_shortlived_shot": "Shortlived spell", + "actiondesc_shortlived_shot": "Makes a projectile lasts only a very short amount of time, but deal more damage", + "action_wall_horizontal": "Horizontal barrier", + "actiondesc_wall_horizontal": "A thin, horizontal barrier that harms passing creatures, including you", + "action_wall_vertical": "Vertical barrier", + "actiondesc_wall_vertical": "A thin, vertical barrier that harms passing creatures, including you", + "action_wall_square": "Square barrier", + "actiondesc_wall_square": "A thin, square-shaped barrier that harms passing creatures, including you", + "action_purple_explosion_field": "Glittering field", + "actiondesc_purple_explosion_field": "Small explosions appear randomly over a large area", + "action_light_shot": "Light shot", + "actiondesc_light_shot": "Makes a projectile move considerably faster, but deal less damage", + "action_commander_bullet": "Commander bolt", + "actiondesc_commander_bullet": "Any projectiles shot alongside the command bolt will be attracted to it. Casts 3 extra spells upon being cast", + "action_disc_bullet_big": "Giga disc projectile", + "actiondesc_disc_bullet_big": "Summons a large, serrated disc with a curious flight pattern", + "action_bounce_explosion": "Explosive bounce", + "actiondesc_bounce_explosion": "Makes a projectile explode as it bounces", + "action_rocket_downwards": "Downwards bolt bundle", + "actiondesc_rocket_downwards": "Makes a projectile separate into a bundle of 5 explosive bolts as soon as it moves downwards", + "action_piercing_shot": "Piercing shot", + "actiondesc_piercing_shot": "Makes a projectile fly through enemies, but harmful to the caster", + "action_clipping_shot": "Drilling shot", + "actiondesc_clipping_shot": "Gives a projectile the power to go through the ground", + "action_delayed_spell": "Delayed spellcast", + "actiondesc_delayed_spell": "A static, magical phenomenon that casts 3 extra spells after a short while", + "action_turret_spell": "Guarding spellcast", + "actiondesc_turret_spell": "A static, magical phenomenon that casts 3 extra spells if an enemy approaches it", + "action_accelerating_shot": "Accelerating shot", + "actiondesc_accelerating_shot": "Causes a projectile to accelerate as it flies", + "action_avoiding_arc": "Avoiding arc", + "actiondesc_avoiding_arc": "Makes a projectile shy away from obstacles", + "action_lifetime_down": "Reduce lifetime", + "actiondesc_lifetime_down": "Reduces the lifetime of a spell", + "action_long_distance_cast": "Long-distance cast", + "actiondesc_long_distance_cast": "Casts a spell some distance away from the caster", + "action_teleport_cast": "Teleporting cast", + "actiondesc_teleport_cast": "Casts a spell from the closest enemy", + "action_heavy_spread": "Heavy spread", + "actiondesc_heavy_spread": "Gives a projectile a much lower cast delay, but no respect to your aim", + "action_ocarina_a": "Ocarina - note A", + "actiondesc_ocarina_a": "Music for your ears!", + "action_ocarina_b": "Ocarina - note B", + "actiondesc_ocarina_b": "Music for your ears!", + "action_ocarina_c": "Ocarina - note C", + "actiondesc_ocarina_c": "Music for your ears!", + "action_ocarina_d": "Ocarina - note D", + "actiondesc_ocarina_d": "Music for your ears!", + "action_ocarina_e": "Ocarina - note E", + "actiondesc_ocarina_e": "Music for your ears!", + "action_ocarina_f": "Ocarina - note F", + "actiondesc_ocarina_f": "Music for your ears!", + "action_ocarina_gsharp": "Ocarina - note G#", + "actiondesc_ocarina_gsharp": "Music for your ears!", + "action_ocarina_a2": "Ocarina - note A2", + "actiondesc_ocarina_a2": "Music for your ears!", + "action_chain_bolt": "Chain bolt", + "actiondesc_chain_bolt": "Fires a mysterious bolt that jumps from enemy to enemy", + "action_glitter_bomb": "Glitter bomb", + "actiondesc_glitter_bomb": "Summons a bomb that explodes into volatile fragments", + "action_fireball_ray_line": "Two-way fireball thrower", + "actiondesc_fireball_ray_line": "Makes a projectile fire small fireballs perpendicular to its trajectory", + "action_pingpong_path": "Ping-pong path", + "actiondesc_pingpong_path": "Makes a projectile fly back and forth", + "action_floating_arc": "Floating arc", + "actiondesc_floating_arc": "Makes a projectile float above the ground", + "action_teleport_projectile_static": "Return", + "actiondesc_teleport_projectile_static": "After a period of time, you'll be returned to where you cast this spell", + "action_freezing_gaze": "Freezing gaze", + "actiondesc_freezing_gaze": "A heart-freezingly sinister aura", + "action_glowing_bolt": "Pinpoint of light", + "actiondesc_glowing_bolt": "An extremely concentrated point of light that explodes after a moment", + "action_random_explosion": "Chaos magic", + "actiondesc_random_explosion": "Makes a projectile launch a random spell (out of a limited selection) when it hits something", + "action_decelerating_shot": "Decelerating shot", + "actiondesc_decelerating_shot": "Makes a projectile decelerate as it flies", + "action_rocket_octagon": "Octagonal bolt bundle", + "actiondesc_rocket_octagon": "Makes a projectile launch 8 magical bolts if it moves slowly enough", + "action_blood_magic": "Blood magic", + "actiondesc_blood_magic": "Reduces a spell's mana cost and recharge time greatly, at the costs of four health points", + "action_fizzle": "Fizzle", + "actiondesc_fizzle": "Gives a spell a small probability of short-circuiting", + "action_super_teleport_cast": "Warp cast", + "actiondesc_super_teleport_cast": "Makes a spell immediately jump a long distance, stopped by walls", + "action_bounce_laser": "Concentrated light bounce", + "actiondesc_bounce_laser": "Makes a projectile release a bundle of concentrated light as it bounces", + "action_magic_shield": "Magic guard", + "actiondesc_magic_shield": "Four guarding lights rotate around you for a time", + "action_big_magic_shield": "Big magic guard", + "actiondesc_big_magic_shield": "Eight guarding lights rotate around you for a time", + "action_swarm_fly": "Summon fly swarm", + "actiondesc_swarm_fly": "Summons five flies to aid you in battle", + "action_swarm_firebug": "Summon Firebug swarm", + "actiondesc_swarm_firebug": "Summons four fire bugs to aid you in battle", + "action_swarm_wasp": "Summon Wasp swarm", + "actiondesc_swarm_wasp": "Summon six wasps to aid you in battle", + "action_friend_fly": "Summon Friendly fly", + "actiondesc_friend_fly": "Summons a friendly fly that attacks your enemies!", + "action_duplicate": "Spell duplication", + "actiondesc_duplicate": "Duplicates every spell cast before it", + "action_infestation": "Infestation", + "actiondesc_infestation": "A bunch of magical sparks that fly in every direction", + "action_crumbling_earth_projectile": "Earthquake shot", + "actiondesc_crumbling_earth_projectile": "Makes a projectile crumble the earth it hits", + "action_random_spell": "Random spell", + "actiondesc_random_spell": "Casts a spell, any spell, at random!", + "action_random_projectile": "Random projectile spell", + "actiondesc_random_projectile": "Casts one random projectile spell", + "action_random_modifier": "Random modifier spell", + "actiondesc_random_modifier": "Casts one random modifier spell", + "action_random_static_projectile": "Random static projectile spell", + "actiondesc_random_static_projectile": "Casts one random static projectile spell", + "action_draw_random": "Copy random spell", + "actiondesc_draw_random": "Casts a random spell among the spells in your wand", + "action_draw_random_x3": "Copy random spell thrice", + "actiondesc_draw_random_x3": "Casts a random spell among the spells in your wand three times!", + "action_draw_3_random": "Copy three random spells", + "actiondesc_draw_3_random": "Casts three random spells among the spells in your wand", + "action_damage_random": "Random damage", + "actiondesc_damage_random": "Randomly increases or lowers the damage done by projectiles", + "action_alpha": "Alpha", + "actiondesc_alpha": "Casts a copy of the first spell in your wand", + "action_omega": "Omega", + "actiondesc_omega": "Casts copies of every spell in your wand", + "action_gamma": "Gamma", + "actiondesc_gamma": "Casts a copy of the last spell in your wand", + "action_divide_2": "Divide by 2", + "actiondesc_divide_2": "Casts the next spell twice, but with reduced damage", + "action_divide_3": "Divide by 3", + "actiondesc_divide_3": "Casts the next spell 3 times, but with reduced damage", + "action_divide_4": "Divide by 4", + "actiondesc_divide_4": "Casts the next spell 4 times, but with reduced damage", + "action_divide_10": "Divide by 10", + "actiondesc_divide_10": "Casts the next spell 10 times, but with reduced damage", + "action_all_nukes": "Spells to nukes", + "actiondesc_all_nukes": "Transforms every projectile currently in the air into a nuke; not a good idea", + "action_all_discs": "Spells to giga sawblades", + "actiondesc_all_discs": "Transforms every projectile currently in the air into a giant sawblade", + "action_all_blackholes": "Spells to black holes", + "actiondesc_all_blackholes": "Transforms every projectile currently in the air into a black hole", + "action_all_rockets": "Spells to magic missiles", + "actiondesc_all_rockets": "Transforms every projectile currently in the air into a magic missile", + "action_all_deathcrosses": "Spells to death crosses", + "actiondesc_all_deathcrosses": "Transforms every projectile currently in the air into a death cross", + "action_all_acid": "Spells to acid", + "actiondesc_all_acid": "Transforms every projectile currently in the air into a pool of acid", + "action_all_spells": "The end of everything", + "actiondesc_all_spells": "You're heavily advised not to cast this spell.", + "action_add_trigger": "Add trigger", + "actiondesc_add_trigger": "Makes a projectile cast another spell upon collision", + "action_add_timer": "Add timer", + "actiondesc_add_timer": "Makes a projectile cast another spell after a short time", + "action_add_death_trigger": "Add expiration trigger", + "actiondesc_add_death_trigger": "Makes a projectile cast another spell upon expiring", + "action_copy_spell": "Copy spell", + "actiondesc_copy_spell": "Copies a projectile near you", + "action_copy_field": "Copy field", + "actiondesc_copy_field": "A magical field that copies any projectiles near it", + "action_larpa_chaos": "Chaos larpa", + "actiondesc_larpa_chaos": "Makes a projectile cast copies of itself in random directions", + "action_larpa_downwards": "Downwards larpa", + "actiondesc_larpa_downwards": "Makes a projectile cast copies of itself with a downwards trajectory", + "action_larpa_upwards": "Upwards larpa", + "actiondesc_larpa_upwards": "Makes a projectile cast copies of itself with an upwards trajectory", + "action_delta": "Delta", + "actiondesc_delta": "Casts a copy of the next spell in your wand", + "action_larpa_chaos_2": "Copy trail", + "actiondesc_larpa_chaos_2": "Makes a projectile leave a trail of copies of itself", + "actiondesc_chainsaw": "A good tool for cutting meat. Also has some magical properties...", + "action_spore_pod": "Prickly Spore Pod", + "actiondesc_spore_pod": "Summons a spore pod that attaches to a surface and then grows and explodes into spikes", + "action_energy_shield_shot": "Projectile energy shield", + "actiondesc_energy_shield_shot": "Gives a projectile a shield that deflects other projectiles", + "action_autoaim": "Auto-Aim", + "actiondesc_autoaim": "Makes a projectile turns towards the nearest visible enemy", + "action_homing_rotate": "Rotate towards foes", + "actiondesc_homing_rotate": "Makes a projectile turn towards your foes", + "actiondesc_homing": "Makes a projectile accelerate towards your foes", + "action_swapper_projectile": "Swapper", + "actiondesc_swapper_projectile": "It was theorized that the source of qualia would be transferred …But it turns out it was the whole body all along.", + "action_propane_tank": "Propane tank", + "actiondesc_propane_tank": "Summons a propane tank. Be careful what you wish for.", + "action_megalaser": "Intense concentrated light", + "actiondesc_megalaser": "A spectral wand is summoned that casts a huge beam of light", + "action_bomb_cart": "Bomb cart", + "actiondesc_bomb_cart": "Summons a self-propeled mine cart loaded with explosives", + "action_tiny_ghost": "Summon Tiny Ghost", + "actiondesc_tiny_ghost": "Summons a tiny ethereal being to your help. It may cast stronger spells depending on how much damage you have suffered.", + "action_bounce_spark": "Bubbly bounce", + "actiondesc_bounce_spark": "Makes a projectile shoot bubble sparks as it bounces", + "action_cursed_orb": "Cursed sphere", + "actiondesc_cursed_orb": "A projectile that brings bad luck to anyone it hits", + "action_kantele_a": "Kantele - note A", + "actiondesc_kantele_a": "Music for your ears!", + "action_kantele_b": "Kantele - note B", + "actiondesc_kantele_b": "Music for your ears!", + "action_kantele_c": "Kantele - note C", + "actiondesc_kantele_c": "Music for your ears!", + "action_kantele_d": "Kantele - note D", + "actiondesc_kantele_d": "Music for your ears!", + "action_kantele_e": "Kantele - note E", + "actiondesc_kantele_e": "Music for your ears!", + "action_kantele_f": "Kantele - note F", + "actiondesc_kantele_f": "Music for your ears!", + "action_kantele_gsharp": "Kantele - note G#", + "actiondesc_kantele_gsharp": "Music for your ears!", + "action_kantele_a2": "Kantele - note A2", + "actiondesc_kantele_a2": "Music for your ears!", + "action_kantele_dis": "Kantele - note D#", + "actiondesc_kantele_dis": "Music for your ears!", + "action_kantele_g": "Kantele - note G", + "actiondesc_kantele_g": "Music for your ears!", + "perk_hearts_more_extra_hp": "Stronger Hearts", + "perkdesc_hearts_more_extra_hp": "Hearts bestow more maximum health.", + "perk_extra_perk": "Extra Perk", + "perkdesc_extra_perk": "From now on you will find an extra perk in every Holy Mountain.", + "perk_perks_lottery": "Perk Lottery", + "perkdesc_perks_lottery": "When you pick a perk, there's a 50% chance the others won't disappear.", + "perk_genome_more_hatred": "More Hatred", + "perkdesc_genome_more_hatred": "Creatures become more aggressive towards each other.", + "perk_genome_more_love": "More Love", + "perkdesc_genome_more_love": "Creatures become more friendly towards each other.", + "perk_random_allies": "Random Allies", + "perkdesc_random_allies": "You're allies with a random enemy group.", + "perk_remove_fog_of_war": "All-Seeing Eye", + "perkdesc_remove_fog_of_war": "You can see everywhere.", + "perk_attract_items": "Attract Gold", + "perkdesc_attract_items": "Gold nuggets gravitate towards you.", + "perk_strong_kick": "Never Skip Leg Day", + "perkdesc_strong_kick": "Your kicks deal extra damage and knockback.", + "perk_projectile_repulsion": "Projectile Repulsion Field", + "perkdesc_projectile_repulsion": "Most projectiles are repulsed by your presence, but you take slightly more projectile damage.", + "perkdesc_bleed_slime": "You bleed slime, but slime no longer slows you down and you have higher projectile resistance.", + "perk_multiply_hp": "Multiplied HP, No Healing", + "perkdesc_multiply_hp": "Your HP has been multiplied but you can no longer regain HP.", + "perk_bleed_oil": "Oil Blood", + "perkdesc_bleed_oil": "You bleed flammable oil, but are immune to fire.", + "perk_golden_i": "Golden I", + "perkdesc_golden_i": "Gold that you've seen no longer disappears over time.", + "perk_no_player_knockback": "Knockback Immunity", + "perkdesc_no_player_knockback": "Knockback does not affect you.", + "perk_extra_knockback": "Extra Knockback on Spells", + "perkdesc_extra_knockback": "Your spells knock enemies around with more force.", + "perk_lower_spread": "Concentrated Spells", + "perkdesc_lower_spread": "Your spells have lower spread and extra damage, but have increased cast delay.", + "perk_bounce": "Bouncing Spells", + "perkdesc_bounce": "Almost all your spells bounce around and last longer.", + "perk_projectile_homing_shooter": "Boomerang Spells", + "perkdesc_projectile_homing_shooter": "Your spells arc towards you, but gain extra speed and deal extra damage.", + "perk_worm_attractor": "Worm Attractor", + "perkdesc_worm_attractor": "Worms find you attractive.", + "perk_worm_detractor": "Worm Detractor", + "perkdesc_worm_detractor": "Worms run from you.", + "perk_speed_diver": "Fast Swimming", + "perkdesc_speed_diver": "You are an expert swimmer!", + "perk_revenge_tentacle": "Revenge Tentacle", + "perkdesc_revenge_tentacle": "You summon a monstrous tentacle upon taking damage, and gain 25% resistance against projectiles.", + "perk_attack_foot": "Lukki Mutation", + "perkdesc_attack_foot": "You grow curious additional limbs that fight for you.", + "perk_plague_rats": "Plague Rats", + "perkdesc_plague_rats": "Dying enemies release rats to serve your bidding! All rats become your friend.", + "perk_radar_enemy": "Enemy Radar", + "perkdesc_radar_enemy": "You can sense nearby enemies.", + "perk_radar_wand": "Wand Radar", + "perkdesc_radar_wand": "You can sense nearby wands.", + "perk_unlimited_spells": "Unlimited Spells", + "perkdesc_unlimited_spells": "Most spells are now unlimited.", + "perk_leggy_feet": "Leggy Mutation", + "perkdesc_leggy_feet": "You grow disturbing looking limbs that fight for you.", + "perk_always_cast": "Always Cast (One-off)", + "perkdesc_always_cast": "A random Always Cast spell is added to the wand in your hand, up to a maximum of 4.", + "perk_no_more_shuffle": "No More Shuffle", + "perkdesc_no_more_shuffle": "Most of the wands will be non shuffling. The wands you carry with you turn into non-shufflers too.", + "perk_vampirism": "Vampirism", + "perkdesc_vampirism": "You lose 25% maximum health, but can replenish health by drinking blood. Blood doesn't affect satiation level.", + "perk_no_wand_editing": "No Wand Tinkering", + "perkdesc_no_wand_editing": "Wands cannot be tinkered with, but enemies may drop blood money.", + "perk_telekinesis": "Telekinetic Kick", + "perkdesc_telekinesis": "You gain new telekinetic powers.", + "perk_projectile_duplicate": "Duplicated shots", + "perkdesc_projectile_duplicate": "Your spells duplicate as they hit obstacles.", + "perk_low_hp_damage_boost": "Living on the Edge", + "perkdesc_low_hp_damage_boost": "Your spells deal 3x damage when you're under 25 HP or 25% of maximum health.", + "perk_faster_levitation": "Faster Levitation", + "perkdesc_faster_levitation": "You levitate 75% faster.", + "perk_peace_with_steve": "Peace with Gods", + "perkdesc_peace_with_steve": "You make peace with your Gods.", + "perk_gold_is_forever": "Gold Is Forever", + "perkdesc_gold_is_forever": "Gold nuggets never disappear.", + "perk_wand_experimenter": "Wand Experimenter", + "perk_trick_blood_money": "Trick Blood Money", + "perkdesc_trick_blood_money": "Blood money is dropped when death is an accident.", + "perk_levitation_trail": "Levitation Trail", + "perkdesc_levitation_trail": "When levitating, you leave a trail of magical sparks that harm passing creatures.", + "perkdesc_wand_experimenter": "Firing newly found and unmodified wands heals you.", + "perk_protection_freeze": "Freezing Immunity", + "perkdesc_protection_freeze": "You cannot be frozen.", + "item_mcguffin": "Missing Key", + "itemdesc_mcguffin": "This has been said to complete the Work", + "item_mcguffin_0": "The Salt", + "itemdesc_mcguffin_0": "This has been said to complete the Work", + "item_mcguffin_1": "Our Matter", + "itemdesc_mcguffin_1": "This has been said to complete the Work", + "item_mcguffin_2": "Hermes bird", + "itemdesc_mcguffin_2": "This has been said to complete the Work", + "item_mcguffin_3": "White Eagle", + "itemdesc_mcguffin_3": "This has been said to complete the Work", + "item_mcguffin_4": "The Green Lion", + "itemdesc_mcguffin_4": "This has been said to complete the Work", + "item_mcguffin_5": "Red Lion", + "itemdesc_mcguffin_5": "This has been said to complete the Work", + "item_mcguffin_6": "Celestial Ruby", + "itemdesc_mcguffin_6": "This has been said to complete the Work", + "item_mcguffin_7": "Magnesia", + "itemdesc_mcguffin_7": "This has been said to complete the Work", + "item_mcguffin_8": "The Vessel of the Philosophers", + "itemdesc_mcguffin_8": "This has been said to complete the Work", + "item_mcguffin_9": "Our Blessed Stone", + "itemdesc_mcguffin_9": "This has been said to complete the Work", + "item_mcguffin_10": "Magnum Opus", + "itemdesc_mcguffin_10": "This has been said to complete the Work", + "item_mcguffin_11": "Philosopher's Stone", + "itemdesc_mcguffin_11": "This has been said to complete the Work", + "item_mcguffin_12": "Sampo", + "itemdesc_mcguffin_12": "This has been said to complete the Work", + "item_mcguffin_13": "True Knowledge", + "itemdesc_mcguffin_13": "You have completed the Work", + "item_perk_reroll": "Perk reroll", + "item_essence_fire": "Essence of Fire", + "itemdesc_essence_fire": "Your entire being is fluctuating!", + "item_essence_laser": "Essence of Earth", + "itemdesc_essence_laser": "Your being releases damaging light!", + "item_essence_air": "Essence of Air", + "itemdesc_essence_air": "Your being controls the air around you!", + "item_essence_water": "Essence of Water", + "itemdesc_essence_water": "The earth flows around you!", + "item_essence_alcohol": "Essence of Spirits", + "itemdesc_essence_alcohol": "That was not the best of ideas", + "item_chest_treasure_super": "Great treasure chest", + "item_rock": "Rock", + "itemdesc_rock": "It's a rock.", + "item_egg_hollow": "Hollow egg", + "itemdesc_egg_hollow": "I wonder if there's anything inside?", + "item_egg_worm": "Wiggling egg", + "item_description_egg_worm": "Something wiggles inside", + "item_egg_purple": "Chilly egg", + "item_description_egg_purple": "The egg feels cold", + "item_egg_fire": "Toasty egg", + "item_description_egg_fire": "The egg feels very warm", + "item_egg_slime": "Slimy egg", + "item_description_egg_slime": "The egg is covered in slime", + "item_flute": "Flutist's wand", + "item_weathercrystal_book": "Book of Balance", + "itemdesc_weathercrystal_book": "It is said that to attain great wealth one must be ready to break the very foundation of this world. However, would one do that, they'd be cursed. Yet their own greed is a curse on its own...", + "item_chest_dark": "Dark chest", + "item_weathercrystal": "Crystal of Balance", + "item_goldnugget_10": "Gold nugget (10)", + "item_goldnugget_50": "Gold nugget (50)", + "item_goldnugget_200": "Gold nugget (200)", + "item_goldnugget_1000": "Gold nugget (1000)", + "item_goldnugget_10000": "Golden Idol (10000)", + "item_runestone_laser": "Runestone of light", + "item_runestone_fireball": "Runestone of fire", + "item_runestone_lava": "Runestone of magma", + "item_runestone_disc": "Runestone of edges", + "item_runestone_null": "Runestone of emptiness", + "item_runestone_slow": "Runestone of weight", + "itemdesc_runestone": "A runestone with a strong magical aura. You feel like kicking it.", + "item_key": "Crystal key", + "itemdesc_key_0": "The key is voiceless.", + "itemdesc_key_1": "The key hums, but something is missing...", + "itemdesc_key_2": "The key whispers secrets and promises; it is ready.", + "item_description_potion_usage": "\n$0 on item - drink", + "item_jar": "Jar", + "item_description_jar": "Equip and spray or throw", + "item_jar_with_material": "$0 jar", + "item_broken_wand": "Broken wand", + "item_description_broken_wand": "This wand has snapped in half but it still crackles with magical energy", + "item_thunderstone": "Ukkoskivi", + "item_description_thunderstone": "This small rock makes you feel very charged.", + "item_brimstone": "Kiuaskivi", + "item_description_brimstone": "This tiny rock looks most fiery, but when touched only a pleasant warmth can be felt.", + "item_moon": "Kuu", + "item_description_moon": "This tiny celestial object has a strong gravitational pull.", + "item_waterstone": "Vuoksikivi", + "item_description_waterstone": "This small rock is hard and solid, yet seems to be gushing with water.", + "item_bloodmoney": "Bloody gold nugget", + "item_bloodmoney_10": "Bloody gold nugget (10)", + "item_bloodmoney_50": "Bloody gold nugget (50)", + "item_bloodmoney_200": "Bloody gold nugget (200)", + "item_bloodmoney_1000": "Bloody gold nugget (1000)", + "item_bloodmoney_10000": "Bloody golden Idol (10000)", + "item_die_roll": "The die is rolling...", + "item_die_1": "The die rolled a 1!", + "item_die_2": "The die rolled a 2!", + "item_die_3": "The die rolled a 3!", + "item_die_4": "The die rolled a 4!", + "item_die_5": "The die rolled a 5!", + "item_die_6": "The die rolled a 6!", + "item_die_bad": "You're extremely unlucky...!", + "item_die_good": "You're extremely lucky!", + "item_die": "Chaos die", + "itemdesc_die": "Roll it for various prizes!", + "itempickup_open": "Press $0 to open '$1'", + "itempickup_orb": "You discovered an orb of true Knowledge", + "itempickup_orb_evil": "You discovered an orb of corrupted Knowledge", + "itempickup_orb_discovered": "You found a familiar orb of true Knowledge", + "itempickupdesc_orb_discovered": "You're rewarded with additional health", + "itempickupdesc_orb_00": "Secrets of endless lava have been unlocked to you.", + "itempickupdesc_orb_01": "Secrets of Earth's anger have been unlocked to you.", + "itempickupdesc_orb_02": "Secrets of otherworldly life have been unlocked to you.", + "itempickupdesc_orb_03": "Secrets of utter destruction have been unlocked to you.", + "itempickupdesc_orb_04": "Secrets of Undeath have been unlocked to you.", + "itempickupdesc_orb_05": "Secrets of fire and brimstone have been unlocked to you.", + "itempickupdesc_orb_06": "Secrets of the Spiral have been unlocked to you.", + "itempickupdesc_orb_07": "Secrets of stormy skies have been unlocked to you.", + "itempickupdesc_orb_08": "Secrets of jubilation have been unlocked to you.", + "itempickupdesc_orb_09": "Secrets of hidden danger have been unlocked to you.", + "itempickupdesc_orb_10": "Secrets of rebuilding have been unlocked to you.", + "itempickupdesc_orb_11": "This secret should not have been available for you.", + "itempickupdesc_orb_13": "Secrets of great undoing have been unlocked to you.", + "menu_mods": "Mods", + "menu_mods_availablemods": "Available mods", + "menu_mods_availablemods_none": "No mods installed", + "menu_mods_enabled": "Enabled", + "menu_mods_moveup": "Move up", + "menu_mods_movedown": "Move down", + "menu_mods_help_exp": "This is an experimental feature.\nUse at your own risk. Only run mods from trusted sources!\nUpmost enabled mod will be loaded first.\nClick mod name to enable/disable the mod.", + "menu_mods_help": "Use mods at your own risk. Only run mods from trusted sources!\nUpmost enabled mod will be loaded first.\nClick mod name to enable/disable the mod.", + "menu_mods_help_paused": "Changes will be applied on next restart.", + "menu_mods_openmodfolder": "Open mod folder", + "menu_mods_restart": "Restart with enabled mods active", + "menu_mods_restart_tooltip": "Warning: some mods may not handle enabling/disabling ingame well - weirdness, bugs or crashes may occur.", + "menu_mods_newgame": "Start a new game with enabled mods active", + "menu_mods_refresh": "Refresh", + "menu_mods_reenablenotificiation": "This version changes how mods behave.\nMods need to be re-enabled via the “Mods” menu.", + "menu_mods_extraprivilegesareyousure": "This mod has requested extra privileges.\nIf enabled, it has full access to your computer,\neven without using possible exploits in the game code.\nAre you sure you want to trust this mod?", + "menu_mods_extraprivilegesnotification": "This mod has requested extra privileges.\nUnsafe mods need to be enabled to run this mod.", + "menu_mods_workshopsandboxnotification": "Workshop mods cannot be enabled while unsafe mods are on.", + "menu_mods_enablinginvalid": "This mod is broken and cannot be enabled [Error code #N0174H4X].", + "menu_mods_sandboxoffareyousure": "Enabling unsafe mods gives all installed mods full access to your computer.\nAre you sure?", + "menu_mods_sandboxoffareyousure_steam": "Enabling unsafe mods gives all installed mods full access to your computer.\nAre you sure?", + "menu_mods_sandboxoption": "Unsafe mods: $0", + "menu_mods_initerrors_title": "Errors occurred while initializing mods:", + "menu_mods_customactivation": "\nPlay this mod via the “New game” menu.", + "menu_mods_translationactivation": "\nEnable this translation via “Language” in the “Options” menu.", + "menu_mods_nameconflict": "Cannot enable multiple mods with the id “$0”.", + "menu_mods_installmods": "Get mods", + "menu_mods_installmods_steam": "Install mods using Workshop", + "menu_mods_workshopdownloading": "Downloading Workshop content $0", + "menu_mods_workshop_mod_tooltip": "This is a Steam Workshop mod.", + "menu_mods_disclaimernotification_exp": "This is an experimental feature.\nUse is at your own risk!\nYou should only run mods from trusted sources.", + "menu_mods_disclaimernotification": "Use of mods is at your own risk!\nYou should only run mods from trusted sources.", + "menu_mods_initerrors_log": "There were errors when initializing following mods: $0", + "menu_mods_workshopdownloading_noprogress": "Downloading Workshop content $0\nIf the downloads don't seem to progress,\nyou might need to change their priority in the Steam library downloads list.", + "menu_mods_modversion_older": "This mod has not been tested with the latest version of the modding interface.", + "menu_mods_modversion_newer": "This mod has been built with a newer version of the modding interface.\nA newer version of the game might be required.\nOr maybe the mod developer is just using a new version of the game,\nand everything is compatible.", + "menu_mods_incompatibilities": "Mods (!)", + "menu_mods_incompatibilities_tooltip": "Some mods have possible incompatibilities", + "option_allowed": "Allowed", + "option_disabled": "Disabled", + "menu_newgame_selectgamemode": "Select game mode", + "menu_quit": "Quit", + "menuautosave_text": "Autosave found. Looks like the game crashed?\nShould the game attempt to restore the autosave?", + "menuautosave_text_mods": "Some mods were enabled and might have caused the crash.", + "menuautosave_text_earlyaccess": "Noita is in early access, we'll try to fix this. :/", + "menuautosave_yes": "Restore", + "menuautosave_no": "Nah. Destroy it", + "menuoptions_configurecontrols_hint_gamepad": "Press B on a control to reset it to default ", + "menuoptions_configurecontrols_hint_keyboard": "Right click on a key binding to reset it to default", + "menuoptions_privacypolicy": "Privacy policy", + "menuoptions_showhoverinfonexttomouse": "Show hovered material/item name next to mouse: $0", + "menuoptions_replayrecorder_tooltip_exp": "EXPERIMENTAL FEATURE\nPress $0 to save a replay at any point in the game.\n\nSetting “Replay budget” too high might decrease performance\nor make the game crash. Use at your own risk!", + "menuoptions_replayrecorder_tooltip": "Press $0 to save a replay at any point in the game.\n\nSetting “Replay budget” too high might decrease performance\nor make the game crash. Use at your own risk!", + "menuoptions_application_rendered_cursor_hint": "Turn this on in case you can't see the mouse cursor.", + "menuoptions_general": "General", + "menuoptions_graphics": "Graphics", + "menuoptions_audio": "Audio", + "menuoptions_input": "Input", + "menuoptions_streaming": "Streaming", + "menuoptions_teleport_flash_brightness": "Teleport flash brightness", + "menuoptions_gamepaddetected": "Gamepad detected!\nEnable gamepads via the Input tab.", + "menuoptions_replaybudget": "Replay budget", + "menuoptions_heading_window": "WINDOW", + "menuoptions_heading_replayrecorder": "REPLAY RECORDER", + "menuoptions_heading_misc": "MISCELLANEOUS", + "menuoptions_heading_rendering": "RENDERING", + "menuoptions_heading_userinterface_graphics": "USER INTERFACE", + "menuoptions_heading_accessibility": "ACCESSIBILITY", + "menuoptions_heading_volume": "VOLUME", + "menuoptions_heading_userinterface_input": "USER INTERFACE", + "menuoptions_heading_gamepad": "GAMEPAD", + "menuoptions_heading_gameplay": "GAMEPLAY", + "menuoptions_heading_compatibility": "COMPATIBILITY", + "menuoptions_heading_streaming_integration": "TWITCH CHANNEL", + "menuoptions_heading_streaming_integration_config": "CONFIG", + "menuoptions_heading_streaming_integration_mods": "MODDING", + "menuoptions_heading_streaming_enabled_events": "ENABLED EVENTS", + "menuoptions_format_seconds": "$0 s", + "menuoptions_format_megabytes": "$0 MB", + "menuoptions_heading_online": "ONLINE", + "menuoptions_heading_userinterface_mouse": "MOUSE", + "menuoptions_heading_controls": "KEYBOARD/MOUSE", + "menuoptions_display_number": "Display number: $0", + "menuoptions_online_features": "Online features: $0", + "menuoptions_online_features_hint": "Turn off to prevent the game from connecting to Nolla Games' servers.\nThis may prevent some features from working.", + "menuoptions_capturemouseinsidewindow": "Lock mouse inside the window: $0", + "menuoptions_pause_the_game_when_unfocused": "Pause the game when unfocused: $0", + "menuoptions_ui_snappy_hover_boxes": "Inventory hover box animations: $0", + "menuoptions_dithering": "Anti color banding (dithering): $0", + "menuoptions_configuregamepad": "Configure gamepad controls", + "menuoptions_gamepad_analog_flying": "Gamepad analog flying: $0", + "menuoptions_ui_allow_shooting_while_inventory_open": "Allow firing of wands while inventory is open: $0", + "menuoptions_gamepad_throwsprayscheme": "New gamepad throw/spray scheme: $0", + "menuoldsavegame_text": "A save game with old version was detected.\nWould you like to continue it? (Weird things may occur.)", + "menuoldsavegame_text_update9": "Empty chunks may appear in the world after loading.\nHeed my warning - this may anger the Gods!\nWould you like to continue?", + "menu_secretmode": "Secret Mode", + "menu_selectworld": "Select world", + "menu_playtime": "$0h $1 min", + "menu_startnewworld": "Start new world", + "menu_worldselect_deleteareyousure": "Are you sure you want to delete the world in slot $0?\nThis cannot be undone.", + "menu_worldselect_deleteareyousure_playing": "Are you sure you want to delete the world you're currently playing?\nThis cannot be undone.", + "menu_worldselect_slot": "World $0", + "menu_worldselect_slot_playing": "World $0 – PLAYING", + "menu_switchthrowandspray": "We've changed the default values of a few settings:\n-Input bindings for Throw and Spray have been swapped around.\n-Inventory needs to be closed to cast spells.\nWould you like to enable the new defaults? These can be changed in the Options menu.", + "menu_newgame_modschangedrestart": "The game will restart due to mod changes.", + "menu_progress_new": "Progress ($0 new)", + "menu_streamermode": "Streamer mode: $0", + "menu_streaming_description": "Let stream viewers interact with your game through the Twitch chat.", + "menu_streaming_description_details": "Chat messages “1”, “2”, “3” and “4” will be counted as votes towards\nvarious events that are selected from a random pool.", + "menu_streaming_connect": "Connect", + "menu_streaming_disconnect": "Disconnect", + "menu_streaming_connect_twitch": "Connect to Twitch account", + "menu_streaming_status_connecting": " - CONNECTING...", + "menu_streaming_status_connected": " - CONNECTED", + "menu_streaming_status_failed_unknown": " - CONNECTION FAILED", + "menu_streaming_status_failed_serverconnection": " - COULDN'T FIND SERVER", + "menu_streaming_status_failed_timeout": " - TIMEOUT - NO SUCH CHANNEL?", + "menu_streaming_connected": "Connected to Twitch account: $0", + "menu_streaming_connect_failed": "Twitch authentication failed", + "menu_streaming_option": "Streaming integration: $0", + "menu_streaming_channelname": "Channel name:", + "menu_streaming_voting": "Chat votes: $0", + "menu_streaming_voting_hint": "Allow stream viewers to vote on events that take place in the game.", + "menu_streaming_allowusernames": "Display user names", + "menu_streaming_allowusernames_hint": "Allow events that display chat user names", + "menu_streaming_timebetweenvotes": "Time between votes", + "menu_streaming_timebetweenvotes_hint": "", + "menu_streaming_timevoting": "Voting time", + "menu_streaming_timevoting_hint": "The duration of a single vote", + "menu_streaming_playvotesound": "Play sound on new vote: $0", + "menu_streaming_distribution": "Vote event distribution", + "menu_streaming_distribution_hint": "Awful = very likely to ruin your run..\nBad = bad things can happen.\nNeutral = not necessarily goot or bad.\nGood = more health and other helpful events.", + "menu_streaming_distribution_awful": "Awful", + "menu_streaming_distribution_bad": "Bad", + "menu_streaming_distribution_neutral": "Neutral", + "menu_streaming_distribution_good": "Good", + "menu_streaming_usernames_ghosts": "Tiny ghosts can be named after viewers: $0", + "menu_streaming_usernames_rats": "Rats can be named after viewers: $0", + "menu_streaming_installmods": "Install streaming integration mods", + "menu_streaming_mod": "Streaming integration content mod", + "streaming_integration_connectionerror": "Connection error!", + "streaming_integration_nextvotein": "Next vote in $0 s", + "streaming_integration_voteendsin": "Voting ends in $0 s", + "streaming_integration_voteoptionformat": "$0 ($1) <$2", + "streaming_integration_votetie": "It's a tie! Picking random winner", + "streaming_integration_winner": "The winner is:", + "menu_replayedit_writinggif": "Writing gif - please wait – press $0 to cancel", + "menu_replayedit_writinggif_frameprogress": "Frame - $0 / $1 - $2%", + "menu_replayedit_writinggif_timeremaining": "$0 s remaining", + "menu_replayedit_returntogame": "Return to game $0", + "menu_replayedit_title_keyboard_exp": "REPLAY CLIP EDITOR (experimental) - Right/Left click on frames to set clip start and end points.", + "menu_replayedit_title_gamepad_exp": "REPLAY CLIP EDITOR (experimental) - [A] - start clip on hovered frame. [B] - end clip on hovered frame.", + "menu_replayedit_title_keyboard": "REPLAY CLIP EDITOR - Right/Left click on frames to set clip start and end points.", + "menu_replayedit_title_gamepad": "REPLAY CLIP EDITOR - [A] - start clip on hovered frame. [B] - end clip on hovered frame.", + "menu_replayedit_saveasgif": "Save as Gif [ENTER]", + "menu_replayedit_opengifdir": "Open gif directory", + "menu_replayedit_size": "Size: ", + "menu_replayedit_full": "Full", + "menu_replayedit_sizeformat": "$0x$1", + "menu_replayedit_outputscale": "Output scale: $0%", + "menu_replayedit_outputinfo1": "Output: $0 frames - $1s", + "menu_replayedit_outputinfo2": " - $0x$1 px", + "menu_replayedit_startclip_gamepad": "[A] - start clip on hovered frame. ", + "menu_replayedit_startclip_keyboard": "Left click - start clip on hovered frame. ", + "menu_replayedit_endclip_gamepad": "[B] - end clip on hovered frame. ", + "menu_replayedit_endclip_keyboard": "Right click - end clip on hovered frame.", + "menu_replayedit_frame": " Frame = $0", + "menu_replayedit_imagecenter": "Left click - set image center.", + "progress_new": "$0 (new)", + "log_golden_statue": "Picked a golden statue", + "logdesc_golden_statue": "You got $0 gold!", + "logdesc_heart_evil": "Increased maximum health to $0 ...with the cost of being cursed!", + "log_altar_magic": "Your curiosity is rewarded", + "log_altar_magic_monster": "Your curiosity is rewarded, but...", + "log_altar_magic_worm": "That is not what you seek!", + "log_moon_altar": "The four essences reveal their secret", + "logdesc_moon_altar": "The moon's egg cracks open. Its contents have been unlocked", + "logdesc_moon_altar_drunk": "The moon spills and unlocks its inebriating contents", + "log_heart_fullhp_temple": "Picked up Full Health Regeneration", + "logdesc_heart_fullhp_temple": "Increased maximum health by $0 and restored health to $1 (regained $2 health)", + "log_worm_deflector_death": "The worm crystal has shattered!", + "logdesc_worm_deflector_death": "You feel less safe...", + "logdesc_heart_fullhp": "Restored health to $0 (regained $1 health)", + "log_ocarina": "The world around you changes!", + "logdesc_ocarina": "Your music released strange energies", + "log_ocarina_done": "Seems like the musical energy is gone...", + "log_overingestion_00": "You're choking on food", + "log_overingestion_01": "Eating any more might kill you", + "log_overingestion_02": "You're choking on food", + "log_overingestion_03": "Eating any more might kill you", + "log_overingestion_04": "You're choking on food", + "log_overingestion_05": "Eating any more might kill you", + "log_overingestion_exploding_00": "You're bursting at the seams", + "log_overingestion_exploding_01": "You're feeling like you'll soon explode", + "log_overingestion_exploding_02": "You're bursting at the seams", + "log_overingestion_exploding_03": "You're feeling like you'll soon explode", + "log_overingestion_exploding_04": "You're feeling an explosive tightness in your stomach", + "log_overingestion_exploding_05": "You're feeling an explosive tightness in your stomach", + "log_kantele": "The world around you changes!", + "logdesc_kantele": "Your music released strange energies", + "log_kantele_done": "Seems like the musical energy is gone...", + "log_alchemist_key_first": "The key begins to hum!", + "logdesc_alchemist_key_first": "Something is still missing...", + "log_alchemist_key_second": "The key begins to whisper!", + "logdesc_alchemist_key_second": "”I can give you so much in exchange for...”", + "log_alchemist_key_invalid": "Nothing seemed to happen...", + "log_alchemist_chest_open": "The glass key speaks!", + "logdesc_alchemist_chest_open": "The chest listens", + "log_alchemist_chest_opened": "The glass key speaks again!", + "logdesc_alchemist_chest_opened": "The chest keeps listening", + "log_castdelaying": "CAST DELAY...", + "log_weathercrystal_broken": "Cursed by greed!", + "logdesc_weathercrystal_broken": "Your desire for treasures will surely be your undoing.", + "log_curse_fade": "The curse fades away", + "logdesc_curse_fade": "You're safe again... for now", + "logdesc_gods_are_impressed": "The Gods are very impressed with you", + "logdesc_gods_are_afraid": "The Gods are afraid", + "logdesc_gods_are_curious": "The Gods are very curious", + "logdesc_temple_peace_temple_break": "The Gods look the other way", + "log_altar_success_00": "The Gods accept your sacrifice", + "log_altar_success_01": "The Gods are satisfied with your sacrifice", + "log_altar_success_02": "The Gods are happy with your sacrifice", + "log_altar_fail_00": "The Gods aren't happy with your sacrifice", + "log_altar_fail_01": "The Gods sneer at your untrained sacrifice", + "log_altar_fail_02": "The Gods mock your crude sacrifice", + "log_altar_fail_03": "The Gods scorn at your illiterate sacrifice", + "log_reality_mutation_00": "Your reality is shaken", + "log_reality_mutation_01": "You sense things are no longer what they used to be", + "log_reality_mutation_02": "You feel something has changed", + "log_reality_mutation_03": "You feel the rules of the Cosmos have shifted", + "log_reality_mutation_04": "You sense the reality has shifted", + "log_reality_mutation_05": "The reality has shifted", + "status_reality_mutation": "The reality has shifted", + "statusdesc_reality_mutation": "You sense things are no longer what they used to be.", + "booktitle_allspells": "Map of Gnosis", + "bookdesc_allspells": "None other than you is teacher of the truth,\nwherever and from whatever source it is manifest.\n \nYou hear nothing true from me which you have not first told me.\n \nTruth, when did you ever fail to walk with me,\nteaching me what to avoid and what to seek....\nWithout you I could discern none of these things.", + "reward_gold_statue": "Golden statue", + "reward_clock": "Dedicated to 5 minutes", + "reward_minit": "1 minute?!", + "reward_nolla": "No gold", + "reward_dollar": "All the monies", + "reward_peace": "Pacifist", + "reward_crown": "King", + "reward_nohit": "Undamaged", + "controls_use": "interact", + "controls_replayeditopen": "save replay", + "controls_usewand": "use wand", + "teleport_mystery": "Portal to the Tower", + "teleport_mystery_back": "Portal back to the Mountain", + "teleport_world": "Portal to a faraway land", + "teleport_deeper": "Portal deeper", + "teleport_ending": "Portal to The Laboratory", + "teleport_ending_victory": "Portal to The Work", + "teleport_end_wall": "Portal to Crystal vault", + "teleport_generic": "Portal", + "teleport_back": "Portal back", + "gamemode_normal": "New Game", + "gamemode_normal_desc": "Explore a new world.\nThe original Noita experience.", + "gamemode_dailyrun": "Daily Run", + "gamemode_dailyrun_desc": "New day, new world.\nSome starting items are randomized.\nEvery player is playing the same seed.\nBe careful, you can only play once in 24 hours.", + "gamemode_nightmare_exp": "Nightmare (experimental)", + "gamemode_nightmare": "Nightmare", + "gamemode_nightmare_desc": "For a more challenging experience.\nUnlock this mode by completing the game.", + "gamemode_newgameplus": "New Game+ (experimental)", + "gamemode_newgameplus_desc": "For a more challenging experience.\nUnlock this mode by completing the game.", + "gamemode_laboratory": "Spell Lab", + "gamemode_laboratory_desc": "Play around with magic to your heart's content.\nDeath is not a problem.\nUnlock new spells for this mode by casting them.", + "gamemode_comingsoon": "Coming soon!", + "gamemode_comingsoon_desc": "It's a mystery.", + "gamemode_nightmare_desc_PETRI_is_this_correct_new_nightmare_description": "Every day a new run setup and a\n chance to play later biomes.\n Play the same seed as many times as you want.", + "gamemode_daily_practice_run": "Daily Practice Run", + "gamemode_daily_practice_run_desc": "Start a run from a randomized spot,\nwith randomized items.\nYou can try the same seed as many times as you like\nwithin 24 hours.", + "new_game_for_newgame_plus": "NEW GAME", + "building_worm_deflector": "Worm crystal", + "stat_modsenabled": "Mods enabled:", + "damage_curse": "curse", + "damage_rock_curse": "cursed rock", + "damage_overeating": "overeating", + "damage_midas": "midas", + "menureleasenotes_betawarning": "Welcome to the Noita 1.0 Beta version!\nBe warned, the game will probably be less stable here compared to the master branch.\nHappy noiting!", + "menureleasenotes_betawarning2": "Welcome to the Noita beta branch!\nBe warned, the game will probably be less stable here compared to the master branch.", + "inventory_chargecapacity_tooltip": "The amount of charge this wand can store.", + "infinity_symbol": "∞", + "credits_game_by": "A GAME BY", + "ingestion_status_caused_by": "Cause: Ingesting $0.", + "ingestion_status_caused_by_many": "Cause: Ingesting $0 and more.", + "ingestion_status_caused_by_overingestion": "Cause: Overeating", + "status_confusion": "Confused", + "statusdesc_confusion": "You feel confused.", + "status_movement_faster": "Greased lightning.", + "statusdesc_movement_faster": "You feel extremely fast.", + "status_worm_attractor": "Worm food", + "statusdesc_worm_attractor": "You feel like you're future worm food.", + "status_protection_all": "Protection from all", + "statusdesc_protection_all": "You feel strange strength in your body.", + "status_mana_regeneration": "Mana regeneration", + "statusdesc_mana_regeneration": "You gain mana back faster.", + "status_internal_fire": "Internal fire ", + "statusdesc_internal_fire": "You're burning inside.", + "status_cryptpoison": "Ancient venom poisoning", + "statusdesc_cryptpoison": "You lose health until you locate a rare antidote.", + "status_satiated00": "Minimally satiated", + "statusdesc_satiated00": "Your stomach is almost empty.", + "status_satiated01": "Satiated", + "statusdesc_satiated01": "You can still fit more in your stomach.", + "status_satiated02": "Fully satiated", + "statusdesc_satiated02": "You're feeling full. Any more food will make movement difficult.", + "status_satiated03": "Oversatiated", + "statusdesc_satiated03": "You're feeling really full.", + "status_satiated04": "Terribly oversatiated", + "statusdesc_satiated04": "You're feeling sickly full. Any more food might hurt you.", + "status_satiated05": "Choking", + "statusdesc_satiated05": "You're feeling sickly full and choking.", + "status_satiated06": "Choking and bloated", + "statusdesc_satiated06": "You most certainly don't feel like eating more.", + "status_ingestion_damage": "Choking", + "statusdesc_ingestion_damage": "Any more food or drinking will hurt you.", + "status_ingestion_exploding": "Bursting at the seams", + "statusdesc_ingestion_exploding": "You're feeling so full you might explode.", + "status_ingestion_alcoholic_00": "Mildly boozed", + "statusdesc_ingestion_alcoholic_00": "You're feeling a little tipsy.", + "status_ingestion_alcoholic_01": "Drunk", + "statusdesc_ingestion_alcoholic_01": "You drank too much.\nAiming is disturbed.", + "status_ingestion_alcoholic_02": "Wasted", + "statusdesc_ingestion_alcoholic_02": "You drank way too much.\nAiming is disturbed.\nDrinking more will make you Poisoned", + "status_ingestion_alcoholic_03": "Wasted", + "statusdesc_ingestion_alcoholic_03": "You drank way too much.\nAiming is disturbed.\nDrinking more will give you brain damage", + "status_brain_damage": "Brain Damage", + "statusdesc_brain_damage": "Your aim is permanently disturbed.", + "status_trip_00": "Tripping", + "statusdesc_trip_00": "You sense that something is off.", + "status_trip_01": "Tripping some", + "statusdesc_trip_01": "You feel in harmony with the magical forces.", + "status_trip_02": "Heavily tripping", + "statusdesc_trip_02": "Maan, that colour smells interesting.", + "status_trip_03": "Tripping balls", + "statusdesc_trip_03": "Usual concepts don't apply.", + "status_nightvision": "Wormy vision", + "statusdesc_nightvision": "You're seeing things more clearly.", + "status_food_poisoning": "Food poisoning", + "statusdesc_food_poisoning": "You're feeling sick. Nothing stays inside.", + "status_ingestion_movement_slower": "Clumsy movement", + "statusdesc_ingestion_movement_slower": "Movement is difficult.", + "status_ingestion_freezing": "Chilly", + "statusdesc_ingestion_freezing": "You're feeling cold inside. Movement is difficult.", + "status_farts": "Gassy", + "statusdesc_farts": "You're feeling pressure inside.", + "status_curse_cloud_00": "Rain Curse", + "statusdesc_curse_cloud_00": "You feel like there's a dark cloud hanging over you.", + "status_curse_cloud_01": "Thunder Curse", + "statusdesc_curse_cloud_01": "The weight of the cloud is almost unbearable. Your head hurts.", + "status_curse_cloud_02": "Acid Rain Curse", + "statusdesc_curse_cloud_02": "All the foul thoughts you have ever had wash over you.", + "status_jarate": "Jarated", + "statusdesc_jarate": "Wet clothes protect you from fire.\nYou sense an increased danger of receiving a critical hit.", + "status_protection_polymorph": "Polymorph immunity", + "statusdesc_protection_polymorph": "You cannot be polymorphed.", + "status_faster_levitation": "Faster levitation", + "statusdesc_faster_levitation": "You levitate 75% faster.", + "ending_above_part_a": "World has been restored", + "ending_above_part_b": "And everyone is much happier", + "inventory_perks_many": "$0 x $1", + "death_curse": "Curse", + "death_polymorph": ", while polymorphed to $0", + "streamingevent_speedy_enemies": "Speedy Creatures", + "streamingeventdesc_speedy_enemies": "Nearby creatures move faster", + "streamingevent_protect_enemies": "Protect Creatures", + "streamingeventdesc_protect_enemies": "Nearby creatures temporarily block all incoming damage", + "streamingevent_teleporting_enemies": "Teleporting Creatures", + "streamingeventdesc_teleporting_enemies": "Nearby creatures start teleporting around", + "streamingevent_polymorph_enemies": "Polymorph Creatures", + "streamingeventdesc_polymorph_enemies": "Nearby creatures polymorph into random beings", + "streamingevent_tiny_ghost_player": "Summon Friendly Ghosts", + "streamingeventdesc_tiny_ghost_player": "You get a few tiny ghost friends", + "streamingevent_tiny_ghost_enemy": "Summon Hostile Ghosts", + "streamingeventdesc_tiny_ghost_enemy": "Nearby creatures get tiny ghost friends", + "streamingevent_homing_enemy_projectiles": "Homing for Hostiles", + "streamingeventdesc_homing_enemy_projectiles": "Nearby enemies' projectiles accelerate toward you", + "streamingevent_health_plus": "Health Plus", + "streamingeventdesc_health_plus": "You gain 80 HP", + "streamingevent_health_minus": "Health Minus", + "streamingeventdesc_health_minus": "You lose 40 HP", + "streamingevent_max_health_plus": "Max Health Plus", + "streamingeventdesc_max_health_plus": "You gain 50 maximum HP", + "streamingevent_max_health_minus": "Max Health Minus", + "streamingeventdesc_max_health_minus": "You lose 25 maximum HP", + "streamingevent_regeneration_field": "Regeneration Field", + "streamingeventdesc_regeneration_field": "You're given a regenerative field", + "streamingevent_protect_player": "Temporary Immortality", + "streamingeventdesc_protect_player": "You become invincible for some time", + "streamingevent_shield_enemies": "Shielded Creatures", + "streamingeventdesc_shield_enemies": "All creatures gain a shield", + "streamingevent_shield_player": "Friendly Shield", + "streamingeventdesc_shield_player": "You gain a shield", + "streamingevent_faster_player": "Speedy Movement", + "streamingeventdesc_faster_player": "You can move faster for a time", + "streamingevent_slimy_player": "Slimy", + "streamingeventdesc_slimy_player": "Everyone gets covered in slime", + "streamingevent_wet_player": "Shower", + "streamingeventdesc_wet_player": "A raincloud spawns on you", + "streamingevent_oiled_player": "Glisten", + "streamingeventdesc_oiled_player": "A cloud of oil spawns on you", + "streamingevent_drunk_player": "Booze", + "streamingeventdesc_drunk_player": "You become drunk", + "streamingevent_drunk_enemies": "Drunk Creatures", + "streamingeventdesc_drunk_enemies": "Nearby creatures become drunk", + "streamingevent_spell_refresh": "Spell Refresh", + "streamingeventdesc_spell_refresh": "Your spells are refreshed", + "streamingevent_sea_of_x": "Sea of Random", + "streamingeventdesc_sea_of_x": "A huge body of random liquid is summoned", + "streamingevent_sea_of_water": "Sea of Water", + "streamingeventdesc_sea_of_water": "A huge body of water is summoned", + "streamingevent_sea_of_oil": "Sea of Oil", + "streamingeventdesc_sea_of_oil": "A huge body of oil is summoned", + "streamingevent_sea_of_lava": "Sea of Lava", + "streamingeventdesc_sea_of_lava": "A huge body of lava is summoned", + "streamingevent_nuke": "Boom!", + "streamingeventdesc_nuke": "Take cover!", + "streamingevent_spawn_worm": "Summon Worm", + "streamingeventdesc_spawn_worm": "A huge worm appears", + "streamingevent_spawn_shopkeeper": "Summon Stevari", + "streamingeventdesc_spawn_shopkeeper": "Stevari appears", + "streamingevent_bouncy_shots": "Bouncy Spells", + "streamingeventdesc_bouncy_shots": "Your projectiles become bouncy for a time", + "streamingevent_boomerang_shots": "Boomerang Spells", + "streamingeventdesc_boomerang_shots": "Your projectiles home back to you for a time", + "streamingevent_fizzle": "Fizzle Spells", + "streamingeventdesc_fizzle": "Your projectiles have a chance to fizzle out for a time", + "streamingevent_explosive_projectile": "Explosive Spells", + "streamingeventdesc_explosive_projectile": "Your projectiles become explosive for a time", + "streamingevent_give_wand_to_enemy": "Armed Creature", + "streamingeventdesc_give_wand_to_enemy": "A nearby creature gets a random wand", + "streamingevent_give_wand_to_player": "New Wand", + "streamingeventdesc_give_wand_to_player": "A random wand appears", + "streamingevent_remove_liquid": "Remove Liquids", + "streamingeventdesc_remove_liquid": "All nearby liquids disappears", + "streamingevent_remove_ground": "Remove Ground", + "streamingeventdesc_remove_ground": "All nearby solid ground disappears", + "streamingevent_berserk": "Rage", + "streamingeventdesc_berserk": "Everyone becomes berserk", + "streamingevent_fireball_thrower_player": "Fireball Thrower", + "streamingeventdesc_fireball_thrower_player": "You start spewing fireballs for a time", + "streamingevent_fireball_thrower_enemies": "Fireball Thrower Creatures", + "streamingeventdesc_fireball_thrower_enemies": "Creatures start spewing fireballs for a time", + "streamingevent_spawn_chest": "Loot!", + "streamingeventdesc_spawn_chest": "A chest appears!", + "streamingevent_transform_giga_discs": "Giga Sawblades Everywhere", + "streamingeventdesc_transform_giga_discs": "For a time, all projectiles become giant sawblades(!)", + "streamingevent_transform_nukes": "Projectiles Into Nukes", + "streamingeventdesc_transform_nukes": "All airborne projectiles become nukes(!!!)", + "streamingevent_rain_gold": "Treasure Rain", + "streamingeventdesc_rain_gold": "It's raining gold", + "streamingevent_rain_barrel": "Barrel Rain", + "streamingeventdesc_rain_barrel": "Barrels and other explosives appear out of thin air", + "streamingevent_rain_hiisi": "Hiisi Rain", + "streamingeventdesc_rain_hiisi": "A bunch of Hiisi appear out of thin air", + "streamingevent_rain_worm": "Worm Rain", + "streamingeventdesc_rain_worm": "Worms appear out of thin air", + "streamingevent_rain_potion": "Potion Rain", + "streamingeventdesc_rain_potion": "Potions appear out of thin air", + "streamingevent_rain_bomb": "Bomb Rain", + "streamingeventdesc_rain_bomb": "Bombs appear out of thin air", + "streamingevent_gravity_player": "Personal Gravity Field", + "streamingeventdesc_gravity_player": "You attract projectiles for a while", + "streamingevent_gravity_enemies": "Creature Gravity Field", + "streamingeventdesc_gravity_enemies": "Creatures start attracting projectiles for a while", + "streamingevent_portal_east": "Portal to East", + "streamingeventdesc_portal_east": "A portal leading somewhere far away", + "streamingevent_portal_beginning": "Portal to Surface", + "streamingeventdesc_portal_beginning": "A portal leading to the surface", + "streamingevent_portal_random": "Portal to Some Place", + "streamingeventdesc_portal_random": "A portal leading somewhere", + "streamingevent_slow_enemies": "Slow Creatures", + "streamingeventdesc_slow_enemies": "Creatures slow down", + "streamingevent_slow_player": "Slowdown", + "streamingeventdesc_slow_player": "You slow down", + "streamingevent_trail_water": "Water Trail", + "streamingeventdesc_trail_water": "Your projectiles leave a trail of water", + "streamingevent_trail_oil": "Oil Trail", + "streamingeventdesc_trail_oil": "Your projectiles leave a trail of oil", + "streamingevent_trail_acid": "Acid Trail", + "streamingeventdesc_trail_acid": "Your projectiles leave a trail of acid", + "streamingevent_trail_fire": "Fire Trail", + "streamingeventdesc_trail_fire": "Your projectiles leave a trail of fire", + "streamingevent_trail_lava": "Lava Trail", + "streamingeventdesc_trail_lava": "Your projectiles leave a trail of lava", + "streamingevent_trail_poison": "Poison Trail", + "streamingeventdesc_trail_poison": "Your projectiles leave a trail of poison", + "streamingevent_trail_gunpowder": "Gunpowder Trail", + "streamingeventdesc_trail_gunpowder": "Your projectiles leave a trail of gunpowder", + "streamingevent_trail_alcohol": "Alcohol Trail", + "streamingeventdesc_trail_alcohol": "Your projectiles leave a trail of alcohol", + "streamingevent_player_trip": "Trip", + "streamingeventdesc_player_trip": "You trip out", + "streamingevent_transmutation": "Transmutation", + "streamingeventdesc_transmutation": "Nearby materials transmute into acid for some time", + "streamingevent_slow_bullets": "Bullet Time", + "streamingeventdesc_slow_bullets": "Projectiles slow down heavily", + "streamingevent_gravity": "Projectile Gravity", + "streamingeventdesc_gravity": "Your projectiles gain extra gravity", + "streamingevent_antigravity": "Projectile Antigravity", + "streamingeventdesc_antigravity": "Your projectiles gain antigravity", + "biomemodifierdesc_moist": "The air feels extremely humid", + "biomemodifierdesc_fog_of_war_reappears": "A mysterious darkness lingers in this place", + "biomemodifierdesc_conductive": "The air smells ionized", + "biomemodifierdesc_freezing": "The air feels freezing", + "biomemodifierdesc_hot": "The air feels hot", + "biomemodifierdesc_dry": "The air feels dry", + "biomemodifierdesc_bouncy": "The floors look bouncy", + "biomemodifierdesc_gold_vein": "You sense lucrative opportunities", + "biomemodifierdesc_gold_vein_super": "You sense extremely lucrative opportunities", + "biomemodifierdesc_corrupted": "Something is not right here", + "biomemodifierdesc_flooded": "Where did all this water come from?", + "biomemodifierdesc_gas_glooded": "There's a smell of gas in the air", + "biomemodifierdesc_toxic": "The air smells toxic", + "biomemodifierdesc_vulcanous": "The air smells vulcanic", + "biomemodifierdesc_haunted": "A terrible chill runs down your spine", + "biomemodifierdesc_rat_infested": "The air smells of rats", + "biomemodifierdesc_worm_infested": "The air smells of worms", + "biomemodifierdesc_alchemic": "There's a spirit of Ancient Art in the air", + "biomemodifierdesc_peaceful": "You feel a sense of peace", + "biomemodifierdesc_portal_upwards": "You feel there's a special route nearby", + "biomemodifierdesc_portal_downwards": "You feel there's a special route nearby", + "NEWTEXTSINCE20200928": "", + "reward_nowands": "No wands", + "reward_almostpacifist": "Almost a pacifist", + "reward_notinkeringofwands": "Abstained from wand tinkering", + "reward_kicksonly": "The Mighty Foot", + "gamemode_dailyrun_desc_played": "You've played the daily. Try again tomorrow.", + "gamemode_dailyrun_desc_played2": "You already had your chance at the daily run. Try again tomorrow.", + "gamemode_dailyrun_desc_played3": "You already had your chance. Try again tomorrow.", + "perk_revenge_bullet": "Revenge bullets", + "perkdesc_revenge_bullet": "You return fire when hit by projectiles, and you gain 20% resistance against explosions and projectiles.", + "logdesk_curse_ghost": "Your greed will haunt you wherever you go...", + "logdesk_curse_permaoil": "Your greed sticks to you like tar...", + "logdesk_curse_nofly": "Your greed weighs you down heavily...", + "logdesk_curse_strongenemies": "Your greed makes others dislike you...", + "logdesk_curse_keepmoving": "Your greed makes you overly hasty...", + "log_curse": "Curse of greed!", + "log_curse_info": "Seek refreshment to cure the curse.", + "log_curse_reward": "You gain additional gold while the curse is active.", + "log_curse_secret": "The air trembles!", + "logdesc_curse_secret": "Ancient alchemists sought to utilize even the power of a curse...", + "animal_wizard_neutral": "Maadoittajamestari", + "action_burst_8": "Octuple spell", + "actiondesc_burst_8": "Simultaneously cast 8 spells", + "action_broken_spell": "Broken spell", + "actiondesc_broken_spell": "A malfunctioning spell", + "action_summon_portal": "Summon portal", + "actiondesc_summon_portal": "Summons a strange portal", + "teleport_strange_unstable": "Unstable portal", + "teleport_strange_stable": "Stable portal", + "log_repair_spell": "The spell is mended", + "log_repair_wand": "The wand is mended", + "gamemode_dailyrun_desc_offline": "Please turn on Online features to play this mode.", + "gamemode_dailyrun_desc_connection_failed": "Connection failed.", + "mat_meat_frog": "frog meat", + "menureleasenotes_noita10": "Welcome to Noita Epilogue Update!\nNoita used be an Early Access game, so we want to send a huge thank you to all of you\nwho played Noita during its first year. Your feedback has been invaluable!\nAnd to all the new Noita players... Welcome and best of luck!\n- Devs\n", + "item_mcguffin_14": "Truest of Knowledge", + "itemdesc_mcguffin_14": "Was it worth it?", + "perk_angry_ghost": "Angry ghost", + "perkdesc_angry_ghost": "An angry spirit comes to your aid, copying nearby spells and projectiles.", + "effect_neutralized": "Neutralized spells", + "effectdesc_neutralized": "Projectile spells you cast short-circuit.", + "log_all_spells": "You were warned!", + "logdesc_all_spells": "One does not escape quite so easily!", + "perk_gourd": "Refreshing gourd", + "perkdesc_gourd": "Just a nice gourd.", + "perk_gas_fire": "Gas fire", + "perkdesc_gas_fire": "Gases near you ignite automatically.", + "perk_spell_duplication": "Projectile duplication", + "perkdesc_spell_duplication": "Your projectile spells have a chance to duplicate, but you're more vulnerable to projectile damage", + "perk_faster_wands": "Faster Wands (One-off)", + "perkdesc_faster_wands": "All wands you're currently carrying gain a bonus to their cast delay & reload time.", + "log_surprise": "Uh oh!", + "logdesc_surprise": "What did you do???", + "item_gourd": "Refreshing gourd", + "itemdesc_gourd": "Can be thrown to deal damage. Upon breaking, releases a refreshing aura.", + "menu_streaming_eventliststartnewgame": "You can configure the enabled events here after entering the game.\n(The game will remember the settings.)", + "menu_streaming_eventkind": "Type: $0", + "menu_streaming_eventauthor": "Author: $0", + "streaming_integration_toofeweventsenabled": "Please enable at least four events\nvia the Streaming options menu!", + "streamingevent_nothing": "Nothing", + "streamingeventdesc_nothing": "Nothing happens.", + "NEWTEXTSINCE20201002": "", + "streamingevent_improve_wands": "Improve wands", + "streamingeventdesc_improve_wands": "All wands in your vicinity get slightly better stats", + "streamingevent_weaken_wands": "Weaken wands", + "streamingeventdesc_weaken_wands": "All wands in your vicinity get slightly worse stats", + "mat_templebrick_weak": "weak brickwork", + "mat_magic_liquid_unstable_polymorph": "unstable polymorphine", + "mat_magic_liquid_unstable_teleportation": "unstable teleportatium", + "mat_magic_liquid_unstable_hp_regeneration": "unstable healthium", + "mat_magic_liquid_unstable_berserk": "unstable berserkium", + "mat_magic_liquid_unstable_charm": "unstable pheromone", + "mat_magic_liquid_unstable_invisibility": "unstable invisiblium", + "action_line_arc": "Linear arc", + "actiondesc_line_arc": "Makes a projectile fly only in cardinal or diagonal lines", + "perk_orbit": "Phasing", + "perkdesc_orbit": "Projectiles seemingly phase through you.", + "greed_curse_damage": "Curse of Greed", + "perk_mana_from_kills": "Kills to mana", + "perkdesc_mana_from_kills": "Every time an enemy near you dies, you release mana-recharging liquid.", + "perk_mega_beam_stone": "Summon Sädekivi (One-off)", + "perkdesc_mega_laser": "You will gain a curious artefact", + "perk_foodclock": "Food clock", + "perkdesc_foodclock": "Being well nourished is good for you", + "log_hungry": "You feel hungry", + "log_starving": "You are starving", + "action_lifetime_infinite": "Infinite lifetime", + "actiondesc_lifetime_infinite": "Makes a projectile last forever, but also makes it hurt you", + "action_cloud_oil": "Oil cloud", + "actiondesc_cloud_oil": "Creates a rain of oil", + "menu_streaming_hidevotecounts": "Hide vote counts during voting: $0", + "menu_streaming_uiposleft": "Position UI to the left side of the screen: $0", + "menu_streaming_uiposleft_hint": "EXPERIMENTAL: UI might sometimes look funny", + "log_alchemist_key_alt_first": "The key listens...", + "logdesc_alchemist_key_alt_first": "It's taking in the music.", + "log_alchemist_key_alt_second": "The key has taken in the full song", + "logdesc_alchemist_key_alt_second": "It's ready.", + "log_alchemist_key_alt_reward": "The chest opens!", + "logdesc_alchemist_key_alt_reward": "But the key might have other stories to tell...", + "animal_greed_ghost": "Ghost of Greed", + "item_essence_greed": "Eternal Wealth", + "itemdesc_essence_greed": "You gain more gold but a curse will haunt you", + "log_greed_curse_away": "The crystal shatters!", + "logdesc_greed_curse_away": "The curse has gone away, but so have the treasures it grants.", + "mat_templebrick_golden_static": "Fool's gold", + "biome_greed_room": "Hall of Wealth", + "log_greed_curse_back": "The curse returns!", + "menuoptions_cosmeticparticlecoeff": "Cosmetic particle amount", + "menuoptions_cosmeticparticlecoeff_hint": "Particle amount will be reduced at this rate if there are lots of particles", + "biomemodifierdesc_plant_infested": "It smells like soil after rain", + "biomemodifierdesc_mechanical": "You can hear the sounds of machinery", + "biomemodifierdesc_furnished": "It feels cozy in here", + "biomemodifierdesc_booby_trapped": "You feel wary", + "biomemodifierdesc_perforated": "It feels roomy in here", + "biomemodifierdesc_tunneled": "You can hear faint sounds of construction", + "biomemodifierdesc_hiisi_invasion": "You can hear Hiisi grunts from the distance", + "biomemodifierdesc_pipes": "You can hear someone clanging on metal pipes", + "biomemodifierdesc_spooky": "The hair in the back of your neck stands up", + "biomemodifierdesc_twisted": "It feels like your head is spinning", + "biomemodifierdesc_cheery": "You feel cheery", + "biomemodifierdesc_ominous": "It feels ominous in here", + "mat_templebrick_diamond_static": "Diamond brickwork", + "log_alchemist_chest_opened_alt": "The chest opens again", + "logdesc_alchemist_chest_opened_alt": "It still remembers the song.", + "animal_thunderskull": "Sähkiö", + "item_chest_light": "Coral chest", + "item_mega_beam_stone": "Sädekivi", + "itemdesc_mega_beam_stone": "This artefact has a picture of a celestial beam.", + "log_beam_stone": "You feel like you should move...", + "logdesc_beam_stone": "Something terrible is going to happen", + "damage_plasmabeam": "plasma beam", + "mat_meat_spider": "spider meat", + "mat_blood_spider": "spider blood", + "mat_blood_frog": "frog blood", + "release_notes_10_highlights": "HIGHLIGHTS:\nNew Daily Practice Run game mode.\nTwitch integration - let stream viewers make your game even more more chaotic.\nBiome modifiers - biomes are sometimes a bit different from the usual form.\nSome biomes have simulated temperature effects.\nLots of gameplay and UI tweaks and additions.\nVisual and audio enhancements.\nNew spells, perks, enemies, materials, secrets, sounds and more.\nOver 15 new music music tracks: Underground Jungle, Vault, Temple of the Art and more.\nPerformance optimizations and bug fixes.\nOptions menu overhaul.", + "continue_10_warning": "We HIGHLY recommend that you don't try to load pre-1.0 saves. Everything will be broken and the gods will most definitely be angry. ", + "release_notes_title": "RELEASE NOTES", + "NEWTEXTSINCE20201013": "", + "menuoptions_configurecontrols_keyname_unknown": "Unknown", + "menuoptions_configurecontrols_action_unbound": "Unbound", + "menuoptions_configurecontrols_binding_primary": "Primary", + "menuoptions_configurecontrols_binding_secondary": "Secondary", + "menuoptions_configurecontrols_pressakey": "Press something", + "input_mouseleft": "Mouse left", + "input_mouseright": "Mouse right", + "input_mousemiddle": "Mouse middle", + "input_mousewheelup": "Mouse wheel up", + "input_mousewheeldown": "Mouse wheel down", + "input_space": "Space", + "input_tab": "TAB", + "input_xboxbutton_start": "START", + "input_xboxbutton_select": "SELECT", + "format_keybinding": "[$0]", + "biome_orbroom": "Orb room", + "menugameover_causeofdeath_killer_cause": "$0's $1", + "menugameover_causeofdeath_killer_cause_name_ends_in_s": "$0' $1", + "item_heart_cursed": "Cursed extra max health ", + "log_worldseed": "Seed: $0", + "menupause_worldseed": "Seed: $0", + "menupause_gamemode": " Mode: $0", + "menupause_location": " Location: $0", + "menupause_modsused": " Mods used: yes", + "menugameover_record": "RECORD!", + "dailyrun_time_left_hoursminutesseconds": "Time left: $0:$1.$0", + "dailyrun_dateformat_0day_1month_2year": "$0 $1 $2", + "month_0": "Jan", + "Month_1": "Feb", + "Month_2": "Mar", + "Month_3": "Apr", + "Month_4": "May", + "Month_5": "Jun", + "Month_6": "Jul", + "Month_7": "Aug", + "Month_8": "Sep", + "Month_9": "Oct", + "Month_10": "Nov", + "Month_11": "Dec", + "credits_and": "AND", + "credits_sound": "SOUND DESIGN, MUSIC LEAD AND MIXING", + "credits_musiccomposed": "MUSIC COMPOSED AND PERFORMED BY ", + "credits_musicrecording": "MUSIC RECORDING, MIXING AND MASTERING\nPetri Majuri at E-studio", + "credits_localization": "LOCALIZATION", + "credits_localization2": "LOCALIZATION & QA", + "credits_marketingandpr": "MARKETING & PR", + "credits_marketingandpr2": "MARKETING & PR CONSULTATION", + "credits_marketingandpr3": "EXTERNAL MARKETING & PR", + "credits_10trailers": "1.0 TRAILER EDITORS", + "credits_10trailers2": "1.0 LAUNCH TRAILERS BY", + "credits_testingandadditionalwork": "TESTING & ADDITIONAL WORK", + "credits_testing": "TESTING", + "credits_thankyou": "THANK YOU", + "credits_thankyou_andyou": "...And You!", + "credits_crypticscores": "CRYPTIC HIGHSCORES", + "credits_falling": "Noita is powdered by the Falling Everything Engine\nNoita uses FMOD Studio by Firelight Technologies Pty Ltd", + "credits_licenses": "Please see licenses/Attributions.txt for Creative Commons attribution list.", + "format_timer": "$0.$1", + "menustreaming_nsa": "Please turn on Online features to use this feature.", + "menu_oldsave_verybroken0": "Old save detected.", + "menu_oldsave_verybroken1": "We HIGHLY recommend that you don't try to load pre 1.0 saves. Everything will be broken and the Gods will most definitely be angry. ", + "menu_oldsave_verybroken2": "Old save detected", + "NEWTEXTSINCE20201015": "", + "item_kantele": "Kantele", + "item_ocarina": "Huilu", + "bookdesc02_forged": "The essence of life and death.", + "bookdesc04_forged": "Prove thine knowledge,\n from what is the west created of.", + "bookdesc05_forged": "Prove thine knowledge,\n from what is the east created of.", + "bookdesc06_forged": "To have true knowledge\n is to see in the darkness of ignorance.", + "bookdesc07_forged ": "To gain true knowledge,\n one must slow down and not hurry.", + "bookdesc08_forged": "Awaken, the flock of the shepherd and think for thyself!", + "bookdesc09_forged": "To walk a mile in someone else's boots.", + "bookdesc10_forged": "True knowledge is a slippery thing.\nThe unfortunate side effect of our divine stone.", + "stat_prev_best": "($0)", + "action_meteor_rain": "Meteorisade", + "actiondesc_meteor_rain": "Alea iacta est", + "action_worm_rain": "Matosade", + "actiondesc_worm_rain": "Alea iacta est", + "animal_boss_pit": "Sauvojen tuntija", + "NEWTEXTSINCE20201124": "", + "animal_wand": "Wand", + "animal_enlightened_laser_dark_wand": "Dark wand", + "animal_enlightened_laser_elec_wand": "Thunder wand", + "animal_enlightened_laser_fire_wand": "Fire wand", + "animal_enlightened_laser_light_wand": "Glowing wand", + "perk_high_gravity": "High Gravity", + "perkdesc_high_gravity": "All creatures, you included, have higher personal gravity.", + "streamingevent_heal_ghost": "Summon Healing Ghosts", + "streamingeventdesc_heal_ghost": "You get a few healing ghost friends", + "streamingevent_player_gas": "Excess Gas", + "streamingeventdesc_player_gas": "Your body exudes flammable gas for a time", + "streamingevent_areadamage_player": "Friendly Contact Damage", + "streamingeventdesc_areadamage_player": "You gain a field that deals damage to nearby enemies for a time.", + "streamingevent_areadamage_enemy": "Enemy Contact Damage", + "streamingeventdesc_areadamage_enemy": "Enemies near you gain fields that deal damage to you if you get close.", + "streamingevent_twitchy": "Twitchy!", + "streamingeventdesc_twitchy": "You have trouble controlling your wand for a time", + "streamingevent_spawn_perk": "Gain Random Perk", + "streamingeventdesc_spawn_perk": "You're granted a random perk", + "streamingevent_shield_ghost": "Summon Shielding Ghost", + "streamingeventdesc_shield_ghost": "You get a shielding ghost friend", + "streamingevent_matter_eater": "Matter Eater", + "streamingeventdesc_matter_eater": "All projectiles eat up the ground for a time", + "streamingevent_invisible_player": "Personal Invisibility", + "streamingeventdesc_invisible_player": "You become invisible for a time", + "streamingevent_invisible_enemy": "Invisible Enemies", + "streamingeventdesc_invisible_enemy": "Enemies become invisible for a time", + "streamingevent_neutralized": "Neutralized Spells", + "streamingeventdesc_neutralized": "All projectiles near you become neutralized for a time", + "streamingevent_high_spread": "Extreme Spread", + "streamingeventdesc_high_spread": "All projectiles have very high spread for a time", + "streamingevent_bubble": "Safety bubble", + "streamingeventdesc_bubble": "You're encased in a safe bubble for a time", + "streamingevent_spawn_perk_enemy": "Give Perks To Enemies", + "streamingeventdesc_spawn_perk_enemy": "Nearby enemies get random perks", + "animal_wizard_twitchy": "Sätkymestari", + "status_twitchy": "Twitchy", + "statusdesc_twitchy": "Your hand spasms randomly and your spells can hurt you!", + "mat_meat_fast": "Wobbly meat", + "hud_wand_castdelay": "Cast delay: $0 s", + "gamemode_dailyrun_desc_offline_mode": "Offline Daily Run\nThe seed is different from the Online Daily Run.\nBut you can play this seed as many times as you like\nwithin the 24 hours.\n", + "biomemodifierdesc_gravity_fields": "You feel an invisible force pushing and pulling you", + "biomemodifierdesc_fungal": "The air is filled with fungal spores", + "menuoptions_steamcloud": "Steam Cloud: $0", + "menuoptions_enableall": "Enable all", + "menuoptions_disableall": "Disable all", + "menu_streaming_usernames_visible": "Creatures can be named after viewers: $0", + "menu_mods_settings": "Mod settings", + "menu_modsettings_changes_restart": "Changes will be applied when you restart the game.", + "menu_modsettings_changes_worldgen": "Changes will be applied when you start a new game.", + "menu_mods_nosettings": "Enabled mods have no settings.", + "biomemodifierdesc_shielded": "This place feels exceptionally secure", + "mat_rock_static_cursed_green": "Greed-cursed rock", + "mat_cursed_liquid": "Greed-cursed liquid", + "log_greed_curse_away_full": "The curse relents.", + "logdesc_greed_curse": "You gain 3x gold, but are terribly cursed!", + "item_greed_crystal": "Greed-cursed crystal", + "log_moon_altar_extra": "The gods are confused", + "logdesc_moon_altar_extra": "What is that?!", + "itemdesc_alchemy_key_musicbox_1": "The key remembers a song.", + "itemdesc_alchemy_key_musicbox_2": "The key remembers two songs.", + "itemdesc_alchemy_key_musicbox_3": "The key remembers three songs.", + "itemdesc_alchemy_key_musicbox_4": "The key is ready.", + "perk_exploding_gold": "Exploding Gold", + "perkdesc_exploding_gold": "Gold dropped by enemies explodes when it disappears, is picked up or touched by other enemies!", + "action_quantum_split": "Quantum Split", + "actiondesc_quantum_split": "Makes a projectile split into three projectiles whose existences are entangled", + "log_fasttravel": "A portal appears!", + "logdesc_fasttravel": "This could be useful...", + "action_chain_shot": "Chain Spell", + "actiondesc_chain_shot": "Causes a projectile to cast a copy of itself upon expiring, up to 5 times", + "action_teleport_projectile_short": "Small Teleport Bolt", + "actiondesc_teleport_projectile_short": "A shortlived magical bolt that moves you wherever it ends up flying", + "perk_worm_smaller_holes": "Feared by Worms", + "perkdesc_worm_smaller_holes": "Worms run away from you, and worm and lukki enemies no longer destroy terrain while burrowing.", + "perk_worm_bigger_holes": "More Worm Digging", + "perkdesc_worm_bigger_holes": "Worms now dig a larger area around them.", + "animal_homunculus": "Homunculus", + "streamingevent_homunculus": "Summon Random Homunculi", + "streamingeventdesc_homunculus": "A group of helpful little homunculi appears to aid you", + "streamingevent_homunculus_dark": "Summon Digging Homunculus", + "streamingeventdesc_homunculus_dark": "A helpful little homunculus comes to your aid", + "streamingevent_homunculus_fire": "Summon Fiery Homunculus", + "streamingeventdesc_homunculus_fire": "A helpful little homunculus comes to your aid", + "streamingevent_homunculus_heal": "Summon Healer Homunculus", + "streamingeventdesc_homunculus_heal": "A helpful little homunculus comes to your aid", + "streamingevent_homunculus_laser": "Summon Glowing Homunculus", + "streamingeventdesc_homunculus_laser": "A helpful little homunculus comes to your aid", + "streamingevent_homunculus_punch": "Summon Puncher Homunculus", + "streamingeventdesc_homunculus_punch": "A helpful little homunculus comes to your aid", + "action_mu": "Mu", + "actiondesc_mu": "Every modifier-type spell in the current wand is applied to a projectile", + "action_reset": "Wand Refresh", + "actiondesc_reset": "Reloads the wand immediately", + "perk_extra_slots": "Extra Wand Capacity (One-off)", + "perkdesc_extra_slots": "The wands you're currently carrying gain 1-3 additional spell slots (to a maximum of 25).", + "perk_teleportitis_dodge": "Teleportitis Dodge", + "perkdesc_teleportitis_dodge": "You teleport a short distance away when an enemy projectile is near.", + "perk_extra_mana": "High Mana, Low Capacity (One-off)", + "perkdesc_extra_mana": "Your currently held wand loses half its capacity, but gains more mana.", + "perk_homunculus": "Homunculus", + "perkdesc_homunculus": "Every time you leave a Holy Mountain, a helpful homunculus is summoned.", + "action_larpa_death": "Larpa Explosion", + "actiondesc_larpa_death": "A projectile will shoot out 8 copies of itself when it expires or hits the ground", + "action_bounce_larpa": "Larpa Bounce", + "actiondesc_bounce_larpa": "A projectile will launch a copy of itself when it bounces", + "log_homunculus": "A homunculus is summoned!", + "animal_wizard_hearty": "Haavoittajamestari", + "status_hearty": "Heartache", + "statusdesc_hearty": "Your maximum health is temporarily halved.", + "item_safe_haven": "Kammi", + "item_description_safe_haven": "Can be thrown to summon a cozy hut", + "item_kakka": "Kakkakikkare", + "itemdesc_kakka": "This mysterious spiral-shaped artefact smells horrible and feels warm to the touch", + "mat_feces": "Feces", + "mat_gas_smelly": "Smelly vapour", + "mat_peat": "Peat", + "animal_drone_shield": "Turvalennokki", + "animal_wizard_weaken": "Turvattomuusmestari", + "animal_wizard_wither": "Kuihduttajamestari", + "status_weaken": "Vulnerable", + "statusdesc_weaken": "Your protective perks are temporarily disabled.", + "mat_meat_fruit": "Fruit flesh", + "biome_wizardcave": "Wizards' den", + "action_zeta": "Zeta", + "actiondesc_zeta": "Copies a random spell in another wand you're holding", + "perk_laser_aim": "Pinpointer", + "perkdesc_laser_aim": "Your spells fly faster and have lower spread, and you have a handy sightline for aiming!", + "item_vasta": "Vasta", + "item_vihta": "Vihta", + "action_ball_lightning": "Ball Lightning", + "actiondesc_ball_lightning": "Summons three short range electrical orbs", + "perk_low_recoil": "Low Recoil", + "perkdesc_low_recoil": "Recoil caused by your spells is greatly reduced, but your spells fly slightly slower.", + "perk_projectile_repulsion_sector": "Projectile Repulsion Sector", + "perkdesc_projectile_repulsion_sector": "Projectiles that fly into a small sector in front of you get blown away.", + "perk_projectile_eater_sector": "Projectile Eater", + "perkdesc_projectile_eater_sector": "Projectiles that fly into a small sector behind of you disappear.", + "status_wither": "Withered", + "statusdesc_wither": "You're temporarily more vulnerable to all damage types.", + "perk_projectile_slow_field": "Projectile Slower", + "perkdesc_projectile_slow_field": "Projectiles near you slow down.", + "action_nolla": "Nolla", + "actiondesc_nolla": "The duration of a projectile is set to zero", + "item_wand_good_1": "Wand of Swiftness", + "item_wand_good_2": "Wand of Destruction", + "item_wand_good_3": "Wand of Multitudes", + "perkdesc_revenge_projectile": "You return projectiles back to enemies upon taking damage, and gain 20% resistance against projectiles & explosions.", + "log_always_cast_failed": "Too many always cast spells!", + "logdesc_always_cast_failed": "This wand is already overloaded...", + "bookdesc07_forged": "To gain true knowledge,\n one must slow down and not hurry.", + "log_perk_fulltitle": "$0 - $1", + "mat_monster_powder_test": "Monstrous powder", + "action_homing_accelerating": "Accelerative Homing", + "actiondesc_homing_accelerating": "A projectile homes towards enemies at an increasing pace", + "action_teleport_closer": "Homebringer Teleport Bolt", + "actiondesc_teleport_closer": "Brings the target hit closer to you", + "action_fanning_shot": "Fanning Shot", + "actiondesc_fanning_shot": "Launches multiple projectiles in a fan-like pattern", + "action_projectile_fan": "Spell Fan", + "actiondesc_projectile_fan": "Pushes projectiles away from you", + "action_spells_to_power": "Spells to Power", + "actiondesc_spells_to_power": "Converts any nearby projectiles cast by you into extra damage", + "action_enemies_to_power": "Essence to Power", + "actiondesc_enemies_to_power": "Increases a projectile's damage based on the number of creatures nearby", + "action_explosion_light": "Magical Explosion", + "actiondesc_explosion_light": "A large explosion that doesn't damage the ground", + "action_phi": "Phi", + "actiondesc_phi": "Casts a copy of every projectile-type spell in the current wand", + "action_burst_x": "Myriad Spell", + "actiondesc_burst_x": "Simultaneously casts as many spells as you have left uncast in your wand", + "action_worm_launcher": "Summon Worm", + "actiondesc_worm_launcher": "Grabs a worm from a nether realm at high velocity for a short time", + "action_spiraling_shot": "Spiral Arc", + "actiondesc_spiraling_shot": "A projectile flies in a spiralling pattern", + "action_orbit_shot": "Orbiting Arc", + "actiondesc_orbit_shot": "A projectile orbits the point of its origin", + "action_form_potion": "Create potion", + "actiondesc_form_potion": "A small vortex sucks material and forms a small potion filled with it", + "action_omega_disc_bullet": "Summon Omega Sawblade", + "actiondesc_omega_disc_bullet": "That's a lot of sawblade", + "action_temporary_wall": "Summon Wall", + "actiondesc_temporary_wall": "Summons a shortlived obstacle", + "action_temporary_platform": "Summon Platform", + "actiondesc_temporary_platform": "Summons a shortlived bit of ground", + "action_summon_missile": "Summon Missile", + "actiondesc_summon_missile": "Summons a homing, explosive rocket", + "animal_maggot_tiny": "Limatoukka", + "animal_boss_wizard": "Mestarien mestari", + "animal_coward": "Raukka", + "animal_thundermage_big": "Suur-Ukko", + "animal_thunderhound": "Ukkoskoira", + "animal_boss_robot": "Kolmisilmän silmä", + "animal_skygazer": "Taivaankatse", + "animal_gazer_big": "Kolmisilmän kätyri", + "animal_dark_alchemist": "Pahan muisto", + "action_laser_emitter": "Plasma beam", + "actiondesc_laser_emitter": "An instantaneous, dangerous beam of light", + "action_laser_emitter_thrower": "Plasma show", + "actiondesc_laser_emitter_thrower": "A projectile fires beams of light in random directions", + "action_laser_cross": "Plasma beam X", + "actiondesc_laser_cross": "Plasma beams fly in an X-shaped pattern", + "perk_personal_laser": "Personal Plasma Beam", + "perkdesc_personal_laser": "You constantly fire a devastating plasma beam, but you fire spells much slower", + "mat_wizardstone": "Odd brickwork", + "mat_drape": "Drapes", + "mat_darkstone": "Dark rock", + "perk_moon_radar": "Moon Radar", + "perkdesc_moon_radar": "Points you towards the moon...?", + "logdesc_greed_curse_away2": "The curse has gone away.", + "log_greed_curse_crystal2": "The crystal breaks!", + "logdesc_greed_curse_crystal2": "The curse is active once again!", + "menu_mods_settings_short": "Mod settings", + "NEWTEXTSINCE20201125": "", + "animal_gate_monster_a": "Veska", + "animal_gate_monster_b": "Molari", + "animal_gate_monster_c": "Mokke", + "animal_gate_monster_d": "Seula", + "action_if_enemy": "Requirement - Enemies", + "actiondesc_if_enemy": "The next spell is skipped if there are less than 15 enemies nearby", + "action_if_projectile": "Requirement - Projectile Spells", + "actiondesc_if_projectile": "The next spell is skipped if there are less than 20 projectiles nearby", + "action_if_hp": "Requirement - Low Health", + "actiondesc_if_hp": "The next spell is skipped if you have more than 25% health left", + "action_if_end": "Requirement - Endpoint", + "actiondesc_if_end": "Any Requirement spells before this will skip all spells between them and this spell", + "action_if_half": "Requirement - Every Other", + "actiondesc_if_half": "The next spell is skipped every other time this spell is cast", + "action_if_else": "Requirement - Otherwise", + "actiondesc_if_else": "If a Requirement spell before this succeeds, the next spell is skipped", + "action_bloodlust": "Bloodlust", + "actiondesc_bloodlust": "A projectile gains a hefty damage boost, but is also able to hurt you", + "action_colour_red": "Red Glimmer", + "actiondesc_colour_red": "Gives a projectile a red sparkly trail", + "action_colour_green": "Green Glimmer", + "actiondesc_colour_green": "Gives a projectile a green sparkly trail", + "action_colour_purple": "Purple Glimmer", + "actiondesc_colour_purple": "Gives a projectile a purple sparkly trail", + "action_colour_orange": "Orange Glimmer", + "actiondesc_colour_orange": "Gives a projectile a orange sparkly trail", + "action_colour_blue": "Blue Glimmer", + "actiondesc_colour_blue": "Gives a projectile a blue sparkly trail", + "action_colour_yellow": "Yellow Glimmer", + "actiondesc_colour_yellow": "Gives a projectile a yellow sparkly trail", + "action_colour_invis": "Invisible Spell", + "actiondesc_colour_invis": "Turns a projectile invisible", + "action_colour_rainbow": "Rainbow Glimmer", + "actiondesc_colour_rainbow": "Gives a projectile a randomly colored sparkly trail", + "status_blindness": "Blinded", + "statusdesc_blindness": "You can barely see a thing!", + "perk_radar_item": "Item Radar", + "perkdesc_radar_item": "You can sense nearby items.", + "perk_radar_moon": "Moon Radar", + "perkdesc_radar_moon": "You can sense lunar energy.", + "action_explosion_remove": "Remove Explosion", + "actiondesc_explosion_remove": "Makes a projectile no longer explode", + "perk_extra_potion_capacity": "Extra Potion Capacity", + "perkdesc_extra_potion_capacity": "Potions store 80% more liquid", + "perk_vomit_rats": "Spontaneous Generation", + "perkdesc_vomit_rats": "Vomit near you evolves into helpful rat minions", + "mat_rat_powder": "Ratty powder", + "mat_poo_gas": "Nauseating gas", + "perk_revenge_rats": "Revenge Rats", + "perkdesc_revenge_rats": "When you take damage, there's a chance that a helpful rat minion is summoned", + "streamingevent_add_always_cast": "Always Cast", + "streamingeventdesc_add_always_cast": "Your currently-held wand gets a permanent always cast spell! (max. 4)", + "action_expanding_orb": "Expanding Sphere", + "actiondesc_expanding_orb": "A slow projectile that increases its damage over time", + "action_homing_projectile": "Follow Spells", + "actiondesc_homing_projectile": "Makes a projectile home towards other projectile spells", + "mat_orb_powder": "Guiding powder", + "action_vacuum_powder": "Powder Vacuum Field", + "actiondesc_vacuum_powder": "Sucks powder-like materials nearby and releases them upon expiring", + "action_vacuum_liquid": "Liquid Vacuum Field", + "actiondesc_vacuum_liquid": "Sucks liquid materials nearby and releases them upon expiring", + "item_essence_stone": "Essence Eater", + "animal_physics_pata": "Pata", + "item_wand_experimental_1": "Experimental Wand", + "item_wand_experimental_2": "Experimental Wand", + "booktitle_fisher": "Alchemist's Note", + "bookdesc_fisher": "”Here I'm safe. I am safe.\nI left the others behind, and I have locked my research so that only those with real understanding can reach it.\nI should not worry. As long as I resist the temptation, I will be safe.\nI know my limits. Here I am far away from them.\n\nI should not worry.”", + "biome_rainforest_dark": "Lukki lair", + "mat_darkness": "Ominous liquid", + "action_phasing_arc": "Phasing Arc", + "actiondesc_phasing_arc": "Makes a projectile fly much slower, but teleport short distances over its flight", + "status_homing_shooter": "Self-homing Spells", + "statusdesc_homing_shooter": "Your spells home towards yourself for a time.", + "status_drunk_ui": "Magic Drunkenness", + "statusdesc_drunk_ui": "Your spells are less accurate and you're more flammable for a time.", + "status_movement_slower_ui": "Slower Movement", + "statusdesc_movement_slower_ui": "You move slower for a time.", + "status_confusion_ui": "Confusion", + "statusdesc_confusion_ui": "Your movement is unsure for a time.", + "damage_orb_blood": "blood link", + "boss_wizard_1": "You're confused!", + "boss_wizard_2": "You're drunk!", + "boss_wizard_3": "Your health is halved!", + "boss_wizard_4": "You move more slowly!", + "boss_wizard_5": "You're twitchy!", + "boss_wizard_6": "You're weakened!", + "boss_wizard_7": "You're withering!", + "boss_wizard_8": "Your projectiles home back to you!", + "action_vacuum_entities": "Vacuum Field", + "actiondesc_vacuum_entities": "Sucks nearby projectiles and creatures into the middle of the field instantaneously", + "action_bloodtentacle": "Blood Tentacle", + "actiondesc_bloodtentacle": "When this tentacle hits an enemy, said enemy will also launch a tentacle", + "action_explosion_tiny": "Concentrated Explosion", + "actiondesc_explosion_tiny": "Limits the radius of a projectile's explosion heavily", + "action_liquid_to_explosion": "Liquid Detonation", + "actiondesc_liquid_to_explosion": "Converts nearby nonmagical liquids into explosive gunpowder", + "action_laser_emitter_four": "Plasma Beam Cross", + "actiondesc_laser_emitter_four": "Four deadly plasma beams in a cross-shape. Look out, they can hurt you as well!", + "action_laser_emitter_ray": "Plasma Beam Thrower", + "actiondesc_laser_emitter_ray": "A projectile fires plasma beams in all directions!", + "action_bounce_laser_emitter": "Plasma Beam Bounce", + "actiondesc_bounce_laser_emitter": "A projectile launches a plasma beam upon bouncing", + "action_homing_cursor": "Aiming Arc", + "actiondesc_homing_cursor": "A projectile rotates towards the direction you're aiming", + "booktitle_mestari": "A Cunning Contraption", + "bookdesc_mestari": "”The secret lies in music!\n\nThe key to the heavens' lock is borne from music all over the world.\n\nAnd in a way, as above, so below...”", + "biome_mestari_secret": "Throne room", + "streamingevent_fireworks": "Fireworks!", + "streamingeventdesc_fireworks": "Entirely safe (for a given value of safe)", + "streamingevent_holiday_mood": "Holiday Mood", + "streamingeventdesc_holiday_mood": "Let it be snow", + "streamingeventdesc_holiday_mood_2": "Let it snow", + "perk_contact_damage": "Contact Damage", + "perkdesc_contact_damage": "Enemies near you take damage; the damage is higher the lower your health gets.", + "mat_metal_sand": "Metal dust", + "mat_metal_sand_molten": "Molten metal", + "item_evil_eye": "Paha Silmä", + "item_description_evil_eye": "This eye-shaped artefact projects a malevolent glare", + "animal_lukki_dark": "Kammolukki", + "item_wand_kiekurakeppi": "Kiekurakeppi", + "item_wand_valtikka": "Valtikka", + "action_sigma": "Sigma", + "actiondesc_sigma": "Copies every static projectile -type spell in the wand when cast", + "action_tau": "Tau", + "actiondesc_tau": "Copies the two following spells in the wand when cast", + "material_transformed": "$0 (Transformed)", + "logdesc_reality_mutation": "You hear the word “$0” echoing and shifting in colours", + "action_laser_emitter_cutter": "Plasma Cutter", + "actiondesc_laser_emitter_cutter": "A plasma beam specialized in cutting materials!", + "action_laser_emitter_wider": "Plasma Beam Enhancer", + "actiondesc_laser_emitter_wider": "Makes plasma beam spell's beam wider", + "item_chest_treasure_pacifist": "A Pacifist's Reward", + "biomemodifierdesc_high_gravity": "The air feels heavy...", + "biomemodifierdesc_low_gravity": "The air feels light...", + "streamingevent_rain_blackhole": "Gravity Storm", + "streamingeventdesc_rain_blackhole": "Multiple black holes open in your vicinity!!", + "animal_necromancer_super": "Skoude", + "input_xboxbutton_dpad_up": "D-Pad up", + "input_xboxbutton_dpad_down": "D-Pad down", + "input_xboxbutton_dpad_left": "D-Pad left", + "input_xboxbutton_dpad_right": "D-Pad right", + "input_xboxbutton_back": "BACK", + "input_xboxbutton_left_thumb": "Left thumb", + "input_xboxbutton_right_thumb": "Right thumb", + "input_xboxbutton_left_shoulder": "Left shoulder", + "input_xboxbutton_right_shoulder": "Right shoulder", + "input_xboxbutton_left_stick_moved": "Left stick", + "input_xboxbutton_right_stick_moved": "Right stick", + "input_xboxbutton_a": "A", + "input_xboxbutton_b": "B", + "input_xboxbutton_x": "X", + "input_xboxbutton_y": "Y", + "input_xboxbutton_4": "Button #5", + "input_xboxbutton_5": "Button #6", + "input_xboxbutton_6": "Button #7", + "input_xboxbutton_7": "Button #8", + "input_xboxbutton_8": "Button #9", + "input_xboxbutton_9": "Button #10", + "input_xboxbutton_10": "Button #11", + "input_xboxbutton_11": "Button #12", + "input_xboxbutton_12": "Button #13", + "input_xboxbutton_13": "Button #14", + "input_xboxbutton_14": "Button #15", + "input_xboxbutton_15": "Button #16", + "input_xboxbutton_left_stick_left": "Left stick left", + "input_xboxbutton_left_stick_right": "Left stick right", + "input_xboxbutton_left_stick_up": "Left stick up", + "input_xboxbutton_left_stick_down": "Left stick down", + "input_xboxbutton_right_stick_left": "Right stick left", + "input_xboxbutton_right_stick_right": "Right stick right", + "input_xboxbutton_right_stick_up": "Right stick up", + "input_xboxbutton_right_stick_down": "Right stick down", + "input_xboxbutton_analog_00": "Left trigger", + "input_xboxbutton_analog_01": "Right trigger", + "input_xboxbutton_analog_02": "Analog button #3", + "input_xboxbutton_analog_03": "Analog button #4", + "input_xboxbutton_analog_04": "Analog button #5", + "input_xboxbutton_analog_05": "Analog button #6", + "input_xboxbutton_analog_06": "Analog button #7", + "input_xboxbutton_analog_07": "Analog button #8", + "input_xboxbutton_analog_08": "Analog button #9", + "input_xboxbutton_analog_09": "Analog button #10", + "input_leftshift": "left shift", + "input_rightshift": "right shift", + "controls_aim_stick": "aim", + "controls_drop_item": "(UI) drop item", + "controls_drink_potion": "(UI) drink potion", + "controls_ui_confirm": "(UI) confirm", + "controls_ui_drag": "(UI) drag", + "controls_takescreenshot": "take screenshot", + "controls_ui_quick_drag": "(UI) auto drag", + "perk_adventurer": "Healthy Exploration", + "perkdesc_adventurer": "Every time you visit a new area, you regain 60 health.", + "log_adventurer": "New area reached! You regain 60 health.", + "action_damage_forever": "Mana To Damage", + "actiondesc_damage_forever": "If the wand has more than 50 mana, all mana over that is converted into additional damage", + "action_homing_area": "Projectile Area Teleport", + "actiondesc_homing_area": "If a valid target appears somewhere in the proximity of a projectile, the projectile will teleport right on top of the target", + "animal_snowcrystal": "Haamukivi", + "ethereal_damage": "Ghostly touch", + "animal_ethereal_being": "Olematon", + "action_bomb_detonator": "Explosive Detonator", + "actiondesc_bomb_detonator": "All nearby explosive spells cast by you instantly detonate", + "logdesc_temple_upgrade_guardian": "The Gods are enraged", + "screenshot_saved": "Saved a screenshot to $0", + "item_wand_ruusu": "Ruusu", + "action_orbit_discs": "Sawblade Orbit", + "actiondesc_orbit_discs": "Makes four sawblades rotate around a projectile", + "action_orbit_fireballs": "Fireball Orbit", + "actiondesc_orbit_fireballs": "Makes four fireballs rotate around a projectile", + "action_orbit_nukes": "Nuke Orbit", + "actiondesc_orbit_nukes": "Makes four… nukes(?!) rotate around a projectile", + "action_orbit_lasers": "Plasma Beam Orbit", + "actiondesc_orbit_lasers": "Makes four plasma beams rotate around a projectile", + "action_orbit_larpa": "Orbit Larpa", + "actiondesc_orbit_larpa": "Makes four copies of a projectile rotate around it", + "log_greed_curse_return": "The curse has reactivated!", + "action_slow_but_steady": "Slow But Steady", + "actiondesc_slow_but_steady": "The reload time of the wand is set to exactly 1.5 seconds", + "item_wandstone": "Sauvan Ydin", + "itemdesc_wandstone": "This artefact can open the potential of wands to you even without perks...", + "item_greed_die": "Greed Die", + "itemdesc_greed_die": "The name may be more apt than one thinks.", + "item_greed_die_good": "Enjoy your riches!", + "item_greed_die_bad": "Gotcha!", + "mat_gem_box2d_turquoise": "Turquoise gemstone", + "item_powder_stash": "Material box", + "itemdesc_powder_stash": "A handy box for carrying powdery materials.", + "item_powder_stash_2": "Bag", + "itemdesc_powder_stash_2": "A handy bag for carrying powdery materials.", + "item_powder_stash_3": "Powder pouch", + "itemdesc_powder_stash_3": "A handy pouch for carrying powdery materials.", + "item_powder_stash_4": "Sack", + "itemdesc_powder_stash_4": "A handy sack for carrying powdery materials.", + "item_powder_stash_with_material": "$0 box", + "item_powder_stash_with_material_2": "$0 bag", + "item_powder_stash_with_material_3": "$0 pouch", + "item_powder_stash_with_material_4": "$0 sack", + "perk_hungry_ghost": "Hungry Ghost", + "perkdesc_hungry_ghost": "Summons a happy minion who'll eat enemy projectile every now and then.", + "status_damage_plus_small": "Damage Boost", + "statusdesc_damage_plus_small": "Your damage is boosted slightly for a time.", + "item_runestone_metal": "Runestone of Metal", + "perk_death_ghost": "Mournful Spirit", + "perkdesc_death_ghost": "Dying creatures leave behind a spirit that deals damage in a small area.", + "perk_risky_critical": "Close Call", + "perkdesc_risky_critical": "You gain additional chance to deal critical hits as long as there are enemies near you.", + "action_curse": "Venomous Curse", + "actiondesc_curse": "Imbues a projectile with a curse that makes the target hit by the projectile to waste away", + "damage_hitfx_curse": "Venomous Curse", + "action_exploding_ducks": "Flock of Ducks", + "actiondesc_exploding_ducks": "Summons a chaotic flock of spicy ducks", + "action_money_magic": "Gold to Power", + "actiondesc_money_magic": "Spends 5% of your current gold and adds damage to a projectile proportional to the amount spent", + "inventory_mod_damage_ice": "Dmg. Ice", + "inventory_mod_damage_slice": "Dmg. Slice", + "inventory_mod_damage_healing": "Dmg. Healing", + "inventory_mod_damage_curse": "Dmg. Curse", + "inventory_mod_damage_drill": "Dmg. Drill", + "inventory_dmg_healing": "Dmg. Healing", + "inventory_dmg_curse": "Dmg. Curse", + "status_curse_wither_projectile": "Weakening Curse - Projectiles", + "statusdesc_curse_wither_projectile": "You take 25% extra damage from projectiles.", + "status_curse_wither_explosion": "Weakening Curse - Explosives", + "statusdesc_curse_wither_explosion": "You take 25% extra damage from explosions.", + "status_curse_wither_melee": "Weakening Curse - Melee", + "statusdesc_curse_wither_melee": "You take 25% extra damage from melee attacks.", + "status_curse_wither_electricity": "Weakening Curse - Electricity", + "statusdesc_curse_wither_electricity": "You take 25% extra damage from electricity.", + "action_curse_wither_projectile": "Weakening Curse - Projectiles", + "actiondesc_curse_wither_projectile": "Target hit by a projectile takes 25% extra projectile damage for a time", + "action_curse_wither_explosion": "Weakening Curse - Explosives", + "actiondesc_curse_wither_explosion": "Target hit by a projectile takes 25% extra explosion damage for a time", + "action_curse_wither_melee": "Weakening Curse - Melee", + "actiondesc_curse_wither_melee": "Target hit by a projectile takes 25% extra melee damage for a time", + "action_curse_wither_electricity": "Weakening Curse - Electricity", + "actiondesc_curse_wither_electricity": "Target hit by a projectile takes 25% extra electricity damage for a time", + "action_worm_shot": "Worm Launcher", + "actiondesc_worm_shot": "Summons a giant worm to cause havoc for a moment!", + "action_black_hole_death_trigger": "Black Hole with Death Trigger", + "actiondesc_black_hole_death_trigger": "A slow orb of void that eats through all obstacles and casts another spell as it expires", + "perk_food_clock": "Eat Your Vegetables", + "perk_food_clock_2": "Food Clock", + "perkdesc_food_clock": "You inflict more damage the more satiated you are, but you start losing health if your stomach is empty.", + "damage_hunger": "Hunger", + "mat_porridge": "Hearty Porridge", + "log_greed_curse_away_short": "The curse dissipates for now...", + "logdesc_greed_curse_away_short": "...but it will be back!", + "animal_parallel_alchemist": "Alkemistin Varjo", + "animal_parallel_tentacles": "Kolmisilmän Kätyri", + "animal_hpcrystal": "Elvytyskristalli", + "status_rainbow_farts": "Rainbow farts", + "statusdesc_rainbow_farts": "Open your eyes, I see\nYour eyes are open\nWear no disguise for me\nCome into the open\n", + "mat_rainbow": "Rainbow", + "mat_rainbow_gas": "Unicorn farts", + "action_rainbow_trail": "Rainbow trail", + "actiondesc_rainbow_trail": "Gives a projectile a trail of rainbow", + "item_gold_orb": "Shiny orb", + "itemdesc_gold_orb": "It hums slightly. What happens if you kick it, you wonder...", + "item_stonestone": "Tannerkivi", + "itemdesc_stonestone": "It looks like it could stand the test of aeons.", + "log_dark_moon_altar_extra": "Heretic!", + "logdesc_dark_moon_altar_extra": "How dare you do this!", + "log_dark_moon_altar": "”From my blood...”", + "logdesc_dark_moon_altar": "from my blood... from my blood... from my blood... from my blood...", + "mat_steelrusted": "rusted steel", + "stat_streaks": "Streaks:", + "animal_necrobot": "Tuonelankone", + "animal_necrobot_super": "Marraskone", + "animal_minipit": "Pienkätyri", + "progress_killed_by": "Killed by: $0", + "animal_scavenger_glue": "Liimahiisi", + "mat_glue": "Glue", + "item_sunseed": "Auringonsiemen", + "itemdesc_sunseed": "It glows, full of promise.", + "animal_boss_ghost": "Unohdettu", + "animal_boss_ghost_polyp": "Häive", + "action_remove_bounce": "Remove Bounce", + "actiondesc_remove_bounce": "A normally bouncy projectile stops doing so", + "biome_ghost_secret": "Forgotten cave", + "hint_endingmcguffin_enter_newgameplus": "Press $0 to enter New Game$1", + "biome_winter_caves": "Snowy Chasm", + "item_mcguffin_33": "Amulet of Yendor", + "itemdesc_mcguffin_33": "It is said to possess powers which mere mortals can scarcely comprehend, let alone utilize", + "action_glue_shot": "Glue Ball", + "actiondesc_glue_shot": "A projectile that explodes into a sticky mess", + "action_petrify": "Petrify", + "actiondesc_petrify_a": "Turns a wounded enemy into stone", + "actiondesc_petrify_b": "A critical hit turns an enemy into stone", + "actiondesc_petrify_c": "A critical hit turns a wounded enemy into stone", + "perk_gamble": "Gamble (One-off)", + "perkdesc_gamble": "You gain two random perks.", + "item_wand_riimusauva": "Riimusauva", + "item_wand_arpaluu": "Arpaluu", + "item_wand_varpuluuta": "Varpuluuta", + "animal_surge": "Sähikäinen", + "animal_spiderbot": "Rautalukki", + "animal_piranha": "Kyrmyniska", + "animal_fish_giga": "Syväolento", + "action_worm_shot_big": "Giga Worm Launcher", + "actiondesc_worm_shot_big": "Summons a massive worm to cause havoc for a moment!", + "action_fan": "Projectile Fan", + "actiondesc_fan": "Pushes incoming projectiles away in a narrow cone formation", + "perk_fungal_disease": "Fungal Disease", + "perkdesc_fungal_disease": "When near danger, you sprout fungal growths.", + "perk_lukki_minion": "Lukki Minion", + "perkdesc_lukki_minion": "Summons a lukki minion to your help.", + "perk_angry_levitation": "Rage-fueled Levitation", + "perkdesc_angry_levitation": "Killing an enemy makes you replenish some of your levitation power.", + "perk_destructive_spells": "Destructive Magic", + "perkdesc_destructive_spells": "Your spells destroy ground more efficiently.", + "perk_mold": "Fungal Colony", + "perkdesc_mold": "Slime near you spontaneously turns into fungal creatures.", + "perk_cordyceps": "Cordyceps", + "perkdesc_cordyceps": "Fungal creatures spawn from the corpses of enemies killed by you.", + "action_pollen": "Pollen", + "actiondesc_pollen": "A small, floating projectile that homes towards nearby creatures", + "action_homing_short": "Short-range Homing", + "actiondesc_homing_short": "A projectile flies towards targets when near them", + "animal_fungus_giga": "Huhtasieni", + "animal_fungus_nest": "Rihmasto", + "log_new_step": "A transformation happens!", + "logdesc_new_step": "Something has changed...", + "item_seed_b": "Auringonmuna", + "itemdesc_seed_b": "It glows with high intensity now...", + "item_seed_c": "Aurinkokivi", + "itemdesc_seed_c": "The essence of the Sun, crystallized.", + "item_seed_d": "Tähdenpoikanen", + "itemdesc_seed_d": "It's still not fully grown but radiates heat.", + "item_seed_e": "Uusi Aurinko", + "itemdesc_seed_e": "It is done", + "material_mold": "Mold", + "material_cloth": "Cloth", + "biome_robobase": "Power plant", + "biome_fun": "Overgrown cavern", + "item_book_music_b": "Research Notes", + "itemdesc_book_music_b": "“One in the pond\nOne in the tree\nOne on the ledge\nOne under the sun”", + "item_book_music": "Alchemist's Notebook", + "itemdesc_book_music": "”The one below listens to my songs...\n \nG D# G E A\n \nE C B G# F”", + "animal_sentry": "Tarkkailija", + "animal_neutralizer": "Pysäyttäjä", + "animal_hidden": "Vakoilija", + "animal_soldier": "Teloittaja", + "item_book_s_a": "Notes on Grand Alchemy", + "itemdesc_book_s_a": "”Among the great Alchemical endeavours there are some that,\nwhile not equal to the Great Work, nonetheless are revered greatly\nfor the deific potence they instill to whomsoever succeeds\nin harnessing their Power.\n\nThe One I am to discuss calls for a Seed of great promise, hidden deep within the Soil of this Earth...”", + "itemdesc_book_s_b": "”...Bring the slumbering Seed to life by letting it soak in the rays of the Sun, on the pinnacle of past civilizations...”", + "itemdesc_book_s_c": "”...The Alchemical process requires great Fire and Heat; for this purpose,\nlay the Stone in Fiery Earth and bring forth its transformation with great magical Heat of Destruction...”", + "itemdesc_book_s_d": "”...Once finished, It will sustain life; to this end, its Creation asks for a substantial amount\nof Life Force. Let the Egg engulf One Hundred of your Foes and drink their Blood...”", + "itemdesc_book_s_e": "”...As a final step, imbue the Youngling with the crystallized Essences of\nthe Four Elements. But beware, for the Youngling is susceptible to corruptive influence...”", + "item_book_music_c": "Book of the Key", + "itemdesc_book_music_c": "”Once the Key has listened to you, bring it home...\nOne home in the sky, beyond the invisible steps...\nOne home in the underworld, below seas of magma...”", + "item_book_robot": "Musings of an Adventurer", + "itemdesc_book_robot": "”This machinery is unlike any I've seen before. Did the Hiisi create it? Or was it always here?”", + "item_d12": "12-sided Die", + "itemdesc_d12": "More sides, more potential rewards!", + "action_knife_ring": "Ring of Knives", + "actiondesc_knife_ring": "A shrinking ring of 8 knives is summoned", + "action_iceball": "Iceball", + "actiondesc_iceball": "A magical ball of frozen fire", + "item_d12_greed": "12-sided Greed Die", + "itemdesc_d12_greed": "Better not!", + "item_book_moon": "Book of Celestial Bodies", + "itemdesc_book_moon": "”As with everything else, every celestial body also has its counterpart.\nFor every golden star is a dark enigma, and for every silvery moon there is a hollow shadow.”", + "perk_minion_powerup": "Powerful Minions", + "perkdesc_minion_powerup": "Any minions spawned to your aid have increased damage output and health.", + "item_seed_f": "Pimeä Aurinko", + "itemdesc_seed_f": "Something went wrong...!", + "logdesc_new_step_b": "Everything is not right here...", + "perk_map": "Spatial Awareness", + "perkdesc_map": "If you stop for a moment, you can sense your location relative to the Mountain.", + "biome_underwater": "Sunken cavern", + "log_collision_1": "It is gone", + "logdesc_collision_1": "The old are devoured for the new to take their place", + "log_collision_2": "As Above, So Below...", + "logdesc_collision_2": "The new heart of the world is at balance", + "log_collision_3": "As Above, So Below, but...", + "logdesc_collision_3": "The new heart of the world grows with corruption at its center", + "item_goldnugget_200000": "Golden Idol (200000)", + "item_bloodmoney_200000": "Bloody golden Idol (200000)", + "NEWTEXTSINCE20210216": "", + "action_tntbox": "Summon Explosive Box", + "actiondesc_tntbox": "Summons a box of explosive matter", + "action_tntbox_big": "Summon Large Explosive Box", + "actiondesc_tntbox_big": "Summons a large box of explosive matter", + "streamingevent_all_access_teleport": "Free-for-all Portals", + "streamingeventdesc_all_access_teleport": "Creatures near you gain the ability to enter the Holy Mountain portals.", + "item_book_hint": "Book of Guidance", + "item_gold_orb_greed": "Cruel Orb", + "itemdesc_gold_orb_greed": "It seems to trickle with blood...", + "status_weaken_combined": "Weakened", + "statusdesc_weaken_combined": "Your resistances and protective perks are disabled temporarily.", + "damage_sun": "Valo", + "item_musicstone": "Kuulokivi", + "itemdesc_musicstone": "This artefact is covered in note-shaped engravings and is pulsing at a steady pace.\nIs that the sound of distant music?", + "damage_darksun": "Pimeys", + "animal_fungus_tiny": "Myrkkynääpikkä", + "perkdesc_mega_beam_stone": "You gain an artefact that allows you to call the celestial rage.", + "animal_fungus_tiny_perk": "Sappitatti", + "reward_sun": "Benign sunshine!", + "action_sun": "Summon A Sun", + "actiondesc_sun": "Creates an immensely powerful entity; Can be cast only once", + "action_darksun": "Summon A Dark Sun", + "actiondesc_darksun": "Creates an immensely powerful entity; Can be cast only once", + "achievement_excavationsite": "Reached Coal Pits", + "achievementdesc_excavationsite": "Reached Coal Pits", + "achievement_snowcave": "Reached Snowy Depths", + "achievementdesc_snowcave": "Reached Snowy Depths", + "achievement_snowcastle": "Reached Hiisi Base", + "achievementdesc_snowcastle": "Reached Hiisi Base", + "achievement_rainforest": "Reached Underground Jungle", + "achievementdesc_rainforest": "Reached Underground Jungle", + "achievement_vault": "Reached The Vault", + "achievementdesc_vault": "Reached The Vault", + "achievement_crypt": "Reached Temple of the Art", + "achievementdesc_crypt": "Reached Temple of the Art", + "achievement_victory": "Victory", + "achievementdesc_victory": "Victory", + "achievement_orbs": "Gathered All The Knowledge", + "achievementdesc_orbs": "Gathered All The Knowledge", + "achievement_progress_enemies": "100% Enemy Progress", + "achievementdesc_progress_enemies": "100% Enemy Progress", + "achievement_progress_spells": "100% Spell Progress", + "achievementdesc_progress_spells": "100% Spell Progress", + "achievement_progress_perks": "100% Perk Progress", + "achievementdesc_progress_perks": "100% Perk Progress", + "achievement_impressed": "The Gods Are Impressed", + "achievementdesc_impressed": "The Gods Are Impressed", + "achievement_afraid": "The Gods Are Afraid", + "achievementdesc_afraid": "The Gods Are Afraid", + "achievement_enraged": "The Gods Are Enraged", + "achievementdesc_enraged": "The Gods Are Enraged", + "action_nuke_giga": "Giga Nuke", + "actiondesc_nuke_giga": "What do you expect?", + "action_bomb_holy_giga": "Giga Holy Bomb", + "actiondesc_bomb_holy_giga": "Bigger and therefore holier", + "animal_friend": "Toveri", + "animal_wizard_homing": "Kohdennusmestari", + "animal_icemage": "Pakkasukko", + "building_altar_null": "Nullifying Altar", + "building_altar_always": "Permanence Altar", + "biomemodifierdesc_cool": "The air feels extremely cool...", + "animal_cook": "Kokkihiisi", + "log_balance_1": "The world is at a balance", + "log_balance_2": "The world is corrupted", + "log_balance_3": "The world is overburdened by light", + "log_balance_4": "The world is in chaos!", + "perk_gas_blood": "Gas Blood", + "perkdesc_gas_blood": "You bleed flammable gas instead of blood.", + "mat_healsand": "Lively powder", + "mat_steel_strong": "Hardened steel", + "damage_supernova": "Supernova", + "biomemodifierdesc_sunlight": "Everything is glowing in a mysterious light...!", + "biomemodifierdesc_sundark": "There's an ominous atmosphere here...!", + "biomemodifierdesc_fog_of_war_clear_at_player": "It feels gloomy in here", + "ui_million_shorthand": "$0M", + "ui_thousand_shorthand": "$0K", + "NEWTEXTSINCE20210316": "", + "menu_newgame_gamemodewithslotstooltip": "Start a new game or continue an existing save.", + "menu_newgame_saveandnewgame": "Save current world and start a new game", + "menu_main_continue_info": "Continue: $0", + "menu_saveslotselect_deleteslotfirst": "Delete the world in this slot\nto be able to start a new game.", + "menu_saveslotselect_continue": "Continue this world.", + "menu_saveslotselect_continuecurrent": "Continue current world.", + "menu_saveslotselect_modnotfound_withname": " [Mod not found - $0]", + "menu_saveslotselect_modnotfound": " [Mod not found]", + "menuoptions_steamcloud_warning_enabled": "Steam Cloud save size warning: $0", + "menuoptions_steamcloud_warning_limit": "Steam Cloud save size limit warning", + "menuoptions_steamcloud_warning_tooltip": "The game will warn you if the size of save data exceeds the given amount.", + "menu_steamcloud_size_warning": "Warning: Save size is over $0 MB.", + "menu_steamcloud_size_warning_desc": "Steam Cloud synchronization might take a long time.\nClick here to turn off Cloud sync.", + "menu_steamcloud_filecount_warning": "Warning: Save data exceeds 10000 files", + "menu_steamcloud_filecount_warning_desc": "Steam Cloud doesn't support that many files.\nThings probably aren't gonna work.\nClick here to turn off Cloud sync.", + "menu_steamcloud_warning_turnoff_hint": "(You can switch this warning off via Options.)", + "biomemodifierdesc_invisibility": "You suddenly have trouble focusing your eyes...", + "biomemodifierdesc_wormy": "You hear creepy crawling everywhere!", + "item_tntbox": "Explosive box", + "item_tntbox_big": "Large explosive box", + "item_book_essences": "Tome of Essences", + "itemdesc_book_essences": "”The four Essences represent the four Elements that form this visible World...\nImbued with their Terrible Power, one may do great deeds,\nbut one should be Afraid of their destructive Might. To this end,\nwe have Devised a way to remove these Dangerous Forces; seek it in the West and East.\n\nA Legend also tells that all the Elements originated from the Egg of Sky and return to It one day...”", + "action_black_hole_giga": "Omega Black Hole", + "actiondesc_black_hole_giga": "Even light dies eventually...", + "animal_firemage_big": "Suurstendari", + "itemdesc_book_hint": "”One of my brethren ran away in order to escape our predicament ...\nThey felt our understanding of this world was to be forbidden.\nThey hid something here, in this room, but...\n...I lack the ability to truly see what is here!”", + "NEWTEXTSINCE20210407": "", + "input_mousebutton4": "Mouse 4", + "input_mousebutton5": "Mouse 5", + "action_blood_to_power": "Blood to Power", + "actiondesc_blood_to_power": "A projectile gains additional damage at the cost of 20% of your health", + "action_meat_to_power": "Meat to Power", + "actiondesc_meat_to_power": "Gives a projectile the ability to suck up nearby blood and meat, increasing its damage", + "action_toxic_to_power": "Toxic Power", + "actiondesc_toxic_to_power": "Gives a projectile the ability to suck up nearby toxic sludge and poison, increasing its damage", + "item_book_diamond": "Book of the Jewel", + "itemdesc_book_diamond": "”In my dream I saw a great Diamond...\nIt invited me within, offering me Grand Treasures.\nThis it said to me:\n'If you wish to follow the Path I show you here, you must bring me one of these Two:\na terrible Curse of Avarice, or the most Singular being in this realm.'\nI do not fully understand these words, but I still see the Diamond in my mind's eye...”", + "mat_meat_warm": "Lightly-cooked meat", + "mat_meat_hot": "Cooked meat", + "mat_meat_done": "Fully-cooked meat", + "mat_meat_burned": "Burned meat", + "mat_peasoup_concentrate": "Pea soup concentrate", + "mat_mammi": "Mämmi", + "mat_juhannussima": "Juhannussima", + "item_hernekeittopurkki": "Hernekeittopurkki", + "item_kaljapullo": "Kaljapullo", + "perk_iron_stomach": "Iron Stomach", + "perkdesc_iron_stomach": "You no longer suffer from negative effects of eating.", + "booktitle01": "Emerald Tablet of Thoth", + "bookdesc01": "The necessity of concealing the Art is\none of the chief anxieties of alchemists. \nWe are sworn to secrecy by heaven and earth and hell,\nby the four elements, by the height and the depth,\nby Hermes, by Anubis,and by the howlings of Kerkoros.\nAn oath has been required of us to reveal\nnothing clearly to any uninitiated being.", }; diff --git a/src/app/calc/entityProjectileMap.ts b/src/app/calc/entityProjectileMap.ts new file mode 100644 index 0000000..55f1e9a --- /dev/null +++ b/src/app/calc/entityProjectileMap.ts @@ -0,0 +1,7 @@ +import { entityToActionId as entityToActionIdRelease } from './__generated__/entityProjectileMap'; +import { entityToActionId as entityToActionIdBeta } from './__generated__/entityProjectileMap.beta'; + +// It would be ideal to be able to switch between the beta and release versions of actions at runtime, but that seems like excessive complexity given the current changes mostly add entirely new spells + +export const entityToActionId = entityToActionIdBeta; + diff --git a/src/app/calc/eval/lookups.ts b/src/app/calc/eval/lookups.ts index b9d591b..5743086 100644 --- a/src/app/calc/eval/lookups.ts +++ b/src/app/calc/eval/lookups.ts @@ -1,7 +1,7 @@ import { lazy, notNullOrUndefined } from '../../util/util'; -import { entityToActionId } from '../__generated__/entityProjectileMap'; +import { entityToActionId } from '../entityProjectileMap'; import { Action } from '../extra/types'; -import { actions } from '../__generated__/gun_actions'; +import { actions } from '../gun_actions'; import { getActionById } from './util'; export const entityToAction = lazy(() => diff --git a/src/app/calc/eval/util.ts b/src/app/calc/eval/util.ts index 61920e6..2128890 100644 --- a/src/app/calc/eval/util.ts +++ b/src/app/calc/eval/util.ts @@ -1,5 +1,5 @@ import { Action } from '../extra/types'; -import { actions } from '../__generated__/gun_actions'; +import { actions } from '../gun_actions'; export function getActionById(actionId: string): Readonly { for (let i = 0; i < actions.length; i++) { diff --git a/src/app/calc/extra/types.ts b/src/app/calc/extra/types.ts index 40f54f0..8df2df4 100644 --- a/src/app/calc/extra/types.ts +++ b/src/app/calc/extra/types.ts @@ -36,6 +36,7 @@ export type GunActionState = { damage_electricity_add: number; damage_fire_add: number; damage_explosion_add: number; + damage_explosion: number; damage_ice_add: number; damage_slice_add: number; damage_healing_add: number; @@ -65,6 +66,7 @@ export type GunActionState = { game_effect_entities: string; sound_loop_tag?: string; projectile_file: string; + damage_null_all: number; action_recursive?: boolean; damage_projectile_mul?: number; diff --git a/src/app/calc/gun.ts b/src/app/calc/gun.ts index 9515a8a..4717901 100644 --- a/src/app/calc/gun.ts +++ b/src/app/calc/gun.ts @@ -45,7 +45,7 @@ import { StartReload, } from './extra/ext_functions'; import { init_state_from_game } from './extra/init'; -import { actions } from './__generated__/gun_actions'; +import { actions } from './gun_actions'; import { ActionSource } from './eval/types'; // constants diff --git a/src/app/calc/gun_actions.ts b/src/app/calc/gun_actions.ts new file mode 100644 index 0000000..dc13efe --- /dev/null +++ b/src/app/calc/gun_actions.ts @@ -0,0 +1,7 @@ +import { actions as actionsRelease } from './__generated__/gun_actions'; +import { actions as actionsBeta } from './__generated__/gun_actions.beta'; + +// It would be ideal to be able to switch between the beta and release versions of actions at runtime, but that seems like excessive complexity given the current changes mostly add entirely new spells + +export const actions = actionsBeta; + diff --git a/src/app/calc/gunaction_generated.ts b/src/app/calc/gunaction_generated.ts index 77d5475..9d593ea 100644 --- a/src/app/calc/gunaction_generated.ts +++ b/src/app/calc/gunaction_generated.ts @@ -39,6 +39,7 @@ export const defaultGunActionState: GunActionState = { damage_electricity_add: 0.0, damage_fire_add: 0.0, damage_explosion_add: 0.0, + damage_explosion: 0.0, damage_ice_add: 0.0, damage_slice_add: 0.0, damage_healing_add: 0.0, @@ -46,6 +47,7 @@ export const defaultGunActionState: GunActionState = { damage_drill_add: 0.0, damage_critical_chance: 0, damage_critical_multiplier: 0.0, + damage_null_all: 0, explosion_damage_to_materials: 0, knockback_force: 0, reload_time: 0, diff --git a/src/app/components/SpellSelector.tsx b/src/app/components/SpellSelector.tsx index c31bac3..25a23fc 100644 --- a/src/app/components/SpellSelector.tsx +++ b/src/app/components/SpellSelector.tsx @@ -1,4 +1,4 @@ -import { actions } from '../calc/__generated__/gun_actions'; +import { actions } from '../calc/gun_actions'; import { WandActionDragSource } from './wandAction/WandActionDragSource'; import styled from 'styled-components'; import { useMemo } from 'react'; From eadb2caee9254b9443255da9fc15802740c59d5d Mon Sep 17 00:00:00 2001 From: Ashley Baldock Date: Fri, 7 Jul 2023 02:28:09 +0100 Subject: [PATCH 2/5] beta enable with config option --- README.md | 4 ++++ src/app/calc/extra/types.ts | 1 + src/app/calc/gun_actions.ts | 6 ++++-- src/app/calc/gunaction_generated.ts | 4 +++- src/app/components/SpellSelector.tsx | 16 ++++++++++++++-- src/app/components/config/ConfigEditor.tsx | 6 ++++++ src/app/redux/configSlice.ts | 2 ++ 7 files changed, 34 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9bf83f1..fbb6bba 100644 --- a/README.md +++ b/README.md @@ -77,3 +77,7 @@ Runs `scripts/generate_entity_map.py`. Generate display strings from IDs based on the game's translation file. This requires that you have './data_base/translations/common.csv' present. Runs `scripts/generate_translations.py`. + +### `generate` + +Runs all three of the above. diff --git a/src/app/calc/extra/types.ts b/src/app/calc/extra/types.ts index 8df2df4..d09198f 100644 --- a/src/app/calc/extra/types.ts +++ b/src/app/calc/extra/types.ts @@ -76,6 +76,7 @@ export type Action = { id: string; name: string; description: string; + beta?: boolean; sprite: string; sprite_unidentified?: string; related_projectiles?: [string, number?]; diff --git a/src/app/calc/gun_actions.ts b/src/app/calc/gun_actions.ts index dc13efe..6a30447 100644 --- a/src/app/calc/gun_actions.ts +++ b/src/app/calc/gun_actions.ts @@ -3,5 +3,7 @@ import { actions as actionsBeta } from './__generated__/gun_actions.beta'; // It would be ideal to be able to switch between the beta and release versions of actions at runtime, but that seems like excessive complexity given the current changes mostly add entirely new spells -export const actions = actionsBeta; - +const releaseActionIdSet = new Set(actionsRelease.map(({ id }) => id)); +export const actions = actionsBeta.map((action) => + releaseActionIdSet.has(action.id) ? action : { ...action, beta: true }, +); diff --git a/src/app/calc/gunaction_generated.ts b/src/app/calc/gunaction_generated.ts index 9d593ea..8de8a33 100644 --- a/src/app/calc/gunaction_generated.ts +++ b/src/app/calc/gunaction_generated.ts @@ -83,7 +83,7 @@ export function ConfigGunActionInfo_PassToGame(value: GunActionState) { // ext function function ConfigGunActionInfo_ReadToLua(...args: any[]) {} -export function ConfigGunActionInfo_Copy(source: any, dest: any) { +export function ConfigGunActionInfo_Copy(source: T, dest: T): void { dest.action_id = source.action_id; dest.action_name = source.action_name; dest.action_description = source.action_description; @@ -120,6 +120,7 @@ export function ConfigGunActionInfo_Copy(source: any, dest: any) { dest.damage_electricity_add = source.damage_electricity_add; dest.damage_fire_add = source.damage_fire_add; dest.damage_explosion_add = source.damage_explosion_add; + dest.damage_explosion = source.damage_explosion; dest.damage_ice_add = source.damage_ice_add; dest.damage_slice_add = source.damage_slice_add; dest.damage_healing_add = source.damage_healing_add; @@ -127,6 +128,7 @@ export function ConfigGunActionInfo_Copy(source: any, dest: any) { dest.damage_drill_add = source.damage_drill_add; dest.damage_critical_chance = source.damage_critical_chance; dest.damage_critical_multiplier = source.damage_critical_multiplier; + dest.damage_null_all = source.damage_null_all; dest.explosion_damage_to_materials = source.explosion_damage_to_materials; dest.knockback_force = source.knockback_force; dest.reload_time = source.reload_time; diff --git a/src/app/components/SpellSelector.tsx b/src/app/components/SpellSelector.tsx index 25a23fc..1f88dad 100644 --- a/src/app/components/SpellSelector.tsx +++ b/src/app/components/SpellSelector.tsx @@ -29,6 +29,13 @@ const isSpellUnlocked = ( return !spell.spawn_requires_flag || unlocks[spell.spawn_requires_flag]; }; +const isBetaEnabled = ( + configBetaEnabled: ConfigState['config']['showBeta'], + spell: Action, +) => { + return !spell.beta || configBetaEnabled; +}; + const categoryDisplayNames = ACTION_TYPES.map((c) => constToDisplayString(c)); type WandActionSelectProps = { @@ -50,8 +57,13 @@ export function SpellSelector(props: Props) { const { config } = useAppSelector(selectConfig); const unlockedActions = useMemo( - () => actions.filter((a) => isSpellUnlocked(config.unlocks, a)), - [config.unlocks], + () => + actions.filter( + (a) => + isSpellUnlocked(config.unlocks, a) && + isBetaEnabled(config.showBeta, a), + ), + [config.unlocks, config.showBeta], ); const actionsByType = useMemo(() => { diff --git a/src/app/components/config/ConfigEditor.tsx b/src/app/components/config/ConfigEditor.tsx index e262094..e8b2383 100644 --- a/src/app/components/config/ConfigEditor.tsx +++ b/src/app/components/config/ConfigEditor.tsx @@ -139,6 +139,12 @@ const configOptions = [ (c) => c.endSimulationOnRefresh, (c, v) => (c.endSimulationOnRefresh = v), ), + makeConfigField( + 'Show Beta Spells', + ConfigType.Boolean, + (c) => c.showBeta, + (c, v) => (c.showBeta = v), + ), makeConfigFieldGroup('Unlocks', [ makeConfigField( 'Enable All', diff --git a/src/app/redux/configSlice.ts b/src/app/redux/configSlice.ts index cf872f1..02806ff 100644 --- a/src/app/redux/configSlice.ts +++ b/src/app/redux/configSlice.ts @@ -21,6 +21,7 @@ export interface ConfigState { showActionTree: boolean; showSpellsInCategories: boolean; endSimulationOnRefresh: boolean; + showBeta: boolean; unlocks: { [key: string]: boolean; }; @@ -56,6 +57,7 @@ export const initialState: ConfigState = { showActionTree: true, showSpellsInCategories: false, endSimulationOnRefresh: true, + showBeta: false, unlocks: { card_unlocked_black_hole: false, card_unlocked_everything: false, From fed1b81e2c2cb102ad5d69641332f627a011674d Mon Sep 17 00:00:00 2001 From: Ashley Baldock Date: Fri, 7 Jul 2023 03:38:35 +0100 Subject: [PATCH 3/5] Add config options --- src/app/redux/configSlice.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app/redux/configSlice.ts b/src/app/redux/configSlice.ts index 02806ff..1f53ade 100644 --- a/src/app/redux/configSlice.ts +++ b/src/app/redux/configSlice.ts @@ -89,6 +89,8 @@ export const initialState: ConfigState = { card_unlocked_rain: false, card_unlocked_paint: false, card_unlocked_rainbow_trail: false, + card_unlocked_homing_wand: false, + card_unlocked_fish: false, }, requirements: { enemies: false, From b09c4d7f0a181e5917f8f111a35198e8e5c32983 Mon Sep 17 00:00:00 2001 From: Ashley Baldock Date: Mon, 10 Jul 2023 00:55:49 +0100 Subject: [PATCH 4/5] Fix blood to power behaviour --- src/app/calc/eval/clickWand.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/calc/eval/clickWand.ts b/src/app/calc/eval/clickWand.ts index 5287aa8..965fe21 100644 --- a/src/app/calc/eval/clickWand.ts +++ b/src/app/calc/eval/clickWand.ts @@ -85,9 +85,9 @@ export function clickWand( override('ComponentGetValue2', (args) => { if (args[0] === 'IF_HP') { if (args[1] === 'hp') { - return requirements.hp ? 25 : 100; + return requirements.hp ? 25000 / 25 : 100000 / 25; } else if (args[1] === 'max_hp') { - return 100; + return 100000 / 25; } } }), From 93f775b051fd0230225ff9dda62c56f068425edc Mon Sep 17 00:00:00 2001 From: Ashley Baldock Date: Sun, 6 Aug 2023 19:35:12 +0100 Subject: [PATCH 5/5] Try a different approach to emualating lua for loops --- scripts/generate_gun_actions.py | 59 +++- .../calc/__generated__/gun_actions.beta.ts | 278 +++++++++--------- src/app/calc/__generated__/gun_actions.ts | 278 +++++++++--------- src/app/calc/extra/ext_functions.ts | 2 +- 4 files changed, 317 insertions(+), 300 deletions(-) diff --git a/scripts/generate_gun_actions.py b/scripts/generate_gun_actions.py index 36ab15e..8d071f9 100644 --- a/scripts/generate_gun_actions.py +++ b/scripts/generate_gun_actions.py @@ -71,6 +71,23 @@ import { Random, SetRandomSeed, GameGetFrameNum } from "../extra/util"; import { ActionSource } from "../eval/types"; +""" + +lua_utils = """ +function* luaFor(start: number, count: number, step: number = 1) { + let cur = start, n = count; + while (--n >= 0) { + yield cur += step; + } +} + +function* ipairs([...arr]) { + const len = arr.length; + let i = -1; + while (++i < len) { + yield [i, arr[i]]; + } +} """ @@ -106,7 +123,7 @@ class PatternReplace: PatternReplace(r'local ', r'let ', flags=re.MULTILINE), PatternReplace(r'#(\w+)', r'\1.length', flags=re.MULTILINE), PatternReplace(r'elseif', r'} else if', flags=re.MULTILINE), - PatternReplace(r'(\selse)(?!\w)(?! +if)', r'} \1 {', flags=re.MULTILINE), + PatternReplace(r'(\t+)(else)(?!\w)(?! +if)', r'\1} \2 {', flags=re.MULTILINE), PatternReplace(r'if\s+([^()]+?)then', r'if (\1) {', flags=re.MULTILINE), PatternReplace(r'if\s+(.+?)then', r'if \1 {', flags=re.MULTILINE), PatternReplace(r'end(\s+)', r'}\1', flags=re.MULTILINE), @@ -123,7 +140,7 @@ class PatternReplace: PatternReplace(r'math\.', r'Math.', flags=re.MULTILINE), # PatternReplace(r'(SetRandomSeed\(.*?\))$', r'// \1', flags=re.MULTILINE), PatternReplace(r'tostring\((.*?)\)', r'String(\1)', flags=re.MULTILINE), - PatternReplace(r'for (\w+)=(.+?),(.+?) do', r'for (let \1 = \2; \1 <= \3; \1++) {', flags=re.MULTILINE), + # PatternReplace(r'for (\w+)=(.+?),(.+?) do', r'for (let \1 = \2; \1 <= \3; \1++) {', flags=re.MULTILINE), PatternReplace(r'while (.*?) do', r'while (\1) {', flags=re.MULTILINE), PatternReplace(r'~=', r'!==', flags=re.MULTILINE), PatternReplace(r'(?<=\W)nil(?=\W)', r'null', flags=re.MULTILINE), @@ -134,18 +151,36 @@ class PatternReplace: PatternReplace(r'let (\w+)\s*,\s*(\w+) =', r'let [\1, \2] =', flags=re.MULTILINE), PatternReplace(r'let (data) = \[]', r'let \1: Action | null = null', flags=re.MULTILINE), PatternReplace(r'let (\w+) = \[]', r'let \1: any = []', flags=re.MULTILINE), + PatternReplace(r'table.insert\(\s*(\w+)\s*,\s*(\w+)\s*\)', r'\1.push(\2)', flags=re.MULTILINE), PatternReplace(r'table.remove\(\s*(\w+)\s*,\s*(\w+)\s*\)', r'\1.splice(\2 - 1, 1)', flags=re.MULTILINE), PatternReplace(r'(deck|actions|hand|discarded|types)\[([\w.\- ]+)]', r'\1[\2 - 1]', flags=re.MULTILINE), PatternReplace(r'string.sub\((.*?),(.*?),(.*?)\)', r'\1.substring(\2-1,\3)', flags=re.MULTILINE), PatternReplace(r'tonumber\(', r'Number.parseInt(', flags=re.MULTILINE), + + # For loops + # for i=1,how_many[,step] do ==> for (const i of luaFor(1, how_many[, step])) { PatternReplace( - r'(\t+)for (\w+),(\w+) in ipairs\(\s*(.+?)\s*\) do(.*?)^\1}', - r'\1\4.every((\3: any, \2: any) => {\5\1\treturn true;\n\1})', - flags=re.MULTILINE | re.DOTALL, - repeat=True, + r'for *(.*?) *= *(.*?) *, *(.*?) *, *(.*?) +do', + r'for (const \1 of luaFor(\2, \3, \4)) {', + flags=re.MULTILINE, + # repeat=True, ), - PatternReplace(r'break', r'return false;', flags=re.MULTILINE), + # for i=1,how_many do ==> for (const i of luaFor(1, how_many)) { + PatternReplace( + r'for *(.*?) *= *(.*?) *, *(.*?) +do', + r'for (const \1 of luaFor(\2, \3)) {', + flags=re.MULTILINE, + # repeat=True, + ), + # for i,v in ipairs( list ) do ==> for (const [i, v] of ipairs(list)) { + PatternReplace( + r'for ([.()\-\w]+),(\w+) in ipairs\(\s*(.+?)\s*\) do', + r'for (const [\1, \2] of ipairs(\3)) {', + flags=re.MULTILINE, + # repeat=True, + ), + PatternReplace(r' == ', r' === ', flags=re.MULTILINE), PatternReplace(r' !== null', r' != null', flags=re.MULTILINE), PatternReplace(r' === null', r' == null', flags=re.MULTILINE), @@ -210,12 +245,14 @@ def processFile(srcFile): oldContent = content content = re.sub(pattern.pattern, pattern.replace, content, flags=pattern.flags) - # insert imports - content = imports + content + # insert imports & lua utils + content = imports + lua_utils + content + + return content with open(dstFile, 'w') as outFile: - outFile.write(processFiles(srcFile)) + outFile.write(processFile(srcFile)) with open(dstFileBeta, 'w') as outFile: - outFile.write(processFiles(srcFileBeta)) + outFile.write(processFile(srcFileBeta)) diff --git a/src/app/calc/__generated__/gun_actions.beta.ts b/src/app/calc/__generated__/gun_actions.beta.ts index 12591f9..ad964c9 100644 --- a/src/app/calc/__generated__/gun_actions.beta.ts +++ b/src/app/calc/__generated__/gun_actions.beta.ts @@ -60,6 +60,21 @@ import { Random, SetRandomSeed, GameGetFrameNum } from "../extra/util"; import { ActionSource } from "../eval/types"; +function* luaFor(start: number, count: number, step: number = 1) { + let cur = start, n = count; + while (--n >= 0) { + yield cur += step; + } +} + +function* ipairs([...arr]) { + const len = arr.length; + let i = -1; + while (++i < len) { + yield [i, arr[i]]; + } +} + export const actions: Action[] = [ @@ -2446,7 +2461,7 @@ export const actions: Action[] = [ mana: 40, action: (c: GunActionState) => { - for (let i = 1; i <= 6; i++) { + for (const i of luaFor(1, 6)) { add_projectile("data/entities/projectiles/deck/infestation.xml") } @@ -3726,12 +3741,11 @@ export const actions: Action[] = [ let dcomps = EntityGetComponent( entity_id, "DamageModelComponent" ) if (( dcomps != null ) && ( dcomps.length > 0 )) { - dcomps.every((b: any, a: any) => { + for (const [a, b] of ipairs(dcomps)) { let hp = ComponentGetValue2( b, "hp" ) hp = Math.max( hp - 0.16, 0.04 ) ComponentSetValue2( b, "hp", hp ) - return true; - }) + } } }, }, @@ -3776,7 +3790,7 @@ export const actions: Action[] = [ c.damage_projectile_add = c.damage_projectile_add + ( damage / 35 ) } else if ( damage < 500 ) { c.damage_projectile_add = c.damage_projectile_add + ( damage / 45 ) - } else { + } else { c.damage_projectile_add = c.damage_projectile_add + ( damage / 55 ) } } @@ -3838,13 +3852,12 @@ export const actions: Action[] = [ action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { let hand_count = hand.length - hand.every((v: any, i: any) => { + for (const [i, v] of ipairs(hand)) { let rec = check_recursion( v, recursion_level ) if (( v.id !== "DUPLICATE" ) && ( i < hand_count ) && ( rec > -1 )) { call_action(ActionSource.ACTION, v, c, rec ) } - return true; - }) + } c.fire_rate_wait = c.fire_rate_wait + 20 setCurrentReloadTime(current_reload_time + 20) @@ -7300,7 +7313,7 @@ export const actions: Action[] = [ if ( rnd <= deck.length ) { data = deck[rnd - 1] - } else { + } else { data = discarded[rnd - deck.length - 1] } @@ -7313,7 +7326,7 @@ export const actions: Action[] = [ if ( rnd <= deck.length ) { data = deck[rnd - 1] - } else { + } else { data = discarded[rnd - deck.length - 1] } @@ -7356,7 +7369,7 @@ export const actions: Action[] = [ if ( rnd <= deck.length ) { data = deck[rnd - 1] - } else { + } else { data = discarded[rnd - deck.length - 1] } @@ -7369,7 +7382,7 @@ export const actions: Action[] = [ if ( rnd <= deck.length ) { data = deck[rnd - 1] - } else { + } else { data = discarded[rnd - deck.length - 1] } @@ -7377,7 +7390,7 @@ export const actions: Action[] = [ } if (( data != null ) && ( rec > -1 ) && ( ( data.uses_remaining == null ) || ( data.uses_remaining !== 0 ) )) { - for (let i = 1; i <= 3; i++) { + for (const i of luaFor(1, 3)) { call_action(ActionSource.ACTION, data, c, rec ) } @@ -7409,14 +7422,14 @@ export const actions: Action[] = [ SetRandomSeed( GameGetFrameNum() + deck.length, GameGetFrameNum() - 325 + discarded.length ) let datasize = deck.length + discarded.length - for (let i = 1; i <= 3; i++) { + for (const i of luaFor(1, 3)) { let rnd = Random( 1, datasize ) let data: Action | null = null if ( rnd <= deck.length ) { data = deck[rnd - 1] - } else { + } else { data = discarded[rnd - deck.length - 1] } @@ -7429,7 +7442,7 @@ export const actions: Action[] = [ if ( rnd <= deck.length ) { data = deck[rnd - 1] - } else { + } else { data = discarded[rnd - deck.length - 1] } @@ -7589,11 +7602,10 @@ export const actions: Action[] = [ max_uses: 1, action: (c: GunActionState) => { let players = EntityGetWithTag( "player_unit" ) - players.every((v: any, i: any) => { + for (const [i, v] of ipairs(players)) { let [x, y] = EntityGetTransform( v ) let eid = EntityLoad("data/entities/projectiles/deck/all_spells_loader.xml", x, y) - return true; - }) + } c.fire_rate_wait = c.fire_rate_wait + 100 setCurrentReloadTime(current_reload_time + 100) }, @@ -7636,7 +7648,7 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { data = deck[1 - 1] - } else { + } else { data = null } @@ -7657,7 +7669,7 @@ export const actions: Action[] = [ let target = data.related_projectiles[0] let count = data.related_projectiles[1] || 1 - for (let i = 1; i <= how_many; i++) { + for (const i of luaFor(1, how_many)) { data = deck[1 - 1] discarded.push(data) deck.splice(1 - 1, 1) @@ -7665,12 +7677,12 @@ export const actions: Action[] = [ let valid = false - for (let i = 1; i <= deck.length; i++) { + for (const i of luaFor(1, deck.length)) { let check = deck[i - 1] if (( check != null ) && ( ( check.type === ACTION_TYPE_PROJECTILE ) || ( check.type === ACTION_TYPE_STATIC_PROJECTILE ) || ( check.type === ACTION_TYPE_MATERIAL ) || ( check.type === ACTION_TYPE_UTILITY ) )) { valid = true - break; + break } } @@ -7684,10 +7696,10 @@ export const actions: Action[] = [ } if (valid ) { - for (let i = 1; i <= count; i++) { + for (const i of luaFor(1, count)) { add_projectile_trigger_hit_world(target, 1) } - } else { + } else { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, ) setDontDrawActions(false) @@ -7716,7 +7728,7 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { data = deck[1 - 1] - } else { + } else { data = null } @@ -7737,7 +7749,7 @@ export const actions: Action[] = [ let target = data.related_projectiles[0] let count = data.related_projectiles[1] || 1 - for (let i = 1; i <= how_many; i++) { + for (const i of luaFor(1, how_many)) { data = deck[1 - 1] discarded.push(data) deck.splice(1 - 1, 1) @@ -7745,12 +7757,12 @@ export const actions: Action[] = [ let valid = false - for (let i = 1; i <= deck.length; i++) { + for (const i of luaFor(1, deck.length)) { let check = deck[i - 1] if (( check != null ) && ( ( check.type === ACTION_TYPE_PROJECTILE ) || ( check.type === ACTION_TYPE_STATIC_PROJECTILE ) || ( check.type === ACTION_TYPE_MATERIAL ) || ( check.type === ACTION_TYPE_UTILITY ) )) { valid = true - break; + break } } @@ -7764,10 +7776,10 @@ export const actions: Action[] = [ } if (valid ) { - for (let i = 1; i <= count; i++) { + for (const i of luaFor(1, count)) { add_projectile_trigger_timer(target, 20, 1) } - } else { + } else { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, ) setDontDrawActions(false) @@ -7796,7 +7808,7 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { data = deck[1 - 1] - } else { + } else { data = null } @@ -7817,7 +7829,7 @@ export const actions: Action[] = [ let target = data.related_projectiles[0] let count = data.related_projectiles[1] || 1 - for (let i = 1; i <= how_many; i++) { + for (const i of luaFor(1, how_many)) { data = deck[1 - 1] discarded.push(data) deck.splice(1 - 1, 1) @@ -7825,12 +7837,12 @@ export const actions: Action[] = [ let valid = false - for (let i = 1; i <= deck.length; i++) { + for (const i of luaFor(1, deck.length)) { let check = deck[i - 1] if (( check != null ) && ( ( check.type === ACTION_TYPE_PROJECTILE ) || ( check.type === ACTION_TYPE_STATIC_PROJECTILE ) || ( check.type === ACTION_TYPE_MATERIAL ) || ( check.type === ACTION_TYPE_UTILITY ) )) { valid = true - break; + break } } @@ -7844,10 +7856,10 @@ export const actions: Action[] = [ } if (valid ) { - for (let i = 1; i <= count; i++) { + for (const i of luaFor(1, count)) { add_projectile_trigger_death(target, 1) } - } else { + } else { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, ) setDontDrawActions(false) @@ -7976,7 +7988,7 @@ export const actions: Action[] = [ data = hand[1 - 1] } else if ( deck.length > 0 ) { data = deck[1 - 1] - } else { + } else { data = null } @@ -8011,7 +8023,7 @@ export const actions: Action[] = [ data = deck[deck.length - 1] } else if ( hand.length > 0 ) { data = hand[hand.length - 1] - } else { + } else { data = null } @@ -8049,14 +8061,14 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { s1 = "deck" data1 = deck[1 - 1] - } else { + } else { data1 = null } if ( deck.length > 0 ) { s2 = "deck 2" data2 = deck[2 - 1] - } else { + } else { data2 = null } @@ -8093,39 +8105,36 @@ export const actions: Action[] = [ c.fire_rate_wait = c.fire_rate_wait + 50 if ( discarded != null ) { - discarded.every((data: any, i: any) => { + for (const [i, data] of ipairs(discarded)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( rec > -1 ) && ( data.id !== "RESET" )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( hand != null ) { - hand.every((data: any, i: any) => { + for (const [i, data] of ipairs(hand)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( ( data.recursive == null ) || ( data.recursive === false ) )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( deck != null ) { - deck.every((data: any, i: any) => { + for (const [i, data] of ipairs(deck)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( rec > -1 ) && ( data.id !== "RESET" )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } }, }, @@ -8150,39 +8159,36 @@ export const actions: Action[] = [ let mana_ = mana if ( discarded != null ) { - discarded.every((data: any, i: any) => { + for (const [i, data] of ipairs(discarded)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 2 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( hand != null ) { - hand.every((data: any, i: any) => { + for (const [i, data] of ipairs(hand)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 2 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( deck != null ) { - deck.every((data: any, i: any) => { + for (const [i, data] of ipairs(deck)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 2 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } c.fire_rate_wait = firerate @@ -8213,39 +8219,36 @@ export const actions: Action[] = [ let mana_ = mana if ( discarded != null ) { - discarded.every((data: any, i: any) => { + for (const [i, data] of ipairs(discarded)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 0 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( hand != null ) { - hand.every((data: any, i: any) => { + for (const [i, data] of ipairs(hand)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 0 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( deck != null ) { - deck.every((data: any, i: any) => { + for (const [i, data] of ipairs(deck)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 0 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } c.fire_rate_wait = firerate @@ -8274,39 +8277,36 @@ export const actions: Action[] = [ let mana_ = mana if ( discarded != null ) { - discarded.every((data: any, i: any) => { + for (const [i, data] of ipairs(discarded)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 1 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( hand != null ) { - hand.every((data: any, i: any) => { + for (const [i, data] of ipairs(hand)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 1 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( deck != null ) { - deck.every((data: any, i: any) => { + for (const [i, data] of ipairs(deck)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 1 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } c.fire_rate_wait = firerate @@ -8341,17 +8341,17 @@ export const actions: Action[] = [ if (( children != null ) && ( inventory != null )) { let active_wand = ComponentGetValue2( inventory, "mActiveItem" ) - children.every((child_id: any, i: any) => { + for (const [i, child_id] of ipairs(children)) { if ( EntityGetName( child_id ) === "inventory_quick" ) { let wands = EntityGetAllChildren( child_id ) if ( wands != null ) { - wands.every((wand_id: any, k: any) => { + for (const [k, wand_id] of ipairs(wands)) { if (( wand_id !== active_wand ) && EntityHasTag( wand_id, "wand" )) { let spells = EntityGetAllChildren( wand_id ) if ( spells != null ) { - spells.every((spell_id: any, j: any) => { + for (const [j, spell_id] of ipairs(spells)) { let comp = EntityGetFirstComponentIncludingDisabled( spell_id, "ItemActionComponent" ) if ( comp != null ) { @@ -8359,16 +8359,13 @@ export const actions: Action[] = [ options.push(action_id) } - return true; - }) + } } } - return true; - }) + } } } - return true; - }) + } } if ( options.length > 0 ) { @@ -8377,7 +8374,7 @@ export const actions: Action[] = [ let rnd = Random( 1, options.length ) let action_id = options[rnd] - actions.every((data: any, i: any) => { + for (const [i, data] of ipairs(actions)) { if ( data.id === action_id ) { let rec = check_recursion( data, recursion_level ) if ( rec > -1 ) { @@ -8385,10 +8382,9 @@ export const actions: Action[] = [ call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return false; + break } - return true; - }) + } } draw_actions( 1, true ) @@ -8416,7 +8412,7 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { data = deck[iter - 1] || null - } else { + } else { data = null } @@ -8431,7 +8427,7 @@ export const actions: Action[] = [ let firerate = c.fire_rate_wait let reload = current_reload_time - for (let i = 1; i <= count; i++) { + for (const i of luaFor(1, count)) { if ( i === 1 ) { setDontDrawActions(true) } @@ -8455,7 +8451,7 @@ export const actions: Action[] = [ c.fire_rate_wait = firerate setCurrentReloadTime(reload) - for (let i = 1; i <= iter_max; i++) { + for (const i of luaFor(1, iter_max)) { if (deck.length > 0) { let d = deck[1 - 1] discarded.push(d) @@ -8498,7 +8494,7 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { data = deck[iter - 1] || null - } else { + } else { data = null } @@ -8513,7 +8509,7 @@ export const actions: Action[] = [ let firerate = c.fire_rate_wait let reload = current_reload_time - for (let i = 1; i <= count; i++) { + for (const i of luaFor(1, count)) { if ( i === 1 ) { setDontDrawActions(true) } @@ -8537,7 +8533,7 @@ export const actions: Action[] = [ c.fire_rate_wait = firerate setCurrentReloadTime(reload) - for (let i = 1; i <= iter_max; i++) { + for (const i of luaFor(1, iter_max)) { if (deck.length > 0) { let d = deck[1 - 1] discarded.push(d) @@ -8580,7 +8576,7 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { data = deck[iter - 1] || null - } else { + } else { data = null } @@ -8595,7 +8591,7 @@ export const actions: Action[] = [ let firerate = c.fire_rate_wait let reload = current_reload_time - for (let i = 1; i <= count; i++) { + for (const i of luaFor(1, count)) { if ( i === 1 ) { setDontDrawActions(true) } @@ -8619,7 +8615,7 @@ export const actions: Action[] = [ c.fire_rate_wait = firerate setCurrentReloadTime(reload) - for (let i = 1; i <= iter_max; i++) { + for (const i of luaFor(1, iter_max)) { if (deck.length > 0) { let d = deck[1 - 1] discarded.push(d) @@ -8664,7 +8660,7 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { data = deck[iter - 1] || null - } else { + } else { data = null } @@ -8679,7 +8675,7 @@ export const actions: Action[] = [ let firerate = c.fire_rate_wait let reload = current_reload_time - for (let i = 1; i <= count; i++) { + for (const i of luaFor(1, count)) { if ( i === 1 ) { setDontDrawActions(true) } @@ -8703,7 +8699,7 @@ export const actions: Action[] = [ c.fire_rate_wait = firerate setCurrentReloadTime(reload) - for (let i = 1; i <= iter_max; i++) { + for (const i of luaFor(1, iter_max)) { if (deck.length > 0) { let d = deck[1 - 1] discarded.push(d) @@ -8786,17 +8782,15 @@ export const actions: Action[] = [ action: (c: GunActionState) => { setCurrentReloadTime(current_reload_time - 25) - hand.every((v: any, i: any) => { + for (const [i, v] of ipairs(hand)) { discarded.push(v) - return true; - }) + } - deck.every((v: any, i: any) => { + for (const [i, v] of ipairs(deck)) { discarded.push(v) - return true; - }) + } clearHand() clearDeck() @@ -8832,11 +8826,11 @@ export const actions: Action[] = [ } if ( deck.length > 0 ) { - deck.every((v: any, i: any) => { + for (const [i, v] of ipairs(deck)) { if ( v != null ) { if (( v.id.substring( 1-1, 3 ) === "IF_" ) && ( v.id !== "IF_END" ) && ( v.id !== "IF_ELSE" )) { endpoint = -1 - return false; + break } if ( v.id === "IF_ELSE" ) { @@ -8846,11 +8840,10 @@ export const actions: Action[] = [ if ( v.id === "IF_END" ) { endpoint = i + 1 - return false; + break } } - return true; - }) + } let envelope_min = 1 let envelope_max = 1 @@ -8862,7 +8855,7 @@ export const actions: Action[] = [ envelope_max = endpoint } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { @@ -8870,17 +8863,17 @@ export const actions: Action[] = [ deck.splice(envelope_min - 1, 1) } } - } else { + } else { if ( elsepoint > 0 ) { envelope_min = elsepoint if ( endpoint > 0 ) { envelope_max = endpoint - } else { + } else { envelope_max = deck.length } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { @@ -8919,11 +8912,11 @@ export const actions: Action[] = [ } if ( deck.length > 0 ) { - deck.every((v: any, i: any) => { + for (const [i, v] of ipairs(deck)) { if ( v != null ) { if (( v.id.substring( 1-1, 3 ) === "IF_" ) && ( v.id !== "IF_END" ) && ( v.id !== "IF_ELSE" )) { endpoint = -1 - return false; + break } if ( v.id === "IF_ELSE" ) { @@ -8933,11 +8926,10 @@ export const actions: Action[] = [ if ( v.id === "IF_END" ) { endpoint = i + 1 - return false; + break } } - return true; - }) + } let envelope_min = 1 let envelope_max = 1 @@ -8949,7 +8941,7 @@ export const actions: Action[] = [ envelope_max = endpoint } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { @@ -8957,17 +8949,17 @@ export const actions: Action[] = [ deck.splice(envelope_min - 1, 1) } } - } else { + } else { if ( elsepoint > 0 ) { envelope_min = elsepoint if ( endpoint > 0 ) { envelope_max = endpoint - } else { + } else { envelope_max = deck.length } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { @@ -9014,11 +9006,11 @@ export const actions: Action[] = [ } if ( deck.length > 0 ) { - deck.every((v: any, i: any) => { + for (const [i, v] of ipairs(deck)) { if ( v != null ) { if (( v.id.substring( 1-1, 3 ) === "IF_" ) && ( v.id !== "IF_END" ) && ( v.id !== "IF_ELSE" )) { endpoint = -1 - return false; + break } if ( v.id === "IF_ELSE" ) { @@ -9028,11 +9020,10 @@ export const actions: Action[] = [ if ( v.id === "IF_END" ) { endpoint = i + 1 - return false; + break } } - return true; - }) + } let envelope_min = 1 let envelope_max = 1 @@ -9044,7 +9035,7 @@ export const actions: Action[] = [ envelope_max = endpoint } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { @@ -9052,17 +9043,17 @@ export const actions: Action[] = [ deck.splice(envelope_min - 1, 1) } } - } else { + } else { if ( elsepoint > 0 ) { envelope_min = elsepoint if ( endpoint > 0 ) { envelope_max = endpoint - } else { + } else { envelope_max = deck.length } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { @@ -9106,11 +9097,11 @@ export const actions: Action[] = [ } if ( deck.length > 0 ) { - deck.every((v: any, i: any) => { + for (const [i, v] of ipairs(deck)) { if ( v != null ) { if (( v.id.substring( 1-1, 3 ) === "IF_" ) && ( v.id !== "IF_END" ) && ( v.id !== "IF_ELSE" )) { endpoint = -1 - return false; + break } if ( v.id === "IF_ELSE" ) { @@ -9120,11 +9111,10 @@ export const actions: Action[] = [ if ( v.id === "IF_END" ) { endpoint = i + 1 - return false; + break } } - return true; - }) + } let envelope_min = 1 let envelope_max = 1 @@ -9136,7 +9126,7 @@ export const actions: Action[] = [ envelope_max = endpoint } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { @@ -9144,17 +9134,17 @@ export const actions: Action[] = [ deck.splice(envelope_min - 1, 1) } } - } else { + } else { if ( elsepoint > 0 ) { envelope_min = elsepoint if ( endpoint > 0 ) { envelope_max = endpoint - } else { + } else { envelope_max = deck.length } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { diff --git a/src/app/calc/__generated__/gun_actions.ts b/src/app/calc/__generated__/gun_actions.ts index abd800b..6fe0319 100644 --- a/src/app/calc/__generated__/gun_actions.ts +++ b/src/app/calc/__generated__/gun_actions.ts @@ -60,6 +60,21 @@ import { Random, SetRandomSeed, GameGetFrameNum } from "../extra/util"; import { ActionSource } from "../eval/types"; +function* luaFor(start: number, count: number, step: number = 1) { + let cur = start, n = count; + while (--n >= 0) { + yield cur += step; + } +} + +function* ipairs([...arr]) { + const len = arr.length; + let i = -1; + while (++i < len) { + yield [i, arr[i]]; + } +} + export const actions: Action[] = [ @@ -2391,7 +2406,7 @@ export const actions: Action[] = [ mana: 40, action: (c: GunActionState) => { - for (let i = 1; i <= 6; i++) { + for (const i of luaFor(1, 6)) { add_projectile("data/entities/projectiles/deck/infestation.xml") } @@ -3653,12 +3668,11 @@ export const actions: Action[] = [ let dcomps = EntityGetComponent( entity_id, "DamageModelComponent" ) if (( dcomps != null ) && ( dcomps.length > 0 )) { - dcomps.every((b: any, a: any) => { + for (const [a, b] of ipairs(dcomps)) { let hp = ComponentGetValue2( b, "hp" ) hp = Math.max( hp - 0.16, 0.04 ) ComponentSetValue2( b, "hp", hp ) - return true; - }) + } } }, }, @@ -3703,7 +3717,7 @@ export const actions: Action[] = [ c.damage_projectile_add = c.damage_projectile_add + ( damage / 35 ) } else if ( damage < 500 ) { c.damage_projectile_add = c.damage_projectile_add + ( damage / 45 ) - } else { + } else { c.damage_projectile_add = c.damage_projectile_add + ( damage / 55 ) } } @@ -3765,13 +3779,12 @@ export const actions: Action[] = [ action: (c: GunActionState, recursion_level: number = 0, iteration: number = 1) => { let hand_count = hand.length - hand.every((v: any, i: any) => { + for (const [i, v] of ipairs(hand)) { let rec = check_recursion( v, recursion_level ) if (( v.id !== "DUPLICATE" ) && ( i < hand_count ) && ( rec > -1 )) { call_action(ActionSource.ACTION, v, c, rec ) } - return true; - }) + } c.fire_rate_wait = c.fire_rate_wait + 20 setCurrentReloadTime(current_reload_time + 20) @@ -7057,7 +7070,7 @@ export const actions: Action[] = [ if ( rnd <= deck.length ) { data = deck[rnd - 1] - } else { + } else { data = discarded[rnd - deck.length - 1] } @@ -7070,7 +7083,7 @@ export const actions: Action[] = [ if ( rnd <= deck.length ) { data = deck[rnd - 1] - } else { + } else { data = discarded[rnd - deck.length - 1] } @@ -7113,7 +7126,7 @@ export const actions: Action[] = [ if ( rnd <= deck.length ) { data = deck[rnd - 1] - } else { + } else { data = discarded[rnd - deck.length - 1] } @@ -7126,7 +7139,7 @@ export const actions: Action[] = [ if ( rnd <= deck.length ) { data = deck[rnd - 1] - } else { + } else { data = discarded[rnd - deck.length - 1] } @@ -7134,7 +7147,7 @@ export const actions: Action[] = [ } if (( data != null ) && ( rec > -1 ) && ( ( data.uses_remaining == null ) || ( data.uses_remaining !== 0 ) )) { - for (let i = 1; i <= 3; i++) { + for (const i of luaFor(1, 3)) { call_action(ActionSource.ACTION, data, c, rec ) } @@ -7166,14 +7179,14 @@ export const actions: Action[] = [ SetRandomSeed( GameGetFrameNum() + deck.length, GameGetFrameNum() - 325 + discarded.length ) let datasize = deck.length + discarded.length - for (let i = 1; i <= 3; i++) { + for (const i of luaFor(1, 3)) { let rnd = Random( 1, datasize ) let data: Action | null = null if ( rnd <= deck.length ) { data = deck[rnd - 1] - } else { + } else { data = discarded[rnd - deck.length - 1] } @@ -7186,7 +7199,7 @@ export const actions: Action[] = [ if ( rnd <= deck.length ) { data = deck[rnd - 1] - } else { + } else { data = discarded[rnd - deck.length - 1] } @@ -7346,11 +7359,10 @@ export const actions: Action[] = [ max_uses: 1, action: (c: GunActionState) => { let players = EntityGetWithTag( "player_unit" ) - players.every((v: any, i: any) => { + for (const [i, v] of ipairs(players)) { let [x, y] = EntityGetTransform( v ) let eid = EntityLoad("data/entities/projectiles/deck/all_spells_loader.xml", x, y) - return true; - }) + } c.fire_rate_wait = c.fire_rate_wait + 100 setCurrentReloadTime(current_reload_time + 100) }, @@ -7393,7 +7405,7 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { data = deck[1 - 1] - } else { + } else { data = null } @@ -7414,7 +7426,7 @@ export const actions: Action[] = [ let target = data.related_projectiles[0] let count = data.related_projectiles[1] || 1 - for (let i = 1; i <= how_many; i++) { + for (const i of luaFor(1, how_many)) { data = deck[1 - 1] discarded.push(data) deck.splice(1 - 1, 1) @@ -7422,12 +7434,12 @@ export const actions: Action[] = [ let valid = false - for (let i = 1; i <= deck.length; i++) { + for (const i of luaFor(1, deck.length)) { let check = deck[i - 1] if (( check != null ) && ( ( check.type === ACTION_TYPE_PROJECTILE ) || ( check.type === ACTION_TYPE_STATIC_PROJECTILE ) || ( check.type === ACTION_TYPE_MATERIAL ) || ( check.type === ACTION_TYPE_UTILITY ) )) { valid = true - break; + break } } @@ -7441,10 +7453,10 @@ export const actions: Action[] = [ } if (valid ) { - for (let i = 1; i <= count; i++) { + for (const i of luaFor(1, count)) { add_projectile_trigger_hit_world(target, 1) } - } else { + } else { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, ) setDontDrawActions(false) @@ -7473,7 +7485,7 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { data = deck[1 - 1] - } else { + } else { data = null } @@ -7494,7 +7506,7 @@ export const actions: Action[] = [ let target = data.related_projectiles[0] let count = data.related_projectiles[1] || 1 - for (let i = 1; i <= how_many; i++) { + for (const i of luaFor(1, how_many)) { data = deck[1 - 1] discarded.push(data) deck.splice(1 - 1, 1) @@ -7502,12 +7514,12 @@ export const actions: Action[] = [ let valid = false - for (let i = 1; i <= deck.length; i++) { + for (const i of luaFor(1, deck.length)) { let check = deck[i - 1] if (( check != null ) && ( ( check.type === ACTION_TYPE_PROJECTILE ) || ( check.type === ACTION_TYPE_STATIC_PROJECTILE ) || ( check.type === ACTION_TYPE_MATERIAL ) || ( check.type === ACTION_TYPE_UTILITY ) )) { valid = true - break; + break } } @@ -7521,10 +7533,10 @@ export const actions: Action[] = [ } if (valid ) { - for (let i = 1; i <= count; i++) { + for (const i of luaFor(1, count)) { add_projectile_trigger_timer(target, 20, 1) } - } else { + } else { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, ) setDontDrawActions(false) @@ -7553,7 +7565,7 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { data = deck[1 - 1] - } else { + } else { data = null } @@ -7574,7 +7586,7 @@ export const actions: Action[] = [ let target = data.related_projectiles[0] let count = data.related_projectiles[1] || 1 - for (let i = 1; i <= how_many; i++) { + for (const i of luaFor(1, how_many)) { data = deck[1 - 1] discarded.push(data) deck.splice(1 - 1, 1) @@ -7582,12 +7594,12 @@ export const actions: Action[] = [ let valid = false - for (let i = 1; i <= deck.length; i++) { + for (const i of luaFor(1, deck.length)) { let check = deck[i - 1] if (( check != null ) && ( ( check.type === ACTION_TYPE_PROJECTILE ) || ( check.type === ACTION_TYPE_STATIC_PROJECTILE ) || ( check.type === ACTION_TYPE_MATERIAL ) || ( check.type === ACTION_TYPE_UTILITY ) )) { valid = true - break; + break } } @@ -7601,10 +7613,10 @@ export const actions: Action[] = [ } if (valid ) { - for (let i = 1; i <= count; i++) { + for (const i of luaFor(1, count)) { add_projectile_trigger_death(target, 1) } - } else { + } else { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, ) setDontDrawActions(false) @@ -7733,7 +7745,7 @@ export const actions: Action[] = [ data = hand[1 - 1] } else if ( deck.length > 0 ) { data = deck[1 - 1] - } else { + } else { data = null } @@ -7768,7 +7780,7 @@ export const actions: Action[] = [ data = deck[deck.length - 1] } else if ( hand.length > 0 ) { data = hand[hand.length - 1] - } else { + } else { data = null } @@ -7806,14 +7818,14 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { s1 = "deck" data1 = deck[1 - 1] - } else { + } else { data1 = null } if ( deck.length > 0 ) { s2 = "deck 2" data2 = deck[2 - 1] - } else { + } else { data2 = null } @@ -7850,39 +7862,36 @@ export const actions: Action[] = [ c.fire_rate_wait = c.fire_rate_wait + 50 if ( discarded != null ) { - discarded.every((data: any, i: any) => { + for (const [i, data] of ipairs(discarded)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( rec > -1 ) && ( data.id !== "RESET" )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( hand != null ) { - hand.every((data: any, i: any) => { + for (const [i, data] of ipairs(hand)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( ( data.recursive == null ) || ( data.recursive === false ) )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( deck != null ) { - deck.every((data: any, i: any) => { + for (const [i, data] of ipairs(deck)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( rec > -1 ) && ( data.id !== "RESET" )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } }, }, @@ -7907,39 +7916,36 @@ export const actions: Action[] = [ let mana_ = mana if ( discarded != null ) { - discarded.every((data: any, i: any) => { + for (const [i, data] of ipairs(discarded)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 2 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( hand != null ) { - hand.every((data: any, i: any) => { + for (const [i, data] of ipairs(hand)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 2 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( deck != null ) { - deck.every((data: any, i: any) => { + for (const [i, data] of ipairs(deck)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 2 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } c.fire_rate_wait = firerate @@ -7970,39 +7976,36 @@ export const actions: Action[] = [ let mana_ = mana if ( discarded != null ) { - discarded.every((data: any, i: any) => { + for (const [i, data] of ipairs(discarded)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 0 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( hand != null ) { - hand.every((data: any, i: any) => { + for (const [i, data] of ipairs(hand)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 0 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( deck != null ) { - deck.every((data: any, i: any) => { + for (const [i, data] of ipairs(deck)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 0 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } c.fire_rate_wait = firerate @@ -8031,39 +8034,36 @@ export const actions: Action[] = [ let mana_ = mana if ( discarded != null ) { - discarded.every((data: any, i: any) => { + for (const [i, data] of ipairs(discarded)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 1 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( hand != null ) { - hand.every((data: any, i: any) => { + for (const [i, data] of ipairs(hand)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 1 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } if ( deck != null ) { - deck.every((data: any, i: any) => { + for (const [i, data] of ipairs(deck)) { let rec = check_recursion( data, recursion_level ) if (( data != null ) && ( data.type === 1 ) && ( rec > -1 )) { setDontDrawActions(true) call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return true; - }) + } } c.fire_rate_wait = firerate @@ -8098,17 +8098,17 @@ export const actions: Action[] = [ if (( children != null ) && ( inventory != null )) { let active_wand = ComponentGetValue2( inventory, "mActiveItem" ) - children.every((child_id: any, i: any) => { + for (const [i, child_id] of ipairs(children)) { if ( EntityGetName( child_id ) === "inventory_quick" ) { let wands = EntityGetAllChildren( child_id ) if ( wands != null ) { - wands.every((wand_id: any, k: any) => { + for (const [k, wand_id] of ipairs(wands)) { if (( wand_id !== active_wand ) && EntityHasTag( wand_id, "wand" )) { let spells = EntityGetAllChildren( wand_id ) if ( spells != null ) { - spells.every((spell_id: any, j: any) => { + for (const [j, spell_id] of ipairs(spells)) { let comp = EntityGetFirstComponentIncludingDisabled( spell_id, "ItemActionComponent" ) if ( comp != null ) { @@ -8116,16 +8116,13 @@ export const actions: Action[] = [ options.push(action_id) } - return true; - }) + } } } - return true; - }) + } } } - return true; - }) + } } if ( options.length > 0 ) { @@ -8134,7 +8131,7 @@ export const actions: Action[] = [ let rnd = Random( 1, options.length ) let action_id = options[rnd] - actions.every((data: any, i: any) => { + for (const [i, data] of ipairs(actions)) { if ( data.id === action_id ) { let rec = check_recursion( data, recursion_level ) if ( rec > -1 ) { @@ -8142,10 +8139,9 @@ export const actions: Action[] = [ call_action(ActionSource.ACTION, data, c, rec ) setDontDrawActions(false) } - return false; + break } - return true; - }) + } } draw_actions( 1, true ) @@ -8173,7 +8169,7 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { data = deck[iter - 1] || null - } else { + } else { data = null } @@ -8188,7 +8184,7 @@ export const actions: Action[] = [ let firerate = c.fire_rate_wait let reload = current_reload_time - for (let i = 1; i <= count; i++) { + for (const i of luaFor(1, count)) { if ( i === 1 ) { setDontDrawActions(true) } @@ -8212,7 +8208,7 @@ export const actions: Action[] = [ c.fire_rate_wait = firerate setCurrentReloadTime(reload) - for (let i = 1; i <= iter_max; i++) { + for (const i of luaFor(1, iter_max)) { if (deck.length > 0) { let d = deck[1 - 1] discarded.push(d) @@ -8255,7 +8251,7 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { data = deck[iter - 1] || null - } else { + } else { data = null } @@ -8270,7 +8266,7 @@ export const actions: Action[] = [ let firerate = c.fire_rate_wait let reload = current_reload_time - for (let i = 1; i <= count; i++) { + for (const i of luaFor(1, count)) { if ( i === 1 ) { setDontDrawActions(true) } @@ -8294,7 +8290,7 @@ export const actions: Action[] = [ c.fire_rate_wait = firerate setCurrentReloadTime(reload) - for (let i = 1; i <= iter_max; i++) { + for (const i of luaFor(1, iter_max)) { if (deck.length > 0) { let d = deck[1 - 1] discarded.push(d) @@ -8337,7 +8333,7 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { data = deck[iter - 1] || null - } else { + } else { data = null } @@ -8352,7 +8348,7 @@ export const actions: Action[] = [ let firerate = c.fire_rate_wait let reload = current_reload_time - for (let i = 1; i <= count; i++) { + for (const i of luaFor(1, count)) { if ( i === 1 ) { setDontDrawActions(true) } @@ -8376,7 +8372,7 @@ export const actions: Action[] = [ c.fire_rate_wait = firerate setCurrentReloadTime(reload) - for (let i = 1; i <= iter_max; i++) { + for (const i of luaFor(1, iter_max)) { if (deck.length > 0) { let d = deck[1 - 1] discarded.push(d) @@ -8421,7 +8417,7 @@ export const actions: Action[] = [ if ( deck.length > 0 ) { data = deck[iter - 1] || null - } else { + } else { data = null } @@ -8436,7 +8432,7 @@ export const actions: Action[] = [ let firerate = c.fire_rate_wait let reload = current_reload_time - for (let i = 1; i <= count; i++) { + for (const i of luaFor(1, count)) { if ( i === 1 ) { setDontDrawActions(true) } @@ -8460,7 +8456,7 @@ export const actions: Action[] = [ c.fire_rate_wait = firerate setCurrentReloadTime(reload) - for (let i = 1; i <= iter_max; i++) { + for (const i of luaFor(1, iter_max)) { if (deck.length > 0) { let d = deck[1 - 1] discarded.push(d) @@ -8543,17 +8539,15 @@ export const actions: Action[] = [ action: (c: GunActionState) => { setCurrentReloadTime(current_reload_time - 25) - hand.every((v: any, i: any) => { + for (const [i, v] of ipairs(hand)) { discarded.push(v) - return true; - }) + } - deck.every((v: any, i: any) => { + for (const [i, v] of ipairs(deck)) { discarded.push(v) - return true; - }) + } clearHand() clearDeck() @@ -8589,11 +8583,11 @@ export const actions: Action[] = [ } if ( deck.length > 0 ) { - deck.every((v: any, i: any) => { + for (const [i, v] of ipairs(deck)) { if ( v != null ) { if (( v.id.substring( 1-1, 3 ) === "IF_" ) && ( v.id !== "IF_END" ) && ( v.id !== "IF_ELSE" )) { endpoint = -1 - return false; + break } if ( v.id === "IF_ELSE" ) { @@ -8603,11 +8597,10 @@ export const actions: Action[] = [ if ( v.id === "IF_END" ) { endpoint = i + 1 - return false; + break } } - return true; - }) + } let envelope_min = 1 let envelope_max = 1 @@ -8619,7 +8612,7 @@ export const actions: Action[] = [ envelope_max = endpoint } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { @@ -8627,17 +8620,17 @@ export const actions: Action[] = [ deck.splice(envelope_min - 1, 1) } } - } else { + } else { if ( elsepoint > 0 ) { envelope_min = elsepoint if ( endpoint > 0 ) { envelope_max = endpoint - } else { + } else { envelope_max = deck.length } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { @@ -8676,11 +8669,11 @@ export const actions: Action[] = [ } if ( deck.length > 0 ) { - deck.every((v: any, i: any) => { + for (const [i, v] of ipairs(deck)) { if ( v != null ) { if (( v.id.substring( 1-1, 3 ) === "IF_" ) && ( v.id !== "IF_END" ) && ( v.id !== "IF_ELSE" )) { endpoint = -1 - return false; + break } if ( v.id === "IF_ELSE" ) { @@ -8690,11 +8683,10 @@ export const actions: Action[] = [ if ( v.id === "IF_END" ) { endpoint = i + 1 - return false; + break } } - return true; - }) + } let envelope_min = 1 let envelope_max = 1 @@ -8706,7 +8698,7 @@ export const actions: Action[] = [ envelope_max = endpoint } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { @@ -8714,17 +8706,17 @@ export const actions: Action[] = [ deck.splice(envelope_min - 1, 1) } } - } else { + } else { if ( elsepoint > 0 ) { envelope_min = elsepoint if ( endpoint > 0 ) { envelope_max = endpoint - } else { + } else { envelope_max = deck.length } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { @@ -8771,11 +8763,11 @@ export const actions: Action[] = [ } if ( deck.length > 0 ) { - deck.every((v: any, i: any) => { + for (const [i, v] of ipairs(deck)) { if ( v != null ) { if (( v.id.substring( 1-1, 3 ) === "IF_" ) && ( v.id !== "IF_END" ) && ( v.id !== "IF_ELSE" )) { endpoint = -1 - return false; + break } if ( v.id === "IF_ELSE" ) { @@ -8785,11 +8777,10 @@ export const actions: Action[] = [ if ( v.id === "IF_END" ) { endpoint = i + 1 - return false; + break } } - return true; - }) + } let envelope_min = 1 let envelope_max = 1 @@ -8801,7 +8792,7 @@ export const actions: Action[] = [ envelope_max = endpoint } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { @@ -8809,17 +8800,17 @@ export const actions: Action[] = [ deck.splice(envelope_min - 1, 1) } } - } else { + } else { if ( elsepoint > 0 ) { envelope_min = elsepoint if ( endpoint > 0 ) { envelope_max = endpoint - } else { + } else { envelope_max = deck.length } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { @@ -8863,11 +8854,11 @@ export const actions: Action[] = [ } if ( deck.length > 0 ) { - deck.every((v: any, i: any) => { + for (const [i, v] of ipairs(deck)) { if ( v != null ) { if (( v.id.substring( 1-1, 3 ) === "IF_" ) && ( v.id !== "IF_END" ) && ( v.id !== "IF_ELSE" )) { endpoint = -1 - return false; + break } if ( v.id === "IF_ELSE" ) { @@ -8877,11 +8868,10 @@ export const actions: Action[] = [ if ( v.id === "IF_END" ) { endpoint = i + 1 - return false; + break } } - return true; - }) + } let envelope_min = 1 let envelope_max = 1 @@ -8893,7 +8883,7 @@ export const actions: Action[] = [ envelope_max = endpoint } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { @@ -8901,17 +8891,17 @@ export const actions: Action[] = [ deck.splice(envelope_min - 1, 1) } } - } else { + } else { if ( elsepoint > 0 ) { envelope_min = elsepoint if ( endpoint > 0 ) { envelope_max = endpoint - } else { + } else { envelope_max = deck.length } - for (let i = envelope_min; i <= envelope_max; i++) { + for (const i of luaFor(envelope_min, envelope_max)) { let v = deck[envelope_min - 1] if ( v != null ) { diff --git a/src/app/calc/extra/ext_functions.ts b/src/app/calc/extra/ext_functions.ts index ccff815..09d8360 100644 --- a/src/app/calc/extra/ext_functions.ts +++ b/src/app/calc/extra/ext_functions.ts @@ -266,7 +266,7 @@ export function EntityGetAllChildren(entityId: any): any { if (result !== undefined) { return result; } - return {}; + return []; } export function EntityGetName(childId: any): any {