From df670e40169d118ba35735aacfea4313056dcf32 Mon Sep 17 00:00:00 2001 From: mstoeckl Date: Sat, 6 Jul 2024 20:53:47 -0400 Subject: [PATCH 01/33] Index by base classes in GameObjectManager::m_objects_by_type_index (#2991) * Index intermediate classes of GameObjects This allows for much more efficient implementations of GameObjectManager's get_object_count and get_objects_by_type. Now, for example, counting all BadGuy objects does not require scanning through all the unrelated objects. * Simplify GameObjectIterator Now it is only used on vectors containing only objects with T as a base class. --- src/badguy/angrystone.hpp | 1 + src/badguy/badguy.hpp | 1 + src/badguy/bomb.hpp | 1 + src/badguy/bouncing_snowball.hpp | 1 + src/badguy/captainsnowball.hpp | 1 + src/badguy/corrupted_granito.hpp | 1 + src/badguy/corrupted_granito_big.hpp | 1 + src/badguy/crusher.hpp | 2 + src/badguy/crystallo.hpp | 1 + src/badguy/dart.hpp | 1 + src/badguy/darttrap.hpp | 1 + src/badguy/dispenser.hpp | 1 + src/badguy/dive_mine.hpp | 1 + src/badguy/fish_chasing.hpp | 1 + src/badguy/fish_harmless.hpp | 1 + src/badguy/fish_jumping.hpp | 1 + src/badguy/fish_swimming.hpp | 1 + src/badguy/flame.hpp | 1 + src/badguy/flyingsnowball.hpp | 1 + src/badguy/ghosttree.hpp | 1 + src/badguy/ghoul.hpp | 1 + src/badguy/goldbomb.hpp | 1 + src/badguy/granito.hpp | 1 + src/badguy/granito_big.hpp | 1 + src/badguy/granito_giant.hpp | 1 + src/badguy/haywire.hpp | 1 + src/badguy/igel.hpp | 1 + src/badguy/jumpy.hpp | 1 + src/badguy/kamikazesnowball.hpp | 2 + src/badguy/kugelblitz.hpp | 1 + src/badguy/livefire.hpp | 3 ++ src/badguy/mole.hpp | 1 + src/badguy/mole_rock.hpp | 1 + src/badguy/mrbomb.hpp | 1 + src/badguy/mriceblock.hpp | 1 + src/badguy/mrtree.hpp | 1 + src/badguy/owl.hpp | 1 + src/badguy/plant.hpp | 1 + src/badguy/rcrystallo.hpp | 1 + src/badguy/root.hpp | 1 + src/badguy/root_sapling.hpp | 1 + src/badguy/scrystallo.hpp | 1 + src/badguy/short_fuse.hpp | 1 + src/badguy/skydive.hpp | 1 + src/badguy/smartball.hpp | 1 + src/badguy/smartblock.hpp | 1 + src/badguy/snail.hpp | 1 + src/badguy/snowball.hpp | 1 + src/badguy/snowman.hpp | 1 + src/badguy/spiky.hpp | 1 + src/badguy/sspiky.hpp | 1 + src/badguy/stalactite.hpp | 1 + src/badguy/stumpy.hpp | 1 + src/badguy/tarantula.hpp | 1 + src/badguy/toad.hpp | 1 + src/badguy/totem.hpp | 1 + src/badguy/treewillowisp.hpp | 1 + src/badguy/viciousivy.hpp | 1 + src/badguy/walking_badguy.hpp | 1 + src/badguy/walking_candle.hpp | 1 + src/badguy/walkingleaf.hpp | 1 + src/badguy/willowisp.hpp | 1 + src/badguy/yeti.hpp | 1 + src/badguy/yeti_stalactite.hpp | 1 + src/badguy/zeekling.hpp | 1 + src/editor/bezier_marker.hpp | 1 + src/editor/marker_object.hpp | 1 + src/editor/node_marker.hpp | 1 + src/editor/resize_marker.hpp | 1 + src/object/ambient_light.hpp | 1 + src/object/ambient_sound.hpp | 1 + src/object/background.hpp | 1 + src/object/bicycle_platform.hpp | 2 + src/object/block.hpp | 2 + src/object/bonus_block.hpp | 1 + src/object/bouncy_coin.hpp | 1 + src/object/brick.hpp | 2 + src/object/bullet.hpp | 2 + src/object/bumper.hpp | 1 + src/object/camera.hpp | 1 + src/object/candle.hpp | 1 + src/object/circleplatform.hpp | 1 + src/object/cloud_particle_system.hpp | 1 + src/object/coin.hpp | 2 + src/object/coin_explode.hpp | 1 + src/object/coin_rain.hpp | 1 + src/object/conveyor_belt.hpp | 1 + src/object/custom_particle_system.hpp | 1 + src/object/custom_particle_system_file.hpp | 1 + src/object/decal.hpp | 1 + src/object/display_effect.hpp | 1 + src/object/electrifier.hpp | 1 + src/object/endsequence.hpp | 1 + src/object/endsequence_fireworks.hpp | 1 + src/object/endsequence_walk.hpp | 1 + src/object/explosion.hpp | 1 + src/object/fallblock.hpp | 1 + src/object/falling_coin.hpp | 1 + src/object/firefly.hpp | 1 + src/object/fireworks.hpp | 1 + src/object/floating_image.hpp | 1 + src/object/floating_text.hpp | 2 + src/object/flower.hpp | 1 + src/object/ghost_particle_system.hpp | 1 + src/object/gradient.hpp | 1 + src/object/growup.hpp | 1 + src/object/hurting_platform.hpp | 1 + src/object/infoblock.hpp | 1 + src/object/invisible_block.hpp | 1 + src/object/invisible_wall.hpp | 1 + src/object/ispy.hpp | 1 + src/object/key.hpp | 1 + src/object/lantern.hpp | 1 + src/object/level_time.hpp | 1 + src/object/light.hpp | 2 + src/object/lit_object.hpp | 1 + src/object/magicblock.hpp | 1 + src/object/moving_sprite.hpp | 1 + src/object/music_object.hpp | 1 + src/object/oneup.hpp | 1 + src/object/particle_zone.hpp | 1 + src/object/particles.hpp | 1 + src/object/particlesystem.hpp | 1 + src/object/particlesystem_interactive.hpp | 1 + src/object/path_gameobject.hpp | 1 + src/object/platform.hpp | 1 + src/object/player.hpp | 1 + src/object/pneumatic_platform.hpp | 2 + src/object/powerup.hpp | 1 + src/object/pulsing_light.hpp | 1 + src/object/pushbutton.hpp | 1 + src/object/rain_particle_system.hpp | 1 + src/object/rainsplash.hpp | 1 + src/object/rock.hpp | 1 + src/object/rublight.hpp | 1 + src/object/rusty_trampoline.hpp | 1 + src/object/scripted_object.hpp | 1 + src/object/shard.hpp | 1 + src/object/smoke_cloud.hpp | 1 + src/object/snow_particle_system.hpp | 1 + src/object/sound_object.hpp | 1 + src/object/spawnpoint.hpp | 1 + src/object/specialriser.hpp | 1 + src/object/spotlight.hpp | 1 + src/object/sprite_particle.hpp | 1 + src/object/star.hpp | 1 + src/object/sticky_object.hpp | 2 + src/object/text_array_object.hpp | 1 + src/object/text_object.hpp | 1 + src/object/textscroller.hpp | 1 + src/object/thunderstorm.hpp | 1 + src/object/tilemap.hpp | 1 + src/object/torch.hpp | 1 + src/object/trampoline.hpp | 1 + src/object/unstable_tile.hpp | 1 + src/object/vertical_stripes.hpp | 2 + src/object/water_drop.hpp | 2 + src/object/weak_block.hpp | 1 + src/object/wind.hpp | 1 + src/supertux/game_object.cpp | 8 ++++ src/supertux/game_object.hpp | 21 +++++++++++ src/supertux/game_object_iterator.hpp | 44 ++++++++-------------- src/supertux/game_object_manager.cpp | 14 ++++--- src/supertux/game_object_manager.hpp | 4 +- src/supertux/moving_object.hpp | 1 + src/supertux/player_status_hud.hpp | 1 + src/trigger/climbable.hpp | 1 + src/trigger/door.hpp | 1 + src/trigger/scripttrigger.hpp | 1 + src/trigger/secretarea_trigger.hpp | 1 + src/trigger/sequence_trigger.hpp | 1 + src/trigger/switch.hpp | 1 + src/trigger/text_area.hpp | 1 + src/trigger/trigger_base.hpp | 3 ++ src/worldmap/level_tile.hpp | 1 + src/worldmap/spawn_point.hpp | 1 + src/worldmap/special_tile.hpp | 1 + src/worldmap/sprite_change.hpp | 1 + src/worldmap/teleporter.hpp | 1 + src/worldmap/tux.hpp | 1 + src/worldmap/worldmap_object.hpp | 1 + 181 files changed, 249 insertions(+), 35 deletions(-) diff --git a/src/badguy/angrystone.hpp b/src/badguy/angrystone.hpp index f5470e0aab1..fec61367164 100644 --- a/src/badguy/angrystone.hpp +++ b/src/badguy/angrystone.hpp @@ -38,6 +38,7 @@ class AngryStone final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Angry Stone"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(AngryStone)); } protected: virtual std::vector get_allowed_directions() const override; diff --git a/src/badguy/badguy.hpp b/src/badguy/badguy.hpp index 861998b81ae..56382e33bb5 100644 --- a/src/badguy/badguy.hpp +++ b/src/badguy/badguy.hpp @@ -68,6 +68,7 @@ class BadGuy : public MovingSprite, virtual std::string get_exposed_class_name() const override { return "BadGuy"; } static std::string display_name() { return _("Badguy"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Portable)).add(typeid(BadGuy)); } virtual std::string get_overlay_size() const { return "1x1"; } diff --git a/src/badguy/bomb.hpp b/src/badguy/bomb.hpp index 5b4b9e24e91..642914d57f7 100644 --- a/src/badguy/bomb.hpp +++ b/src/badguy/bomb.hpp @@ -25,6 +25,7 @@ class Bomb final : public BadGuy { public: Bomb(const Vector& pos, Direction dir, const std::string& custom_sprite = "images/creatures/mr_bomb/bomb.sprite" ); + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Bomb)); } virtual bool is_saveable() const override { return false; } diff --git a/src/badguy/bouncing_snowball.hpp b/src/badguy/bouncing_snowball.hpp index 3b65c5319a2..45fd2f81700 100644 --- a/src/badguy/bouncing_snowball.hpp +++ b/src/badguy/bouncing_snowball.hpp @@ -38,6 +38,7 @@ class BouncingSnowball final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Bouncing Snowball"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(BouncingSnowball)); } virtual GameObjectTypes get_types() const override; virtual std::string get_default_sprite_name() const override; diff --git a/src/badguy/captainsnowball.hpp b/src/badguy/captainsnowball.hpp index 9a295ef56aa..70cde6961e5 100644 --- a/src/badguy/captainsnowball.hpp +++ b/src/badguy/captainsnowball.hpp @@ -31,6 +31,7 @@ class CaptainSnowball final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Captain Snowball"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(CaptainSnowball)); } virtual bool is_snipable() const override { return true; } bool might_climb(int width, int height) const; diff --git a/src/badguy/corrupted_granito.hpp b/src/badguy/corrupted_granito.hpp index fcd266f901b..977caa7848a 100644 --- a/src/badguy/corrupted_granito.hpp +++ b/src/badguy/corrupted_granito.hpp @@ -43,6 +43,7 @@ class CorruptedGranito final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Corrupted Granito"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(CorruptedGranito)); } virtual bool is_snipable() const override { return true; } virtual bool is_flammable() const override { return m_type != GRANITO; } diff --git a/src/badguy/corrupted_granito_big.hpp b/src/badguy/corrupted_granito_big.hpp index e007e35d8a4..c1723a54fd4 100644 --- a/src/badguy/corrupted_granito_big.hpp +++ b/src/badguy/corrupted_granito_big.hpp @@ -34,6 +34,7 @@ class CorruptedGranitoBig final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Corrupted Big Granito"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(CorruptedGranitoBig)); } virtual bool is_snipable() const override { return false; } virtual bool is_freezable() const override { return false; } diff --git a/src/badguy/crusher.hpp b/src/badguy/crusher.hpp index ad186509d29..a0dd52a3c91 100644 --- a/src/badguy/crusher.hpp +++ b/src/badguy/crusher.hpp @@ -70,6 +70,7 @@ class Crusher final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Crusher"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Crusher)); } virtual ObjectSettings get_settings() override; GameObjectTypes get_types() const override; @@ -115,6 +116,7 @@ class CrusherRoot : public MovingSprite { public: CrusherRoot(Vector position, Crusher::Direction direction, float delay, int layer); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(CrusherRoot)); } virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; virtual void update(float dt_sec) override; diff --git a/src/badguy/crystallo.hpp b/src/badguy/crystallo.hpp index 7389f646060..00913e7362e 100644 --- a/src/badguy/crystallo.hpp +++ b/src/badguy/crystallo.hpp @@ -32,6 +32,7 @@ class Crystallo final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Crystallo"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Crystallo)); } virtual void active_update(float dt_sec) override; virtual bool is_flammable() const override; diff --git a/src/badguy/dart.hpp b/src/badguy/dart.hpp index ae3ba35d909..e5cfc99bb58 100644 --- a/src/badguy/dart.hpp +++ b/src/badguy/dart.hpp @@ -43,6 +43,7 @@ class Dart final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Dart"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Dart)); } virtual bool is_flammable() const override; diff --git a/src/badguy/darttrap.hpp b/src/badguy/darttrap.hpp index 42bab088aa4..69ffb1aaca9 100644 --- a/src/badguy/darttrap.hpp +++ b/src/badguy/darttrap.hpp @@ -34,6 +34,7 @@ class DartTrap final : public StickyBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Dart Trap"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return StickyBadguy::get_class_types().add(typeid(DartTrap)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override; diff --git a/src/badguy/dispenser.hpp b/src/badguy/dispenser.hpp index 48ea925313e..a68e45d68f8 100644 --- a/src/badguy/dispenser.hpp +++ b/src/badguy/dispenser.hpp @@ -66,6 +66,7 @@ class Dispenser final : public BadGuy virtual std::string get_exposed_class_name() const override { return "Dispenser"; } static std::string display_name() { return _("Dispenser"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Dispenser)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override; diff --git a/src/badguy/dive_mine.hpp b/src/badguy/dive_mine.hpp index 7e71dec6cb1..bb4c122d583 100644 --- a/src/badguy/dive_mine.hpp +++ b/src/badguy/dive_mine.hpp @@ -49,6 +49,7 @@ class DiveMine final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Dive Mine"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(DiveMine)); } protected: virtual std::vector get_allowed_directions() const override; diff --git a/src/badguy/fish_chasing.hpp b/src/badguy/fish_chasing.hpp index a7ce8661e9c..0dcfbe7d310 100644 --- a/src/badguy/fish_chasing.hpp +++ b/src/badguy/fish_chasing.hpp @@ -33,6 +33,7 @@ class FishChasing final : public FishSwimming static std::string display_name() { return _("Chasing Fish"); } virtual std::string get_display_name() const override { return display_name(); } virtual std::string get_overlay_size() const override { return "2x2"; } + virtual GameObjectClasses get_class_types() const override { return FishSwimming::get_class_types().add(typeid(FishChasing)); } virtual ObjectSettings get_settings() override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/fish_harmless.hpp b/src/badguy/fish_harmless.hpp index 58895c3954e..fd1f777cede 100644 --- a/src/badguy/fish_harmless.hpp +++ b/src/badguy/fish_harmless.hpp @@ -29,6 +29,7 @@ class FishHarmless final : public FishSwimming virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Harmless Fish"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return FishSwimming::get_class_types().add(typeid(FishHarmless)); } virtual std::string get_overlay_size() const override { return "1x1"; } GameObjectTypes get_types() const override { return {}; } diff --git a/src/badguy/fish_jumping.hpp b/src/badguy/fish_jumping.hpp index ed97fe28182..99cf62ea851 100644 --- a/src/badguy/fish_jumping.hpp +++ b/src/badguy/fish_jumping.hpp @@ -40,6 +40,7 @@ class FishJumping final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Jumping Fish"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(FishJumping)); } protected: virtual std::vector get_allowed_directions() const override; diff --git a/src/badguy/fish_swimming.hpp b/src/badguy/fish_swimming.hpp index 5b9efe76c41..cecce233060 100644 --- a/src/badguy/fish_swimming.hpp +++ b/src/badguy/fish_swimming.hpp @@ -40,6 +40,7 @@ class FishSwimming : public BadGuy static std::string display_name() { return _("Swimming Fish"); } virtual std::string get_display_name() const override { return display_name(); } virtual std::string get_overlay_size() const override { return "2x1"; } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(FishSwimming)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override; diff --git a/src/badguy/flame.hpp b/src/badguy/flame.hpp index f1dcce809c0..0b4f10aab0e 100644 --- a/src/badguy/flame.hpp +++ b/src/badguy/flame.hpp @@ -46,6 +46,7 @@ class Flame final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Flame"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Flame)); } virtual void stop_looping_sounds() override; virtual void play_looping_sounds() override; diff --git a/src/badguy/flyingsnowball.hpp b/src/badguy/flyingsnowball.hpp index 6665ce29ab6..206b9084f73 100644 --- a/src/badguy/flyingsnowball.hpp +++ b/src/badguy/flyingsnowball.hpp @@ -32,6 +32,7 @@ class FlyingSnowBall final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Flying Snowball"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(FlyingSnowBall)); } virtual bool is_snipable() const override { return true; } protected: diff --git a/src/badguy/ghosttree.hpp b/src/badguy/ghosttree.hpp index caad21d9ca9..b30e371cbab 100644 --- a/src/badguy/ghosttree.hpp +++ b/src/badguy/ghosttree.hpp @@ -42,6 +42,7 @@ class GhostTree final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Ghost Tree"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(GhostTree)); } virtual void on_flip(float height) override; diff --git a/src/badguy/ghoul.hpp b/src/badguy/ghoul.hpp index 4227a902d57..a580538bc9b 100644 --- a/src/badguy/ghoul.hpp +++ b/src/badguy/ghoul.hpp @@ -30,6 +30,7 @@ class Ghoul final : public BadGuy, static std::string display_name() { return _("Ghoul"); } std::string get_class_name() const override { return class_name(); } std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Ghoul)); } bool is_freezable() const override; bool is_flammable() const override; virtual bool is_snipable() const override { return true; } diff --git a/src/badguy/goldbomb.hpp b/src/badguy/goldbomb.hpp index c9e56f0d2a2..f33ef1bfa29 100644 --- a/src/badguy/goldbomb.hpp +++ b/src/badguy/goldbomb.hpp @@ -49,6 +49,7 @@ class GoldBomb final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Gold Bomb"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(GoldBomb)); } virtual bool is_snipable() const override { return true; } virtual void stop_looping_sounds() override; diff --git a/src/badguy/granito.hpp b/src/badguy/granito.hpp index ae4b360249b..a009a959ad8 100644 --- a/src/badguy/granito.hpp +++ b/src/badguy/granito.hpp @@ -51,6 +51,7 @@ class Granito : public WalkingBadguy virtual std::string get_exposed_class_name() const override { return "Granito"; } static std::string display_name() { return _("Granito"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Granito)); } virtual bool is_snipable() const override { return false; } virtual bool is_freezable() const override { return false; } diff --git a/src/badguy/granito_big.hpp b/src/badguy/granito_big.hpp index 44e8749b86a..7d6f6467e16 100644 --- a/src/badguy/granito_big.hpp +++ b/src/badguy/granito_big.hpp @@ -43,6 +43,7 @@ class GranitoBig final : public Granito virtual std::string get_exposed_class_name() const override { return "GranitoBig"; } static std::string display_name() { return _("Big Granito"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Granito::get_class_types().add(typeid(GranitoBig)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override; diff --git a/src/badguy/granito_giant.hpp b/src/badguy/granito_giant.hpp index a3df651eab2..aebe7c34658 100644 --- a/src/badguy/granito_giant.hpp +++ b/src/badguy/granito_giant.hpp @@ -31,6 +31,7 @@ class GranitoGiant final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Giant Granito"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(GranitoGiant)); } virtual void kill_fall() override; diff --git a/src/badguy/haywire.hpp b/src/badguy/haywire.hpp index bca973206a4..e0280b8db7a 100644 --- a/src/badguy/haywire.hpp +++ b/src/badguy/haywire.hpp @@ -45,6 +45,7 @@ class Haywire final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Haywire"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Haywire)); } virtual bool is_snipable() const override { return true; } inline bool is_exploding() const { return m_is_exploding; } diff --git a/src/badguy/igel.hpp b/src/badguy/igel.hpp index 0aef788a590..70039c4f4d8 100644 --- a/src/badguy/igel.hpp +++ b/src/badguy/igel.hpp @@ -38,6 +38,7 @@ class Igel final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Igel"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Igel)); } virtual bool is_freezable() const override { return true; } virtual void unfreeze(bool melt = true) override; diff --git a/src/badguy/jumpy.hpp b/src/badguy/jumpy.hpp index 07bf84a9771..f8378833679 100644 --- a/src/badguy/jumpy.hpp +++ b/src/badguy/jumpy.hpp @@ -39,6 +39,7 @@ class Jumpy final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Jumpy"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Jumpy)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/kamikazesnowball.hpp b/src/badguy/kamikazesnowball.hpp index fdcb5da4149..1c279813740 100644 --- a/src/badguy/kamikazesnowball.hpp +++ b/src/badguy/kamikazesnowball.hpp @@ -33,6 +33,7 @@ class KamikazeSnowball : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Kamikaze Snowball"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(KamikazeSnowball)); } virtual bool is_snipable() const override { return true; } protected: @@ -63,6 +64,7 @@ class LeafShot final : public KamikazeSnowball virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Leafshot"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return KamikazeSnowball::get_class_types().add(typeid(LeafShot)); } virtual bool is_snipable() const override { return true; } diff --git a/src/badguy/kugelblitz.hpp b/src/badguy/kugelblitz.hpp index a3fee55dc97..6dea704955d 100644 --- a/src/badguy/kugelblitz.hpp +++ b/src/badguy/kugelblitz.hpp @@ -39,6 +39,7 @@ class Kugelblitz final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Kugelblitz"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Kugelblitz)); } void explode(); diff --git a/src/badguy/livefire.hpp b/src/badguy/livefire.hpp index 3eae46303c5..29331628c1f 100644 --- a/src/badguy/livefire.hpp +++ b/src/badguy/livefire.hpp @@ -37,6 +37,7 @@ class LiveFire : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Walking Flame"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(LiveFire)); } private: std::string death_sound; @@ -70,6 +71,7 @@ class LiveFireAsleep final : public LiveFire virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Sleeping Flame"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return LiveFire::get_class_types().add(typeid(LiveFireAsleep)); } private: LiveFireAsleep(const LiveFireAsleep&) = delete; @@ -88,6 +90,7 @@ class LiveFireDormant final : public LiveFire virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Dormant Flame"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return LiveFire::get_class_types().add(typeid(LiveFireDormant)); } private: LiveFireDormant(const LiveFireDormant&) = delete; diff --git a/src/badguy/mole.hpp b/src/badguy/mole.hpp index 30a8de7c5d8..07d808cf692 100644 --- a/src/badguy/mole.hpp +++ b/src/badguy/mole.hpp @@ -37,6 +37,7 @@ class Mole final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mole"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Mole)); } virtual bool is_snipable() const override { return true; } diff --git a/src/badguy/mole_rock.hpp b/src/badguy/mole_rock.hpp index b472e05bd4e..e9c378aa700 100644 --- a/src/badguy/mole_rock.hpp +++ b/src/badguy/mole_rock.hpp @@ -43,6 +43,7 @@ class MoleRock final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mole's rock"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(MoleRock)); } protected: const BadGuy* parent; /**< collisions with this BadGuy will be ignored */ diff --git a/src/badguy/mrbomb.hpp b/src/badguy/mrbomb.hpp index b4f6c221cdd..914251e92f9 100644 --- a/src/badguy/mrbomb.hpp +++ b/src/badguy/mrbomb.hpp @@ -39,6 +39,7 @@ class MrBomb final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mr. Bomb"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(MrBomb)); } virtual bool is_snipable() const override { return true; } GameObjectTypes get_types() const override; diff --git a/src/badguy/mriceblock.hpp b/src/badguy/mriceblock.hpp index b8f5ce8ee43..7b84e4ba1b5 100644 --- a/src/badguy/mriceblock.hpp +++ b/src/badguy/mriceblock.hpp @@ -48,6 +48,7 @@ class MrIceBlock : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mr. Iceblock"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(MrIceBlock)); } virtual bool is_snipable() const override { return ice_state != ICESTATE_KICKED; } virtual bool is_freezable() const override; diff --git a/src/badguy/mrtree.hpp b/src/badguy/mrtree.hpp index 24250aa09fc..21856013658 100644 --- a/src/badguy/mrtree.hpp +++ b/src/badguy/mrtree.hpp @@ -31,6 +31,7 @@ class MrTree final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mr. Tree"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(MrTree)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/owl.hpp b/src/badguy/owl.hpp index 3571d6248fd..4ec6e31584e 100644 --- a/src/badguy/owl.hpp +++ b/src/badguy/owl.hpp @@ -44,6 +44,7 @@ class Owl final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Owl"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Owl)); } virtual ObjectSettings get_settings() override; virtual bool is_snipable() const override { return true; } diff --git a/src/badguy/plant.hpp b/src/badguy/plant.hpp index 8f8136d474d..2478a12b30b 100644 --- a/src/badguy/plant.hpp +++ b/src/badguy/plant.hpp @@ -33,6 +33,7 @@ class Plant final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Plant"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Plant)); } protected: enum PlantState { diff --git a/src/badguy/rcrystallo.hpp b/src/badguy/rcrystallo.hpp index 0c6f2faedc8..b47ea645463 100644 --- a/src/badguy/rcrystallo.hpp +++ b/src/badguy/rcrystallo.hpp @@ -32,6 +32,7 @@ class RCrystallo final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Roof Crystallo"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(RCrystallo)); } virtual void active_update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/badguy/root.hpp b/src/badguy/root.hpp index c2a8903480a..ec727246773 100644 --- a/src/badguy/root.hpp +++ b/src/badguy/root.hpp @@ -38,6 +38,7 @@ class Root final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Root"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Root)); } virtual bool is_flammable() const override { return false; } virtual bool is_freezable() const override { return false; } diff --git a/src/badguy/root_sapling.hpp b/src/badguy/root_sapling.hpp index 6d30bea8c66..2de801170f8 100644 --- a/src/badguy/root_sapling.hpp +++ b/src/badguy/root_sapling.hpp @@ -40,6 +40,7 @@ class RootSapling final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Root Sapling"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(RootSapling)); } virtual void on_flip(float height) override; diff --git a/src/badguy/scrystallo.hpp b/src/badguy/scrystallo.hpp index 5761bc35667..2ac8a59cc95 100644 --- a/src/badguy/scrystallo.hpp +++ b/src/badguy/scrystallo.hpp @@ -30,6 +30,7 @@ class SCrystallo final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Sleeping Crystallo"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(SCrystallo)); } virtual void collision_solid(const CollisionHit& hit) override; virtual HitResponse collision_badguy(BadGuy& badguy, const CollisionHit& hit) override; diff --git a/src/badguy/short_fuse.hpp b/src/badguy/short_fuse.hpp index 74c80754eac..bac740e5b1c 100644 --- a/src/badguy/short_fuse.hpp +++ b/src/badguy/short_fuse.hpp @@ -29,6 +29,7 @@ class ShortFuse final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Short Fuse"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(ShortFuse)); } protected: virtual HitResponse collision_player (Player& player, const CollisionHit& hit) override; diff --git a/src/badguy/skydive.hpp b/src/badguy/skydive.hpp index dfb2b37efb9..88b1c1f441a 100644 --- a/src/badguy/skydive.hpp +++ b/src/badguy/skydive.hpp @@ -42,6 +42,7 @@ class SkyDive final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Skydive"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(SkyDive)); } virtual bool is_snipable() const override { return true; } protected: diff --git a/src/badguy/smartball.hpp b/src/badguy/smartball.hpp index 044b8564eb6..a4b5ed8ecef 100644 --- a/src/badguy/smartball.hpp +++ b/src/badguy/smartball.hpp @@ -31,6 +31,7 @@ class SmartBall final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mrs. Snowball"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(SmartBall)); } virtual bool is_snipable() const override { return true; } virtual bool is_freezable() const override; diff --git a/src/badguy/smartblock.hpp b/src/badguy/smartblock.hpp index 0b060b27e5b..6564227c8aa 100644 --- a/src/badguy/smartblock.hpp +++ b/src/badguy/smartblock.hpp @@ -29,6 +29,7 @@ class SmartBlock final : public MrIceBlock virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mrs. Iceblock"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MrIceBlock::get_class_types().add(typeid(SmartBlock)); } GameObjectTypes get_types() const override { return {}; } diff --git a/src/badguy/snail.hpp b/src/badguy/snail.hpp index a08a6040103..e77b41b2d31 100644 --- a/src/badguy/snail.hpp +++ b/src/badguy/snail.hpp @@ -42,6 +42,7 @@ class Snail final : virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Snail"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Snail)); } virtual GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/snowball.hpp b/src/badguy/snowball.hpp index 65e1a06dc29..ed0fe2433c3 100644 --- a/src/badguy/snowball.hpp +++ b/src/badguy/snowball.hpp @@ -29,6 +29,7 @@ class SnowBall final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mr. Snowball"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(SnowBall)); } virtual bool is_snipable() const override { return true; } virtual bool is_freezable() const override; diff --git a/src/badguy/snowman.hpp b/src/badguy/snowman.hpp index 82b8b2060e9..f241643f23c 100644 --- a/src/badguy/snowman.hpp +++ b/src/badguy/snowman.hpp @@ -28,6 +28,7 @@ class Snowman final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Snowman"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Snowman)); } protected: void loose_head(); diff --git a/src/badguy/spiky.hpp b/src/badguy/spiky.hpp index 8a48a26209e..c3f95eb9e27 100644 --- a/src/badguy/spiky.hpp +++ b/src/badguy/spiky.hpp @@ -30,6 +30,7 @@ class Spiky final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Spiky"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Spiky)); } private: Spiky(const Spiky&) = delete; diff --git a/src/badguy/sspiky.hpp b/src/badguy/sspiky.hpp index 551e1b12fd8..c09f713941c 100644 --- a/src/badguy/sspiky.hpp +++ b/src/badguy/sspiky.hpp @@ -36,6 +36,7 @@ class SSpiky final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Sleeping Spiky"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(SSpiky)); } virtual void after_editor_set() override; protected: diff --git a/src/badguy/stalactite.hpp b/src/badguy/stalactite.hpp index 10f928325ed..39ad7ebb60c 100644 --- a/src/badguy/stalactite.hpp +++ b/src/badguy/stalactite.hpp @@ -41,6 +41,7 @@ class Stalactite : public StickyBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Stalactite"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return StickyBadguy::get_class_types().add(typeid(Stalactite)); } virtual ObjectSettings get_settings() override; diff --git a/src/badguy/stumpy.hpp b/src/badguy/stumpy.hpp index bfee886a51b..a46c7ff4eb2 100644 --- a/src/badguy/stumpy.hpp +++ b/src/badguy/stumpy.hpp @@ -37,6 +37,7 @@ class Stumpy final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Stumpy"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Stumpy)); } protected: enum MyState { diff --git a/src/badguy/tarantula.hpp b/src/badguy/tarantula.hpp index 5c454ab5862..52b25d40af7 100644 --- a/src/badguy/tarantula.hpp +++ b/src/badguy/tarantula.hpp @@ -38,6 +38,7 @@ class Tarantula final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Tarantula"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Tarantula)); } virtual bool is_snipable() const override; virtual GameObjectTypes get_types() const override; diff --git a/src/badguy/toad.hpp b/src/badguy/toad.hpp index e2ff16d447d..330b2c6d1b1 100644 --- a/src/badguy/toad.hpp +++ b/src/badguy/toad.hpp @@ -37,6 +37,7 @@ class Toad final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Toad"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Toad)); } virtual bool is_snipable() const override { return true; } protected: diff --git a/src/badguy/totem.hpp b/src/badguy/totem.hpp index a4fb02769cc..d7188fba479 100644 --- a/src/badguy/totem.hpp +++ b/src/badguy/totem.hpp @@ -36,6 +36,7 @@ class Totem final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Totem"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Totem)); } virtual bool is_snipable() const override { return true; } protected: diff --git a/src/badguy/treewillowisp.hpp b/src/badguy/treewillowisp.hpp index c69ab63c705..a03c9a8dc93 100644 --- a/src/badguy/treewillowisp.hpp +++ b/src/badguy/treewillowisp.hpp @@ -27,6 +27,7 @@ class TreeWillOWisp final : public BadGuy public: TreeWillOWisp(GhostTree* tree, const Vector& pos, float radius, float speed); ~TreeWillOWisp() override; + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(TreeWillOWisp)); } virtual void activate() override; virtual void active_update(float dt_sec) override; diff --git a/src/badguy/viciousivy.hpp b/src/badguy/viciousivy.hpp index 99d566eb770..b9fa837d434 100644 --- a/src/badguy/viciousivy.hpp +++ b/src/badguy/viciousivy.hpp @@ -32,6 +32,7 @@ class ViciousIvy final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Vicious Ivy"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(ViciousIvy)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/walking_badguy.hpp b/src/badguy/walking_badguy.hpp index b65537f2e0a..4e43ed62235 100644 --- a/src/badguy/walking_badguy.hpp +++ b/src/badguy/walking_badguy.hpp @@ -52,6 +52,7 @@ class WalkingBadguy : public BadGuy const std::string& walk_right_action, int layer = LAYER_OBJECTS, const std::string& light_sprite_name = "images/objects/lightmap_light/lightmap_light-medium.sprite"); + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(WalkingBadguy)); } virtual void initialize() override; virtual void active_update(float dt_sec) override; diff --git a/src/badguy/walking_candle.hpp b/src/badguy/walking_candle.hpp index d621c46b833..3dd92d626ed 100644 --- a/src/badguy/walking_candle.hpp +++ b/src/badguy/walking_candle.hpp @@ -40,6 +40,7 @@ class WalkingCandle final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Walking Candle"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(WalkingCandle)); } private: Color lightcolor; diff --git a/src/badguy/walkingleaf.hpp b/src/badguy/walkingleaf.hpp index d2204841f00..7b4cdb15958 100644 --- a/src/badguy/walkingleaf.hpp +++ b/src/badguy/walkingleaf.hpp @@ -32,6 +32,7 @@ class WalkingLeaf final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Walking Leaf"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(WalkingLeaf)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/willowisp.hpp b/src/badguy/willowisp.hpp index cac9ae4e368..9fb5247135b 100644 --- a/src/badguy/willowisp.hpp +++ b/src/badguy/willowisp.hpp @@ -68,6 +68,7 @@ class WillOWisp final : public BadGuy, virtual std::string get_exposed_class_name() const override { return "WillOWisp"; } static std::string display_name() { return _("Will o' Wisp"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(WillOWisp)); } virtual ObjectSettings get_settings() override; virtual void move_to(const Vector& pos) override; diff --git a/src/badguy/yeti.hpp b/src/badguy/yeti.hpp index 68aea592bb5..9015aba7bb2 100644 --- a/src/badguy/yeti.hpp +++ b/src/badguy/yeti.hpp @@ -37,6 +37,7 @@ class Yeti final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Yeti"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Yeti)); } virtual ObjectSettings get_settings() override; diff --git a/src/badguy/yeti_stalactite.hpp b/src/badguy/yeti_stalactite.hpp index 70a4bd01460..01904f07b39 100644 --- a/src/badguy/yeti_stalactite.hpp +++ b/src/badguy/yeti_stalactite.hpp @@ -33,6 +33,7 @@ class YetiStalactite final : public Stalactite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Yeti's Stalactite"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Stalactite::get_class_types().add(typeid(YetiStalactite)); } void start_shaking(); bool is_hanging() const; diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index 73577595821..28efb11f88d 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -38,6 +38,7 @@ class Zeekling final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Zeekling"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Zeekling)); } virtual bool is_snipable() const override { return true; } private: diff --git a/src/editor/bezier_marker.hpp b/src/editor/bezier_marker.hpp index 383416bba6e..daf2e038a57 100644 --- a/src/editor/bezier_marker.hpp +++ b/src/editor/bezier_marker.hpp @@ -26,6 +26,7 @@ class BezierMarker final : public MarkerObject { public: BezierMarker(Path::Node* node, Vector* bezier_pos); + virtual GameObjectClasses get_class_types() const override { return MarkerObject::get_class_types().add(typeid(BezierMarker)); } virtual void move_to(const Vector& pos) override; virtual Vector get_point_vector() const override; diff --git a/src/editor/marker_object.hpp b/src/editor/marker_object.hpp index 03cb561d128..8341d182b79 100644 --- a/src/editor/marker_object.hpp +++ b/src/editor/marker_object.hpp @@ -28,6 +28,7 @@ class MarkerObject : public MovingObject public: MarkerObject(const Vector& pos); MarkerObject(); + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(MarkerObject)); } virtual void update(float dt_sec) override {} virtual void draw(DrawingContext& context) override; diff --git a/src/editor/node_marker.hpp b/src/editor/node_marker.hpp index 1a0f1e964bf..1014a960d35 100644 --- a/src/editor/node_marker.hpp +++ b/src/editor/node_marker.hpp @@ -25,6 +25,7 @@ class NodeMarker final : public MarkerObject { public: NodeMarker(std::vector::iterator node_iterator, size_t id_, UID before, UID after); + virtual GameObjectClasses get_class_types() const override { return MarkerObject::get_class_types().add(typeid(NodeMarker)); } virtual void move_to(const Vector& pos) override; virtual void editor_delete() override; diff --git a/src/editor/resize_marker.hpp b/src/editor/resize_marker.hpp index 5a832ae6269..ba0f16d623b 100644 --- a/src/editor/resize_marker.hpp +++ b/src/editor/resize_marker.hpp @@ -32,6 +32,7 @@ class ResizeMarker final : public MarkerObject public: ResizeMarker(MovingObject* obj, Side vert, Side horz); + virtual GameObjectClasses get_class_types() const override { return MarkerObject::get_class_types().add(typeid(ResizeMarker)); } void move_to(const Vector& pos) override; Vector get_point_vector() const override; diff --git a/src/object/ambient_light.hpp b/src/object/ambient_light.hpp index 34c4cead95e..43311a21ac2 100644 --- a/src/object/ambient_light.hpp +++ b/src/object/ambient_light.hpp @@ -37,6 +37,7 @@ class AmbientLight : public GameObject static std::string display_name() { return _("Ambient Light"); } virtual std::string get_display_name() const override { return display_name(); } virtual const std::string get_icon_path() const override { return "images/engine/editor/ambient_light.png"; } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(AmbientLight)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/ambient_sound.hpp b/src/object/ambient_sound.hpp index 43a868cf6ba..e37403f7f68 100644 --- a/src/object/ambient_sound.hpp +++ b/src/object/ambient_sound.hpp @@ -50,6 +50,7 @@ class AmbientSound final : public MovingObject static std::string display_name() { return _("Ambient Sound"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(AmbientSound)); } virtual void draw(DrawingContext& context) override; diff --git a/src/object/background.hpp b/src/object/background.hpp index d5f15247901..94bbbee5784 100644 --- a/src/object/background.hpp +++ b/src/object/background.hpp @@ -50,6 +50,7 @@ class Background final : public GameObject virtual std::string get_exposed_class_name() const override { return "Background"; } static std::string display_name() { return _("Background"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Background)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/background.png"; diff --git a/src/object/bicycle_platform.hpp b/src/object/bicycle_platform.hpp index 9df28d6c09f..fcec2c931a9 100644 --- a/src/object/bicycle_platform.hpp +++ b/src/object/bicycle_platform.hpp @@ -28,6 +28,7 @@ class BicyclePlatformChild : public MovingSprite public: BicyclePlatformChild(const ReaderMapping& reader, float angle_offset, BicyclePlatform& parent); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(BicyclePlatformChild)); } virtual void update(float dt_sec) override; virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; @@ -66,6 +67,7 @@ class BicyclePlatform final : public GameObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Bicycle Platform"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(BicyclePlatform)); } virtual ObjectSettings get_settings() override; virtual void editor_delete() override; diff --git a/src/object/block.hpp b/src/object/block.hpp index 8e647bf4852..50345044f89 100644 --- a/src/object/block.hpp +++ b/src/object/block.hpp @@ -30,6 +30,8 @@ class Block : public MovingSprite Block(const Vector& pos, const std::string& sprite_file); Block(const ReaderMapping& mapping, const std::string& sprite_file); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Block)); } + virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/bonus_block.hpp b/src/object/bonus_block.hpp index 9b7ec20239d..924f59bc0ad 100644 --- a/src/object/bonus_block.hpp +++ b/src/object/bonus_block.hpp @@ -61,6 +61,7 @@ class BonusBlock final : public Block virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Bonus Block"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Block::get_class_types().add(typeid(BonusBlock)); } virtual ObjectSettings get_settings() override; GameObjectTypes get_types() const override; diff --git a/src/object/bouncy_coin.hpp b/src/object/bouncy_coin.hpp index 79c8099a65d..67f2a8de3c6 100644 --- a/src/object/bouncy_coin.hpp +++ b/src/object/bouncy_coin.hpp @@ -27,6 +27,7 @@ class BouncyCoin final : public GameObject public: BouncyCoin(const Vector& pos, bool emerge = false, const std::string& sprite_path = "images/objects/coin/coin.sprite"); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(BouncyCoin)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; virtual bool is_saveable() const override { diff --git a/src/object/brick.hpp b/src/object/brick.hpp index ffe8f0432c1..21803d4de37 100644 --- a/src/object/brick.hpp +++ b/src/object/brick.hpp @@ -33,6 +33,7 @@ class Brick : public Block virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Brick"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Block::get_class_types().add(typeid(Brick)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; @@ -69,6 +70,7 @@ class HeavyBrick : public Brick virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Heavy Brick"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Brick::get_class_types().add(typeid(HeavyBrick)); } GameObjectTypes get_types() const override { return {}; } diff --git a/src/object/bullet.hpp b/src/object/bullet.hpp index aefdbbbf8c4..601c35b1d0a 100644 --- a/src/object/bullet.hpp +++ b/src/object/bullet.hpp @@ -31,6 +31,8 @@ class Bullet final : public MovingObject public: Bullet(const Vector& pos, const Vector& xm, Direction dir, BonusType type, Player& player); + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Bullet)); } + virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; virtual void collision_solid(const CollisionHit& hit) override; diff --git a/src/object/bumper.hpp b/src/object/bumper.hpp index bc9b40c8700..724059f0cea 100644 --- a/src/object/bumper.hpp +++ b/src/object/bumper.hpp @@ -37,6 +37,7 @@ class Bumper final : public StickyObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Bumper"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return StickyObject::get_class_types().add(typeid(Bumper)); } virtual void after_editor_set() override; virtual void on_flip(float height) override; diff --git a/src/object/camera.hpp b/src/object/camera.hpp index 912f40e4126..c4c6e44dc76 100644 --- a/src/object/camera.hpp +++ b/src/object/camera.hpp @@ -67,6 +67,7 @@ class Camera final : public GameObject, virtual std::string get_exposed_class_name() const override { return "Camera"; } static std::string display_name() { return _("Camera"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Camera)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/candle.hpp b/src/object/candle.hpp index 34be1323caa..cc3a4e0a833 100644 --- a/src/object/candle.hpp +++ b/src/object/candle.hpp @@ -42,6 +42,7 @@ class Candle final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "Candle"; } static std::string display_name() { return _("Candle"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Candle)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/circleplatform.hpp b/src/object/circleplatform.hpp index 11892f4b274..4da7c150726 100644 --- a/src/object/circleplatform.hpp +++ b/src/object/circleplatform.hpp @@ -34,6 +34,7 @@ class CirclePlatform : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Circular Platform"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(CirclePlatform)); } private: virtual void initialize(); diff --git a/src/object/cloud_particle_system.hpp b/src/object/cloud_particle_system.hpp index 20c1cee322d..81b49cc6c46 100644 --- a/src/object/cloud_particle_system.hpp +++ b/src/object/cloud_particle_system.hpp @@ -49,6 +49,7 @@ class CloudParticleSystem final : public ParticleSystem virtual std::string get_exposed_class_name() const override { return "CloudParticleSystem"; } static std::string display_name() { return _("Cloud Particles"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return ParticleSystem::get_class_types().add(typeid(CloudParticleSystem)); } virtual ObjectSettings get_settings() override; virtual const std::string get_icon_path() const override { diff --git a/src/object/coin.hpp b/src/object/coin.hpp index 194be61b99b..9fd3de5db62 100644 --- a/src/object/coin.hpp +++ b/src/object/coin.hpp @@ -43,6 +43,7 @@ class Coin : public MovingSprite, virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Coin"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Coin)); } virtual ObjectSettings get_settings() override; GameObjectTypes get_types() const override; @@ -96,6 +97,7 @@ class HeavyCoin final : public Coin virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Heavy Coin"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Coin::get_class_types().add(typeid(HeavyCoin)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/coin_explode.hpp b/src/object/coin_explode.hpp index b8ec2233e8d..e7a316d4e77 100644 --- a/src/object/coin_explode.hpp +++ b/src/object/coin_explode.hpp @@ -25,6 +25,7 @@ class CoinExplode final : public GameObject public: CoinExplode(const Vector& pos, bool count_stats = true, const std::string& sprite_path = "images/objects/coin/coin.sprite"); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(CoinExplode)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; virtual bool is_saveable() const override { diff --git a/src/object/coin_rain.hpp b/src/object/coin_rain.hpp index 55a8ce5b222..df5c8ea3e5e 100644 --- a/src/object/coin_rain.hpp +++ b/src/object/coin_rain.hpp @@ -27,6 +27,7 @@ class CoinRain final : public GameObject public: CoinRain(const Vector& pos, bool emerge=false, bool count_stats = true, const std::string& sprite_path = "images/objects/coin/coin.sprite"); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(CoinRain)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; virtual bool is_saveable() const override { diff --git a/src/object/conveyor_belt.hpp b/src/object/conveyor_belt.hpp index 80eff3dec91..eb45c47e656 100644 --- a/src/object/conveyor_belt.hpp +++ b/src/object/conveyor_belt.hpp @@ -46,6 +46,7 @@ class ConveyorBelt final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "ConveyorBelt"; } static std::string display_name() { return _("Conveyor Belt"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(ConveyorBelt)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/custom_particle_system.hpp b/src/object/custom_particle_system.hpp index 427970374a6..2076a0b1716 100644 --- a/src/object/custom_particle_system.hpp +++ b/src/object/custom_particle_system.hpp @@ -53,6 +53,7 @@ class CustomParticleSystem : public ParticleSystem_Interactive virtual std::string get_exposed_class_name() const override { return "CustomParticleSystem"; } static std::string display_name() { return _("Custom Particles"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return ParticleSystem_Interactive::get_class_types().add(typeid(CustomParticleSystem)); } virtual void save(Writer& writer) override; virtual ObjectSettings get_settings() override; diff --git a/src/object/custom_particle_system_file.hpp b/src/object/custom_particle_system_file.hpp index b37a4c4cded..728852e5443 100644 --- a/src/object/custom_particle_system_file.hpp +++ b/src/object/custom_particle_system_file.hpp @@ -38,6 +38,7 @@ class CustomParticleSystemFile final : public CustomParticleSystem virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Custom Particles from file"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return CustomParticleSystem::get_class_types().add(typeid(CustomParticleSystemFile)); } virtual ObjectSettings get_settings() override; virtual const std::string get_icon_path() const override { diff --git a/src/object/decal.hpp b/src/object/decal.hpp index c8913305bad..edff1bd404a 100644 --- a/src/object/decal.hpp +++ b/src/object/decal.hpp @@ -48,6 +48,7 @@ class Decal final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "Decal"; } static std::string display_name() { return _("Decal"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Decal)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/display_effect.hpp b/src/object/display_effect.hpp index 33ef9533565..3822438cf94 100644 --- a/src/object/display_effect.hpp +++ b/src/object/display_effect.hpp @@ -34,6 +34,7 @@ class DisplayEffect final : public GameObject public: DisplayEffect(const std::string& name = ""); ~DisplayEffect() override; + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(DisplayEffect)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/electrifier.hpp b/src/object/electrifier.hpp index 9bf3dd26f2f..574e253a70f 100644 --- a/src/object/electrifier.hpp +++ b/src/object/electrifier.hpp @@ -35,6 +35,7 @@ class Electrifier final : public GameObject public: Electrifier(TileChangeMap replacements, float seconds); Electrifier(uint32_t oldtile, uint32_t newtile, float seconds); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Electrifier)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/endsequence.hpp b/src/object/endsequence.hpp index 5ccb154d6c4..2ccfbd99ba4 100644 --- a/src/object/endsequence.hpp +++ b/src/object/endsequence.hpp @@ -27,6 +27,7 @@ class EndSequence : public GameObject public: EndSequence(); ~EndSequence() override; + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(EndSequence)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/endsequence_fireworks.hpp b/src/object/endsequence_fireworks.hpp index c459e791738..7e052277b3e 100644 --- a/src/object/endsequence_fireworks.hpp +++ b/src/object/endsequence_fireworks.hpp @@ -25,6 +25,7 @@ class EndSequenceFireworks final : public EndSequence public: EndSequenceFireworks(); ~EndSequenceFireworks() override; + virtual GameObjectClasses get_class_types() const override { return EndSequence::get_class_types().add(typeid(EndSequenceFireworks)); } virtual void draw(DrawingContext& context) override; protected: diff --git a/src/object/endsequence_walk.hpp b/src/object/endsequence_walk.hpp index 8f4836cbaff..ef22d244e5b 100644 --- a/src/object/endsequence_walk.hpp +++ b/src/object/endsequence_walk.hpp @@ -25,6 +25,7 @@ class EndSequenceWalk final : public EndSequence public: EndSequenceWalk(); ~EndSequenceWalk() override; + virtual GameObjectClasses get_class_types() const override { return EndSequence::get_class_types().add(typeid(EndSequenceWalk)); } virtual void draw(DrawingContext& context) override; protected: diff --git a/src/object/explosion.hpp b/src/object/explosion.hpp index 0b7146fef81..070d3b654c2 100644 --- a/src/object/explosion.hpp +++ b/src/object/explosion.hpp @@ -34,6 +34,7 @@ class Explosion final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Explosion"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Explosion)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/fallblock.hpp b/src/object/fallblock.hpp index e6f627f2c34..202b56e5d1e 100644 --- a/src/object/fallblock.hpp +++ b/src/object/fallblock.hpp @@ -40,6 +40,7 @@ class FallBlock : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Falling Platform"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(FallBlock)); } virtual void on_flip(float height) override; diff --git a/src/object/falling_coin.hpp b/src/object/falling_coin.hpp index 5f942a33ee4..55ef3b3d3b8 100644 --- a/src/object/falling_coin.hpp +++ b/src/object/falling_coin.hpp @@ -26,6 +26,7 @@ class FallingCoin final : public GameObject { public: FallingCoin(const Vector& start_position, float x_vel); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(FallingCoin)); } virtual void draw(DrawingContext& context) override; virtual void update(float dt_sec) override; diff --git a/src/object/firefly.hpp b/src/object/firefly.hpp index 147cdb68195..55c820d6a1e 100644 --- a/src/object/firefly.hpp +++ b/src/object/firefly.hpp @@ -37,6 +37,7 @@ class Firefly final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Checkpoint"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Firefly)); } virtual ObjectSettings get_settings() override; virtual void on_flip(float height) override; diff --git a/src/object/fireworks.hpp b/src/object/fireworks.hpp index 23f45bf4263..e54bacb3ccf 100644 --- a/src/object/fireworks.hpp +++ b/src/object/fireworks.hpp @@ -26,6 +26,7 @@ class Fireworks final : public GameObject { public: Fireworks(); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Fireworks)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/floating_image.hpp b/src/object/floating_image.hpp index 59774cdc45d..a4fbec4a997 100644 --- a/src/object/floating_image.hpp +++ b/src/object/floating_image.hpp @@ -39,6 +39,7 @@ class FloatingImage final : public GameObject ~FloatingImage() override; virtual bool is_saveable() const override { return false; } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(FloatingImage)); } virtual std::string get_exposed_class_name() const override { return "FloatingImage"; } virtual void update(float dt_sec) override; diff --git a/src/object/floating_text.hpp b/src/object/floating_text.hpp index ca3c671a427..7b7d3214b13 100644 --- a/src/object/floating_text.hpp +++ b/src/object/floating_text.hpp @@ -28,6 +28,8 @@ class FloatingText final : public GameObject public: FloatingText(const Vector& pos, const std::string& text_); FloatingText(const Vector& pos, int s); // use this for score, for instance + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(FloatingText)); } + virtual bool is_saveable() const override { return false; } diff --git a/src/object/flower.hpp b/src/object/flower.hpp index 173a8d0c1e8..11427005be7 100644 --- a/src/object/flower.hpp +++ b/src/object/flower.hpp @@ -30,6 +30,7 @@ class Flower final : public MovingObject public: Flower(BonusType type, const std::string& custom_sprite = ""); + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Flower)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/ghost_particle_system.hpp b/src/object/ghost_particle_system.hpp index 8610b5b8e1f..2bedbf2d2ec 100644 --- a/src/object/ghost_particle_system.hpp +++ b/src/object/ghost_particle_system.hpp @@ -36,6 +36,7 @@ class GhostParticleSystem final : public ParticleSystem virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Ghost Particles"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return ParticleSystem::get_class_types().add(typeid(GhostParticleSystem)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/ghostparticles.png"; diff --git a/src/object/gradient.hpp b/src/object/gradient.hpp index 0c57c2a5e95..7259b25ae88 100644 --- a/src/object/gradient.hpp +++ b/src/object/gradient.hpp @@ -48,6 +48,7 @@ class Gradient final : public GameObject virtual std::string get_exposed_class_name() const override { return "Gradient"; } static std::string display_name() { return _("Gradient"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Gradient)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/gradient.png"; diff --git a/src/object/growup.hpp b/src/object/growup.hpp index 8c743cd1cd4..d779a01132f 100644 --- a/src/object/growup.hpp +++ b/src/object/growup.hpp @@ -25,6 +25,7 @@ class GrowUp final : public MovingSprite { public: GrowUp(const Vector& pos, Direction direction = Direction::RIGHT, const std::string& custom_sprite = ""); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(GrowUp)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/hurting_platform.hpp b/src/object/hurting_platform.hpp index db034f4bb66..d1fc19b8db9 100644 --- a/src/object/hurting_platform.hpp +++ b/src/object/hurting_platform.hpp @@ -30,6 +30,7 @@ class HurtingPlatform final : public Platform virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Hurting Platform"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Platform::get_class_types().add(typeid(HurtingPlatform)); } private: HurtingPlatform(const HurtingPlatform&) = delete; diff --git a/src/object/infoblock.hpp b/src/object/infoblock.hpp index a5351bfba72..9df49d85751 100644 --- a/src/object/infoblock.hpp +++ b/src/object/infoblock.hpp @@ -36,6 +36,7 @@ class InfoBlock final : public Block virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Info Block"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Block::get_class_types().add(typeid(InfoBlock)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/invisible_block.hpp b/src/object/invisible_block.hpp index ad2b63a169f..3d3ccb6c8bc 100644 --- a/src/object/invisible_block.hpp +++ b/src/object/invisible_block.hpp @@ -29,6 +29,7 @@ class InvisibleBlock final : public Block virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Invisible Block"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Block::get_class_types().add(typeid(InvisibleBlock)); } virtual void draw(DrawingContext& context) override; virtual bool collides(GameObject& other, const CollisionHit& hit) const override; diff --git a/src/object/invisible_wall.hpp b/src/object/invisible_wall.hpp index 02bddb90440..3b5ba67cec8 100644 --- a/src/object/invisible_wall.hpp +++ b/src/object/invisible_wall.hpp @@ -36,6 +36,7 @@ class InvisibleWall final : public MovingObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Invisible Wall"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(InvisibleWall)); } virtual bool has_variable_size() const override { return true; } diff --git a/src/object/ispy.hpp b/src/object/ispy.hpp index 681b005a14e..dea8674b2ce 100644 --- a/src/object/ispy.hpp +++ b/src/object/ispy.hpp @@ -34,6 +34,7 @@ class Ispy final : public StickyObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Ispy"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return StickyObject::get_class_types().add(typeid(Ispy)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/key.hpp b/src/object/key.hpp index d709020384b..81097fe9999 100644 --- a/src/object/key.hpp +++ b/src/object/key.hpp @@ -37,6 +37,7 @@ class Key final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Key"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Key)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/lantern.hpp b/src/object/lantern.hpp index 68d053cc5d4..435a1feaa02 100644 --- a/src/object/lantern.hpp +++ b/src/object/lantern.hpp @@ -37,6 +37,7 @@ class Lantern final : public Rock virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Lantern"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Rock::get_class_types().add(typeid(Lantern)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override { return {}; } diff --git a/src/object/level_time.hpp b/src/object/level_time.hpp index ee752a1a8a6..f592bdea360 100644 --- a/src/object/level_time.hpp +++ b/src/object/level_time.hpp @@ -74,6 +74,7 @@ class LevelTime final : public GameObject virtual std::string get_exposed_class_name() const override { return "LevelTime"; } static std::string display_name() { return _("Time Limit"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(LevelTime)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/light.hpp b/src/object/light.hpp index ce03309b56a..88ee82425f5 100644 --- a/src/object/light.hpp +++ b/src/object/light.hpp @@ -31,6 +31,8 @@ class Light : public GameObject return false; } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Light)); } + virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/lit_object.hpp b/src/object/lit_object.hpp index 4c326d38d9c..adddfe9d2c3 100644 --- a/src/object/lit_object.hpp +++ b/src/object/lit_object.hpp @@ -45,6 +45,7 @@ class LitObject final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "LitObject"; } static std::string display_name() { return _("Lit object"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(LitObject)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/magicblock.hpp b/src/object/magicblock.hpp index 21b1ef87d8c..91261eec774 100644 --- a/src/object/magicblock.hpp +++ b/src/object/magicblock.hpp @@ -41,6 +41,7 @@ class MagicBlock final: public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Magic Tile"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(MagicBlock)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/moving_sprite.hpp b/src/object/moving_sprite.hpp index 1f1c26323e9..b251e127587 100644 --- a/src/object/moving_sprite.hpp +++ b/src/object/moving_sprite.hpp @@ -57,6 +57,7 @@ class MovingSprite : public MovingObject static std::string class_name() { return "moving-sprite"; } virtual std::string get_class_name() const override { return class_name(); } virtual std::string get_exposed_class_name() const override { return "MovingSprite"; } + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(MovingSprite)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/music_object.hpp b/src/object/music_object.hpp index aecd6ee4305..b9c6e4c0448 100644 --- a/src/object/music_object.hpp +++ b/src/object/music_object.hpp @@ -41,6 +41,7 @@ class MusicObject : public GameObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Music"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(MusicObject)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/music.png"; } virtual ObjectSettings get_settings() override; diff --git a/src/object/oneup.hpp b/src/object/oneup.hpp index 373168fc49c..51efe40a3cc 100644 --- a/src/object/oneup.hpp +++ b/src/object/oneup.hpp @@ -25,6 +25,7 @@ class OneUp final : public MovingSprite { public: OneUp(const Vector& pos, Direction direction = Direction::RIGHT); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(OneUp)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/particle_zone.hpp b/src/object/particle_zone.hpp index dd59e6858e0..7504f30bd1c 100644 --- a/src/object/particle_zone.hpp +++ b/src/object/particle_zone.hpp @@ -37,6 +37,7 @@ class ParticleZone final : public MovingObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Particle zone"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(ParticleZone)); } virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; virtual ObjectSettings get_settings() override; diff --git a/src/object/particles.hpp b/src/object/particles.hpp index c92a2996326..1b090e82ff9 100644 --- a/src/object/particles.hpp +++ b/src/object/particles.hpp @@ -35,6 +35,7 @@ class Particles final : public GameObject const float min_initial_velocity, const float max_initial_velocity, const Vector& acceleration, int number, Color color, int size, float life_time, int drawing_layer); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Particles)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/particlesystem.hpp b/src/object/particlesystem.hpp index 239dd519d69..7f61f42c575 100644 --- a/src/object/particlesystem.hpp +++ b/src/object/particlesystem.hpp @@ -63,6 +63,7 @@ class ParticleSystem : public GameObject virtual std::string get_exposed_class_name() const override { return "ParticleSystem"; } static std::string display_name() { return _("Particle system"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(ParticleSystem)); } virtual ObjectSettings get_settings() override; /** diff --git a/src/object/particlesystem_interactive.hpp b/src/object/particlesystem_interactive.hpp index abf37cfb843..c0233f796cf 100644 --- a/src/object/particlesystem_interactive.hpp +++ b/src/object/particlesystem_interactive.hpp @@ -47,6 +47,7 @@ class ParticleSystem_Interactive : public ParticleSystem virtual std::string get_display_name() const override { return _("Interactive particle system"); } + virtual GameObjectClasses get_class_types() const override { return ParticleSystem::get_class_types().add(typeid(ParticleSystem_Interactive)); } protected: virtual int collision(Particle* particle, const Vector& movement); diff --git a/src/object/path_gameobject.hpp b/src/object/path_gameobject.hpp index 732c6f0d933..cbb7c7984cb 100644 --- a/src/object/path_gameobject.hpp +++ b/src/object/path_gameobject.hpp @@ -44,6 +44,7 @@ class PathGameObject : public GameObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Path"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(PathGameObject)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/path.png"; diff --git a/src/object/platform.hpp b/src/object/platform.hpp index 8308de5c763..1cc837e8349 100644 --- a/src/object/platform.hpp +++ b/src/object/platform.hpp @@ -53,6 +53,7 @@ class Platform : public MovingSprite, virtual std::string get_exposed_class_name() const override { return "Platform"; } static std::string display_name() { return _("Platform"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Platform)); } virtual void editor_update() override; diff --git a/src/object/player.hpp b/src/object/player.hpp index be7532333da..ba8d84c7715 100644 --- a/src/object/player.hpp +++ b/src/object/player.hpp @@ -89,6 +89,7 @@ class Player final : public MovingObject virtual bool has_object_manager_priority() const override { return true; } virtual std::string get_exposed_class_name() const override { return "Player"; } virtual void remove_me() override; + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Player)); } int get_id() const { return m_id; } void set_id(int id); diff --git a/src/object/pneumatic_platform.hpp b/src/object/pneumatic_platform.hpp index e5859ec53e1..6af88c99d83 100644 --- a/src/object/pneumatic_platform.hpp +++ b/src/object/pneumatic_platform.hpp @@ -28,6 +28,7 @@ class PneumaticPlatformChild final : public MovingSprite public: PneumaticPlatformChild(const ReaderMapping& reader, bool left, PneumaticPlatform& parent); ~PneumaticPlatformChild() override; + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(PneumaticPlatformChild)); } virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; virtual void update(float dt_sec) override; @@ -64,6 +65,7 @@ class PneumaticPlatform final : public GameObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Pneumatic Platform"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(PneumaticPlatform)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/powerup.hpp b/src/object/powerup.hpp index b0b9b5f8f12..b9ad6d2fd58 100644 --- a/src/object/powerup.hpp +++ b/src/object/powerup.hpp @@ -39,6 +39,7 @@ class PowerUp final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Powerup"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(PowerUp)); } std::vector get_patches() const override; virtual ObjectSettings get_settings() override; diff --git a/src/object/pulsing_light.hpp b/src/object/pulsing_light.hpp index 8e9d60cf3e3..f453aa94313 100644 --- a/src/object/pulsing_light.hpp +++ b/src/object/pulsing_light.hpp @@ -27,6 +27,7 @@ class PulsingLight final : public Light public: PulsingLight(const Vector& center, float cycle_len = 5.0, float min_alpha = 0.0, float max_alpha = 1.0, const Color& color = Color(1.0, 1.0, 1.0, 1.0)); ~PulsingLight() override; + virtual GameObjectClasses get_class_types() const override { return Light::get_class_types().add(typeid(PulsingLight)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/pushbutton.hpp b/src/object/pushbutton.hpp index dfc49e3d640..253a44a58e5 100644 --- a/src/object/pushbutton.hpp +++ b/src/object/pushbutton.hpp @@ -31,6 +31,7 @@ class PushButton final : public StickyObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Button"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return StickyObject::get_class_types().add(typeid(PushButton)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/rain_particle_system.hpp b/src/object/rain_particle_system.hpp index 5b2acd9cae4..4a6b263858c 100644 --- a/src/object/rain_particle_system.hpp +++ b/src/object/rain_particle_system.hpp @@ -48,6 +48,7 @@ class RainParticleSystem final : public ParticleSystem_Interactive virtual std::string get_exposed_class_name() const override { return "RainParticleSystem"; } static std::string display_name() { return _("Rain Particles"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return ParticleSystem_Interactive::get_class_types().add(typeid(RainParticleSystem)); } virtual ObjectSettings get_settings() override; /** diff --git a/src/object/rainsplash.hpp b/src/object/rainsplash.hpp index 86ca688d3dd..3b06bf4db6a 100644 --- a/src/object/rainsplash.hpp +++ b/src/object/rainsplash.hpp @@ -28,6 +28,7 @@ class RainSplash final : public GameObject public: RainSplash(const Vector& pos, bool vertical); ~RainSplash() override; + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(RainSplash)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/rock.hpp b/src/object/rock.hpp index c50f8ff45fb..f38b9cd7c90 100644 --- a/src/object/rock.hpp +++ b/src/object/rock.hpp @@ -39,6 +39,7 @@ class Rock : public MovingSprite, virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Rock"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Portable)).add(typeid(Rock)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override; diff --git a/src/object/rublight.hpp b/src/object/rublight.hpp index 0a218585745..9772dd2eda2 100644 --- a/src/object/rublight.hpp +++ b/src/object/rublight.hpp @@ -33,6 +33,7 @@ class RubLight final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Rublight"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(RubLight)); } virtual ObjectSettings get_settings() override; virtual void on_flip(float height) override; diff --git a/src/object/rusty_trampoline.hpp b/src/object/rusty_trampoline.hpp index 86e4ac4b074..590fc0d6a09 100644 --- a/src/object/rusty_trampoline.hpp +++ b/src/object/rusty_trampoline.hpp @@ -39,6 +39,7 @@ class RustyTrampoline final : public Rock virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Rusty Trampoline"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Rock::get_class_types().add(typeid(RustyTrampoline)); } virtual ObjectSettings get_settings() override; GameObjectTypes get_types() const override { return {}; } diff --git a/src/object/scripted_object.hpp b/src/object/scripted_object.hpp index 5465f78d210..920a09d9874 100644 --- a/src/object/scripted_object.hpp +++ b/src/object/scripted_object.hpp @@ -45,6 +45,7 @@ class ScriptedObject final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "ScriptedObject"; } static std::string display_name() { return _("Scripted Object"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(ScriptedObject)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/shard.hpp b/src/object/shard.hpp index 7d3c89579ff..57c461ae7a5 100644 --- a/src/object/shard.hpp +++ b/src/object/shard.hpp @@ -34,6 +34,7 @@ class Shard final : public StickyObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Shard"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return StickyObject::get_class_types().add(typeid(Shard)); } protected: Physic m_physic; diff --git a/src/object/smoke_cloud.hpp b/src/object/smoke_cloud.hpp index 6c3b1ef47ea..4eedf2a7955 100644 --- a/src/object/smoke_cloud.hpp +++ b/src/object/smoke_cloud.hpp @@ -26,6 +26,7 @@ class SmokeCloud final : public GameObject { public: SmokeCloud(const Vector& pos); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(SmokeCloud)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/snow_particle_system.hpp b/src/object/snow_particle_system.hpp index 6b608ab27fe..854962b8fd2 100644 --- a/src/object/snow_particle_system.hpp +++ b/src/object/snow_particle_system.hpp @@ -36,6 +36,7 @@ class SnowParticleSystem final : public ParticleSystem virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Snow Particles"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return ParticleSystem::get_class_types().add(typeid(SnowParticleSystem)); } virtual ObjectSettings get_settings() override; virtual const std::string get_icon_path() const override diff --git a/src/object/sound_object.hpp b/src/object/sound_object.hpp index c2ef56791ee..b636843a03a 100644 --- a/src/object/sound_object.hpp +++ b/src/object/sound_object.hpp @@ -40,6 +40,7 @@ class SoundObject final : public GameObject virtual std::string get_exposed_class_name() const override { return "SoundObject"; } static std::string display_name() { return _("Sound"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(SoundObject)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/sound.png"; } virtual ObjectSettings get_settings() override; diff --git a/src/object/spawnpoint.hpp b/src/object/spawnpoint.hpp index 6a6c22185d3..a2e12ba57a0 100644 --- a/src/object/spawnpoint.hpp +++ b/src/object/spawnpoint.hpp @@ -47,6 +47,7 @@ class SpawnPointMarker final : public MovingObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Spawnpoint"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(SpawnPointMarker)); } virtual ObjectSettings get_settings() override; virtual int get_layer() const override { return LAYER_FOREGROUND1; } diff --git a/src/object/specialriser.hpp b/src/object/specialriser.hpp index 2e4248708f7..7eb546f66b7 100644 --- a/src/object/specialriser.hpp +++ b/src/object/specialriser.hpp @@ -27,6 +27,7 @@ class SpecialRiser final : public MovingObject { public: SpecialRiser(const Vector& pos, std::unique_ptr child, bool is_solid = false); + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(SpecialRiser)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/spotlight.hpp b/src/object/spotlight.hpp index 1f2c9422542..c214080c4b5 100644 --- a/src/object/spotlight.hpp +++ b/src/object/spotlight.hpp @@ -58,6 +58,7 @@ class Spotlight final : public MovingObject virtual std::string get_exposed_class_name() const override { return "Spotlight"; } static std::string display_name() { return _("Spotlight"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Spotlight)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/sprite_particle.hpp b/src/object/sprite_particle.hpp index 44bd77c841b..ae5dad30dfc 100644 --- a/src/object/sprite_particle.hpp +++ b/src/object/sprite_particle.hpp @@ -37,6 +37,7 @@ class SpriteParticle final : public GameObject const Vector& position, AnchorPoint anchor, const Vector& velocity, const Vector& acceleration, int drawing_layer = LAYER_OBJECTS-1, bool notimeout = false, Color color = Color::WHITE); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(SpriteParticle)); } ~SpriteParticle() override; protected: diff --git a/src/object/star.hpp b/src/object/star.hpp index 808ddf8052a..f019757707b 100644 --- a/src/object/star.hpp +++ b/src/object/star.hpp @@ -26,6 +26,7 @@ class Star final : public MovingSprite { public: Star(const Vector& pos, Direction direction = Direction::RIGHT, const std::string& custom_sprite = ""); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Star)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/sticky_object.hpp b/src/object/sticky_object.hpp index b276dfa5a36..13c7ed61316 100644 --- a/src/object/sticky_object.hpp +++ b/src/object/sticky_object.hpp @@ -31,6 +31,7 @@ class StickyObject : public MovingSprite int layer = LAYER_OBJECTS, CollisionGroup collision_group = COLGROUP_MOVING); StickyObject(const ReaderMapping& reader, const std::string& sprite_name, int layer = LAYER_OBJECTS, CollisionGroup collision_group = COLGROUP_MOVING); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(StickyObject)); } virtual void update(float dt_sec) override; @@ -80,6 +81,7 @@ class StickyBadguy : public BadGuy int layer = LAYER_OBJECTS, CollisionGroup collision_group = COLGROUP_MOVING); StickyBadguy(const ReaderMapping& reader, const std::string& sprite_name, int layer = LAYER_OBJECTS, CollisionGroup collision_group = COLGROUP_MOVING); + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(StickyBadguy)); } virtual void sticky_update(float dt_sec); diff --git a/src/object/text_array_object.hpp b/src/object/text_array_object.hpp index bfbd8320ea6..81f49a68750 100644 --- a/src/object/text_array_object.hpp +++ b/src/object/text_array_object.hpp @@ -56,6 +56,7 @@ class TextArrayObject final : public GameObject virtual std::string get_exposed_class_name() const override { return "TextArrayObject"; } static std::string display_name() { return _("Text array"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(TextArrayObject)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/textarray.png"; diff --git a/src/object/text_object.hpp b/src/object/text_object.hpp index 33396c4cc33..70184ea3a56 100644 --- a/src/object/text_object.hpp +++ b/src/object/text_object.hpp @@ -51,6 +51,7 @@ class TextObject final : public GameObject virtual std::string get_exposed_class_name() const override { return "TextObject"; } static std::string display_name() { return _("Text"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(TextObject)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/textarray.png"; } diff --git a/src/object/textscroller.hpp b/src/object/textscroller.hpp index 1a15e5ae30c..d484c4fe78b 100644 --- a/src/object/textscroller.hpp +++ b/src/object/textscroller.hpp @@ -44,6 +44,7 @@ class TextScroller : public GameObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Text Scroller"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(TextScroller)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/textscroller.png"; } void set_default_speed(float default_speed); diff --git a/src/object/thunderstorm.hpp b/src/object/thunderstorm.hpp index 0c888df48e1..50b71184a71 100644 --- a/src/object/thunderstorm.hpp +++ b/src/object/thunderstorm.hpp @@ -51,6 +51,7 @@ class Thunderstorm final : public GameObject virtual std::string get_exposed_class_name() const override { return "Thunderstorm"; } static std::string display_name() { return _("Thunderstorm"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Thunderstorm)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/tilemap.hpp b/src/object/tilemap.hpp index 332b52c3ec2..e2acdff847e 100644 --- a/src/object/tilemap.hpp +++ b/src/object/tilemap.hpp @@ -65,6 +65,7 @@ class TileMap final : public GameObject, virtual const std::string get_icon_path() const override { return "images/engine/editor/tilemap.png"; } static std::string display_name() { return _("Tilemap"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(TileMap)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/torch.hpp b/src/object/torch.hpp index ea24ad4ac41..377f5ae6d38 100644 --- a/src/object/torch.hpp +++ b/src/object/torch.hpp @@ -46,6 +46,7 @@ class Torch final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "Torch"; } static std::string display_name() { return _("Torch"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Torch)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/trampoline.hpp b/src/object/trampoline.hpp index 910fa118258..29b6cfebfb5 100644 --- a/src/object/trampoline.hpp +++ b/src/object/trampoline.hpp @@ -36,6 +36,7 @@ class Trampoline final : public Rock virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Trampoline"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Rock::get_class_types().add(typeid(Trampoline)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/object/unstable_tile.hpp b/src/object/unstable_tile.hpp index b5af23dd308..313a226ece1 100644 --- a/src/object/unstable_tile.hpp +++ b/src/object/unstable_tile.hpp @@ -41,6 +41,7 @@ class UnstableTile final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Unstable Tile"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(UnstableTile)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/object/vertical_stripes.hpp b/src/object/vertical_stripes.hpp index 79535fda9ac..b789d754af3 100644 --- a/src/object/vertical_stripes.hpp +++ b/src/object/vertical_stripes.hpp @@ -28,6 +28,8 @@ class VerticalStripes final : public GameObject VerticalStripes(); ~VerticalStripes() override; + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(VerticalStripes)); } + virtual bool is_singleton() const override { return true; } virtual bool is_saveable() const override { return false; } virtual void update(float dt_sec) override; diff --git a/src/object/water_drop.hpp b/src/object/water_drop.hpp index 5f7cd70eedd..0949b7f83fd 100644 --- a/src/object/water_drop.hpp +++ b/src/object/water_drop.hpp @@ -27,6 +27,8 @@ class WaterDrop final : public MovingSprite public: WaterDrop(const Vector& pos, const std::string& sprite_path_, const Vector& velocity); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(WaterDrop)); } + virtual void update(float dt_sec) override; virtual void collision_solid(const CollisionHit& hit) override; virtual HitResponse collision(GameObject& other, const CollisionHit& ) override; diff --git a/src/object/weak_block.hpp b/src/object/weak_block.hpp index 865c97e9a99..8c9f5724f54 100644 --- a/src/object/weak_block.hpp +++ b/src/object/weak_block.hpp @@ -35,6 +35,7 @@ class WeakBlock final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Weak Tile"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(WeakBlock)); } std::vector get_patches() const override; void update_version() override; diff --git a/src/object/wind.hpp b/src/object/wind.hpp index bbc5ae21c1f..2eb5562d710 100644 --- a/src/object/wind.hpp +++ b/src/object/wind.hpp @@ -42,6 +42,7 @@ class Wind final : public MovingObject virtual std::string get_exposed_class_name() const override { return "Wind"; } static std::string display_name() { return _("Wind"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Wind)); } virtual ObjectSettings get_settings() override; diff --git a/src/supertux/game_object.cpp b/src/supertux/game_object.cpp index 187ba06b4d2..8f54d5dd4cd 100644 --- a/src/supertux/game_object.cpp +++ b/src/supertux/game_object.cpp @@ -109,6 +109,14 @@ GameObject::save() return save_stream.str(); } +GameObjectClasses +GameObject::get_class_types() const { + GameObjectClasses g{}; + // All class types except GameObject, since everything implements GameObject + // g.add(typeid(GameObject)); + return g; +} + ObjectSettings GameObject::get_settings() { diff --git a/src/supertux/game_object.hpp b/src/supertux/game_object.hpp index c8202d6f1a8..9c427d21e69 100644 --- a/src/supertux/game_object.hpp +++ b/src/supertux/game_object.hpp @@ -22,6 +22,7 @@ #include #include #include +#include #include "editor/object_settings.hpp" #include "supertux/game_object_component.hpp" @@ -47,6 +48,23 @@ struct GameObjectType }; typedef std::vector GameObjectTypes; +/** + A helper structure to list all the type_indexes of the classes in the + type hierarchy of a given class. This makes it easier to register e.g. + a MrIceblock in lists for MrIceBlock, WalkingBadguy, Badguy, Portable, + MovingSprite, MovingObject, and GameObject. + */ +struct GameObjectClasses +{ + std::vector types; + + GameObjectClasses& add(const std::type_info &info) { + std::type_index idx(info); + types.push_back(idx); + return *this; + } +}; + /** This class is responsible for: * Updating and drawing the object. This should happen in the update() and @@ -102,6 +120,9 @@ class GameObject : public ExposableClass * @description Returns the display name of the object, translated to the user's locale. */ virtual std::string get_display_name() const { return _("Unknown object"); } + /** List notable classes in inheritance hierarchy of class. This makes it possible + to efficiently look up all objects deriving from a particular intermediate class */ + virtual GameObjectClasses get_class_types() const; /** Version checking/updating, patch information */ virtual std::vector get_patches() const; diff --git a/src/supertux/game_object_iterator.hpp b/src/supertux/game_object_iterator.hpp index d16757434f0..1bef5e52390 100644 --- a/src/supertux/game_object_iterator.hpp +++ b/src/supertux/game_object_iterator.hpp @@ -25,7 +25,7 @@ template class GameObjectIterator { public: - typedef std::vector >::const_iterator Iterator; + typedef std::vector::const_iterator Iterator; public: GameObjectIterator(Iterator it, Iterator end) : @@ -35,24 +35,28 @@ class GameObjectIterator { if (m_it != m_end) { - m_object = dynamic_cast(m_it->get()); - if (!m_object) - { - skip_to_next(); - } + // A dynamic_cast is needed to perform sidecasts (a.k.a. crosscasts) + // T may be one of multiple base classes of the object and need not inherit GameObject + m_object = dynamic_cast(*m_it); + assert(m_object); } } GameObjectIterator& operator++() { - skip_to_next(); + ++m_it; + if (m_it != m_end) + { + m_object = dynamic_cast(*m_it); + assert(m_object); + } return *this; } GameObjectIterator operator++(int) { GameObjectIterator tmp(*this); - skip_to_next(); + operator++(); return tmp; } @@ -82,24 +86,6 @@ class GameObjectIterator return !(*this == other); } -private: - void skip_to_next() - { - do - { - ++m_it; - if (m_it == m_end) - { - break; - } - else - { - m_object = dynamic_cast(m_it->get()); - } - } - while (!m_object); - } - private: Iterator m_it; Iterator m_end; @@ -115,11 +101,13 @@ class GameObjectRange {} GameObjectIterator begin() const { - return GameObjectIterator(m_manager.get_objects().begin(), m_manager.get_objects().end()); + auto& objects = m_manager.get_objects_by_type_index(typeid(T)); + return GameObjectIterator(objects.begin(), objects.end()); } GameObjectIterator end() const { - return GameObjectIterator(m_manager.get_objects().end(), m_manager.get_objects().end()); + auto& objects = m_manager.get_objects_by_type_index(typeid(T)); + return GameObjectIterator(objects.end(), objects.end()); } private: diff --git a/src/supertux/game_object_manager.cpp b/src/supertux/game_object_manager.cpp index f272a9f75a7..0226a1a60a0 100644 --- a/src/supertux/game_object_manager.cpp +++ b/src/supertux/game_object_manager.cpp @@ -483,7 +483,9 @@ GameObjectManager::this_before_object_add(GameObject& object) } { // By type index: - m_objects_by_type_index[std::type_index(typeid(object))].push_back(&object); + for (const std::type_index& type : object.get_class_types().types) { + m_objects_by_type_index[type].push_back(&object); + } } save_object_change(object, true); @@ -507,10 +509,12 @@ GameObjectManager::this_before_object_remove(GameObject& object) } { // By type index: - auto& vec = m_objects_by_type_index[std::type_index(typeid(object))]; - auto it = std::find(vec.begin(), vec.end(), &object); - assert(it != vec.end()); - vec.erase(it); + for (const std::type_index& type : object.get_class_types().types) { + auto& vec = m_objects_by_type_index[type]; + auto it = std::find(vec.begin(), vec.end(), &object); + assert(it != vec.end()); + vec.erase(it); + } } } diff --git a/src/supertux/game_object_manager.hpp b/src/supertux/game_object_manager.hpp index 601918b85fc..07a79f77dba 100644 --- a/src/supertux/game_object_manager.hpp +++ b/src/supertux/game_object_manager.hpp @@ -243,8 +243,8 @@ class GameObjectManager : public ExposableClass int get_object_count(std::function predicate = nullptr) const { int total = 0; - for (const auto& obj : m_gameobjects) { - auto object = dynamic_cast(obj.get()); + for (const auto& obj : get_objects_by_type_index(typeid(T))) { + auto object = static_cast(obj); if (object && (predicate == nullptr || predicate(*object))) { total += 1; diff --git a/src/supertux/moving_object.hpp b/src/supertux/moving_object.hpp index bc5e8a1cbe5..1872470b228 100644 --- a/src/supertux/moving_object.hpp +++ b/src/supertux/moving_object.hpp @@ -46,6 +46,7 @@ class MovingObject : public GameObject, MovingObject(); MovingObject(const ReaderMapping& reader); ~MovingObject() override; + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(MovingObject)); } virtual void collision_solid(const CollisionHit& /*hit*/) override { diff --git a/src/supertux/player_status_hud.hpp b/src/supertux/player_status_hud.hpp index 0315f532001..3bcc649eef0 100644 --- a/src/supertux/player_status_hud.hpp +++ b/src/supertux/player_status_hud.hpp @@ -34,6 +34,7 @@ class PlayerStatusHUD : public GameObject public: PlayerStatusHUD(PlayerStatus& player_status); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(PlayerStatusHUD)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/trigger/climbable.hpp b/src/trigger/climbable.hpp index c3214b61d4f..6ef3bffcaa9 100644 --- a/src/trigger/climbable.hpp +++ b/src/trigger/climbable.hpp @@ -46,6 +46,7 @@ class Climbable final : public Trigger static std::string display_name() { return _("Climbable"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } + virtual GameObjectClasses get_class_types() const override { return Trigger::get_class_types().add(typeid(Climbable)); } virtual ObjectSettings get_settings() override; diff --git a/src/trigger/door.hpp b/src/trigger/door.hpp index fe363954944..7b095c33157 100644 --- a/src/trigger/door.hpp +++ b/src/trigger/door.hpp @@ -30,6 +30,7 @@ class Door final : public SpritedTrigger virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Door"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return SpritedTrigger::get_class_types().add(typeid(Door)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/trigger/scripttrigger.hpp b/src/trigger/scripttrigger.hpp index 538990e8752..6b3276346b7 100644 --- a/src/trigger/scripttrigger.hpp +++ b/src/trigger/scripttrigger.hpp @@ -29,6 +29,7 @@ class ScriptTrigger final : public Trigger static std::string display_name() { return _("Script Trigger"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } + virtual GameObjectClasses get_class_types() const override { return Trigger::get_class_types().add(typeid(ScriptTrigger)); } virtual ObjectSettings get_settings() override; diff --git a/src/trigger/secretarea_trigger.hpp b/src/trigger/secretarea_trigger.hpp index a32a237b5bb..8473b06da0f 100644 --- a/src/trigger/secretarea_trigger.hpp +++ b/src/trigger/secretarea_trigger.hpp @@ -36,6 +36,7 @@ class SecretAreaTrigger final : public Trigger static std::string display_name() { return _("Secret Area"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } + virtual GameObjectClasses get_class_types() const override { return Trigger::get_class_types().add(typeid(SecretAreaTrigger)); } virtual ObjectSettings get_settings() override; diff --git a/src/trigger/sequence_trigger.hpp b/src/trigger/sequence_trigger.hpp index 4de2fcb446b..fdbd44cb04b 100644 --- a/src/trigger/sequence_trigger.hpp +++ b/src/trigger/sequence_trigger.hpp @@ -31,6 +31,7 @@ class SequenceTrigger final : public Trigger static std::string display_name() { return _("Sequence Trigger"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } + virtual GameObjectClasses get_class_types() const override { return Trigger::get_class_types().add(typeid(SequenceTrigger)); } virtual ObjectSettings get_settings() override; diff --git a/src/trigger/switch.hpp b/src/trigger/switch.hpp index 0a09d06eb73..a83e267d799 100644 --- a/src/trigger/switch.hpp +++ b/src/trigger/switch.hpp @@ -29,6 +29,7 @@ class Switch final : public StickyTrigger virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Switch"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return StickyTrigger::get_class_types().add(typeid(Switch)); } virtual ObjectSettings get_settings() override; diff --git a/src/trigger/text_area.hpp b/src/trigger/text_area.hpp index 0c0b3d9df31..e652afd2bc8 100644 --- a/src/trigger/text_area.hpp +++ b/src/trigger/text_area.hpp @@ -47,6 +47,7 @@ class TextArea final : public Trigger static std::string display_name() { return _("Text Area"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } + virtual GameObjectClasses get_class_types() const override { return Trigger::get_class_types().add(typeid(TextArea)); } private: bool m_once; diff --git a/src/trigger/trigger_base.hpp b/src/trigger/trigger_base.hpp index 211df6fdc28..681458f0cf4 100644 --- a/src/trigger/trigger_base.hpp +++ b/src/trigger/trigger_base.hpp @@ -68,6 +68,7 @@ class Trigger : public MovingObject, { public: Trigger(const ReaderMapping& reader); + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Trigger)); } virtual void update(float) override { @@ -91,6 +92,7 @@ class SpritedTrigger : public MovingSprite, { public: SpritedTrigger(const ReaderMapping& reader, const std::string& sprite_name); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(SpritedTrigger)); } virtual void update(float) override { @@ -112,6 +114,7 @@ class StickyTrigger : public StickyObject, { public: StickyTrigger(const ReaderMapping& reader, const std::string& sprite_name); + virtual GameObjectClasses get_class_types() const override { return StickyObject::get_class_types().add(typeid(StickyTrigger)); } virtual void update(float dt_sec) override { diff --git a/src/worldmap/level_tile.hpp b/src/worldmap/level_tile.hpp index 66e20c1337f..59cc80a7539 100644 --- a/src/worldmap/level_tile.hpp +++ b/src/worldmap/level_tile.hpp @@ -35,6 +35,7 @@ class LevelTile final : public WorldMapObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Level"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WorldMapObject::get_class_types().add(typeid(LevelTile)); } virtual ObjectSettings get_settings() override; diff --git a/src/worldmap/spawn_point.hpp b/src/worldmap/spawn_point.hpp index 3a664a1a48a..108eaa915d7 100644 --- a/src/worldmap/spawn_point.hpp +++ b/src/worldmap/spawn_point.hpp @@ -57,6 +57,7 @@ class SpawnPointObject final : public WorldMapObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Spawn point"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WorldMapObject::get_class_types().add(typeid(SpawnPointObject)); } virtual ObjectSettings get_settings() override; diff --git a/src/worldmap/special_tile.hpp b/src/worldmap/special_tile.hpp index fab8de59fca..902d37c835c 100644 --- a/src/worldmap/special_tile.hpp +++ b/src/worldmap/special_tile.hpp @@ -35,6 +35,7 @@ class SpecialTile final : public WorldMapObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Special Tile"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WorldMapObject::get_class_types().add(typeid(SpecialTile)); } virtual void draw_worldmap(DrawingContext& context) override; diff --git a/src/worldmap/sprite_change.hpp b/src/worldmap/sprite_change.hpp index e889b681066..4fa4fda3292 100644 --- a/src/worldmap/sprite_change.hpp +++ b/src/worldmap/sprite_change.hpp @@ -34,6 +34,7 @@ class SpriteChange final : public WorldMapObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Sprite Change"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WorldMapObject::get_class_types().add(typeid(SpriteChange)); } virtual void draw_worldmap(DrawingContext& context) override; diff --git a/src/worldmap/teleporter.hpp b/src/worldmap/teleporter.hpp index b35b43e6aa4..39c7ec8253e 100644 --- a/src/worldmap/teleporter.hpp +++ b/src/worldmap/teleporter.hpp @@ -33,6 +33,7 @@ class Teleporter final : public WorldMapObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Teleporter"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WorldMapObject::get_class_types().add(typeid(Teleporter)); } virtual ObjectSettings get_settings() override; diff --git a/src/worldmap/tux.hpp b/src/worldmap/tux.hpp index 60031875974..4347fd3d1ac 100644 --- a/src/worldmap/tux.hpp +++ b/src/worldmap/tux.hpp @@ -39,6 +39,7 @@ class Tux final : public GameObject virtual void draw(DrawingContext& context) override; virtual void update(float dt_sec) override; virtual bool is_singleton() const override { return true; } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Tux)); } void setup(); /**< called prior to first update */ diff --git a/src/worldmap/worldmap_object.hpp b/src/worldmap/worldmap_object.hpp index 7d60963f188..9803e576d0a 100644 --- a/src/worldmap/worldmap_object.hpp +++ b/src/worldmap/worldmap_object.hpp @@ -36,6 +36,7 @@ class WorldMapObject : public MovingSprite WorldMapObject(const ReaderMapping& mapping, const std::string& default_sprite); WorldMapObject(const ReaderMapping& mapping); WorldMapObject(const Vector& pos, const std::string& default_sprite); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(WorldMapObject)); } static std::string class_name() { return "worldmap-object"; } virtual std::string get_class_name() const override { return class_name(); } From 31dc707893b9beb3d9990e470ea3b80f917eafbb Mon Sep 17 00:00:00 2001 From: bruhmoent <69918580+bruhmoent@users.noreply.github.com> Date: Sun, 7 Jul 2024 14:31:31 +0200 Subject: [PATCH 02/33] Add an option to hide wind particles + set fancy as default (#2997) --- src/object/wind.cpp | 23 ++++++++++++----------- src/object/wind.hpp | 1 + 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/object/wind.cpp b/src/object/wind.cpp index b446c005243..f69c71be5fd 100644 --- a/src/object/wind.cpp +++ b/src/object/wind.cpp @@ -42,7 +42,8 @@ Wind::Wind(const ReaderMapping& reader) : affects_badguys(), affects_objects(), affects_player(), - fancy_wind() + fancy_wind(true), + particles_enabled(true) { float w,h; reader.get("x", m_col.m_bbox.get_left(), 0.0f); @@ -62,7 +63,8 @@ Wind::Wind(const ReaderMapping& reader) : reader.get("affects-objects", affects_objects, false); reader.get("affects-player", affects_player, true); - reader.get("fancy-wind", fancy_wind, false); + reader.get("fancy-wind", fancy_wind, true); + reader.get("particles-enabled", particles_enabled, true); set_group(COLGROUP_TOUCHABLE); } @@ -75,8 +77,6 @@ Wind::get_settings() ObjectSettings result = MovingObject::get_settings(); - //result.add_float("width", &new_size.x, "width", OPTION_HIDDEN); - //result.add_float("height", &new_size.y, "height", OPTION_HIDDEN); result.add_float(_("Speed X"), &speed.x, "speed-x"); result.add_float(_("Speed Y"), &speed.y, "speed-y"); result.add_float(_("Acceleration"), &acceleration, "acceleration"); @@ -84,9 +84,10 @@ Wind::get_settings() result.add_bool(_("Affects Badguys"), &affects_badguys, "affects-badguys", false); result.add_bool(_("Affects Objects"), &affects_objects, "affects-objects", false); result.add_bool(_("Affects Player"), &affects_player, "affects-player"); - result.add_bool(_("Fancy Particles"), &fancy_wind, "fancy-wind", false); + result.add_bool(_("Fancy Particles"), &fancy_wind, "fancy-wind", true); + result.add_bool(_("Particles Enabled"), &particles_enabled, "particles-enabled", true); - result.reorder({"blowing", "speed-x", "speed-y", "acceleration", "affects-badguys", "affects-objects", "affects-player", "fancy-wind", "region", "name", "x", "y"}); + result.reorder({ "blowing", "speed-x", "speed-y", "acceleration", "affects-badguys", "affects-objects", "affects-player", "fancy-wind", "particles-enabled", "region", "name", "x", "y" }); return result; } @@ -96,17 +97,17 @@ Wind::update(float dt_sec_) { dt_sec = dt_sec_; - if (!blowing) return; + if (!blowing || !particles_enabled) return; if (m_col.m_bbox.get_width() <= 16 || m_col.m_bbox.get_height() <= 16) return; - Vector ppos = Vector(graphicsRandom.randf(m_col.m_bbox.get_left()+8, m_col.m_bbox.get_right()-8), graphicsRandom.randf(m_col.m_bbox.get_top()+8, m_col.m_bbox.get_bottom()-8)); - Vector pspeed = Vector(graphicsRandom.randf(speed.x-20, speed.x+20), graphicsRandom.randf(speed.y-20, speed.y+20)); + Vector ppos = Vector(graphicsRandom.randf(m_col.m_bbox.get_left() + 8, m_col.m_bbox.get_right() - 8), graphicsRandom.randf(m_col.m_bbox.get_top() + 8, m_col.m_bbox.get_bottom() - 8)); + Vector pspeed = Vector(graphicsRandom.randf(speed.x - 20, speed.x + 20), graphicsRandom.randf(speed.y - 20, speed.y + 20)); // TODO: Rotate sprite rather than just use 2 different actions // Approx. 1 particle per tile if (graphicsRandom.randf(0.f, 100.f) < (m_col.m_bbox.get_width() / 32.f) * (m_col.m_bbox.get_height() / 32.f)) { - // emit a particle + // Emit a particle if (fancy_wind) { Sector::get().add("images/particles/wind.sprite", (std::abs(speed.x) > std::abs(speed.y)) ? "default" : "flip", ppos, ANCHOR_MIDDLE, pspeed, Vector(0, 0), LAYER_BACKGROUNDTILES + 1); @@ -148,7 +149,7 @@ Wind::collision(GameObject& other, const CollisionHit& ) } else { - //When on ground, get blown slightly differently, but the max speed is less than it would be otherwise seen as we take "friction" into account + // When on ground, get blown slightly differently, but the max speed is less than it would be otherwise seen as we take "friction" into account player->add_velocity((Vector(speed.x, 0) * 0.1f) * (acceleration+1), (Vector(speed.x, speed.y) * 0.5f)); } } diff --git a/src/object/wind.hpp b/src/object/wind.hpp index 2eb5562d710..787850a70cb 100644 --- a/src/object/wind.hpp +++ b/src/object/wind.hpp @@ -71,6 +71,7 @@ class Wind final : public MovingObject bool affects_objects; /**< whether the wind can affect objects */ bool affects_player; /**< whether the wind can affect the player: useful for cinematic wind */ bool fancy_wind; + bool particles_enabled; private: Wind(const Wind&) = delete; From 47541beb0c416c62fce8cea20d31d7637ccdb19a Mon Sep 17 00:00:00 2001 From: Vankata453 <78196474+Vankata453@users.noreply.github.com> Date: Mon, 8 Jul 2024 14:38:55 +0300 Subject: [PATCH 03/33] Scripting docs: Do not omit last character of explanation In Doxygen version 1.9.1, used by the `scripting-update` workflow, there is not always an additional space added at the end of an `xrefdescription`. Additionally, the `scripting-update` workflow is now triggered on modifications to the scripting documentation generator. --- .github/workflows/scripting.yml | 1 + tools/scripting_docs_gen/parser.cpp | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/scripting.yml b/.github/workflows/scripting.yml index 9a89199a9ca..64c796115c8 100644 --- a/.github/workflows/scripting.yml +++ b/.github/workflows/scripting.yml @@ -21,6 +21,7 @@ on: branches: [ "master" ] paths: - src/* + - tools/scripting_docs_gen/* workflow_dispatch: jobs: diff --git a/tools/scripting_docs_gen/parser.cpp b/tools/scripting_docs_gen/parser.cpp index 547fc2cedac..460dbf6183f 100644 --- a/tools/scripting_docs_gen/parser.cpp +++ b/tools/scripting_docs_gen/parser.cpp @@ -418,8 +418,6 @@ void parse_xrefsect_desc(tinyxml2::XMLElement* p_xrefsect, std::string& dest) XMLTextReader read(dest); p_xrefsectdescpara->Accept(&read); } - - if (!dest.empty()) dest.pop_back(); // Remove space, added at the end } } // namespace Parser From 15a29c6c566c7918266aeb02708c1730f6473a99 Mon Sep 17 00:00:00 2001 From: Daniel W <39805490+weluvgoatz@users.noreply.github.com> Date: Mon, 8 Jul 2024 10:03:10 -0700 Subject: [PATCH 04/33] Revert "Index by base classes in GameObjectManager::m_objects_by_type_index (#2991)" This reverts commit df670e40169d118ba35735aacfea4313056dcf32. --- src/badguy/angrystone.hpp | 1 - src/badguy/badguy.hpp | 1 - src/badguy/bomb.hpp | 1 - src/badguy/bouncing_snowball.hpp | 1 - src/badguy/captainsnowball.hpp | 1 - src/badguy/corrupted_granito.hpp | 1 - src/badguy/corrupted_granito_big.hpp | 1 - src/badguy/crusher.hpp | 2 - src/badguy/crystallo.hpp | 1 - src/badguy/dart.hpp | 1 - src/badguy/darttrap.hpp | 1 - src/badguy/dispenser.hpp | 1 - src/badguy/dive_mine.hpp | 1 - src/badguy/fish_chasing.hpp | 1 - src/badguy/fish_harmless.hpp | 1 - src/badguy/fish_jumping.hpp | 1 - src/badguy/fish_swimming.hpp | 1 - src/badguy/flame.hpp | 1 - src/badguy/flyingsnowball.hpp | 1 - src/badguy/ghosttree.hpp | 1 - src/badguy/ghoul.hpp | 1 - src/badguy/goldbomb.hpp | 1 - src/badguy/granito.hpp | 1 - src/badguy/granito_big.hpp | 1 - src/badguy/granito_giant.hpp | 1 - src/badguy/haywire.hpp | 1 - src/badguy/igel.hpp | 1 - src/badguy/jumpy.hpp | 1 - src/badguy/kamikazesnowball.hpp | 2 - src/badguy/kugelblitz.hpp | 1 - src/badguy/livefire.hpp | 3 -- src/badguy/mole.hpp | 1 - src/badguy/mole_rock.hpp | 1 - src/badguy/mrbomb.hpp | 1 - src/badguy/mriceblock.hpp | 1 - src/badguy/mrtree.hpp | 1 - src/badguy/owl.hpp | 1 - src/badguy/plant.hpp | 1 - src/badguy/rcrystallo.hpp | 1 - src/badguy/root.hpp | 1 - src/badguy/root_sapling.hpp | 1 - src/badguy/scrystallo.hpp | 1 - src/badguy/short_fuse.hpp | 1 - src/badguy/skydive.hpp | 1 - src/badguy/smartball.hpp | 1 - src/badguy/smartblock.hpp | 1 - src/badguy/snail.hpp | 1 - src/badguy/snowball.hpp | 1 - src/badguy/snowman.hpp | 1 - src/badguy/spiky.hpp | 1 - src/badguy/sspiky.hpp | 1 - src/badguy/stalactite.hpp | 1 - src/badguy/stumpy.hpp | 1 - src/badguy/tarantula.hpp | 1 - src/badguy/toad.hpp | 1 - src/badguy/totem.hpp | 1 - src/badguy/treewillowisp.hpp | 1 - src/badguy/viciousivy.hpp | 1 - src/badguy/walking_badguy.hpp | 1 - src/badguy/walking_candle.hpp | 1 - src/badguy/walkingleaf.hpp | 1 - src/badguy/willowisp.hpp | 1 - src/badguy/yeti.hpp | 1 - src/badguy/yeti_stalactite.hpp | 1 - src/badguy/zeekling.hpp | 1 - src/editor/bezier_marker.hpp | 1 - src/editor/marker_object.hpp | 1 - src/editor/node_marker.hpp | 1 - src/editor/resize_marker.hpp | 1 - src/object/ambient_light.hpp | 1 - src/object/ambient_sound.hpp | 1 - src/object/background.hpp | 1 - src/object/bicycle_platform.hpp | 2 - src/object/block.hpp | 2 - src/object/bonus_block.hpp | 1 - src/object/bouncy_coin.hpp | 1 - src/object/brick.hpp | 2 - src/object/bullet.hpp | 2 - src/object/bumper.hpp | 1 - src/object/camera.hpp | 1 - src/object/candle.hpp | 1 - src/object/circleplatform.hpp | 1 - src/object/cloud_particle_system.hpp | 1 - src/object/coin.hpp | 2 - src/object/coin_explode.hpp | 1 - src/object/coin_rain.hpp | 1 - src/object/conveyor_belt.hpp | 1 - src/object/custom_particle_system.hpp | 1 - src/object/custom_particle_system_file.hpp | 1 - src/object/decal.hpp | 1 - src/object/display_effect.hpp | 1 - src/object/electrifier.hpp | 1 - src/object/endsequence.hpp | 1 - src/object/endsequence_fireworks.hpp | 1 - src/object/endsequence_walk.hpp | 1 - src/object/explosion.hpp | 1 - src/object/fallblock.hpp | 1 - src/object/falling_coin.hpp | 1 - src/object/firefly.hpp | 1 - src/object/fireworks.hpp | 1 - src/object/floating_image.hpp | 1 - src/object/floating_text.hpp | 2 - src/object/flower.hpp | 1 - src/object/ghost_particle_system.hpp | 1 - src/object/gradient.hpp | 1 - src/object/growup.hpp | 1 - src/object/hurting_platform.hpp | 1 - src/object/infoblock.hpp | 1 - src/object/invisible_block.hpp | 1 - src/object/invisible_wall.hpp | 1 - src/object/ispy.hpp | 1 - src/object/key.hpp | 1 - src/object/lantern.hpp | 1 - src/object/level_time.hpp | 1 - src/object/light.hpp | 2 - src/object/lit_object.hpp | 1 - src/object/magicblock.hpp | 1 - src/object/moving_sprite.hpp | 1 - src/object/music_object.hpp | 1 - src/object/oneup.hpp | 1 - src/object/particle_zone.hpp | 1 - src/object/particles.hpp | 1 - src/object/particlesystem.hpp | 1 - src/object/particlesystem_interactive.hpp | 1 - src/object/path_gameobject.hpp | 1 - src/object/platform.hpp | 1 - src/object/player.hpp | 1 - src/object/pneumatic_platform.hpp | 2 - src/object/powerup.hpp | 1 - src/object/pulsing_light.hpp | 1 - src/object/pushbutton.hpp | 1 - src/object/rain_particle_system.hpp | 1 - src/object/rainsplash.hpp | 1 - src/object/rock.hpp | 1 - src/object/rublight.hpp | 1 - src/object/rusty_trampoline.hpp | 1 - src/object/scripted_object.hpp | 1 - src/object/shard.hpp | 1 - src/object/smoke_cloud.hpp | 1 - src/object/snow_particle_system.hpp | 1 - src/object/sound_object.hpp | 1 - src/object/spawnpoint.hpp | 1 - src/object/specialriser.hpp | 1 - src/object/spotlight.hpp | 1 - src/object/sprite_particle.hpp | 1 - src/object/star.hpp | 1 - src/object/sticky_object.hpp | 2 - src/object/text_array_object.hpp | 1 - src/object/text_object.hpp | 1 - src/object/textscroller.hpp | 1 - src/object/thunderstorm.hpp | 1 - src/object/tilemap.hpp | 1 - src/object/torch.hpp | 1 - src/object/trampoline.hpp | 1 - src/object/unstable_tile.hpp | 1 - src/object/vertical_stripes.hpp | 2 - src/object/water_drop.hpp | 2 - src/object/weak_block.hpp | 1 - src/object/wind.hpp | 1 - src/supertux/game_object.cpp | 8 ---- src/supertux/game_object.hpp | 21 ----------- src/supertux/game_object_iterator.hpp | 44 ++++++++++++++-------- src/supertux/game_object_manager.cpp | 14 +++---- src/supertux/game_object_manager.hpp | 4 +- src/supertux/moving_object.hpp | 1 - src/supertux/player_status_hud.hpp | 1 - src/trigger/climbable.hpp | 1 - src/trigger/door.hpp | 1 - src/trigger/scripttrigger.hpp | 1 - src/trigger/secretarea_trigger.hpp | 1 - src/trigger/sequence_trigger.hpp | 1 - src/trigger/switch.hpp | 1 - src/trigger/text_area.hpp | 1 - src/trigger/trigger_base.hpp | 3 -- src/worldmap/level_tile.hpp | 1 - src/worldmap/spawn_point.hpp | 1 - src/worldmap/special_tile.hpp | 1 - src/worldmap/sprite_change.hpp | 1 - src/worldmap/teleporter.hpp | 1 - src/worldmap/tux.hpp | 1 - src/worldmap/worldmap_object.hpp | 1 - 181 files changed, 35 insertions(+), 249 deletions(-) diff --git a/src/badguy/angrystone.hpp b/src/badguy/angrystone.hpp index fec61367164..f5470e0aab1 100644 --- a/src/badguy/angrystone.hpp +++ b/src/badguy/angrystone.hpp @@ -38,7 +38,6 @@ class AngryStone final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Angry Stone"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(AngryStone)); } protected: virtual std::vector get_allowed_directions() const override; diff --git a/src/badguy/badguy.hpp b/src/badguy/badguy.hpp index 56382e33bb5..861998b81ae 100644 --- a/src/badguy/badguy.hpp +++ b/src/badguy/badguy.hpp @@ -68,7 +68,6 @@ class BadGuy : public MovingSprite, virtual std::string get_exposed_class_name() const override { return "BadGuy"; } static std::string display_name() { return _("Badguy"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Portable)).add(typeid(BadGuy)); } virtual std::string get_overlay_size() const { return "1x1"; } diff --git a/src/badguy/bomb.hpp b/src/badguy/bomb.hpp index 642914d57f7..5b4b9e24e91 100644 --- a/src/badguy/bomb.hpp +++ b/src/badguy/bomb.hpp @@ -25,7 +25,6 @@ class Bomb final : public BadGuy { public: Bomb(const Vector& pos, Direction dir, const std::string& custom_sprite = "images/creatures/mr_bomb/bomb.sprite" ); - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Bomb)); } virtual bool is_saveable() const override { return false; } diff --git a/src/badguy/bouncing_snowball.hpp b/src/badguy/bouncing_snowball.hpp index 45fd2f81700..3b65c5319a2 100644 --- a/src/badguy/bouncing_snowball.hpp +++ b/src/badguy/bouncing_snowball.hpp @@ -38,7 +38,6 @@ class BouncingSnowball final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Bouncing Snowball"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(BouncingSnowball)); } virtual GameObjectTypes get_types() const override; virtual std::string get_default_sprite_name() const override; diff --git a/src/badguy/captainsnowball.hpp b/src/badguy/captainsnowball.hpp index 70cde6961e5..9a295ef56aa 100644 --- a/src/badguy/captainsnowball.hpp +++ b/src/badguy/captainsnowball.hpp @@ -31,7 +31,6 @@ class CaptainSnowball final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Captain Snowball"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(CaptainSnowball)); } virtual bool is_snipable() const override { return true; } bool might_climb(int width, int height) const; diff --git a/src/badguy/corrupted_granito.hpp b/src/badguy/corrupted_granito.hpp index 977caa7848a..fcd266f901b 100644 --- a/src/badguy/corrupted_granito.hpp +++ b/src/badguy/corrupted_granito.hpp @@ -43,7 +43,6 @@ class CorruptedGranito final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Corrupted Granito"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(CorruptedGranito)); } virtual bool is_snipable() const override { return true; } virtual bool is_flammable() const override { return m_type != GRANITO; } diff --git a/src/badguy/corrupted_granito_big.hpp b/src/badguy/corrupted_granito_big.hpp index c1723a54fd4..e007e35d8a4 100644 --- a/src/badguy/corrupted_granito_big.hpp +++ b/src/badguy/corrupted_granito_big.hpp @@ -34,7 +34,6 @@ class CorruptedGranitoBig final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Corrupted Big Granito"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(CorruptedGranitoBig)); } virtual bool is_snipable() const override { return false; } virtual bool is_freezable() const override { return false; } diff --git a/src/badguy/crusher.hpp b/src/badguy/crusher.hpp index a0dd52a3c91..ad186509d29 100644 --- a/src/badguy/crusher.hpp +++ b/src/badguy/crusher.hpp @@ -70,7 +70,6 @@ class Crusher final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Crusher"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Crusher)); } virtual ObjectSettings get_settings() override; GameObjectTypes get_types() const override; @@ -116,7 +115,6 @@ class CrusherRoot : public MovingSprite { public: CrusherRoot(Vector position, Crusher::Direction direction, float delay, int layer); - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(CrusherRoot)); } virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; virtual void update(float dt_sec) override; diff --git a/src/badguy/crystallo.hpp b/src/badguy/crystallo.hpp index 00913e7362e..7389f646060 100644 --- a/src/badguy/crystallo.hpp +++ b/src/badguy/crystallo.hpp @@ -32,7 +32,6 @@ class Crystallo final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Crystallo"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Crystallo)); } virtual void active_update(float dt_sec) override; virtual bool is_flammable() const override; diff --git a/src/badguy/dart.hpp b/src/badguy/dart.hpp index e5cfc99bb58..ae3ba35d909 100644 --- a/src/badguy/dart.hpp +++ b/src/badguy/dart.hpp @@ -43,7 +43,6 @@ class Dart final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Dart"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Dart)); } virtual bool is_flammable() const override; diff --git a/src/badguy/darttrap.hpp b/src/badguy/darttrap.hpp index 69ffb1aaca9..42bab088aa4 100644 --- a/src/badguy/darttrap.hpp +++ b/src/badguy/darttrap.hpp @@ -34,7 +34,6 @@ class DartTrap final : public StickyBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Dart Trap"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return StickyBadguy::get_class_types().add(typeid(DartTrap)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override; diff --git a/src/badguy/dispenser.hpp b/src/badguy/dispenser.hpp index a68e45d68f8..48ea925313e 100644 --- a/src/badguy/dispenser.hpp +++ b/src/badguy/dispenser.hpp @@ -66,7 +66,6 @@ class Dispenser final : public BadGuy virtual std::string get_exposed_class_name() const override { return "Dispenser"; } static std::string display_name() { return _("Dispenser"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Dispenser)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override; diff --git a/src/badguy/dive_mine.hpp b/src/badguy/dive_mine.hpp index bb4c122d583..7e71dec6cb1 100644 --- a/src/badguy/dive_mine.hpp +++ b/src/badguy/dive_mine.hpp @@ -49,7 +49,6 @@ class DiveMine final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Dive Mine"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(DiveMine)); } protected: virtual std::vector get_allowed_directions() const override; diff --git a/src/badguy/fish_chasing.hpp b/src/badguy/fish_chasing.hpp index 0dcfbe7d310..a7ce8661e9c 100644 --- a/src/badguy/fish_chasing.hpp +++ b/src/badguy/fish_chasing.hpp @@ -33,7 +33,6 @@ class FishChasing final : public FishSwimming static std::string display_name() { return _("Chasing Fish"); } virtual std::string get_display_name() const override { return display_name(); } virtual std::string get_overlay_size() const override { return "2x2"; } - virtual GameObjectClasses get_class_types() const override { return FishSwimming::get_class_types().add(typeid(FishChasing)); } virtual ObjectSettings get_settings() override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/fish_harmless.hpp b/src/badguy/fish_harmless.hpp index fd1f777cede..58895c3954e 100644 --- a/src/badguy/fish_harmless.hpp +++ b/src/badguy/fish_harmless.hpp @@ -29,7 +29,6 @@ class FishHarmless final : public FishSwimming virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Harmless Fish"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return FishSwimming::get_class_types().add(typeid(FishHarmless)); } virtual std::string get_overlay_size() const override { return "1x1"; } GameObjectTypes get_types() const override { return {}; } diff --git a/src/badguy/fish_jumping.hpp b/src/badguy/fish_jumping.hpp index 99cf62ea851..ed97fe28182 100644 --- a/src/badguy/fish_jumping.hpp +++ b/src/badguy/fish_jumping.hpp @@ -40,7 +40,6 @@ class FishJumping final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Jumping Fish"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(FishJumping)); } protected: virtual std::vector get_allowed_directions() const override; diff --git a/src/badguy/fish_swimming.hpp b/src/badguy/fish_swimming.hpp index cecce233060..5b9efe76c41 100644 --- a/src/badguy/fish_swimming.hpp +++ b/src/badguy/fish_swimming.hpp @@ -40,7 +40,6 @@ class FishSwimming : public BadGuy static std::string display_name() { return _("Swimming Fish"); } virtual std::string get_display_name() const override { return display_name(); } virtual std::string get_overlay_size() const override { return "2x1"; } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(FishSwimming)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override; diff --git a/src/badguy/flame.hpp b/src/badguy/flame.hpp index 0b4f10aab0e..f1dcce809c0 100644 --- a/src/badguy/flame.hpp +++ b/src/badguy/flame.hpp @@ -46,7 +46,6 @@ class Flame final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Flame"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Flame)); } virtual void stop_looping_sounds() override; virtual void play_looping_sounds() override; diff --git a/src/badguy/flyingsnowball.hpp b/src/badguy/flyingsnowball.hpp index 206b9084f73..6665ce29ab6 100644 --- a/src/badguy/flyingsnowball.hpp +++ b/src/badguy/flyingsnowball.hpp @@ -32,7 +32,6 @@ class FlyingSnowBall final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Flying Snowball"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(FlyingSnowBall)); } virtual bool is_snipable() const override { return true; } protected: diff --git a/src/badguy/ghosttree.hpp b/src/badguy/ghosttree.hpp index b30e371cbab..caad21d9ca9 100644 --- a/src/badguy/ghosttree.hpp +++ b/src/badguy/ghosttree.hpp @@ -42,7 +42,6 @@ class GhostTree final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Ghost Tree"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(GhostTree)); } virtual void on_flip(float height) override; diff --git a/src/badguy/ghoul.hpp b/src/badguy/ghoul.hpp index a580538bc9b..4227a902d57 100644 --- a/src/badguy/ghoul.hpp +++ b/src/badguy/ghoul.hpp @@ -30,7 +30,6 @@ class Ghoul final : public BadGuy, static std::string display_name() { return _("Ghoul"); } std::string get_class_name() const override { return class_name(); } std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Ghoul)); } bool is_freezable() const override; bool is_flammable() const override; virtual bool is_snipable() const override { return true; } diff --git a/src/badguy/goldbomb.hpp b/src/badguy/goldbomb.hpp index f33ef1bfa29..c9e56f0d2a2 100644 --- a/src/badguy/goldbomb.hpp +++ b/src/badguy/goldbomb.hpp @@ -49,7 +49,6 @@ class GoldBomb final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Gold Bomb"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(GoldBomb)); } virtual bool is_snipable() const override { return true; } virtual void stop_looping_sounds() override; diff --git a/src/badguy/granito.hpp b/src/badguy/granito.hpp index a009a959ad8..ae4b360249b 100644 --- a/src/badguy/granito.hpp +++ b/src/badguy/granito.hpp @@ -51,7 +51,6 @@ class Granito : public WalkingBadguy virtual std::string get_exposed_class_name() const override { return "Granito"; } static std::string display_name() { return _("Granito"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Granito)); } virtual bool is_snipable() const override { return false; } virtual bool is_freezable() const override { return false; } diff --git a/src/badguy/granito_big.hpp b/src/badguy/granito_big.hpp index 7d6f6467e16..44e8749b86a 100644 --- a/src/badguy/granito_big.hpp +++ b/src/badguy/granito_big.hpp @@ -43,7 +43,6 @@ class GranitoBig final : public Granito virtual std::string get_exposed_class_name() const override { return "GranitoBig"; } static std::string display_name() { return _("Big Granito"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return Granito::get_class_types().add(typeid(GranitoBig)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override; diff --git a/src/badguy/granito_giant.hpp b/src/badguy/granito_giant.hpp index aebe7c34658..a3df651eab2 100644 --- a/src/badguy/granito_giant.hpp +++ b/src/badguy/granito_giant.hpp @@ -31,7 +31,6 @@ class GranitoGiant final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Giant Granito"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(GranitoGiant)); } virtual void kill_fall() override; diff --git a/src/badguy/haywire.hpp b/src/badguy/haywire.hpp index e0280b8db7a..bca973206a4 100644 --- a/src/badguy/haywire.hpp +++ b/src/badguy/haywire.hpp @@ -45,7 +45,6 @@ class Haywire final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Haywire"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Haywire)); } virtual bool is_snipable() const override { return true; } inline bool is_exploding() const { return m_is_exploding; } diff --git a/src/badguy/igel.hpp b/src/badguy/igel.hpp index 70039c4f4d8..0aef788a590 100644 --- a/src/badguy/igel.hpp +++ b/src/badguy/igel.hpp @@ -38,7 +38,6 @@ class Igel final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Igel"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Igel)); } virtual bool is_freezable() const override { return true; } virtual void unfreeze(bool melt = true) override; diff --git a/src/badguy/jumpy.hpp b/src/badguy/jumpy.hpp index f8378833679..07bf84a9771 100644 --- a/src/badguy/jumpy.hpp +++ b/src/badguy/jumpy.hpp @@ -39,7 +39,6 @@ class Jumpy final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Jumpy"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Jumpy)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/kamikazesnowball.hpp b/src/badguy/kamikazesnowball.hpp index 1c279813740..fdcb5da4149 100644 --- a/src/badguy/kamikazesnowball.hpp +++ b/src/badguy/kamikazesnowball.hpp @@ -33,7 +33,6 @@ class KamikazeSnowball : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Kamikaze Snowball"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(KamikazeSnowball)); } virtual bool is_snipable() const override { return true; } protected: @@ -64,7 +63,6 @@ class LeafShot final : public KamikazeSnowball virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Leafshot"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return KamikazeSnowball::get_class_types().add(typeid(LeafShot)); } virtual bool is_snipable() const override { return true; } diff --git a/src/badguy/kugelblitz.hpp b/src/badguy/kugelblitz.hpp index 6dea704955d..a3fee55dc97 100644 --- a/src/badguy/kugelblitz.hpp +++ b/src/badguy/kugelblitz.hpp @@ -39,7 +39,6 @@ class Kugelblitz final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Kugelblitz"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Kugelblitz)); } void explode(); diff --git a/src/badguy/livefire.hpp b/src/badguy/livefire.hpp index 29331628c1f..3eae46303c5 100644 --- a/src/badguy/livefire.hpp +++ b/src/badguy/livefire.hpp @@ -37,7 +37,6 @@ class LiveFire : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Walking Flame"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(LiveFire)); } private: std::string death_sound; @@ -71,7 +70,6 @@ class LiveFireAsleep final : public LiveFire virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Sleeping Flame"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return LiveFire::get_class_types().add(typeid(LiveFireAsleep)); } private: LiveFireAsleep(const LiveFireAsleep&) = delete; @@ -90,7 +88,6 @@ class LiveFireDormant final : public LiveFire virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Dormant Flame"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return LiveFire::get_class_types().add(typeid(LiveFireDormant)); } private: LiveFireDormant(const LiveFireDormant&) = delete; diff --git a/src/badguy/mole.hpp b/src/badguy/mole.hpp index 07d808cf692..30a8de7c5d8 100644 --- a/src/badguy/mole.hpp +++ b/src/badguy/mole.hpp @@ -37,7 +37,6 @@ class Mole final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mole"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Mole)); } virtual bool is_snipable() const override { return true; } diff --git a/src/badguy/mole_rock.hpp b/src/badguy/mole_rock.hpp index e9c378aa700..b472e05bd4e 100644 --- a/src/badguy/mole_rock.hpp +++ b/src/badguy/mole_rock.hpp @@ -43,7 +43,6 @@ class MoleRock final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mole's rock"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(MoleRock)); } protected: const BadGuy* parent; /**< collisions with this BadGuy will be ignored */ diff --git a/src/badguy/mrbomb.hpp b/src/badguy/mrbomb.hpp index 914251e92f9..b4f6c221cdd 100644 --- a/src/badguy/mrbomb.hpp +++ b/src/badguy/mrbomb.hpp @@ -39,7 +39,6 @@ class MrBomb final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mr. Bomb"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(MrBomb)); } virtual bool is_snipable() const override { return true; } GameObjectTypes get_types() const override; diff --git a/src/badguy/mriceblock.hpp b/src/badguy/mriceblock.hpp index 7b84e4ba1b5..b8f5ce8ee43 100644 --- a/src/badguy/mriceblock.hpp +++ b/src/badguy/mriceblock.hpp @@ -48,7 +48,6 @@ class MrIceBlock : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mr. Iceblock"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(MrIceBlock)); } virtual bool is_snipable() const override { return ice_state != ICESTATE_KICKED; } virtual bool is_freezable() const override; diff --git a/src/badguy/mrtree.hpp b/src/badguy/mrtree.hpp index 21856013658..24250aa09fc 100644 --- a/src/badguy/mrtree.hpp +++ b/src/badguy/mrtree.hpp @@ -31,7 +31,6 @@ class MrTree final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mr. Tree"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(MrTree)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/owl.hpp b/src/badguy/owl.hpp index 4ec6e31584e..3571d6248fd 100644 --- a/src/badguy/owl.hpp +++ b/src/badguy/owl.hpp @@ -44,7 +44,6 @@ class Owl final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Owl"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Owl)); } virtual ObjectSettings get_settings() override; virtual bool is_snipable() const override { return true; } diff --git a/src/badguy/plant.hpp b/src/badguy/plant.hpp index 2478a12b30b..8f8136d474d 100644 --- a/src/badguy/plant.hpp +++ b/src/badguy/plant.hpp @@ -33,7 +33,6 @@ class Plant final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Plant"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Plant)); } protected: enum PlantState { diff --git a/src/badguy/rcrystallo.hpp b/src/badguy/rcrystallo.hpp index b47ea645463..0c6f2faedc8 100644 --- a/src/badguy/rcrystallo.hpp +++ b/src/badguy/rcrystallo.hpp @@ -32,7 +32,6 @@ class RCrystallo final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Roof Crystallo"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(RCrystallo)); } virtual void active_update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/badguy/root.hpp b/src/badguy/root.hpp index ec727246773..c2a8903480a 100644 --- a/src/badguy/root.hpp +++ b/src/badguy/root.hpp @@ -38,7 +38,6 @@ class Root final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Root"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Root)); } virtual bool is_flammable() const override { return false; } virtual bool is_freezable() const override { return false; } diff --git a/src/badguy/root_sapling.hpp b/src/badguy/root_sapling.hpp index 2de801170f8..6d30bea8c66 100644 --- a/src/badguy/root_sapling.hpp +++ b/src/badguy/root_sapling.hpp @@ -40,7 +40,6 @@ class RootSapling final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Root Sapling"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(RootSapling)); } virtual void on_flip(float height) override; diff --git a/src/badguy/scrystallo.hpp b/src/badguy/scrystallo.hpp index 2ac8a59cc95..5761bc35667 100644 --- a/src/badguy/scrystallo.hpp +++ b/src/badguy/scrystallo.hpp @@ -30,7 +30,6 @@ class SCrystallo final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Sleeping Crystallo"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(SCrystallo)); } virtual void collision_solid(const CollisionHit& hit) override; virtual HitResponse collision_badguy(BadGuy& badguy, const CollisionHit& hit) override; diff --git a/src/badguy/short_fuse.hpp b/src/badguy/short_fuse.hpp index bac740e5b1c..74c80754eac 100644 --- a/src/badguy/short_fuse.hpp +++ b/src/badguy/short_fuse.hpp @@ -29,7 +29,6 @@ class ShortFuse final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Short Fuse"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(ShortFuse)); } protected: virtual HitResponse collision_player (Player& player, const CollisionHit& hit) override; diff --git a/src/badguy/skydive.hpp b/src/badguy/skydive.hpp index 88b1c1f441a..dfb2b37efb9 100644 --- a/src/badguy/skydive.hpp +++ b/src/badguy/skydive.hpp @@ -42,7 +42,6 @@ class SkyDive final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Skydive"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(SkyDive)); } virtual bool is_snipable() const override { return true; } protected: diff --git a/src/badguy/smartball.hpp b/src/badguy/smartball.hpp index a4b5ed8ecef..044b8564eb6 100644 --- a/src/badguy/smartball.hpp +++ b/src/badguy/smartball.hpp @@ -31,7 +31,6 @@ class SmartBall final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mrs. Snowball"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(SmartBall)); } virtual bool is_snipable() const override { return true; } virtual bool is_freezable() const override; diff --git a/src/badguy/smartblock.hpp b/src/badguy/smartblock.hpp index 6564227c8aa..0b060b27e5b 100644 --- a/src/badguy/smartblock.hpp +++ b/src/badguy/smartblock.hpp @@ -29,7 +29,6 @@ class SmartBlock final : public MrIceBlock virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mrs. Iceblock"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MrIceBlock::get_class_types().add(typeid(SmartBlock)); } GameObjectTypes get_types() const override { return {}; } diff --git a/src/badguy/snail.hpp b/src/badguy/snail.hpp index e77b41b2d31..a08a6040103 100644 --- a/src/badguy/snail.hpp +++ b/src/badguy/snail.hpp @@ -42,7 +42,6 @@ class Snail final : virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Snail"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Snail)); } virtual GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/snowball.hpp b/src/badguy/snowball.hpp index ed0fe2433c3..65e1a06dc29 100644 --- a/src/badguy/snowball.hpp +++ b/src/badguy/snowball.hpp @@ -29,7 +29,6 @@ class SnowBall final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mr. Snowball"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(SnowBall)); } virtual bool is_snipable() const override { return true; } virtual bool is_freezable() const override; diff --git a/src/badguy/snowman.hpp b/src/badguy/snowman.hpp index f241643f23c..82b8b2060e9 100644 --- a/src/badguy/snowman.hpp +++ b/src/badguy/snowman.hpp @@ -28,7 +28,6 @@ class Snowman final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Snowman"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Snowman)); } protected: void loose_head(); diff --git a/src/badguy/spiky.hpp b/src/badguy/spiky.hpp index c3f95eb9e27..8a48a26209e 100644 --- a/src/badguy/spiky.hpp +++ b/src/badguy/spiky.hpp @@ -30,7 +30,6 @@ class Spiky final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Spiky"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Spiky)); } private: Spiky(const Spiky&) = delete; diff --git a/src/badguy/sspiky.hpp b/src/badguy/sspiky.hpp index c09f713941c..551e1b12fd8 100644 --- a/src/badguy/sspiky.hpp +++ b/src/badguy/sspiky.hpp @@ -36,7 +36,6 @@ class SSpiky final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Sleeping Spiky"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(SSpiky)); } virtual void after_editor_set() override; protected: diff --git a/src/badguy/stalactite.hpp b/src/badguy/stalactite.hpp index 39ad7ebb60c..10f928325ed 100644 --- a/src/badguy/stalactite.hpp +++ b/src/badguy/stalactite.hpp @@ -41,7 +41,6 @@ class Stalactite : public StickyBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Stalactite"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return StickyBadguy::get_class_types().add(typeid(Stalactite)); } virtual ObjectSettings get_settings() override; diff --git a/src/badguy/stumpy.hpp b/src/badguy/stumpy.hpp index a46c7ff4eb2..bfee886a51b 100644 --- a/src/badguy/stumpy.hpp +++ b/src/badguy/stumpy.hpp @@ -37,7 +37,6 @@ class Stumpy final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Stumpy"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Stumpy)); } protected: enum MyState { diff --git a/src/badguy/tarantula.hpp b/src/badguy/tarantula.hpp index 52b25d40af7..5c454ab5862 100644 --- a/src/badguy/tarantula.hpp +++ b/src/badguy/tarantula.hpp @@ -38,7 +38,6 @@ class Tarantula final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Tarantula"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Tarantula)); } virtual bool is_snipable() const override; virtual GameObjectTypes get_types() const override; diff --git a/src/badguy/toad.hpp b/src/badguy/toad.hpp index 330b2c6d1b1..e2ff16d447d 100644 --- a/src/badguy/toad.hpp +++ b/src/badguy/toad.hpp @@ -37,7 +37,6 @@ class Toad final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Toad"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Toad)); } virtual bool is_snipable() const override { return true; } protected: diff --git a/src/badguy/totem.hpp b/src/badguy/totem.hpp index d7188fba479..a4fb02769cc 100644 --- a/src/badguy/totem.hpp +++ b/src/badguy/totem.hpp @@ -36,7 +36,6 @@ class Totem final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Totem"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Totem)); } virtual bool is_snipable() const override { return true; } protected: diff --git a/src/badguy/treewillowisp.hpp b/src/badguy/treewillowisp.hpp index a03c9a8dc93..c69ab63c705 100644 --- a/src/badguy/treewillowisp.hpp +++ b/src/badguy/treewillowisp.hpp @@ -27,7 +27,6 @@ class TreeWillOWisp final : public BadGuy public: TreeWillOWisp(GhostTree* tree, const Vector& pos, float radius, float speed); ~TreeWillOWisp() override; - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(TreeWillOWisp)); } virtual void activate() override; virtual void active_update(float dt_sec) override; diff --git a/src/badguy/viciousivy.hpp b/src/badguy/viciousivy.hpp index b9fa837d434..99d566eb770 100644 --- a/src/badguy/viciousivy.hpp +++ b/src/badguy/viciousivy.hpp @@ -32,7 +32,6 @@ class ViciousIvy final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Vicious Ivy"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(ViciousIvy)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/walking_badguy.hpp b/src/badguy/walking_badguy.hpp index 4e43ed62235..b65537f2e0a 100644 --- a/src/badguy/walking_badguy.hpp +++ b/src/badguy/walking_badguy.hpp @@ -52,7 +52,6 @@ class WalkingBadguy : public BadGuy const std::string& walk_right_action, int layer = LAYER_OBJECTS, const std::string& light_sprite_name = "images/objects/lightmap_light/lightmap_light-medium.sprite"); - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(WalkingBadguy)); } virtual void initialize() override; virtual void active_update(float dt_sec) override; diff --git a/src/badguy/walking_candle.hpp b/src/badguy/walking_candle.hpp index 3dd92d626ed..d621c46b833 100644 --- a/src/badguy/walking_candle.hpp +++ b/src/badguy/walking_candle.hpp @@ -40,7 +40,6 @@ class WalkingCandle final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Walking Candle"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(WalkingCandle)); } private: Color lightcolor; diff --git a/src/badguy/walkingleaf.hpp b/src/badguy/walkingleaf.hpp index 7b4cdb15958..d2204841f00 100644 --- a/src/badguy/walkingleaf.hpp +++ b/src/badguy/walkingleaf.hpp @@ -32,7 +32,6 @@ class WalkingLeaf final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Walking Leaf"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(WalkingLeaf)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/willowisp.hpp b/src/badguy/willowisp.hpp index 9fb5247135b..cac9ae4e368 100644 --- a/src/badguy/willowisp.hpp +++ b/src/badguy/willowisp.hpp @@ -68,7 +68,6 @@ class WillOWisp final : public BadGuy, virtual std::string get_exposed_class_name() const override { return "WillOWisp"; } static std::string display_name() { return _("Will o' Wisp"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(WillOWisp)); } virtual ObjectSettings get_settings() override; virtual void move_to(const Vector& pos) override; diff --git a/src/badguy/yeti.hpp b/src/badguy/yeti.hpp index 9015aba7bb2..68aea592bb5 100644 --- a/src/badguy/yeti.hpp +++ b/src/badguy/yeti.hpp @@ -37,7 +37,6 @@ class Yeti final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Yeti"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Yeti)); } virtual ObjectSettings get_settings() override; diff --git a/src/badguy/yeti_stalactite.hpp b/src/badguy/yeti_stalactite.hpp index 01904f07b39..70a4bd01460 100644 --- a/src/badguy/yeti_stalactite.hpp +++ b/src/badguy/yeti_stalactite.hpp @@ -33,7 +33,6 @@ class YetiStalactite final : public Stalactite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Yeti's Stalactite"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return Stalactite::get_class_types().add(typeid(YetiStalactite)); } void start_shaking(); bool is_hanging() const; diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index 28efb11f88d..73577595821 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -38,7 +38,6 @@ class Zeekling final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Zeekling"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Zeekling)); } virtual bool is_snipable() const override { return true; } private: diff --git a/src/editor/bezier_marker.hpp b/src/editor/bezier_marker.hpp index daf2e038a57..383416bba6e 100644 --- a/src/editor/bezier_marker.hpp +++ b/src/editor/bezier_marker.hpp @@ -26,7 +26,6 @@ class BezierMarker final : public MarkerObject { public: BezierMarker(Path::Node* node, Vector* bezier_pos); - virtual GameObjectClasses get_class_types() const override { return MarkerObject::get_class_types().add(typeid(BezierMarker)); } virtual void move_to(const Vector& pos) override; virtual Vector get_point_vector() const override; diff --git a/src/editor/marker_object.hpp b/src/editor/marker_object.hpp index 8341d182b79..03cb561d128 100644 --- a/src/editor/marker_object.hpp +++ b/src/editor/marker_object.hpp @@ -28,7 +28,6 @@ class MarkerObject : public MovingObject public: MarkerObject(const Vector& pos); MarkerObject(); - virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(MarkerObject)); } virtual void update(float dt_sec) override {} virtual void draw(DrawingContext& context) override; diff --git a/src/editor/node_marker.hpp b/src/editor/node_marker.hpp index 1014a960d35..1a0f1e964bf 100644 --- a/src/editor/node_marker.hpp +++ b/src/editor/node_marker.hpp @@ -25,7 +25,6 @@ class NodeMarker final : public MarkerObject { public: NodeMarker(std::vector::iterator node_iterator, size_t id_, UID before, UID after); - virtual GameObjectClasses get_class_types() const override { return MarkerObject::get_class_types().add(typeid(NodeMarker)); } virtual void move_to(const Vector& pos) override; virtual void editor_delete() override; diff --git a/src/editor/resize_marker.hpp b/src/editor/resize_marker.hpp index ba0f16d623b..5a832ae6269 100644 --- a/src/editor/resize_marker.hpp +++ b/src/editor/resize_marker.hpp @@ -32,7 +32,6 @@ class ResizeMarker final : public MarkerObject public: ResizeMarker(MovingObject* obj, Side vert, Side horz); - virtual GameObjectClasses get_class_types() const override { return MarkerObject::get_class_types().add(typeid(ResizeMarker)); } void move_to(const Vector& pos) override; Vector get_point_vector() const override; diff --git a/src/object/ambient_light.hpp b/src/object/ambient_light.hpp index 43311a21ac2..34c4cead95e 100644 --- a/src/object/ambient_light.hpp +++ b/src/object/ambient_light.hpp @@ -37,7 +37,6 @@ class AmbientLight : public GameObject static std::string display_name() { return _("Ambient Light"); } virtual std::string get_display_name() const override { return display_name(); } virtual const std::string get_icon_path() const override { return "images/engine/editor/ambient_light.png"; } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(AmbientLight)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/ambient_sound.hpp b/src/object/ambient_sound.hpp index e37403f7f68..43a868cf6ba 100644 --- a/src/object/ambient_sound.hpp +++ b/src/object/ambient_sound.hpp @@ -50,7 +50,6 @@ class AmbientSound final : public MovingObject static std::string display_name() { return _("Ambient Sound"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } - virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(AmbientSound)); } virtual void draw(DrawingContext& context) override; diff --git a/src/object/background.hpp b/src/object/background.hpp index 94bbbee5784..d5f15247901 100644 --- a/src/object/background.hpp +++ b/src/object/background.hpp @@ -50,7 +50,6 @@ class Background final : public GameObject virtual std::string get_exposed_class_name() const override { return "Background"; } static std::string display_name() { return _("Background"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Background)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/background.png"; diff --git a/src/object/bicycle_platform.hpp b/src/object/bicycle_platform.hpp index fcec2c931a9..9df28d6c09f 100644 --- a/src/object/bicycle_platform.hpp +++ b/src/object/bicycle_platform.hpp @@ -28,7 +28,6 @@ class BicyclePlatformChild : public MovingSprite public: BicyclePlatformChild(const ReaderMapping& reader, float angle_offset, BicyclePlatform& parent); - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(BicyclePlatformChild)); } virtual void update(float dt_sec) override; virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; @@ -67,7 +66,6 @@ class BicyclePlatform final : public GameObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Bicycle Platform"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(BicyclePlatform)); } virtual ObjectSettings get_settings() override; virtual void editor_delete() override; diff --git a/src/object/block.hpp b/src/object/block.hpp index 50345044f89..8e647bf4852 100644 --- a/src/object/block.hpp +++ b/src/object/block.hpp @@ -30,8 +30,6 @@ class Block : public MovingSprite Block(const Vector& pos, const std::string& sprite_file); Block(const ReaderMapping& mapping, const std::string& sprite_file); - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Block)); } - virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/bonus_block.hpp b/src/object/bonus_block.hpp index 924f59bc0ad..9b7ec20239d 100644 --- a/src/object/bonus_block.hpp +++ b/src/object/bonus_block.hpp @@ -61,7 +61,6 @@ class BonusBlock final : public Block virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Bonus Block"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return Block::get_class_types().add(typeid(BonusBlock)); } virtual ObjectSettings get_settings() override; GameObjectTypes get_types() const override; diff --git a/src/object/bouncy_coin.hpp b/src/object/bouncy_coin.hpp index 67f2a8de3c6..79c8099a65d 100644 --- a/src/object/bouncy_coin.hpp +++ b/src/object/bouncy_coin.hpp @@ -27,7 +27,6 @@ class BouncyCoin final : public GameObject public: BouncyCoin(const Vector& pos, bool emerge = false, const std::string& sprite_path = "images/objects/coin/coin.sprite"); - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(BouncyCoin)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; virtual bool is_saveable() const override { diff --git a/src/object/brick.hpp b/src/object/brick.hpp index 21803d4de37..ffe8f0432c1 100644 --- a/src/object/brick.hpp +++ b/src/object/brick.hpp @@ -33,7 +33,6 @@ class Brick : public Block virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Brick"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return Block::get_class_types().add(typeid(Brick)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; @@ -70,7 +69,6 @@ class HeavyBrick : public Brick virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Heavy Brick"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return Brick::get_class_types().add(typeid(HeavyBrick)); } GameObjectTypes get_types() const override { return {}; } diff --git a/src/object/bullet.hpp b/src/object/bullet.hpp index 601c35b1d0a..aefdbbbf8c4 100644 --- a/src/object/bullet.hpp +++ b/src/object/bullet.hpp @@ -31,8 +31,6 @@ class Bullet final : public MovingObject public: Bullet(const Vector& pos, const Vector& xm, Direction dir, BonusType type, Player& player); - virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Bullet)); } - virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; virtual void collision_solid(const CollisionHit& hit) override; diff --git a/src/object/bumper.hpp b/src/object/bumper.hpp index 724059f0cea..bc9b40c8700 100644 --- a/src/object/bumper.hpp +++ b/src/object/bumper.hpp @@ -37,7 +37,6 @@ class Bumper final : public StickyObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Bumper"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return StickyObject::get_class_types().add(typeid(Bumper)); } virtual void after_editor_set() override; virtual void on_flip(float height) override; diff --git a/src/object/camera.hpp b/src/object/camera.hpp index c4c6e44dc76..912f40e4126 100644 --- a/src/object/camera.hpp +++ b/src/object/camera.hpp @@ -67,7 +67,6 @@ class Camera final : public GameObject, virtual std::string get_exposed_class_name() const override { return "Camera"; } static std::string display_name() { return _("Camera"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Camera)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/candle.hpp b/src/object/candle.hpp index cc3a4e0a833..34be1323caa 100644 --- a/src/object/candle.hpp +++ b/src/object/candle.hpp @@ -42,7 +42,6 @@ class Candle final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "Candle"; } static std::string display_name() { return _("Candle"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Candle)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/circleplatform.hpp b/src/object/circleplatform.hpp index 4da7c150726..11892f4b274 100644 --- a/src/object/circleplatform.hpp +++ b/src/object/circleplatform.hpp @@ -34,7 +34,6 @@ class CirclePlatform : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Circular Platform"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(CirclePlatform)); } private: virtual void initialize(); diff --git a/src/object/cloud_particle_system.hpp b/src/object/cloud_particle_system.hpp index 81b49cc6c46..20c1cee322d 100644 --- a/src/object/cloud_particle_system.hpp +++ b/src/object/cloud_particle_system.hpp @@ -49,7 +49,6 @@ class CloudParticleSystem final : public ParticleSystem virtual std::string get_exposed_class_name() const override { return "CloudParticleSystem"; } static std::string display_name() { return _("Cloud Particles"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return ParticleSystem::get_class_types().add(typeid(CloudParticleSystem)); } virtual ObjectSettings get_settings() override; virtual const std::string get_icon_path() const override { diff --git a/src/object/coin.hpp b/src/object/coin.hpp index 9fd3de5db62..194be61b99b 100644 --- a/src/object/coin.hpp +++ b/src/object/coin.hpp @@ -43,7 +43,6 @@ class Coin : public MovingSprite, virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Coin"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Coin)); } virtual ObjectSettings get_settings() override; GameObjectTypes get_types() const override; @@ -97,7 +96,6 @@ class HeavyCoin final : public Coin virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Heavy Coin"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return Coin::get_class_types().add(typeid(HeavyCoin)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/coin_explode.hpp b/src/object/coin_explode.hpp index e7a316d4e77..b8ec2233e8d 100644 --- a/src/object/coin_explode.hpp +++ b/src/object/coin_explode.hpp @@ -25,7 +25,6 @@ class CoinExplode final : public GameObject public: CoinExplode(const Vector& pos, bool count_stats = true, const std::string& sprite_path = "images/objects/coin/coin.sprite"); - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(CoinExplode)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; virtual bool is_saveable() const override { diff --git a/src/object/coin_rain.hpp b/src/object/coin_rain.hpp index df5c8ea3e5e..55a8ce5b222 100644 --- a/src/object/coin_rain.hpp +++ b/src/object/coin_rain.hpp @@ -27,7 +27,6 @@ class CoinRain final : public GameObject public: CoinRain(const Vector& pos, bool emerge=false, bool count_stats = true, const std::string& sprite_path = "images/objects/coin/coin.sprite"); - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(CoinRain)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; virtual bool is_saveable() const override { diff --git a/src/object/conveyor_belt.hpp b/src/object/conveyor_belt.hpp index eb45c47e656..80eff3dec91 100644 --- a/src/object/conveyor_belt.hpp +++ b/src/object/conveyor_belt.hpp @@ -46,7 +46,6 @@ class ConveyorBelt final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "ConveyorBelt"; } static std::string display_name() { return _("Conveyor Belt"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(ConveyorBelt)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/custom_particle_system.hpp b/src/object/custom_particle_system.hpp index 2076a0b1716..427970374a6 100644 --- a/src/object/custom_particle_system.hpp +++ b/src/object/custom_particle_system.hpp @@ -53,7 +53,6 @@ class CustomParticleSystem : public ParticleSystem_Interactive virtual std::string get_exposed_class_name() const override { return "CustomParticleSystem"; } static std::string display_name() { return _("Custom Particles"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return ParticleSystem_Interactive::get_class_types().add(typeid(CustomParticleSystem)); } virtual void save(Writer& writer) override; virtual ObjectSettings get_settings() override; diff --git a/src/object/custom_particle_system_file.hpp b/src/object/custom_particle_system_file.hpp index 728852e5443..b37a4c4cded 100644 --- a/src/object/custom_particle_system_file.hpp +++ b/src/object/custom_particle_system_file.hpp @@ -38,7 +38,6 @@ class CustomParticleSystemFile final : public CustomParticleSystem virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Custom Particles from file"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return CustomParticleSystem::get_class_types().add(typeid(CustomParticleSystemFile)); } virtual ObjectSettings get_settings() override; virtual const std::string get_icon_path() const override { diff --git a/src/object/decal.hpp b/src/object/decal.hpp index edff1bd404a..c8913305bad 100644 --- a/src/object/decal.hpp +++ b/src/object/decal.hpp @@ -48,7 +48,6 @@ class Decal final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "Decal"; } static std::string display_name() { return _("Decal"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Decal)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/display_effect.hpp b/src/object/display_effect.hpp index 3822438cf94..33ef9533565 100644 --- a/src/object/display_effect.hpp +++ b/src/object/display_effect.hpp @@ -34,7 +34,6 @@ class DisplayEffect final : public GameObject public: DisplayEffect(const std::string& name = ""); ~DisplayEffect() override; - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(DisplayEffect)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/electrifier.hpp b/src/object/electrifier.hpp index 574e253a70f..9bf3dd26f2f 100644 --- a/src/object/electrifier.hpp +++ b/src/object/electrifier.hpp @@ -35,7 +35,6 @@ class Electrifier final : public GameObject public: Electrifier(TileChangeMap replacements, float seconds); Electrifier(uint32_t oldtile, uint32_t newtile, float seconds); - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Electrifier)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/endsequence.hpp b/src/object/endsequence.hpp index 2ccfbd99ba4..5ccb154d6c4 100644 --- a/src/object/endsequence.hpp +++ b/src/object/endsequence.hpp @@ -27,7 +27,6 @@ class EndSequence : public GameObject public: EndSequence(); ~EndSequence() override; - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(EndSequence)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/endsequence_fireworks.hpp b/src/object/endsequence_fireworks.hpp index 7e052277b3e..c459e791738 100644 --- a/src/object/endsequence_fireworks.hpp +++ b/src/object/endsequence_fireworks.hpp @@ -25,7 +25,6 @@ class EndSequenceFireworks final : public EndSequence public: EndSequenceFireworks(); ~EndSequenceFireworks() override; - virtual GameObjectClasses get_class_types() const override { return EndSequence::get_class_types().add(typeid(EndSequenceFireworks)); } virtual void draw(DrawingContext& context) override; protected: diff --git a/src/object/endsequence_walk.hpp b/src/object/endsequence_walk.hpp index ef22d244e5b..8f4836cbaff 100644 --- a/src/object/endsequence_walk.hpp +++ b/src/object/endsequence_walk.hpp @@ -25,7 +25,6 @@ class EndSequenceWalk final : public EndSequence public: EndSequenceWalk(); ~EndSequenceWalk() override; - virtual GameObjectClasses get_class_types() const override { return EndSequence::get_class_types().add(typeid(EndSequenceWalk)); } virtual void draw(DrawingContext& context) override; protected: diff --git a/src/object/explosion.hpp b/src/object/explosion.hpp index 070d3b654c2..0b7146fef81 100644 --- a/src/object/explosion.hpp +++ b/src/object/explosion.hpp @@ -34,7 +34,6 @@ class Explosion final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Explosion"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Explosion)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/fallblock.hpp b/src/object/fallblock.hpp index 202b56e5d1e..e6f627f2c34 100644 --- a/src/object/fallblock.hpp +++ b/src/object/fallblock.hpp @@ -40,7 +40,6 @@ class FallBlock : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Falling Platform"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(FallBlock)); } virtual void on_flip(float height) override; diff --git a/src/object/falling_coin.hpp b/src/object/falling_coin.hpp index 55ef3b3d3b8..5f942a33ee4 100644 --- a/src/object/falling_coin.hpp +++ b/src/object/falling_coin.hpp @@ -26,7 +26,6 @@ class FallingCoin final : public GameObject { public: FallingCoin(const Vector& start_position, float x_vel); - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(FallingCoin)); } virtual void draw(DrawingContext& context) override; virtual void update(float dt_sec) override; diff --git a/src/object/firefly.hpp b/src/object/firefly.hpp index 55c820d6a1e..147cdb68195 100644 --- a/src/object/firefly.hpp +++ b/src/object/firefly.hpp @@ -37,7 +37,6 @@ class Firefly final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Checkpoint"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Firefly)); } virtual ObjectSettings get_settings() override; virtual void on_flip(float height) override; diff --git a/src/object/fireworks.hpp b/src/object/fireworks.hpp index e54bacb3ccf..23f45bf4263 100644 --- a/src/object/fireworks.hpp +++ b/src/object/fireworks.hpp @@ -26,7 +26,6 @@ class Fireworks final : public GameObject { public: Fireworks(); - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Fireworks)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/floating_image.hpp b/src/object/floating_image.hpp index a4fbec4a997..59774cdc45d 100644 --- a/src/object/floating_image.hpp +++ b/src/object/floating_image.hpp @@ -39,7 +39,6 @@ class FloatingImage final : public GameObject ~FloatingImage() override; virtual bool is_saveable() const override { return false; } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(FloatingImage)); } virtual std::string get_exposed_class_name() const override { return "FloatingImage"; } virtual void update(float dt_sec) override; diff --git a/src/object/floating_text.hpp b/src/object/floating_text.hpp index 7b7d3214b13..ca3c671a427 100644 --- a/src/object/floating_text.hpp +++ b/src/object/floating_text.hpp @@ -28,8 +28,6 @@ class FloatingText final : public GameObject public: FloatingText(const Vector& pos, const std::string& text_); FloatingText(const Vector& pos, int s); // use this for score, for instance - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(FloatingText)); } - virtual bool is_saveable() const override { return false; } diff --git a/src/object/flower.hpp b/src/object/flower.hpp index 11427005be7..173a8d0c1e8 100644 --- a/src/object/flower.hpp +++ b/src/object/flower.hpp @@ -30,7 +30,6 @@ class Flower final : public MovingObject public: Flower(BonusType type, const std::string& custom_sprite = ""); - virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Flower)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/ghost_particle_system.hpp b/src/object/ghost_particle_system.hpp index 2bedbf2d2ec..8610b5b8e1f 100644 --- a/src/object/ghost_particle_system.hpp +++ b/src/object/ghost_particle_system.hpp @@ -36,7 +36,6 @@ class GhostParticleSystem final : public ParticleSystem virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Ghost Particles"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return ParticleSystem::get_class_types().add(typeid(GhostParticleSystem)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/ghostparticles.png"; diff --git a/src/object/gradient.hpp b/src/object/gradient.hpp index 7259b25ae88..0c57c2a5e95 100644 --- a/src/object/gradient.hpp +++ b/src/object/gradient.hpp @@ -48,7 +48,6 @@ class Gradient final : public GameObject virtual std::string get_exposed_class_name() const override { return "Gradient"; } static std::string display_name() { return _("Gradient"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Gradient)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/gradient.png"; diff --git a/src/object/growup.hpp b/src/object/growup.hpp index d779a01132f..8c743cd1cd4 100644 --- a/src/object/growup.hpp +++ b/src/object/growup.hpp @@ -25,7 +25,6 @@ class GrowUp final : public MovingSprite { public: GrowUp(const Vector& pos, Direction direction = Direction::RIGHT, const std::string& custom_sprite = ""); - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(GrowUp)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/hurting_platform.hpp b/src/object/hurting_platform.hpp index d1fc19b8db9..db034f4bb66 100644 --- a/src/object/hurting_platform.hpp +++ b/src/object/hurting_platform.hpp @@ -30,7 +30,6 @@ class HurtingPlatform final : public Platform virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Hurting Platform"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return Platform::get_class_types().add(typeid(HurtingPlatform)); } private: HurtingPlatform(const HurtingPlatform&) = delete; diff --git a/src/object/infoblock.hpp b/src/object/infoblock.hpp index 9df49d85751..a5351bfba72 100644 --- a/src/object/infoblock.hpp +++ b/src/object/infoblock.hpp @@ -36,7 +36,6 @@ class InfoBlock final : public Block virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Info Block"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return Block::get_class_types().add(typeid(InfoBlock)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/invisible_block.hpp b/src/object/invisible_block.hpp index 3d3ccb6c8bc..ad2b63a169f 100644 --- a/src/object/invisible_block.hpp +++ b/src/object/invisible_block.hpp @@ -29,7 +29,6 @@ class InvisibleBlock final : public Block virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Invisible Block"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return Block::get_class_types().add(typeid(InvisibleBlock)); } virtual void draw(DrawingContext& context) override; virtual bool collides(GameObject& other, const CollisionHit& hit) const override; diff --git a/src/object/invisible_wall.hpp b/src/object/invisible_wall.hpp index 3b5ba67cec8..02bddb90440 100644 --- a/src/object/invisible_wall.hpp +++ b/src/object/invisible_wall.hpp @@ -36,7 +36,6 @@ class InvisibleWall final : public MovingObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Invisible Wall"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(InvisibleWall)); } virtual bool has_variable_size() const override { return true; } diff --git a/src/object/ispy.hpp b/src/object/ispy.hpp index dea8674b2ce..681b005a14e 100644 --- a/src/object/ispy.hpp +++ b/src/object/ispy.hpp @@ -34,7 +34,6 @@ class Ispy final : public StickyObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Ispy"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return StickyObject::get_class_types().add(typeid(Ispy)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/key.hpp b/src/object/key.hpp index 81097fe9999..d709020384b 100644 --- a/src/object/key.hpp +++ b/src/object/key.hpp @@ -37,7 +37,6 @@ class Key final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Key"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Key)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/lantern.hpp b/src/object/lantern.hpp index 435a1feaa02..68d053cc5d4 100644 --- a/src/object/lantern.hpp +++ b/src/object/lantern.hpp @@ -37,7 +37,6 @@ class Lantern final : public Rock virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Lantern"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return Rock::get_class_types().add(typeid(Lantern)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override { return {}; } diff --git a/src/object/level_time.hpp b/src/object/level_time.hpp index f592bdea360..ee752a1a8a6 100644 --- a/src/object/level_time.hpp +++ b/src/object/level_time.hpp @@ -74,7 +74,6 @@ class LevelTime final : public GameObject virtual std::string get_exposed_class_name() const override { return "LevelTime"; } static std::string display_name() { return _("Time Limit"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(LevelTime)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/light.hpp b/src/object/light.hpp index 88ee82425f5..ce03309b56a 100644 --- a/src/object/light.hpp +++ b/src/object/light.hpp @@ -31,8 +31,6 @@ class Light : public GameObject return false; } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Light)); } - virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/lit_object.hpp b/src/object/lit_object.hpp index adddfe9d2c3..4c326d38d9c 100644 --- a/src/object/lit_object.hpp +++ b/src/object/lit_object.hpp @@ -45,7 +45,6 @@ class LitObject final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "LitObject"; } static std::string display_name() { return _("Lit object"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(LitObject)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/magicblock.hpp b/src/object/magicblock.hpp index 91261eec774..21b1ef87d8c 100644 --- a/src/object/magicblock.hpp +++ b/src/object/magicblock.hpp @@ -41,7 +41,6 @@ class MagicBlock final: public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Magic Tile"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(MagicBlock)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/moving_sprite.hpp b/src/object/moving_sprite.hpp index b251e127587..1f1c26323e9 100644 --- a/src/object/moving_sprite.hpp +++ b/src/object/moving_sprite.hpp @@ -57,7 +57,6 @@ class MovingSprite : public MovingObject static std::string class_name() { return "moving-sprite"; } virtual std::string get_class_name() const override { return class_name(); } virtual std::string get_exposed_class_name() const override { return "MovingSprite"; } - virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(MovingSprite)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/music_object.hpp b/src/object/music_object.hpp index b9c6e4c0448..aecd6ee4305 100644 --- a/src/object/music_object.hpp +++ b/src/object/music_object.hpp @@ -41,7 +41,6 @@ class MusicObject : public GameObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Music"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(MusicObject)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/music.png"; } virtual ObjectSettings get_settings() override; diff --git a/src/object/oneup.hpp b/src/object/oneup.hpp index 51efe40a3cc..373168fc49c 100644 --- a/src/object/oneup.hpp +++ b/src/object/oneup.hpp @@ -25,7 +25,6 @@ class OneUp final : public MovingSprite { public: OneUp(const Vector& pos, Direction direction = Direction::RIGHT); - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(OneUp)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/particle_zone.hpp b/src/object/particle_zone.hpp index 7504f30bd1c..dd59e6858e0 100644 --- a/src/object/particle_zone.hpp +++ b/src/object/particle_zone.hpp @@ -37,7 +37,6 @@ class ParticleZone final : public MovingObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Particle zone"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(ParticleZone)); } virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; virtual ObjectSettings get_settings() override; diff --git a/src/object/particles.hpp b/src/object/particles.hpp index 1b090e82ff9..c92a2996326 100644 --- a/src/object/particles.hpp +++ b/src/object/particles.hpp @@ -35,7 +35,6 @@ class Particles final : public GameObject const float min_initial_velocity, const float max_initial_velocity, const Vector& acceleration, int number, Color color, int size, float life_time, int drawing_layer); - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Particles)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/particlesystem.hpp b/src/object/particlesystem.hpp index 7f61f42c575..239dd519d69 100644 --- a/src/object/particlesystem.hpp +++ b/src/object/particlesystem.hpp @@ -63,7 +63,6 @@ class ParticleSystem : public GameObject virtual std::string get_exposed_class_name() const override { return "ParticleSystem"; } static std::string display_name() { return _("Particle system"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(ParticleSystem)); } virtual ObjectSettings get_settings() override; /** diff --git a/src/object/particlesystem_interactive.hpp b/src/object/particlesystem_interactive.hpp index c0233f796cf..abf37cfb843 100644 --- a/src/object/particlesystem_interactive.hpp +++ b/src/object/particlesystem_interactive.hpp @@ -47,7 +47,6 @@ class ParticleSystem_Interactive : public ParticleSystem virtual std::string get_display_name() const override { return _("Interactive particle system"); } - virtual GameObjectClasses get_class_types() const override { return ParticleSystem::get_class_types().add(typeid(ParticleSystem_Interactive)); } protected: virtual int collision(Particle* particle, const Vector& movement); diff --git a/src/object/path_gameobject.hpp b/src/object/path_gameobject.hpp index cbb7c7984cb..732c6f0d933 100644 --- a/src/object/path_gameobject.hpp +++ b/src/object/path_gameobject.hpp @@ -44,7 +44,6 @@ class PathGameObject : public GameObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Path"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(PathGameObject)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/path.png"; diff --git a/src/object/platform.hpp b/src/object/platform.hpp index 1cc837e8349..8308de5c763 100644 --- a/src/object/platform.hpp +++ b/src/object/platform.hpp @@ -53,7 +53,6 @@ class Platform : public MovingSprite, virtual std::string get_exposed_class_name() const override { return "Platform"; } static std::string display_name() { return _("Platform"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Platform)); } virtual void editor_update() override; diff --git a/src/object/player.hpp b/src/object/player.hpp index ba8d84c7715..be7532333da 100644 --- a/src/object/player.hpp +++ b/src/object/player.hpp @@ -89,7 +89,6 @@ class Player final : public MovingObject virtual bool has_object_manager_priority() const override { return true; } virtual std::string get_exposed_class_name() const override { return "Player"; } virtual void remove_me() override; - virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Player)); } int get_id() const { return m_id; } void set_id(int id); diff --git a/src/object/pneumatic_platform.hpp b/src/object/pneumatic_platform.hpp index 6af88c99d83..e5859ec53e1 100644 --- a/src/object/pneumatic_platform.hpp +++ b/src/object/pneumatic_platform.hpp @@ -28,7 +28,6 @@ class PneumaticPlatformChild final : public MovingSprite public: PneumaticPlatformChild(const ReaderMapping& reader, bool left, PneumaticPlatform& parent); ~PneumaticPlatformChild() override; - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(PneumaticPlatformChild)); } virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; virtual void update(float dt_sec) override; @@ -65,7 +64,6 @@ class PneumaticPlatform final : public GameObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Pneumatic Platform"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(PneumaticPlatform)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/powerup.hpp b/src/object/powerup.hpp index b9ad6d2fd58..b0b9b5f8f12 100644 --- a/src/object/powerup.hpp +++ b/src/object/powerup.hpp @@ -39,7 +39,6 @@ class PowerUp final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Powerup"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(PowerUp)); } std::vector get_patches() const override; virtual ObjectSettings get_settings() override; diff --git a/src/object/pulsing_light.hpp b/src/object/pulsing_light.hpp index f453aa94313..8e9d60cf3e3 100644 --- a/src/object/pulsing_light.hpp +++ b/src/object/pulsing_light.hpp @@ -27,7 +27,6 @@ class PulsingLight final : public Light public: PulsingLight(const Vector& center, float cycle_len = 5.0, float min_alpha = 0.0, float max_alpha = 1.0, const Color& color = Color(1.0, 1.0, 1.0, 1.0)); ~PulsingLight() override; - virtual GameObjectClasses get_class_types() const override { return Light::get_class_types().add(typeid(PulsingLight)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/pushbutton.hpp b/src/object/pushbutton.hpp index 253a44a58e5..dfc49e3d640 100644 --- a/src/object/pushbutton.hpp +++ b/src/object/pushbutton.hpp @@ -31,7 +31,6 @@ class PushButton final : public StickyObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Button"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return StickyObject::get_class_types().add(typeid(PushButton)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/rain_particle_system.hpp b/src/object/rain_particle_system.hpp index 4a6b263858c..5b2acd9cae4 100644 --- a/src/object/rain_particle_system.hpp +++ b/src/object/rain_particle_system.hpp @@ -48,7 +48,6 @@ class RainParticleSystem final : public ParticleSystem_Interactive virtual std::string get_exposed_class_name() const override { return "RainParticleSystem"; } static std::string display_name() { return _("Rain Particles"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return ParticleSystem_Interactive::get_class_types().add(typeid(RainParticleSystem)); } virtual ObjectSettings get_settings() override; /** diff --git a/src/object/rainsplash.hpp b/src/object/rainsplash.hpp index 3b06bf4db6a..86ca688d3dd 100644 --- a/src/object/rainsplash.hpp +++ b/src/object/rainsplash.hpp @@ -28,7 +28,6 @@ class RainSplash final : public GameObject public: RainSplash(const Vector& pos, bool vertical); ~RainSplash() override; - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(RainSplash)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/rock.hpp b/src/object/rock.hpp index f38b9cd7c90..c50f8ff45fb 100644 --- a/src/object/rock.hpp +++ b/src/object/rock.hpp @@ -39,7 +39,6 @@ class Rock : public MovingSprite, virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Rock"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Portable)).add(typeid(Rock)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override; diff --git a/src/object/rublight.hpp b/src/object/rublight.hpp index 9772dd2eda2..0a218585745 100644 --- a/src/object/rublight.hpp +++ b/src/object/rublight.hpp @@ -33,7 +33,6 @@ class RubLight final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Rublight"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(RubLight)); } virtual ObjectSettings get_settings() override; virtual void on_flip(float height) override; diff --git a/src/object/rusty_trampoline.hpp b/src/object/rusty_trampoline.hpp index 590fc0d6a09..86e4ac4b074 100644 --- a/src/object/rusty_trampoline.hpp +++ b/src/object/rusty_trampoline.hpp @@ -39,7 +39,6 @@ class RustyTrampoline final : public Rock virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Rusty Trampoline"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return Rock::get_class_types().add(typeid(RustyTrampoline)); } virtual ObjectSettings get_settings() override; GameObjectTypes get_types() const override { return {}; } diff --git a/src/object/scripted_object.hpp b/src/object/scripted_object.hpp index 920a09d9874..5465f78d210 100644 --- a/src/object/scripted_object.hpp +++ b/src/object/scripted_object.hpp @@ -45,7 +45,6 @@ class ScriptedObject final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "ScriptedObject"; } static std::string display_name() { return _("Scripted Object"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(ScriptedObject)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/shard.hpp b/src/object/shard.hpp index 57c461ae7a5..7d3c89579ff 100644 --- a/src/object/shard.hpp +++ b/src/object/shard.hpp @@ -34,7 +34,6 @@ class Shard final : public StickyObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Shard"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return StickyObject::get_class_types().add(typeid(Shard)); } protected: Physic m_physic; diff --git a/src/object/smoke_cloud.hpp b/src/object/smoke_cloud.hpp index 4eedf2a7955..6c3b1ef47ea 100644 --- a/src/object/smoke_cloud.hpp +++ b/src/object/smoke_cloud.hpp @@ -26,7 +26,6 @@ class SmokeCloud final : public GameObject { public: SmokeCloud(const Vector& pos); - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(SmokeCloud)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/snow_particle_system.hpp b/src/object/snow_particle_system.hpp index 854962b8fd2..6b608ab27fe 100644 --- a/src/object/snow_particle_system.hpp +++ b/src/object/snow_particle_system.hpp @@ -36,7 +36,6 @@ class SnowParticleSystem final : public ParticleSystem virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Snow Particles"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return ParticleSystem::get_class_types().add(typeid(SnowParticleSystem)); } virtual ObjectSettings get_settings() override; virtual const std::string get_icon_path() const override diff --git a/src/object/sound_object.hpp b/src/object/sound_object.hpp index b636843a03a..c2ef56791ee 100644 --- a/src/object/sound_object.hpp +++ b/src/object/sound_object.hpp @@ -40,7 +40,6 @@ class SoundObject final : public GameObject virtual std::string get_exposed_class_name() const override { return "SoundObject"; } static std::string display_name() { return _("Sound"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(SoundObject)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/sound.png"; } virtual ObjectSettings get_settings() override; diff --git a/src/object/spawnpoint.hpp b/src/object/spawnpoint.hpp index a2e12ba57a0..6a6c22185d3 100644 --- a/src/object/spawnpoint.hpp +++ b/src/object/spawnpoint.hpp @@ -47,7 +47,6 @@ class SpawnPointMarker final : public MovingObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Spawnpoint"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(SpawnPointMarker)); } virtual ObjectSettings get_settings() override; virtual int get_layer() const override { return LAYER_FOREGROUND1; } diff --git a/src/object/specialriser.hpp b/src/object/specialriser.hpp index 7eb546f66b7..2e4248708f7 100644 --- a/src/object/specialriser.hpp +++ b/src/object/specialriser.hpp @@ -27,7 +27,6 @@ class SpecialRiser final : public MovingObject { public: SpecialRiser(const Vector& pos, std::unique_ptr child, bool is_solid = false); - virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(SpecialRiser)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/spotlight.hpp b/src/object/spotlight.hpp index c214080c4b5..1f2c9422542 100644 --- a/src/object/spotlight.hpp +++ b/src/object/spotlight.hpp @@ -58,7 +58,6 @@ class Spotlight final : public MovingObject virtual std::string get_exposed_class_name() const override { return "Spotlight"; } static std::string display_name() { return _("Spotlight"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Spotlight)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/sprite_particle.hpp b/src/object/sprite_particle.hpp index ae5dad30dfc..44bd77c841b 100644 --- a/src/object/sprite_particle.hpp +++ b/src/object/sprite_particle.hpp @@ -37,7 +37,6 @@ class SpriteParticle final : public GameObject const Vector& position, AnchorPoint anchor, const Vector& velocity, const Vector& acceleration, int drawing_layer = LAYER_OBJECTS-1, bool notimeout = false, Color color = Color::WHITE); - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(SpriteParticle)); } ~SpriteParticle() override; protected: diff --git a/src/object/star.hpp b/src/object/star.hpp index f019757707b..808ddf8052a 100644 --- a/src/object/star.hpp +++ b/src/object/star.hpp @@ -26,7 +26,6 @@ class Star final : public MovingSprite { public: Star(const Vector& pos, Direction direction = Direction::RIGHT, const std::string& custom_sprite = ""); - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Star)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/sticky_object.hpp b/src/object/sticky_object.hpp index 13c7ed61316..b276dfa5a36 100644 --- a/src/object/sticky_object.hpp +++ b/src/object/sticky_object.hpp @@ -31,7 +31,6 @@ class StickyObject : public MovingSprite int layer = LAYER_OBJECTS, CollisionGroup collision_group = COLGROUP_MOVING); StickyObject(const ReaderMapping& reader, const std::string& sprite_name, int layer = LAYER_OBJECTS, CollisionGroup collision_group = COLGROUP_MOVING); - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(StickyObject)); } virtual void update(float dt_sec) override; @@ -81,7 +80,6 @@ class StickyBadguy : public BadGuy int layer = LAYER_OBJECTS, CollisionGroup collision_group = COLGROUP_MOVING); StickyBadguy(const ReaderMapping& reader, const std::string& sprite_name, int layer = LAYER_OBJECTS, CollisionGroup collision_group = COLGROUP_MOVING); - virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(StickyBadguy)); } virtual void sticky_update(float dt_sec); diff --git a/src/object/text_array_object.hpp b/src/object/text_array_object.hpp index 81f49a68750..bfbd8320ea6 100644 --- a/src/object/text_array_object.hpp +++ b/src/object/text_array_object.hpp @@ -56,7 +56,6 @@ class TextArrayObject final : public GameObject virtual std::string get_exposed_class_name() const override { return "TextArrayObject"; } static std::string display_name() { return _("Text array"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(TextArrayObject)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/textarray.png"; diff --git a/src/object/text_object.hpp b/src/object/text_object.hpp index 70184ea3a56..33396c4cc33 100644 --- a/src/object/text_object.hpp +++ b/src/object/text_object.hpp @@ -51,7 +51,6 @@ class TextObject final : public GameObject virtual std::string get_exposed_class_name() const override { return "TextObject"; } static std::string display_name() { return _("Text"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(TextObject)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/textarray.png"; } diff --git a/src/object/textscroller.hpp b/src/object/textscroller.hpp index d484c4fe78b..1a15e5ae30c 100644 --- a/src/object/textscroller.hpp +++ b/src/object/textscroller.hpp @@ -44,7 +44,6 @@ class TextScroller : public GameObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Text Scroller"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(TextScroller)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/textscroller.png"; } void set_default_speed(float default_speed); diff --git a/src/object/thunderstorm.hpp b/src/object/thunderstorm.hpp index 50b71184a71..0c888df48e1 100644 --- a/src/object/thunderstorm.hpp +++ b/src/object/thunderstorm.hpp @@ -51,7 +51,6 @@ class Thunderstorm final : public GameObject virtual std::string get_exposed_class_name() const override { return "Thunderstorm"; } static std::string display_name() { return _("Thunderstorm"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Thunderstorm)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/tilemap.hpp b/src/object/tilemap.hpp index e2acdff847e..332b52c3ec2 100644 --- a/src/object/tilemap.hpp +++ b/src/object/tilemap.hpp @@ -65,7 +65,6 @@ class TileMap final : public GameObject, virtual const std::string get_icon_path() const override { return "images/engine/editor/tilemap.png"; } static std::string display_name() { return _("Tilemap"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(TileMap)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/torch.hpp b/src/object/torch.hpp index 377f5ae6d38..ea24ad4ac41 100644 --- a/src/object/torch.hpp +++ b/src/object/torch.hpp @@ -46,7 +46,6 @@ class Torch final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "Torch"; } static std::string display_name() { return _("Torch"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Torch)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/trampoline.hpp b/src/object/trampoline.hpp index 29b6cfebfb5..910fa118258 100644 --- a/src/object/trampoline.hpp +++ b/src/object/trampoline.hpp @@ -36,7 +36,6 @@ class Trampoline final : public Rock virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Trampoline"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return Rock::get_class_types().add(typeid(Trampoline)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/object/unstable_tile.hpp b/src/object/unstable_tile.hpp index 313a226ece1..b5af23dd308 100644 --- a/src/object/unstable_tile.hpp +++ b/src/object/unstable_tile.hpp @@ -41,7 +41,6 @@ class UnstableTile final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Unstable Tile"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(UnstableTile)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/object/vertical_stripes.hpp b/src/object/vertical_stripes.hpp index b789d754af3..79535fda9ac 100644 --- a/src/object/vertical_stripes.hpp +++ b/src/object/vertical_stripes.hpp @@ -28,8 +28,6 @@ class VerticalStripes final : public GameObject VerticalStripes(); ~VerticalStripes() override; - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(VerticalStripes)); } - virtual bool is_singleton() const override { return true; } virtual bool is_saveable() const override { return false; } virtual void update(float dt_sec) override; diff --git a/src/object/water_drop.hpp b/src/object/water_drop.hpp index 0949b7f83fd..5f7cd70eedd 100644 --- a/src/object/water_drop.hpp +++ b/src/object/water_drop.hpp @@ -27,8 +27,6 @@ class WaterDrop final : public MovingSprite public: WaterDrop(const Vector& pos, const std::string& sprite_path_, const Vector& velocity); - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(WaterDrop)); } - virtual void update(float dt_sec) override; virtual void collision_solid(const CollisionHit& hit) override; virtual HitResponse collision(GameObject& other, const CollisionHit& ) override; diff --git a/src/object/weak_block.hpp b/src/object/weak_block.hpp index 8c9f5724f54..865c97e9a99 100644 --- a/src/object/weak_block.hpp +++ b/src/object/weak_block.hpp @@ -35,7 +35,6 @@ class WeakBlock final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Weak Tile"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(WeakBlock)); } std::vector get_patches() const override; void update_version() override; diff --git a/src/object/wind.hpp b/src/object/wind.hpp index 787850a70cb..cfc7fe53220 100644 --- a/src/object/wind.hpp +++ b/src/object/wind.hpp @@ -42,7 +42,6 @@ class Wind final : public MovingObject virtual std::string get_exposed_class_name() const override { return "Wind"; } static std::string display_name() { return _("Wind"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Wind)); } virtual ObjectSettings get_settings() override; diff --git a/src/supertux/game_object.cpp b/src/supertux/game_object.cpp index 8f54d5dd4cd..187ba06b4d2 100644 --- a/src/supertux/game_object.cpp +++ b/src/supertux/game_object.cpp @@ -109,14 +109,6 @@ GameObject::save() return save_stream.str(); } -GameObjectClasses -GameObject::get_class_types() const { - GameObjectClasses g{}; - // All class types except GameObject, since everything implements GameObject - // g.add(typeid(GameObject)); - return g; -} - ObjectSettings GameObject::get_settings() { diff --git a/src/supertux/game_object.hpp b/src/supertux/game_object.hpp index 9c427d21e69..c8202d6f1a8 100644 --- a/src/supertux/game_object.hpp +++ b/src/supertux/game_object.hpp @@ -22,7 +22,6 @@ #include #include #include -#include #include "editor/object_settings.hpp" #include "supertux/game_object_component.hpp" @@ -48,23 +47,6 @@ struct GameObjectType }; typedef std::vector GameObjectTypes; -/** - A helper structure to list all the type_indexes of the classes in the - type hierarchy of a given class. This makes it easier to register e.g. - a MrIceblock in lists for MrIceBlock, WalkingBadguy, Badguy, Portable, - MovingSprite, MovingObject, and GameObject. - */ -struct GameObjectClasses -{ - std::vector types; - - GameObjectClasses& add(const std::type_info &info) { - std::type_index idx(info); - types.push_back(idx); - return *this; - } -}; - /** This class is responsible for: * Updating and drawing the object. This should happen in the update() and @@ -120,9 +102,6 @@ class GameObject : public ExposableClass * @description Returns the display name of the object, translated to the user's locale. */ virtual std::string get_display_name() const { return _("Unknown object"); } - /** List notable classes in inheritance hierarchy of class. This makes it possible - to efficiently look up all objects deriving from a particular intermediate class */ - virtual GameObjectClasses get_class_types() const; /** Version checking/updating, patch information */ virtual std::vector get_patches() const; diff --git a/src/supertux/game_object_iterator.hpp b/src/supertux/game_object_iterator.hpp index 1bef5e52390..d16757434f0 100644 --- a/src/supertux/game_object_iterator.hpp +++ b/src/supertux/game_object_iterator.hpp @@ -25,7 +25,7 @@ template class GameObjectIterator { public: - typedef std::vector::const_iterator Iterator; + typedef std::vector >::const_iterator Iterator; public: GameObjectIterator(Iterator it, Iterator end) : @@ -35,28 +35,24 @@ class GameObjectIterator { if (m_it != m_end) { - // A dynamic_cast is needed to perform sidecasts (a.k.a. crosscasts) - // T may be one of multiple base classes of the object and need not inherit GameObject - m_object = dynamic_cast(*m_it); - assert(m_object); + m_object = dynamic_cast(m_it->get()); + if (!m_object) + { + skip_to_next(); + } } } GameObjectIterator& operator++() { - ++m_it; - if (m_it != m_end) - { - m_object = dynamic_cast(*m_it); - assert(m_object); - } + skip_to_next(); return *this; } GameObjectIterator operator++(int) { GameObjectIterator tmp(*this); - operator++(); + skip_to_next(); return tmp; } @@ -86,6 +82,24 @@ class GameObjectIterator return !(*this == other); } +private: + void skip_to_next() + { + do + { + ++m_it; + if (m_it == m_end) + { + break; + } + else + { + m_object = dynamic_cast(m_it->get()); + } + } + while (!m_object); + } + private: Iterator m_it; Iterator m_end; @@ -101,13 +115,11 @@ class GameObjectRange {} GameObjectIterator begin() const { - auto& objects = m_manager.get_objects_by_type_index(typeid(T)); - return GameObjectIterator(objects.begin(), objects.end()); + return GameObjectIterator(m_manager.get_objects().begin(), m_manager.get_objects().end()); } GameObjectIterator end() const { - auto& objects = m_manager.get_objects_by_type_index(typeid(T)); - return GameObjectIterator(objects.end(), objects.end()); + return GameObjectIterator(m_manager.get_objects().end(), m_manager.get_objects().end()); } private: diff --git a/src/supertux/game_object_manager.cpp b/src/supertux/game_object_manager.cpp index 0226a1a60a0..f272a9f75a7 100644 --- a/src/supertux/game_object_manager.cpp +++ b/src/supertux/game_object_manager.cpp @@ -483,9 +483,7 @@ GameObjectManager::this_before_object_add(GameObject& object) } { // By type index: - for (const std::type_index& type : object.get_class_types().types) { - m_objects_by_type_index[type].push_back(&object); - } + m_objects_by_type_index[std::type_index(typeid(object))].push_back(&object); } save_object_change(object, true); @@ -509,12 +507,10 @@ GameObjectManager::this_before_object_remove(GameObject& object) } { // By type index: - for (const std::type_index& type : object.get_class_types().types) { - auto& vec = m_objects_by_type_index[type]; - auto it = std::find(vec.begin(), vec.end(), &object); - assert(it != vec.end()); - vec.erase(it); - } + auto& vec = m_objects_by_type_index[std::type_index(typeid(object))]; + auto it = std::find(vec.begin(), vec.end(), &object); + assert(it != vec.end()); + vec.erase(it); } } diff --git a/src/supertux/game_object_manager.hpp b/src/supertux/game_object_manager.hpp index 07a79f77dba..601918b85fc 100644 --- a/src/supertux/game_object_manager.hpp +++ b/src/supertux/game_object_manager.hpp @@ -243,8 +243,8 @@ class GameObjectManager : public ExposableClass int get_object_count(std::function predicate = nullptr) const { int total = 0; - for (const auto& obj : get_objects_by_type_index(typeid(T))) { - auto object = static_cast(obj); + for (const auto& obj : m_gameobjects) { + auto object = dynamic_cast(obj.get()); if (object && (predicate == nullptr || predicate(*object))) { total += 1; diff --git a/src/supertux/moving_object.hpp b/src/supertux/moving_object.hpp index 1872470b228..bc5e8a1cbe5 100644 --- a/src/supertux/moving_object.hpp +++ b/src/supertux/moving_object.hpp @@ -46,7 +46,6 @@ class MovingObject : public GameObject, MovingObject(); MovingObject(const ReaderMapping& reader); ~MovingObject() override; - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(MovingObject)); } virtual void collision_solid(const CollisionHit& /*hit*/) override { diff --git a/src/supertux/player_status_hud.hpp b/src/supertux/player_status_hud.hpp index 3bcc649eef0..0315f532001 100644 --- a/src/supertux/player_status_hud.hpp +++ b/src/supertux/player_status_hud.hpp @@ -34,7 +34,6 @@ class PlayerStatusHUD : public GameObject public: PlayerStatusHUD(PlayerStatus& player_status); - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(PlayerStatusHUD)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/trigger/climbable.hpp b/src/trigger/climbable.hpp index 6ef3bffcaa9..c3214b61d4f 100644 --- a/src/trigger/climbable.hpp +++ b/src/trigger/climbable.hpp @@ -46,7 +46,6 @@ class Climbable final : public Trigger static std::string display_name() { return _("Climbable"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } - virtual GameObjectClasses get_class_types() const override { return Trigger::get_class_types().add(typeid(Climbable)); } virtual ObjectSettings get_settings() override; diff --git a/src/trigger/door.hpp b/src/trigger/door.hpp index 7b095c33157..fe363954944 100644 --- a/src/trigger/door.hpp +++ b/src/trigger/door.hpp @@ -30,7 +30,6 @@ class Door final : public SpritedTrigger virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Door"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return SpritedTrigger::get_class_types().add(typeid(Door)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/trigger/scripttrigger.hpp b/src/trigger/scripttrigger.hpp index 6b3276346b7..538990e8752 100644 --- a/src/trigger/scripttrigger.hpp +++ b/src/trigger/scripttrigger.hpp @@ -29,7 +29,6 @@ class ScriptTrigger final : public Trigger static std::string display_name() { return _("Script Trigger"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } - virtual GameObjectClasses get_class_types() const override { return Trigger::get_class_types().add(typeid(ScriptTrigger)); } virtual ObjectSettings get_settings() override; diff --git a/src/trigger/secretarea_trigger.hpp b/src/trigger/secretarea_trigger.hpp index 8473b06da0f..a32a237b5bb 100644 --- a/src/trigger/secretarea_trigger.hpp +++ b/src/trigger/secretarea_trigger.hpp @@ -36,7 +36,6 @@ class SecretAreaTrigger final : public Trigger static std::string display_name() { return _("Secret Area"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } - virtual GameObjectClasses get_class_types() const override { return Trigger::get_class_types().add(typeid(SecretAreaTrigger)); } virtual ObjectSettings get_settings() override; diff --git a/src/trigger/sequence_trigger.hpp b/src/trigger/sequence_trigger.hpp index fdbd44cb04b..4de2fcb446b 100644 --- a/src/trigger/sequence_trigger.hpp +++ b/src/trigger/sequence_trigger.hpp @@ -31,7 +31,6 @@ class SequenceTrigger final : public Trigger static std::string display_name() { return _("Sequence Trigger"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } - virtual GameObjectClasses get_class_types() const override { return Trigger::get_class_types().add(typeid(SequenceTrigger)); } virtual ObjectSettings get_settings() override; diff --git a/src/trigger/switch.hpp b/src/trigger/switch.hpp index a83e267d799..0a09d06eb73 100644 --- a/src/trigger/switch.hpp +++ b/src/trigger/switch.hpp @@ -29,7 +29,6 @@ class Switch final : public StickyTrigger virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Switch"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return StickyTrigger::get_class_types().add(typeid(Switch)); } virtual ObjectSettings get_settings() override; diff --git a/src/trigger/text_area.hpp b/src/trigger/text_area.hpp index e652afd2bc8..0c0b3d9df31 100644 --- a/src/trigger/text_area.hpp +++ b/src/trigger/text_area.hpp @@ -47,7 +47,6 @@ class TextArea final : public Trigger static std::string display_name() { return _("Text Area"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } - virtual GameObjectClasses get_class_types() const override { return Trigger::get_class_types().add(typeid(TextArea)); } private: bool m_once; diff --git a/src/trigger/trigger_base.hpp b/src/trigger/trigger_base.hpp index 681458f0cf4..211df6fdc28 100644 --- a/src/trigger/trigger_base.hpp +++ b/src/trigger/trigger_base.hpp @@ -68,7 +68,6 @@ class Trigger : public MovingObject, { public: Trigger(const ReaderMapping& reader); - virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Trigger)); } virtual void update(float) override { @@ -92,7 +91,6 @@ class SpritedTrigger : public MovingSprite, { public: SpritedTrigger(const ReaderMapping& reader, const std::string& sprite_name); - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(SpritedTrigger)); } virtual void update(float) override { @@ -114,7 +112,6 @@ class StickyTrigger : public StickyObject, { public: StickyTrigger(const ReaderMapping& reader, const std::string& sprite_name); - virtual GameObjectClasses get_class_types() const override { return StickyObject::get_class_types().add(typeid(StickyTrigger)); } virtual void update(float dt_sec) override { diff --git a/src/worldmap/level_tile.hpp b/src/worldmap/level_tile.hpp index 59cc80a7539..66e20c1337f 100644 --- a/src/worldmap/level_tile.hpp +++ b/src/worldmap/level_tile.hpp @@ -35,7 +35,6 @@ class LevelTile final : public WorldMapObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Level"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WorldMapObject::get_class_types().add(typeid(LevelTile)); } virtual ObjectSettings get_settings() override; diff --git a/src/worldmap/spawn_point.hpp b/src/worldmap/spawn_point.hpp index 108eaa915d7..3a664a1a48a 100644 --- a/src/worldmap/spawn_point.hpp +++ b/src/worldmap/spawn_point.hpp @@ -57,7 +57,6 @@ class SpawnPointObject final : public WorldMapObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Spawn point"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WorldMapObject::get_class_types().add(typeid(SpawnPointObject)); } virtual ObjectSettings get_settings() override; diff --git a/src/worldmap/special_tile.hpp b/src/worldmap/special_tile.hpp index 902d37c835c..fab8de59fca 100644 --- a/src/worldmap/special_tile.hpp +++ b/src/worldmap/special_tile.hpp @@ -35,7 +35,6 @@ class SpecialTile final : public WorldMapObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Special Tile"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WorldMapObject::get_class_types().add(typeid(SpecialTile)); } virtual void draw_worldmap(DrawingContext& context) override; diff --git a/src/worldmap/sprite_change.hpp b/src/worldmap/sprite_change.hpp index 4fa4fda3292..e889b681066 100644 --- a/src/worldmap/sprite_change.hpp +++ b/src/worldmap/sprite_change.hpp @@ -34,7 +34,6 @@ class SpriteChange final : public WorldMapObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Sprite Change"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WorldMapObject::get_class_types().add(typeid(SpriteChange)); } virtual void draw_worldmap(DrawingContext& context) override; diff --git a/src/worldmap/teleporter.hpp b/src/worldmap/teleporter.hpp index 39c7ec8253e..b35b43e6aa4 100644 --- a/src/worldmap/teleporter.hpp +++ b/src/worldmap/teleporter.hpp @@ -33,7 +33,6 @@ class Teleporter final : public WorldMapObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Teleporter"); } virtual std::string get_display_name() const override { return display_name(); } - virtual GameObjectClasses get_class_types() const override { return WorldMapObject::get_class_types().add(typeid(Teleporter)); } virtual ObjectSettings get_settings() override; diff --git a/src/worldmap/tux.hpp b/src/worldmap/tux.hpp index 4347fd3d1ac..60031875974 100644 --- a/src/worldmap/tux.hpp +++ b/src/worldmap/tux.hpp @@ -39,7 +39,6 @@ class Tux final : public GameObject virtual void draw(DrawingContext& context) override; virtual void update(float dt_sec) override; virtual bool is_singleton() const override { return true; } - virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Tux)); } void setup(); /**< called prior to first update */ diff --git a/src/worldmap/worldmap_object.hpp b/src/worldmap/worldmap_object.hpp index 9803e576d0a..7d60963f188 100644 --- a/src/worldmap/worldmap_object.hpp +++ b/src/worldmap/worldmap_object.hpp @@ -36,7 +36,6 @@ class WorldMapObject : public MovingSprite WorldMapObject(const ReaderMapping& mapping, const std::string& default_sprite); WorldMapObject(const ReaderMapping& mapping); WorldMapObject(const Vector& pos, const std::string& default_sprite); - virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(WorldMapObject)); } static std::string class_name() { return "worldmap-object"; } virtual std::string get_class_name() const override { return class_name(); } From 8c7ab0769b3896446a10300dfb655d702d408239 Mon Sep 17 00:00:00 2001 From: Vankata453 <78196474+Vankata453@users.noreply.github.com> Date: Tue, 9 Jul 2024 00:12:32 +0300 Subject: [PATCH 05/33] Separate `Player::set_pos()` and `Player::move()` This commit reverts the `Player::move()` function as it was before 19e2884f5da5b6951d2a16abb910440ba764fcd3. `Player::set_pos()` is now a separate function, which additionally only updates the position of grabbed objects and keys. This was done, so that setting Tux's position from scripting doesn't change his state or reset his velocity. Fixes #3006. --- src/object/player.cpp | 15 +++++++++++++-- src/object/player.hpp | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/object/player.cpp b/src/object/player.cpp index 911863b88b2..22feb4dab4e 100644 --- a/src/object/player.cpp +++ b/src/object/player.cpp @@ -2379,7 +2379,7 @@ Player::on_flip(float height) { Vector pos = get_pos(); pos.y = height - pos.y - get_bbox().get_height(); - set_pos(pos); + move(pos); } void @@ -2492,6 +2492,17 @@ Player::set_pos(const Vector& vector) { MovingObject::set_pos(vector); + // Make sure objects following Tux move directly with him + position_grabbed_object(true); + for (Key* key : m_collected_keys) + key->update_pos(); +} + +void +Player::move(const Vector& vector) +{ + m_col.set_pos(vector); + // Reset size to get correct hitbox if Tux was eg. ducked before moving if (is_big()) m_col.set_size(TUX_WIDTH, BIG_TUX_HEIGHT); @@ -3002,7 +3013,7 @@ Player::multiplayer_respawn() set_group(COLGROUP_MOVING); m_physic.reset(); - set_pos(target->get_pos()); + move(target->get_pos()); m_target.reset(); } diff --git a/src/object/player.hpp b/src/object/player.hpp index be7532333da..5780153f896 100644 --- a/src/object/player.hpp +++ b/src/object/player.hpp @@ -145,6 +145,7 @@ class Player final : public MovingObject void kill(bool completely); void set_pos(const Vector& vector) override; + void move(const Vector& vector); /** * @scripting From 00a307005b75c1e8fb91f2cacf892ac2b6ac1077 Mon Sep 17 00:00:00 2001 From: Vankata453 <78196474+Vankata453@users.noreply.github.com> Date: Tue, 9 Jul 2024 00:37:48 +0300 Subject: [PATCH 06/33] Rename `Player::move()` to `Player::set_pos_reset()` Fixes conflicts with `MovingObject::move()`, which the function doesn't override, because of different functionality. --- src/object/player.cpp | 6 +++--- src/object/player.hpp | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/object/player.cpp b/src/object/player.cpp index 22feb4dab4e..5254fb2cf10 100644 --- a/src/object/player.cpp +++ b/src/object/player.cpp @@ -2379,7 +2379,7 @@ Player::on_flip(float height) { Vector pos = get_pos(); pos.y = height - pos.y - get_bbox().get_height(); - move(pos); + set_pos_reset(pos); } void @@ -2499,7 +2499,7 @@ Player::set_pos(const Vector& vector) } void -Player::move(const Vector& vector) +Player::set_pos_reset(const Vector& vector) { m_col.set_pos(vector); @@ -3013,7 +3013,7 @@ Player::multiplayer_respawn() set_group(COLGROUP_MOVING); m_physic.reset(); - move(target->get_pos()); + set_pos_reset(target->get_pos()); m_target.reset(); } diff --git a/src/object/player.hpp b/src/object/player.hpp index 5780153f896..984dbaa5c4d 100644 --- a/src/object/player.hpp +++ b/src/object/player.hpp @@ -145,7 +145,6 @@ class Player final : public MovingObject void kill(bool completely); void set_pos(const Vector& vector) override; - void move(const Vector& vector); /** * @scripting @@ -427,6 +426,9 @@ class Player final : public MovingObject void handle_horizontal_input(); void handle_vertical_input(); + /** Set Tux's position, reset state and velocity. */ + void set_pos_reset(const Vector& vector); + void do_jump_apex(); void early_jump_apex(); From b4d2c168bd0fddbe60f72d7ffe7f93003589ed98 Mon Sep 17 00:00:00 2001 From: Daniel Ward <39805490+weluvgoatz@users.noreply.github.com> Date: Mon, 8 Jul 2024 22:24:41 -0700 Subject: [PATCH 07/33] Fix dispenser bug (#2990) Original PR description: "Fixes #2837 This PR makes dispensers active in terms of being an active/inactive badguy always. This is beneficial for many reasons: Dispensers don't really function as badguys anyway, moreso as other objects, which are always active. It fixes the bug where dispensers scripting would break if you went away from the dispenser and then came back. I believe it fixes an unreported issue where gravity-obeying dispensers would fall into the void if they were placed on moving platforms because the dispenser would load below/inside/off the moving platform because the platform was moving and the dispenser wasn't. However, I know this could be considered kind of a cheap/non-optimal solution to the bug. So if anyone has any better suggestions feel free to take a look at it." --- src/badguy/badguy.cpp | 2 +- src/badguy/badguy.hpp | 2 ++ src/badguy/dispenser.hpp | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/badguy/badguy.cpp b/src/badguy/badguy.cpp index 34d555c0c1f..a3ee560d57c 100644 --- a/src/badguy/badguy.cpp +++ b/src/badguy/badguy.cpp @@ -221,7 +221,7 @@ BadGuy::update(float dt_sec) } // Deactivate badguy, if off-screen and not falling down. - if (m_is_active_flag && is_offscreen() && m_physic.get_velocity_y() <= 0.f) + if (m_is_active_flag && is_offscreen() && m_physic.get_velocity_y() <= 0.f && !always_active()) { deactivate(); set_state(STATE_INACTIVE); diff --git a/src/badguy/badguy.hpp b/src/badguy/badguy.hpp index 861998b81ae..438a22ee07c 100644 --- a/src/badguy/badguy.hpp +++ b/src/badguy/badguy.hpp @@ -139,6 +139,8 @@ class BadGuy : public MovingSprite, Returns false if enemy is spiky or too large */ virtual bool is_snipable() const { return false; } + virtual bool always_active() const { return false; } + bool is_frozen() const; bool is_in_water() const; diff --git a/src/badguy/dispenser.hpp b/src/badguy/dispenser.hpp index 48ea925313e..f057484e863 100644 --- a/src/badguy/dispenser.hpp +++ b/src/badguy/dispenser.hpp @@ -59,6 +59,7 @@ class Dispenser final : public BadGuy virtual void unfreeze(bool melt = true) override; virtual bool is_freezable() const override; virtual bool is_flammable() const override; + virtual bool always_active() const override { return true; } virtual bool is_portable() const override; static std::string class_name() { return "dispenser"; } From bc06d8cc1835eee771e021cf8a550655bae0ef9e Mon Sep 17 00:00:00 2001 From: bruhmoent <69918580+bruhmoent@users.noreply.github.com> Date: Tue, 9 Jul 2024 16:20:45 +0200 Subject: [PATCH 08/33] Add an option for the thunderstorm flash (#3000) This pr adds a brightness setting for the thunderstorm flash as a percentage value. Fixes #2914 --- src/object/thunderstorm.cpp | 1 + src/supertux/gameconfig.cpp | 5 ++- src/supertux/gameconfig.hpp | 1 + src/supertux/menu/options_menu.cpp | 49 ++++++++++++++++++++++++++++-- src/supertux/menu/options_menu.hpp | 3 ++ 5 files changed, 55 insertions(+), 4 deletions(-) diff --git a/src/object/thunderstorm.cpp b/src/object/thunderstorm.cpp index 359edc3f648..05b1836d76e 100644 --- a/src/object/thunderstorm.cpp +++ b/src/object/thunderstorm.cpp @@ -114,6 +114,7 @@ Thunderstorm::update(float ) return; } + alpha *= static_cast(g_config->flash_intensity) / 100.0f; m_flash_color = Color(alpha, alpha, alpha, 1.0); } diff --git a/src/supertux/gameconfig.cpp b/src/supertux/gameconfig.cpp index 520a6c96da0..810b8ef025f 100644 --- a/src/supertux/gameconfig.cpp +++ b/src/supertux/gameconfig.cpp @@ -62,6 +62,7 @@ Config::Config() : music_enabled(true), sound_volume(100), music_volume(50), + flash_intensity(50), random_seed(0), // Set by time(), by default (unless in config). enable_script_debugger(false), tux_spawn_pos(), @@ -143,6 +144,7 @@ Config::load() auto config_mapping = root.get_mapping(); config_mapping.get("profile", profile); + config_mapping.get("flash_intensity", flash_intensity); config_mapping.get("frame_prediction", frame_prediction); config_mapping.get("show_fps", show_fps); config_mapping.get("show_player_pos", show_player_pos); @@ -441,6 +443,8 @@ Config::save() writer.write("aspect_width", aspect_size.width); writer.write("aspect_height", aspect_size.height); + writer.write("flash_intensity", flash_intensity); + #ifdef __EMSCRIPTEN__ // Forcibly set autofit to true // TODO: Remove the autofit parameter entirely - it should always be true @@ -508,7 +512,6 @@ Config::check_values() camera_peek_multiplier = math::clamp(camera_peek_multiplier, 0.f, 1.f); } - bool Config::is_christmas() const { diff --git a/src/supertux/gameconfig.hpp b/src/supertux/gameconfig.hpp index 5b780ea63e2..97cde1e6491 100644 --- a/src/supertux/gameconfig.hpp +++ b/src/supertux/gameconfig.hpp @@ -73,6 +73,7 @@ class Config final bool music_enabled; int sound_volume; int music_volume; + int flash_intensity; /** initial random seed. 0 ==> set from time() */ int random_seed; diff --git a/src/supertux/menu/options_menu.cpp b/src/supertux/menu/options_menu.cpp index b4c18de77c4..c06f2eeef1c 100644 --- a/src/supertux/menu/options_menu.cpp +++ b/src/supertux/menu/options_menu.cpp @@ -55,7 +55,6 @@ OptionsMenu::less_than_volume(const std::string& lhs, const std::string& rhs) return false; } - OptionsMenu::OptionsMenu(Type type, bool complete) : m_magnifications(), m_aspect_ratios(), @@ -64,6 +63,7 @@ OptionsMenu::OptionsMenu(Type type, bool complete) : m_vsyncs(), m_sound_volumes(), m_music_volumes(), + m_flash_intensity_values(), m_mobile_control_scales() { switch (type) // Insert label and menu items, appropriate for the chosen OptionsMenu type @@ -113,6 +113,8 @@ OptionsMenu::OptionsMenu(Type type, bool complete) : add_toggle(MNID_FRAME_PREDICTION, _("Frame prediction"), &g_config->frame_prediction) .set_help(_("Smooth camera motion, generating intermediate frames. This has a noticeable effect on monitors at >> 60Hz. Moving objects may be blurry.")); + add_flash_intensity(); + #if !defined(HIDE_NONMOBILE_OPTIONS) && !defined(__EMSCRIPTEN__) add_aspect_ratio(); #endif @@ -511,6 +513,42 @@ OptionsMenu::add_music_volume() .set_help(_("Adjust music volume")); } +void +OptionsMenu::add_flash_intensity() +{ + m_flash_intensity_values.list = { "0%", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "100%" }; + + std::ostringstream flash_intensity_value_stream; + flash_intensity_value_stream << g_config->flash_intensity << "%"; + std::string flash_intensity_string = flash_intensity_value_stream.str(); + + if (std::find(m_flash_intensity_values.list.begin(), + m_flash_intensity_values.list.end(), flash_intensity_string) == m_flash_intensity_values.list.end()) + { + m_flash_intensity_values.list.push_back(flash_intensity_string); + } + + std::sort(m_flash_intensity_values.list.begin(), m_flash_intensity_values.list.end(), less_than_volume); + + std::ostringstream out; + out << g_config->flash_intensity << "%"; + std::string flash_intensity_value = out.str(); + int count = 0; + for (const auto& value : m_flash_intensity_values.list) + { + if (value == flash_intensity_value) + { + flash_intensity_value.clear(); + m_flash_intensity_values.next = count; + break; + } + ++count; + } + + add_string_select(MNID_FLASH_INTENSITY, _("Flash Intensity"), &m_flash_intensity_values.next, m_flash_intensity_values.list) + .set_help(_("Adjust the intensity of the flash produced by the thunderstorm")); +} + void OptionsMenu::add_mobile_control_scales() { @@ -524,7 +562,6 @@ OptionsMenu::add_mobile_control_scales() add_string_select(MNID_MOBILE_CONTROLS_SCALE, _("On-screen controls scale"), &m_mobile_control_scales.next, m_mobile_control_scales.list); } - void OptionsMenu::on_window_resize() { @@ -532,7 +569,6 @@ OptionsMenu::on_window_resize() static_cast(SCREEN_HEIGHT) / 2.0f + 15.0f); } - void OptionsMenu::menu_action(MenuItem& item) { @@ -709,6 +745,13 @@ OptionsMenu::menu_action(MenuItem& item) } break; + case MNID_FLASH_INTENSITY: + if (sscanf(m_flash_intensity_values.list[m_flash_intensity_values.next].c_str(), "%i", &g_config->flash_intensity) == 1) + { + g_config->save(); + } + break; + case MNID_CUSTOM_TITLE_LEVELS: TitleScreen::current()->refresh_level(); break; diff --git a/src/supertux/menu/options_menu.hpp b/src/supertux/menu/options_menu.hpp index ae66d352866..703f7120236 100644 --- a/src/supertux/menu/options_menu.hpp +++ b/src/supertux/menu/options_menu.hpp @@ -53,6 +53,7 @@ class OptionsMenu final : public Menu void add_vsync(); void add_sound_volume(); void add_music_volume(); + void add_flash_intensity(); void add_mobile_control_scales(); private: @@ -70,6 +71,7 @@ class OptionsMenu final : public Menu MNID_MUSIC, MNID_SOUND_VOLUME, MNID_MUSIC_VOLUME, + MNID_FLASH_INTENSITY, MNID_RUMBLING, MNID_DEVELOPER_MODE, MNID_CHRISTMAS_MODE, @@ -97,6 +99,7 @@ class OptionsMenu final : public Menu StringOption m_vsyncs; StringOption m_sound_volumes; StringOption m_music_volumes; + StringOption m_flash_intensity_values; StringOption m_mobile_control_scales; private: From ee7b044864f3fba028fa460dd73f05961a53f4bf Mon Sep 17 00:00:00 2001 From: SuperTux Bot Date: Wed, 10 Jul 2024 01:37:19 +0000 Subject: [PATCH 09/33] Update translations --- data/locale/gl.po | 4500 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 3404 insertions(+), 1096 deletions(-) diff --git a/data/locale/gl.po b/data/locale/gl.po index a0efd92a44d..2278c70a8b4 100644 --- a/data/locale/gl.po +++ b/data/locale/gl.po @@ -3,163 +3,185 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# xanvieiro , 2019-2020 +# Xan Vieiro , 2019-2021 +# Martin, 2022 +# nin hum , 2024 # Pablo Rodriguez , 2018 +# Xan Vieiro , 2021-2022,2024 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" -"POT-Creation-Date: 2020-04-13 17:25+0200\n" -"PO-Revision-Date: 2020-04-23 06:34+0000\n" -"Last-Translator: xanvieiro \n" -"Language-Team: Galician (http://www.transifex.com/arctic-games/supertux/language/gl/)\n" +"POT-Creation-Date: 2024-05-30 16:19+0200\n" +"PO-Revision-Date: 2013-08-10 22:56+0000\n" +"Last-Translator: nin hum , 2024\n" +"Language-Team: Galician (http://app.transifex.com/arctic-games/supertux/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/trigger/secretarea_trigger.cpp:53 src/trigger/secretarea_trigger.cpp:61 +#: src/trigger/secretarea_trigger.cpp:47 msgid "You found a secret area!" msgstr "Atopaches unha área secreta!" -#: src/trigger/secretarea_trigger.cpp:77 src/trigger/scripttrigger.cpp:75 -#: src/supertux/game_object.cpp:88 src/supertux/menu/editor_sector_menu.cpp:34 -#: src/supertux/menu/editor_levelset_menu.cpp:58 +#: src/trigger/secretarea_trigger.cpp:55 src/supertux/game_object.cpp:115 +#: src/supertux/menu/editor_sector_menu.cpp:36 +#: src/supertux/menu/editor_levelset_menu.cpp:52 #: src/supertux/menu/editor_new_levelset_menu.cpp:34 +#: src/supertux/menu/profile_name_menu.cpp:39 #: src/supertux/menu/editor_level_menu.cpp:33 msgid "Name" msgstr "Nome" -#: src/trigger/secretarea_trigger.cpp:78 +#: src/trigger/secretarea_trigger.cpp:56 msgid "Fade tilemap" msgstr "Esvaer mapa" -#: src/trigger/secretarea_trigger.cpp:79 src/trigger/climbable.cpp:81 -#: src/object/infoblock.cpp:57 src/editor/worldmap_objects.cpp:174 -#: src/editor/worldmap_objects.cpp:272 +#: src/trigger/secretarea_trigger.cpp:57 src/trigger/climbable.cpp:59 +#: src/object/infoblock.cpp:76 src/worldmap/teleporter.cpp:49 +#: src/worldmap/special_tile.cpp:74 msgid "Message" msgstr "Mensaxe" -#: src/trigger/secretarea_trigger.cpp:80 src/trigger/scripttrigger.cpp:80 -#: src/trigger/door.cpp:73 src/object/ispy.cpp:67 -#: src/object/bonus_block.cpp:203 src/object/bonus_block.cpp:207 -#: src/object/pushbutton.cpp:49 src/object/powerup.cpp:190 -#: src/editor/worldmap_objects.cpp:274 +#: src/trigger/secretarea_trigger.cpp:58 src/trigger/scripttrigger.cpp:51 +#: src/trigger/door.cpp:79 src/object/ispy.cpp:53 +#: src/object/bonus_block.cpp:264 src/object/bonus_block.cpp:268 +#: src/object/pushbutton.cpp:62 src/object/powerup.cpp:301 +#: src/worldmap/special_tile.cpp:76 msgid "Script" msgstr "Guión" -#: src/trigger/scripttrigger.cpp:73 -msgid "Script Trigger" -msgstr "Activador do Script" - -#: src/trigger/scripttrigger.cpp:76 src/object/tilemap.cpp:220 -#: src/supertux/menu/editor_sector_menu.cpp:39 -#: src/editor/object_option.cpp:148 -msgid "Width" -msgstr "Ancho" - -#: src/trigger/scripttrigger.cpp:77 src/object/tilemap.cpp:221 -#: src/supertux/menu/editor_sector_menu.cpp:40 -#: src/editor/object_option.cpp:149 -msgid "Height" -msgstr "Alto" - -#: src/trigger/scripttrigger.cpp:78 src/object/bicycle_platform.cpp:187 -#: src/object/background.cpp:160 src/object/pneumatic_platform.cpp:145 -#: src/supertux/menu/joystick_menu.cpp:170 src/supertux/moving_object.cpp:47 -#: src/editor/worldmap_objects.cpp:73 -msgid "X" -msgstr "X" - -#: src/trigger/scripttrigger.cpp:79 src/object/bicycle_platform.cpp:188 -#: src/object/background.cpp:161 src/object/pneumatic_platform.cpp:146 -#: src/supertux/menu/joystick_menu.cpp:172 src/supertux/moving_object.cpp:48 -#: src/editor/worldmap_objects.cpp:74 -msgid "Y" -msgstr "Y" - -#: src/trigger/scripttrigger.cpp:81 src/object/pushbutton.hpp:31 +#: src/trigger/scripttrigger.cpp:52 src/object/pushbutton.hpp:32 msgid "Button" msgstr "Botón" -#: src/trigger/scripttrigger.cpp:82 +#: src/trigger/scripttrigger.cpp:53 msgid "Oneshot" msgstr "UnTiro" -#: src/trigger/sequence_trigger.hpp:33 +#: src/trigger/sequence_trigger.hpp:31 msgid "Sequence Trigger" msgstr "Activador da Secuencia" -#: src/trigger/door.cpp:74 src/badguy/willowisp.cpp:280 -#: src/supertux/menu/editor_sector_menu.cpp:32 -#: src/editor/layers_widget.cpp:274 -#: data//images/engine/editor/objects.stoi:300 +#: src/trigger/text_area.cpp:141 +msgid "Once" +msgstr "Unha vez" + +#: src/trigger/text_area.cpp:142 +msgid "Text change time" +msgstr "Tempo de cambio de texto" + +#: src/trigger/text_area.cpp:143 +msgid "Fade time" +msgstr "Tempo de desvanecemento" + +#: src/trigger/text_area.cpp:144 src/object/textscroller.cpp:353 +msgid "Anchor" +msgstr "Ancorado" + +#: src/trigger/text_area.cpp:148 +msgid "Anchor offset X" +msgstr "desvío do ancoraxe en X" + +#: src/trigger/text_area.cpp:149 +msgid "Anchor offset Y" +msgstr "desvío do ancoraxe en Y" + +#: src/trigger/text_area.cpp:150 +msgid "Texts" +msgstr "Textos" + +#: src/trigger/door.cpp:80 src/badguy/willowisp.cpp:311 +#: src/worldmap/teleporter.cpp:47 data//images/engine/editor/objects.stoi:342 msgid "Sector" msgstr "Sector" -#: src/trigger/door.cpp:75 src/editor/worldmap_objects.hpp:101 +#: src/trigger/door.cpp:81 src/worldmap/spawn_point.hpp:58 msgid "Spawn point" msgstr "Punto de inicio" -#: src/trigger/switch.cpp:61 src/object/block.cpp:212 src/object/torch.cpp:91 -#: src/object/moving_sprite.cpp:156 src/object/pneumatic_platform.cpp:144 -msgid "Sprite" -msgstr "Fada" +#: src/trigger/door.cpp:82 +msgid "Locked?" +msgstr "Bloqueado?" + +#: src/trigger/door.cpp:83 +msgid "Lock Color" +msgstr "Cor de bloqueo" + +#: src/trigger/switch.cpp:62 src/object/ispy.cpp:54 src/object/bumper.cpp:53 +#: src/object/spotlight.cpp:106 src/object/pushbutton.cpp:61 +#: src/object/gradient.cpp:103 src/object/conveyor_belt.cpp:60 +#: src/badguy/badguy.cpp:1063 src/worldmap/spawn_point.cpp:79 +#: src/worldmap/special_tile.cpp:78 +msgid "Direction" +msgstr "Dirección" -#: src/trigger/switch.cpp:62 +#: src/trigger/switch.cpp:65 msgid "Turn on script" msgstr "Activar guión" -#: src/trigger/switch.cpp:63 +#: src/trigger/switch.cpp:66 msgid "Turn off script" msgstr "Desactivar guión" -#: src/trigger/sequence_trigger.cpp:75 +#: src/trigger/scripttrigger.hpp:29 +msgid "Script Trigger" +msgstr "Activador do Script" + +#: src/trigger/sequence_trigger.cpp:48 msgid "Sequence" msgstr "Secuencia" -#: src/trigger/sequence_trigger.cpp:76 +#: src/trigger/sequence_trigger.cpp:49 msgid "end sequence" msgstr "rematar secuencia" -#: src/trigger/sequence_trigger.cpp:76 +#: src/trigger/sequence_trigger.cpp:49 msgid "stop Tux" msgstr "para Tux" -#: src/trigger/sequence_trigger.cpp:76 +#: src/trigger/sequence_trigger.cpp:49 msgid "fireworks" msgstr "fogos de artificio" -#: src/trigger/sequence_trigger.cpp:80 +#: src/trigger/sequence_trigger.cpp:53 msgid "New worldmap spawnpoint" msgstr "Novo punto de inicio do mapa principal" -#: src/trigger/sequence_trigger.cpp:81 +#: src/trigger/sequence_trigger.cpp:54 msgid "Worldmap fade tilemap" msgstr "Esvaer mosaico do mapa principal" -#: src/trigger/sequence_trigger.cpp:82 +#: src/trigger/sequence_trigger.cpp:55 +#: src/object/custom_particle_system.cpp:430 +#: src/object/custom_particle_system.cpp:465 msgid "Fade" msgstr "Esvaer" -#: src/trigger/sequence_trigger.cpp:83 +#: src/trigger/sequence_trigger.cpp:56 src/editor/particle_editor.cpp:161 msgid "Fade in" msgstr "Aparecer" -#: src/trigger/sequence_trigger.cpp:83 +#: src/trigger/sequence_trigger.cpp:56 src/editor/particle_editor.cpp:167 +#: src/editor/particle_editor.cpp:212 msgid "Fade out" msgstr "Desaparecer" -#: src/trigger/climbable.hpp:37 +#: src/trigger/climbable.hpp:46 msgid "Climbable" msgstr "Agatuñable" -#: src/trigger/door.hpp:34 +#: src/trigger/text_area.hpp:47 +msgid "Text Area" +msgstr "Área do Texto" + +#: src/trigger/door.hpp:31 msgid "Door" msgstr "Porta" -#: src/trigger/switch.hpp:33 +#: src/trigger/switch.hpp:30 msgid "Switch" msgstr "Interruptor" @@ -167,85 +189,194 @@ msgstr "Interruptor" msgid "Secret Area" msgstr "Área Secreta" -#: src/object/thunderstorm.hpp:40 +#: src/math/anchor_point.cpp:33 +msgid "Top Left" +msgstr "Arriba á Esquerda" + +#: src/math/anchor_point.cpp:34 +msgid "Top" +msgstr "Arriba" + +#: src/math/anchor_point.cpp:35 +msgid "Top Right" +msgstr "Arriba á Dereita" + +#: src/math/anchor_point.cpp:36 src/object/textscroller.cpp:354 +#: src/object/textscroller.cpp:358 src/supertux/menu/keyboard_menu.cpp:38 +#: src/supertux/menu/joystick_menu.cpp:73 +msgid "Left" +msgstr "Esquerda" + +#: src/math/anchor_point.cpp:37 +msgid "Middle" +msgstr "Medio" + +#: src/math/anchor_point.cpp:38 src/object/textscroller.cpp:354 +#: src/object/textscroller.cpp:358 src/supertux/menu/keyboard_menu.cpp:39 +#: src/supertux/menu/joystick_menu.cpp:74 +msgid "Right" +msgstr "Dereita" + +#: src/math/anchor_point.cpp:39 +msgid "Bottom Left" +msgstr "Abaixo á Esquerda" + +#: src/math/anchor_point.cpp:40 +msgid "Bottom" +msgstr "Abaixo" + +#: src/math/anchor_point.cpp:41 +msgid "Bottom Right" +msgstr "Abaixo á Dereita" + +#: src/object/thunderstorm.hpp:44 msgid "Thunderstorm" msgstr "Tronada" -#: src/object/ispy.cpp:66 -msgid "Facing Down" -msgstr "Boca Abaixo" +#: src/object/cloud_particle_system.cpp:77 +#: src/object/rain_particle_system.cpp:100 +msgid "Intensity" +msgstr "Intensidade" -#: src/object/ispy.cpp:68 src/object/gradient.cpp:124 -#: src/badguy/willowisp.cpp:279 src/badguy/badguy.cpp:840 -#: src/editor/worldmap_objects.cpp:209 src/editor/worldmap_objects.cpp:276 -msgid "Direction" -msgstr "Dirección" +#: src/object/custom_particle_system.hpp:46 +msgid "Custom Particles" +msgstr "Partículas Personalizadas" + +#: src/object/particle_zone.hpp:41 +msgid "Particle zone" +msgstr "Zona de partículas" -#: src/object/path_gameobject.hpp:44 src/object/coin.cpp:262 -#: src/object/camera.cpp:212 src/object/platform.cpp:65 -#: src/object/path_gameobject.cpp:168 src/object/tilemap.cpp:234 -#: src/badguy/willowisp.cpp:286 +#: src/object/path_gameobject.hpp:45 src/object/coin.cpp:324 +#: src/object/camera.cpp:168 src/object/platform.cpp:76 +#: src/object/path_gameobject.cpp:175 src/object/tilemap.cpp:284 +#: src/badguy/willowisp.cpp:317 msgid "Path" msgstr "Camiño" -#: src/object/decal.cpp:41 src/object/scripted_object.cpp:67 -#: src/object/particlesystem.cpp:62 src/object/background.cpp:164 -#: src/object/thunderstorm.cpp:68 src/object/tilemap.cpp:227 -#: src/object/gradient.cpp:122 -msgid "Z-pos" -msgstr "Posición-Z" - -#: src/object/decal.cpp:42 src/object/scripted_object.cpp:70 -#: src/object/tilemap.cpp:216 +#: src/object/decal.cpp:48 src/object/scripted_object.cpp:70 +#: src/object/tilemap.cpp:266 msgid "Solid" msgstr "Sólido" -#: src/object/decal.cpp:43 src/supertux/menu/keyboard_menu.cpp:37 -#: src/supertux/menu/joystick_menu.cpp:74 +#: src/object/decal.cpp:49 src/supertux/menu/keyboard_menu.cpp:41 +#: src/supertux/menu/joystick_menu.cpp:76 msgid "Action" msgstr "Acción" -#: src/object/weak_block.hpp:35 +#: src/object/weak_block.hpp:36 msgid "Weak Tile" msgstr "Tesela Fráxil" -#: src/object/gradient.hpp:42 +#: src/object/gradient.hpp:43 msgid "Gradient" msgstr "Gradiente" -#: src/object/tilemap.hpp:53 +#: src/object/tilemap.hpp:58 msgid "Tilemap" msgstr "Mosaico" -#: src/object/brick.cpp:133 +#: src/object/sound_object.cpp:69 src/object/ambient_sound.cpp:85 +#: src/object/sound_object.hpp:42 src/supertux/menu/options_menu.cpp:128 +#: data//credits.stxt:367 +msgid "Sound" +msgstr "Son" + +#: src/object/sound_object.cpp:70 src/object/ambient_sound.cpp:87 +msgid "Volume" +msgstr "Volume" + +#: src/object/conveyor_belt.hpp:39 +msgid "Conveyor Belt" +msgstr "Correa transportadora" + +#: src/object/unstable_tile.cpp:70 src/object/weak_block.cpp:97 +#: src/badguy/flame.cpp:86 +msgid "Ice" +msgstr "Xeo" + +#: src/object/unstable_tile.cpp:71 src/object/brick.hpp:34 +msgid "Brick" +msgstr "Ladrillo" + +#: src/object/unstable_tile.cpp:72 +msgid "Delayed" +msgstr "Atrasado" + +#: src/object/circleplatform.hpp:35 +msgid "Circular Platform" +msgstr "Plataforma Circular" + +#: src/object/brick.cpp:59 src/object/coin.cpp:69 +#: src/object/invisible_block.cpp:37 src/object/background.cpp:200 +#: src/object/tilemap.cpp:279 src/object/gradient.cpp:109 +#: src/badguy/viciousivy.cpp:44 src/badguy/snail.cpp:69 +#: src/badguy/smartball.cpp:34 src/badguy/bouncing_snowball.cpp:81 +#: src/badguy/kamikazesnowball.cpp:117 src/badguy/walkingleaf.cpp:35 +#: src/badguy/mrbomb.cpp:47 src/badguy/igel.cpp:188 src/badguy/snowball.cpp:40 +#: src/badguy/mrtree.cpp:50 src/badguy/mriceblock.cpp:62 +msgid "Normal" +msgstr "Normal" + +#: src/object/brick.cpp:60 src/object/bonus_block.cpp:175 +#: src/object/coin.cpp:70 src/object/invisible_block.cpp:38 +msgid "Retro" +msgstr "Retro" + +#: src/object/brick.cpp:166 msgid "Breakable" msgstr "Rompible " -#: src/object/trampoline.cpp:136 src/object/rusty_trampoline.cpp:66 +#: src/object/trampoline.cpp:66 src/object/rusty_trampoline.cpp:66 msgid "Portable" msgstr "Portátil" -#: src/object/spotlight.cpp:62 +#: src/object/trampoline.cpp:67 +msgid "Stationary" +msgstr "Estacionario" + +#: src/object/key.hpp:38 +msgid "Key" +msgstr "Chave" + +#: src/object/spotlight.cpp:102 src/object/particlesystem.cpp:64 +#: src/object/particle_zone.cpp:50 src/badguy/darttrap.cpp:149 +#: src/supertux/menu/addon_preview_menu.cpp:189 +msgid "Enabled" +msgstr "Activado" + +#: src/object/spotlight.cpp:103 src/object/rain_particle_system.cpp:101 msgid "Angle" msgstr "Ángulo" -#: src/object/spotlight.cpp:63 src/object/magicblock.cpp:94 -#: src/object/candle.cpp:77 src/object/lantern.cpp:62 -#: src/object/ambient_light.cpp:131 src/badguy/walking_candle.cpp:82 +#: src/object/spotlight.cpp:104 src/object/magicblock.cpp:95 +#: src/object/candle.cpp:75 src/object/torch.cpp:96 src/object/rublight.cpp:55 +#: src/object/lantern.cpp:62 src/object/ambient_light.cpp:122 +#: src/object/key.cpp:192 src/badguy/willowisp.cpp:319 +#: src/badguy/walking_candle.cpp:91 msgid "Color" msgstr "Cor" -#: src/object/spotlight.cpp:64 src/object/textscroller.cpp:279 -#: src/badguy/flame.cpp:59 +#: src/object/spotlight.cpp:105 src/object/textscroller.cpp:350 +#: src/object/rain_particle_system.cpp:102 src/object/conveyor_belt.cpp:61 +#: src/object/circleplatform.cpp:58 src/badguy/flame.cpp:110 +#: src/editor/node_marker.cpp:125 msgid "Speed" msgstr "Velocidade" -#: src/object/spotlight.cpp:65 +#: src/object/spotlight.cpp:107 +msgid "Clockwise" +msgstr "No sentido das agullas do reloxo" + +#: src/object/spotlight.cpp:107 msgid "Counter-clockwise" msgstr "Levóxiro" -#: src/object/spotlight.cpp:66 src/object/candle.cpp:78 -#: src/object/torch.cpp:92 +#: src/object/spotlight.cpp:107 +msgid "Stopped" +msgstr "Parado" + +#: src/object/spotlight.cpp:110 src/object/lit_object.cpp:69 +#: src/object/candle.cpp:76 src/object/torch.cpp:95 msgid "Layer" msgstr "Capa" @@ -257,113 +388,200 @@ msgstr "Física activada" msgid "Visible" msgstr "Visible" -#: src/object/scripted_object.cpp:73 src/badguy/willowisp.cpp:282 +#: src/object/scripted_object.cpp:73 src/badguy/willowisp.cpp:313 msgid "Hit script" msgstr "Script de golpe" -#: src/object/bonus_block.cpp:204 +#: src/object/custom_particle_system_file.cpp:53 +#: src/object/textscroller.cpp:348 src/object/music_object.cpp:109 +#: src/supertux/menu/particle_editor_open.cpp:38 +msgid "File" +msgstr "Ficheiro" + +#: src/object/bonus_block.cpp:154 +msgid "Only one custom object is allowed inside bonus blocks." +msgstr "Só se permite un obxecto personalizado dentro dos bloques extra." + +#: src/object/bonus_block.cpp:172 +msgid "Blue" +msgstr "Azul" + +#: src/object/bonus_block.cpp:173 +msgid "Orange" +msgstr "Laranxa" + +#: src/object/bonus_block.cpp:174 +msgid "Purple" +msgstr "Púrpura" + +#: src/object/bonus_block.cpp:265 src/supertux/menu/cheat_apply_menu.cpp:54 msgid "Count" msgstr "Conta" -#: src/object/bonus_block.cpp:205 +#: src/object/bonus_block.cpp:266 msgid "Content" msgstr "Contido" -#: src/object/bonus_block.cpp:206 src/object/coin.hpp:43 +#: src/object/bonus_block.cpp:267 src/object/coin.hpp:44 msgid "Coin" msgstr "Moeda" -#: src/object/bonus_block.cpp:206 +#: src/object/bonus_block.cpp:267 msgid "Growth (fire flower)" msgstr "Crecemento (flor de lume)" -#: src/object/bonus_block.cpp:206 +#: src/object/bonus_block.cpp:267 msgid "Growth (ice flower)" msgstr "Crecemento (flor de xeo)" -#: src/object/bonus_block.cpp:206 +#: src/object/bonus_block.cpp:267 msgid "Growth (air flower)" msgstr "Crecemento (flor de aire)" -#: src/object/bonus_block.cpp:207 +#: src/object/bonus_block.cpp:268 msgid "Growth (earth flower)" msgstr "Crecemento (flor de terra)" -#: src/object/bonus_block.cpp:207 +#: src/object/bonus_block.cpp:268 +msgid "Growth (retro)" +msgstr "Crecemento (retro)" + +#: src/object/bonus_block.cpp:268 src/object/powerup.cpp:66 msgid "Star" msgstr "Estrela" -#: src/object/bonus_block.cpp:207 +#: src/object/bonus_block.cpp:268 +msgid "Star (retro)" +msgstr "Estrela (retro)" + +#: src/object/bonus_block.cpp:268 msgid "Tux doll" msgstr "Boneca Tux" -#: src/object/bonus_block.cpp:207 +#: src/object/bonus_block.cpp:268 msgid "Custom" msgstr "Modificado" -#: src/object/bonus_block.cpp:207 +#: src/object/bonus_block.cpp:268 msgid "Light" msgstr "Luz" -#: src/object/bonus_block.cpp:208 src/object/trampoline.hpp:35 +#: src/object/bonus_block.cpp:268 +msgid "Light (On)" +msgstr "Luz (Acesa)" + +#: src/object/bonus_block.cpp:269 src/object/trampoline.hpp:37 msgid "Trampoline" msgstr "Trampolín" -#: src/object/bonus_block.cpp:208 +#: src/object/bonus_block.cpp:269 +msgid "Portable trampoline" +msgstr "Trampolín portátil" + +#: src/object/bonus_block.cpp:269 msgid "Coin rain" msgstr "Chuvia de moedas" -#: src/object/bonus_block.cpp:208 +#: src/object/bonus_block.cpp:269 msgid "Coin explosion" msgstr "Explosión de moedas" -#: src/object/bonus_block.cpp:212 +#: src/object/bonus_block.cpp:269 src/object/rock.hpp:43 +msgid "Rock" +msgstr "Pedra" + +#: src/object/bonus_block.cpp:269 +msgid "Potion" +msgstr "Bebedizo" + +#: src/object/bonus_block.cpp:275 msgid "Custom Content" msgstr "Contido Personalizado" -#: src/object/pneumatic_platform.hpp:62 +#: src/object/bonus_block.cpp:278 +msgid "Coin sprite" +msgstr "Fada da moeda" + +#: src/object/pneumatic_platform.hpp:65 msgid "Pneumatic Platform" msgstr "Plataforma Pneumática" -#: src/object/coin.cpp:264 src/object/tilemap.cpp:236 +#: src/object/coin.cpp:326 src/object/tilemap.cpp:287 msgid "Following path" msgstr "Seguir camiño" -#: src/object/coin.cpp:267 src/object/camera.cpp:215 -#: src/object/platform.cpp:66 src/object/tilemap.cpp:240 +#: src/object/coin.cpp:329 src/object/camera.cpp:171 +#: src/object/platform.cpp:77 src/object/tilemap.cpp:290 msgid "Path Mode" msgstr "Modo Camiño" -#: src/object/coin.cpp:270 src/object/coin.cpp:298 +#: src/object/coin.cpp:330 src/object/camera.cpp:172 +#: src/object/platform.cpp:78 src/object/tilemap.cpp:291 +#: src/badguy/willowisp.cpp:322 +msgid "Adapt Speed" +msgstr "Adaptar Velocidade" + +#: src/object/coin.cpp:331 src/object/platform.cpp:81 +#: src/object/tilemap.cpp:285 src/badguy/willowisp.cpp:318 +msgid "Starting Node" +msgstr "Nodo Inicial" + +#: src/object/coin.cpp:332 src/object/camera.cpp:173 +#: src/object/platform.cpp:82 src/object/tilemap.cpp:293 +#: src/badguy/willowisp.cpp:323 +msgid "Handle" +msgstr "Manexar" + +#: src/object/coin.cpp:335 src/object/coin.cpp:371 msgid "Collect script" msgstr "Script de recollida" -#: src/object/ghost_particle_system.hpp:36 +#: src/object/ghost_particle_system.hpp:37 msgid "Ghost Particles" msgstr "Partículas Pantasma" -#: src/object/camera.cpp:207 +#: src/object/camera.cpp:163 msgid "Mode" msgstr "Modo" -#: src/object/camera.cpp:208 +#: src/object/camera.cpp:164 msgid "normal" msgstr "normal" -#: src/object/camera.cpp:208 +#: src/object/camera.cpp:164 msgid "manual" msgstr "manual" -#: src/object/camera.cpp:208 +#: src/object/camera.cpp:164 msgid "autoscroll" msgstr "Desprazar automaticamente" -#: src/object/textscroller.cpp:280 src/object/music_object.cpp:109 -msgid "File" -msgstr "Ficheiro" +#: src/object/textscroller.cpp:349 +msgid "Finish Script" +msgstr "Script de Finalización" -#: src/object/spawnpoint.hpp:46 src/badguy/willowisp.cpp:281 -#: src/editor/worldmap_objects.cpp:173 +#: src/object/textscroller.cpp:351 +msgid "X-offset" +msgstr "Compensación en X" + +#: src/object/textscroller.cpp:352 +msgid "Controllable" +msgstr "Controlable" + +#: src/object/textscroller.cpp:354 src/object/textscroller.cpp:358 +msgid "Center" +msgstr "Centrado" + +#: src/object/textscroller.cpp:357 +msgid "Text Alignment" +msgstr "Aliñamento do Texto" + +#: src/object/lit_object.hpp:40 +msgid "Lit object" +msgstr "Obxecto iluminado" + +#: src/object/spawnpoint.hpp:48 src/badguy/willowisp.cpp:312 +#: src/worldmap/teleporter.cpp:48 msgid "Spawnpoint" msgstr "Punto de aparición" @@ -371,255 +589,396 @@ msgstr "Punto de aparición" msgid "Counter" msgstr "Contador" -#: src/object/candle.hpp:36 +#: src/object/candle.hpp:37 msgid "Candle" msgstr "Vela" -#: src/object/particlesystem.cpp:61 src/badguy/darttrap.cpp:127 -msgid "Enabled" -msgstr "Activado" +#: src/object/particlesystem.cpp:65 src/object/background.cpp:184 +#: src/object/thunderstorm.cpp:76 src/object/tilemap.cpp:277 +#: src/object/gradient.cpp:101 src/object/moving_sprite.cpp:193 +msgid "Z-pos" +msgstr "Posición-Z" -#: src/object/invisible_block.hpp:31 +#: src/object/invisible_block.hpp:30 msgid "Invisible Block" msgstr "Bloque Invisible" -#: src/object/snow_particle_system.hpp:35 +#: src/object/snow_particle_system.hpp:37 msgid "Snow Particles" msgstr "Partículas de Neve" -#: src/object/powerup.hpp:35 +#: src/object/powerup.hpp:40 msgid "Powerup" msgstr "Poderes Especiais" -#: src/object/level_time.hpp:55 -msgid "Time Limit" -msgstr "Límite de Tempo" +#: src/object/infoblock.cpp:78 +msgid "Front Color" +msgstr "Cor Dianteira" -#: src/object/ambient_sound.cpp:119 src/supertux/menu/options_menu.cpp:365 -#: data//credits.stxt:335 -msgid "Sound" -msgstr "Son" +#: src/object/infoblock.cpp:80 +msgid "Back Color" +msgstr "Cor do Fondo" -#: src/object/ambient_sound.cpp:120 -msgid "Distance factor" -msgstr "Factor de distancia" +#: src/object/infoblock.cpp:82 +msgid "Roundness" +msgstr "Redondez" -#: src/object/ambient_sound.cpp:121 -msgid "Distance bias" -msgstr "Marxe de distancia" +#: src/object/infoblock.cpp:84 +msgid "Fade Transition" +msgstr "Transición de fundido" -#: src/object/ambient_sound.cpp:122 -msgid "Volume" -msgstr "Volume" +#: src/object/fallblock.hpp:41 +msgid "Falling Platform" +msgstr "Plataforma que cae" + +#: src/object/level_time.hpp:56 +msgid "Time Limit" +msgstr "Límite de Tempo" + +#: src/object/ambient_sound.cpp:86 +msgid "Radius (in tiles)" +msgstr "Radio (en mosaicos)" #: src/object/torch.hpp:41 msgid "Torch" msgstr "Facho" -#: src/object/icecrusher.hpp:48 -msgid "Icecrusher" -msgstr "Rompexeos" +#: src/object/rublight.hpp:34 +msgid "Rublight" +msgstr "Luces de proximidade" -#: src/object/background.hpp:42 +#: src/object/background.hpp:45 msgid "Background" msgstr "Fondo" -#: src/object/firefly.hpp:36 +#: src/object/text_object.hpp:44 src/gui/menu_string_array.cpp:77 +msgid "Text" +msgstr "Texto" + +#: src/object/firefly.hpp:38 msgid "Checkpoint" msgstr "Punto de rescate" -#: src/object/ambient_light.hpp:36 +#: src/object/ambient_light.hpp:37 msgid "Ambient Light" msgstr "Luz Ambiental" -#: src/object/lantern.hpp:37 +#: src/object/lantern.hpp:38 msgid "Lantern" msgstr "Lanterna" -#: src/object/wind.hpp:40 +#: src/object/wind.hpp:43 msgid "Wind" msgstr "Vento" -#: src/object/bicycle_platform.cpp:190 +#: src/object/bicycle_platform.cpp:203 src/object/background.cpp:180 +#: src/object/pneumatic_platform.cpp:162 +#: src/supertux/menu/joystick_menu.cpp:172 src/supertux/moving_object.cpp:65 +#: src/worldmap/worldmap_object.cpp:77 +msgid "X" +msgstr "X" + +#: src/object/bicycle_platform.cpp:204 src/object/background.cpp:181 +#: src/object/pneumatic_platform.cpp:163 +#: src/supertux/menu/joystick_menu.cpp:174 src/supertux/moving_object.cpp:66 +#: src/worldmap/worldmap_object.cpp:78 +msgid "Y" +msgstr "Y" + +#: src/object/bicycle_platform.cpp:206 msgid "Platforms" msgstr "Plataformas" -#: src/object/bicycle_platform.cpp:191 src/badguy/flame.cpp:58 -#: src/badguy/crystallo.cpp:36 +#: src/object/bicycle_platform.cpp:207 src/object/circleplatform.cpp:57 +#: src/badguy/fish_swimming.cpp:76 src/badguy/flame.cpp:109 +#: src/badguy/rcrystallo.cpp:83 src/badguy/crystallo.cpp:50 msgid "Radius" msgstr "Raio" -#: src/object/bicycle_platform.cpp:192 +#: src/object/bicycle_platform.cpp:208 msgid "Momentum change rate" msgstr "Taxa de cambio do momento" -#: src/object/rain_particle_system.hpp:34 +#: src/object/rain_particle_system.hpp:41 msgid "Rain Particles" msgstr "Partículas de Choiva" -#: src/object/platform.hpp:45 +#: src/object/platform.hpp:46 msgid "Platform" msgstr "Plataforma" -#: src/object/rock.hpp:42 -msgid "Rock" -msgstr "Pedra" - -#: src/object/music_object.hpp:41 src/supertux/menu/options_menu.cpp:367 -#: data//credits.stxt:277 +#: src/object/music_object.hpp:42 src/supertux/menu/options_menu.cpp:130 +#: data//credits.stxt:309 msgid "Music" msgstr "Música" -#: src/object/rusty_trampoline.hpp:39 +#: src/object/lit_object.cpp:68 +msgid "Light sprite" +msgstr "sprite de luz" + +#: src/object/lit_object.cpp:71 +msgid "Sprite starting action" +msgstr "" + +#: src/object/lit_object.cpp:72 +msgid "Light sprite starting action" +msgstr "" + +#: src/object/lit_object.cpp:74 +msgid "Light sprite offset X" +msgstr "" + +#: src/object/lit_object.cpp:75 +msgid "Light sprite offset Y" +msgstr "" + +#: src/object/rusty_trampoline.hpp:40 msgid "Rusty Trampoline" msgstr "Trampolín Enferruxado" -#: src/object/particlesystem.hpp:57 +#: src/object/particlesystem.hpp:58 msgid "Particle system" msgstr "Sistema de Partículas" -#: src/object/candle.cpp:75 src/object/torch.cpp:90 +#: src/object/candle.cpp:73 src/object/torch.cpp:94 msgid "Burning" msgstr "Aceso" -#: src/object/candle.cpp:76 +#: src/object/candle.cpp:74 msgid "Flicker" msgstr "Intermitente" -#: src/object/text_array_object.hpp:50 +#: src/object/snow_particle_system.cpp:104 +msgid "Epsilon" +msgstr "" + +#: src/object/snow_particle_system.cpp:105 +msgid "Spin Speed" +msgstr "" + +#: src/object/snow_particle_system.cpp:106 +msgid "State Length" +msgstr "" + +#: src/object/snow_particle_system.cpp:107 +msgid "Wind Speed" +msgstr "" + +#: src/object/text_array_object.hpp:47 msgid "Text array" msgstr "Cadea de texto" -#: src/object/infoblock.hpp:36 +#: src/object/infoblock.hpp:37 msgid "Info Block" msgstr "Bloque de Información" -#: src/object/powerup.cpp:191 +#: src/object/powerup.cpp:61 +msgid "Egg" +msgstr "Ovo" + +#: src/object/powerup.cpp:62 +msgid "Fire Flower" +msgstr "" + +#: src/object/powerup.cpp:63 +msgid "Ice Flower" +msgstr "Flor de Xeo" + +#: src/object/powerup.cpp:64 +msgid "Air Flower" +msgstr "" + +#: src/object/powerup.cpp:65 +msgid "Earth Flower" +msgstr "" + +#: src/object/powerup.cpp:67 +msgid "Tux Doll" +msgstr "" + +#: src/object/powerup.cpp:68 +msgid "Flip Potion" +msgstr "" + +#: src/object/powerup.cpp:69 +msgid "Mints" +msgstr "" + +#: src/object/powerup.cpp:70 +msgid "Coffee" +msgstr "" + +#: src/object/powerup.cpp:71 +msgid "Herring" +msgstr "" + +#: src/object/powerup.cpp:302 msgid "Disable gravity" msgstr "Desactivar gravidade" -#: src/object/ambient_sound.hpp:62 +#: src/object/powerup.cpp:312 src/object/weak_block.cpp:266 +msgid "" +"Sprites no longer define the behaviour of the object.\n" +"Object types are used instead." +msgstr "" + +#: src/object/ambient_sound.hpp:43 msgid "Ambient Sound" msgstr "Son Ambiental" -#: src/object/level_time.cpp:51 src/supertux/statistics.cpp:288 -#: src/editor/node_marker.cpp:80 +#: src/object/level_time.cpp:52 src/supertux/statistics.cpp:297 +#: src/editor/node_marker.cpp:124 msgid "Time" msgstr "Tempo" -#: src/object/hurting_platform.hpp:30 +#: src/object/hurting_platform.hpp:31 msgid "Hurting Platform" msgstr "Serra" -#: src/object/background.cpp:163 +#: src/object/background.cpp:183 msgid "Fill" msgstr "Encher" -#: src/object/background.cpp:165 +#: src/object/background.cpp:185 msgid "Alignment" msgstr "Aliñamento" -#: src/object/background.cpp:166 +#: src/object/background.cpp:186 src/supertux/direction.cpp:61 msgid "none" msgstr "ningún" -#: src/object/background.cpp:166 src/editor/object_settings.cpp:112 +#: src/object/background.cpp:186 src/supertux/direction.cpp:63 msgid "left" msgstr "esquerda" -#: src/object/background.cpp:166 src/editor/object_settings.cpp:112 +#: src/object/background.cpp:186 src/supertux/direction.cpp:65 msgid "right" msgstr "dereita" -#: src/object/background.cpp:166 +#: src/object/background.cpp:186 msgid "top" msgstr "arriba" -#: src/object/background.cpp:166 +#: src/object/background.cpp:186 msgid "bottom" msgstr "fondo" -#: src/object/background.cpp:169 +#: src/object/background.cpp:189 msgid "Scroll offset x" msgstr "Desprazar compensación x" -#: src/object/background.cpp:170 +#: src/object/background.cpp:190 msgid "Scroll offset y" msgstr "Desprazar compensación y" -#: src/object/background.cpp:171 +#: src/object/background.cpp:191 msgid "Scroll speed x" msgstr "Desprazar velocidade x" -#: src/object/background.cpp:172 +#: src/object/background.cpp:192 msgid "Scroll speed y" msgstr "Desprazar velocidade y" -#: src/object/background.cpp:173 +#: src/object/background.cpp:193 msgid "Parallax Speed x" msgstr "Velocidade da Paralaxe x" -#: src/object/background.cpp:174 +#: src/object/background.cpp:194 msgid "Parallax Speed y" msgstr "Velocidade da Paralaxe y" -#: src/object/background.cpp:175 +#: src/object/background.cpp:195 msgid "Top image" msgstr "Imaxe superior" -#: src/object/background.cpp:176 +#: src/object/background.cpp:196 msgid "Image" msgstr "Imaxe" -#: src/object/background.cpp:177 +#: src/object/background.cpp:197 msgid "Bottom image" msgstr "Imaxe do fondo" -#: src/object/background.cpp:178 src/object/tilemap.cpp:228 -#: src/object/gradient.cpp:129 +#: src/object/background.cpp:198 +msgid "Colour" +msgstr "Color" + +#: src/object/background.cpp:199 src/object/tilemap.cpp:278 +#: src/object/gradient.cpp:108 msgid "Draw target" msgstr "Debuxar obxectivo" -#: src/object/background.cpp:179 src/object/tilemap.cpp:229 -#: src/object/gradient.cpp:130 -msgid "Normal" -msgstr "Normal" - -#: src/object/background.cpp:179 src/object/tilemap.cpp:229 -#: src/object/gradient.cpp:130 +#: src/object/background.cpp:200 src/object/tilemap.cpp:279 +#: src/object/gradient.cpp:109 msgid "Lightmap" msgstr "Mapa de Luz" -#: src/object/wind.cpp:63 +#: src/object/shard.hpp:35 +msgid "Shard" +msgstr "Fragmento" + +#: src/object/rublight.cpp:56 +msgid "Fading Speed" +msgstr "Velocidade de Esvaemento" + +#: src/object/rublight.cpp:57 +msgid "Glowing Strength" +msgstr "Forza do Brillo" + +#: src/object/wind.cpp:78 src/object/custom_particle_system.cpp:499 msgid "Speed X" msgstr "Velocidade X" -#: src/object/wind.cpp:64 +#: src/object/wind.cpp:79 src/object/custom_particle_system.cpp:500 msgid "Speed Y" msgstr "Velocidade Y" -#: src/object/wind.cpp:65 +#: src/object/wind.cpp:80 msgid "Acceleration" msgstr "Aceleración" -#: src/object/wind.cpp:66 +#: src/object/wind.cpp:81 msgid "Blowing" msgstr "Soplar" -#: src/object/bicycle_platform.hpp:64 +#: src/object/wind.cpp:82 +msgid "Affects Badguys" +msgstr "Afecta ós Tipos Malos" + +#: src/object/wind.cpp:83 +msgid "Affects Objects" +msgstr "Afecta ós Obxectos" + +#: src/object/wind.cpp:84 +msgid "Affects Player" +msgstr "Afecta ó Xogador" + +#: src/object/wind.cpp:85 +msgid "Fancy Particles" +msgstr "Partículas Extravagantes" + +#: src/object/bicycle_platform.hpp:67 msgid "Bicycle Platform" msgstr "Plataforma Móbil" -#: src/object/platform.cpp:67 src/object/thunderstorm.cpp:69 -#: src/object/tilemap.cpp:241 +#: src/object/platform.cpp:80 src/object/thunderstorm.cpp:77 +#: src/object/tilemap.cpp:292 src/object/conveyor_belt.cpp:62 msgid "Running" msgstr "Correr" -#: src/object/rock.cpp:182 +#: src/object/rock.cpp:71 +msgid "Small" +msgstr "Pequeno" + +#: src/object/rock.cpp:72 +msgid "Large" +msgstr "Grande" + +#: src/object/rock.cpp:234 msgid "On-grab script" msgstr "Script de agarrar" -#: src/object/rock.cpp:183 +#: src/object/rock.cpp:235 msgid "On-ungrab script" msgstr "Script de soltar" @@ -627,803 +986,1713 @@ msgstr "Script de soltar" msgid "Interactive particle system" msgstr "Sistema interactivo de partículas" -#: src/object/thunderstorm.cpp:70 +#: src/object/thunderstorm.cpp:78 msgid "Interval" msgstr "Intervalo" -#: src/object/thunderstorm.cpp:71 +#: src/object/thunderstorm.cpp:79 msgid "Strike Script" msgstr "Script de Golpear" -#: src/object/cloud_particle_system.hpp:36 +#: src/object/cloud_particle_system.hpp:42 msgid "Cloud Particles" msgstr "Partículas de Nube" -#: src/object/ispy.hpp:33 +#: src/object/custom_particle_system.cpp:423 +msgid "Texture" +msgstr "Textura" + +#: src/object/custom_particle_system.cpp:425 +msgid "Amount" +msgstr "Cantidade" + +#: src/object/custom_particle_system.cpp:426 src/object/circleplatform.cpp:59 +#: src/editor/particle_editor.cpp:141 +msgid "Delay" +msgstr "Retardo" + +#: src/object/custom_particle_system.cpp:427 +msgid "Lifetime" +msgstr "Duración" + +#: src/object/custom_particle_system.cpp:428 +msgid "Lifetime variation" +msgstr "Variación da duración" + +#: src/object/custom_particle_system.cpp:429 +#: src/editor/particle_editor.cpp:164 +msgid "Birth mode" +msgstr "Modo de creación" + +#: src/object/custom_particle_system.cpp:430 +#: src/object/custom_particle_system.cpp:465 src/object/gradient.cpp:115 +#: src/gui/menu_string_array.cpp:40 src/gui/menu_string_array.cpp:78 +#: src/supertux/menu/keyboard_menu.cpp:80 +#: src/supertux/menu/joystick_menu.cpp:108 +#: src/supertux/menu/joystick_menu.cpp:215 src/editor/object_settings.cpp:129 +#: src/editor/particle_editor.cpp:162 src/editor/particle_editor.cpp:168 +msgid "None" +msgstr "Ningún" + +#: src/object/custom_particle_system.cpp:430 +#: src/object/custom_particle_system.cpp:465 +#: src/editor/particle_editor.cpp:166 +msgid "Shrink" +msgstr "Encoller" + +#: src/object/custom_particle_system.cpp:434 +#: src/editor/particle_editor.cpp:172 +msgid "Birth easing" +msgstr "Animación ao crearse" + +#: src/object/custom_particle_system.cpp:436 +#: src/object/custom_particle_system.cpp:471 src/editor/node_marker.cpp:129 +msgid "No easing" +msgstr "Sen transición" + +#: src/object/custom_particle_system.cpp:437 +#: src/object/custom_particle_system.cpp:472 src/editor/node_marker.cpp:130 +msgid "Quad in" +msgstr "Principio cuádruplo" + +#: src/object/custom_particle_system.cpp:437 +#: src/object/custom_particle_system.cpp:472 src/editor/node_marker.cpp:130 +msgid "Quad out" +msgstr "Final cuádruplo" + +#: src/object/custom_particle_system.cpp:437 +#: src/object/custom_particle_system.cpp:472 src/editor/node_marker.cpp:130 +msgid "Quad in/out" +msgstr "Principio/Fin cuádruplo" + +#: src/object/custom_particle_system.cpp:438 +#: src/object/custom_particle_system.cpp:473 src/editor/node_marker.cpp:131 +msgid "Cubic in" +msgstr "Principio cúbico" + +#: src/object/custom_particle_system.cpp:438 +#: src/object/custom_particle_system.cpp:473 src/editor/node_marker.cpp:131 +msgid "Cubic out" +msgstr "Final cúbico" + +#: src/object/custom_particle_system.cpp:438 +#: src/object/custom_particle_system.cpp:473 src/editor/node_marker.cpp:131 +msgid "Cubic in/out" +msgstr "Principio/Fin cúbico" + +#: src/object/custom_particle_system.cpp:439 +#: src/object/custom_particle_system.cpp:474 src/editor/node_marker.cpp:132 +msgid "Quart in" +msgstr "Principio dun cuarto" + +#: src/object/custom_particle_system.cpp:439 +#: src/object/custom_particle_system.cpp:474 src/editor/node_marker.cpp:132 +msgid "Quart out" +msgstr "Final dun cuarto" + +#: src/object/custom_particle_system.cpp:439 +#: src/object/custom_particle_system.cpp:474 src/editor/node_marker.cpp:132 +msgid "Quart in/out" +msgstr "Principio/Fin dun cuarto" + +#: src/object/custom_particle_system.cpp:440 +#: src/object/custom_particle_system.cpp:475 src/editor/node_marker.cpp:133 +msgid "Quint in" +msgstr "Principio quíntuplo" + +#: src/object/custom_particle_system.cpp:440 +#: src/object/custom_particle_system.cpp:475 src/editor/node_marker.cpp:133 +msgid "Quint out" +msgstr "Final quíntuplo" + +#: src/object/custom_particle_system.cpp:440 +#: src/object/custom_particle_system.cpp:475 src/editor/node_marker.cpp:133 +msgid "Quint in/out" +msgstr "Principio/Fin quíntuplo" + +#: src/object/custom_particle_system.cpp:441 +#: src/object/custom_particle_system.cpp:476 src/editor/node_marker.cpp:134 +msgid "Sine in" +msgstr "Principio sinusoidal" + +#: src/object/custom_particle_system.cpp:441 +#: src/object/custom_particle_system.cpp:476 src/editor/node_marker.cpp:134 +msgid "Sine out" +msgstr "Final sinusoidal" + +#: src/object/custom_particle_system.cpp:441 +#: src/object/custom_particle_system.cpp:476 src/editor/node_marker.cpp:134 +msgid "Sine in/out" +msgstr "Principio/Fin sinusoidal" + +#: src/object/custom_particle_system.cpp:442 +#: src/object/custom_particle_system.cpp:477 src/editor/node_marker.cpp:135 +msgid "Circular in" +msgstr "Principio circular" + +#: src/object/custom_particle_system.cpp:442 +#: src/object/custom_particle_system.cpp:477 src/editor/node_marker.cpp:135 +msgid "Circular out" +msgstr "Final Circular" + +#: src/object/custom_particle_system.cpp:442 +#: src/object/custom_particle_system.cpp:477 src/editor/node_marker.cpp:135 +msgid "Circular in/out" +msgstr "Principio/Fin circular" + +#: src/object/custom_particle_system.cpp:443 +#: src/object/custom_particle_system.cpp:478 src/editor/node_marker.cpp:136 +msgid "Exponential in" +msgstr "Principio exponencial" + +#: src/object/custom_particle_system.cpp:443 +#: src/object/custom_particle_system.cpp:478 src/editor/node_marker.cpp:136 +msgid "Exponential out" +msgstr "Final exponencial" + +#: src/object/custom_particle_system.cpp:443 +#: src/object/custom_particle_system.cpp:478 src/editor/node_marker.cpp:136 +msgid "Exponential in/out" +msgstr "Principio/Fin exponencial" + +#: src/object/custom_particle_system.cpp:444 +#: src/object/custom_particle_system.cpp:479 src/editor/node_marker.cpp:137 +msgid "Elastic in" +msgstr "Principio elástico" + +#: src/object/custom_particle_system.cpp:444 +#: src/object/custom_particle_system.cpp:479 src/editor/node_marker.cpp:137 +msgid "Elastic out" +msgstr "Final elástico" + +#: src/object/custom_particle_system.cpp:444 +#: src/object/custom_particle_system.cpp:479 src/editor/node_marker.cpp:137 +msgid "Elastic in/out" +msgstr "Principio/Fin elástico" + +#: src/object/custom_particle_system.cpp:445 +#: src/object/custom_particle_system.cpp:480 src/editor/node_marker.cpp:138 +msgid "Back in" +msgstr "Principio de retorno" + +#: src/object/custom_particle_system.cpp:445 +#: src/object/custom_particle_system.cpp:480 src/editor/node_marker.cpp:138 +msgid "Back out" +msgstr "Final de retorno" + +#: src/object/custom_particle_system.cpp:445 +#: src/object/custom_particle_system.cpp:480 src/editor/node_marker.cpp:138 +msgid "Back in/out" +msgstr "Principio/Fin de retorno" + +#: src/object/custom_particle_system.cpp:446 +#: src/object/custom_particle_system.cpp:481 src/editor/node_marker.cpp:139 +msgid "Bounce in" +msgstr "Principio do rebote" + +#: src/object/custom_particle_system.cpp:446 +#: src/object/custom_particle_system.cpp:481 src/editor/node_marker.cpp:139 +msgid "Bounce out" +msgstr "Final do rebote" + +#: src/object/custom_particle_system.cpp:446 +#: src/object/custom_particle_system.cpp:481 src/editor/node_marker.cpp:139 +msgid "Bounce in/out" +msgstr "Principio/Fin do rebote" + +#: src/object/custom_particle_system.cpp:462 +msgid "Birth time" +msgstr "Tempo de creación" + +#: src/object/custom_particle_system.cpp:463 +msgid "Birth time variation" +msgstr "Variación do tempo da creación" + +#: src/object/custom_particle_system.cpp:464 +#: src/editor/particle_editor.cpp:170 +msgid "Death mode" +msgstr "Modo da morte" + +#: src/object/custom_particle_system.cpp:469 +#: src/editor/particle_editor.cpp:173 +msgid "Death easing" +msgstr "Animación ao eliminarse" + +#: src/object/custom_particle_system.cpp:497 +msgid "Death time" +msgstr "Tempo da morte" + +#: src/object/custom_particle_system.cpp:498 +msgid "Death time variation" +msgstr "Variación do tempo da morte" + +#: src/object/custom_particle_system.cpp:501 +msgid "Speed X (variation)" +msgstr "Velocidade en X (variación)" + +#: src/object/custom_particle_system.cpp:502 +msgid "Speed Y (variation)" +msgstr "Velocidade en Y (variación)" + +#: src/object/custom_particle_system.cpp:503 +msgid "Acceleration X" +msgstr "Aceleración X" + +#: src/object/custom_particle_system.cpp:504 +msgid "Acceleration Y" +msgstr "Aceleración Y" + +#: src/object/custom_particle_system.cpp:505 +msgid "Friction X" +msgstr "Fricción en X" + +#: src/object/custom_particle_system.cpp:506 +msgid "Friction Y" +msgstr "Fricción en Y" + +#: src/object/custom_particle_system.cpp:507 +#: src/editor/particle_editor.cpp:189 +msgid "Feather factor" +msgstr "Factor pluma" + +#: src/object/custom_particle_system.cpp:508 +msgid "Rotation" +msgstr "Rotación" + +#: src/object/custom_particle_system.cpp:509 +msgid "Rotation (variation)" +msgstr "Rotación (variación)" + +#: src/object/custom_particle_system.cpp:510 +#: src/editor/particle_editor.cpp:195 +msgid "Rotation speed" +msgstr "Velocidade da rotación" + +#: src/object/custom_particle_system.cpp:511 +msgid "Rotation speed (variation)" +msgstr "Velocidade da rotación (variación)" + +#: src/object/custom_particle_system.cpp:512 +#: src/editor/particle_editor.cpp:200 +msgid "Rotation acceleration" +msgstr "Aceleración da rotación" + +#: src/object/custom_particle_system.cpp:513 +msgid "Rotation friction" +msgstr "Fricción da rotación" + +#: src/object/custom_particle_system.cpp:514 +#: src/editor/particle_editor.cpp:208 +msgid "Rotation mode" +msgstr "Modo da rotación" + +#: src/object/custom_particle_system.cpp:515 +#: src/editor/particle_editor.cpp:206 +msgid "Fixed" +msgstr "Fixado" + +#: src/object/custom_particle_system.cpp:515 +#: src/editor/particle_editor.cpp:205 +msgid "Facing" +msgstr "Mirando para" + +#: src/object/custom_particle_system.cpp:515 +#: src/editor/particle_editor.cpp:204 +msgid "Wiggling" +msgstr "Menear" + +#: src/object/custom_particle_system.cpp:519 +#: src/editor/particle_editor.cpp:219 +msgid "Collision mode" +msgstr "Modo da colisión" + +#: src/object/custom_particle_system.cpp:520 +msgid "None (pass through)" +msgstr "Ningún (deixar estar)" + +#: src/object/custom_particle_system.cpp:520 +msgid "Stick" +msgstr "Plantarse" + +#: src/object/custom_particle_system.cpp:520 +msgid "Stick Forever" +msgstr "Plantarse para Sempre" + +#: src/object/custom_particle_system.cpp:520 +#: src/editor/particle_editor.cpp:214 +msgid "Bounce (heavy)" +msgstr "Rebote (grande)" + +#: src/object/custom_particle_system.cpp:520 +#: src/editor/particle_editor.cpp:213 +msgid "Bounce (light)" +msgstr "Rebote (pequeno)" + +#: src/object/custom_particle_system.cpp:520 +msgid "Kill particle" +msgstr "Matar partícula" + +#: src/object/custom_particle_system.cpp:520 +msgid "Fade out particle" +msgstr "Esvaer partícula" + +#: src/object/custom_particle_system.cpp:524 +msgid "Delete if off-screen" +msgstr "Eliminar ó saír da pantalla" + +#: src/object/custom_particle_system.cpp:525 +#: src/editor/particle_editor.cpp:224 +msgid "Never" +msgstr "Nunca" + +#: src/object/custom_particle_system.cpp:525 +#: src/editor/particle_editor.cpp:223 +msgid "Only on exit" +msgstr "Só ó saír" + +#: src/object/custom_particle_system.cpp:525 +msgid "Always" +msgstr "Sempre" + +#: src/object/custom_particle_system.cpp:529 +msgid "Cover screen" +msgstr "Cubrir pantalla" + +#: src/object/ispy.hpp:35 msgid "Ispy" msgstr "Semáforo" -#: src/object/skull_tile.hpp:31 -msgid "Skull Tile" -msgstr "Tesela de Caveira" +#: src/object/particle_zone.cpp:51 +msgid "Particle Name" +msgstr "Nome da Partícula" + +#: src/object/particle_zone.cpp:62 +msgid "Spawn" +msgstr "Aparecer" + +#: src/object/particle_zone.cpp:63 +msgid "Life zone" +msgstr "Zona de vida" + +#: src/object/particle_zone.cpp:64 +msgid "Life zone (clear)" +msgstr "Zona de vida (limpar)" + +#: src/object/particle_zone.cpp:65 +msgid "Kill particles" +msgstr "Matar partículas" -#: src/object/weak_block.cpp:211 -msgid "Linked" -msgstr "Ligado" +#: src/object/particle_zone.cpp:66 +msgid "Clear particles" +msgstr "Limpar partículas" -#: src/object/decal.hpp:34 +#: src/object/weak_block.cpp:98 +msgid "Hay" +msgstr "" + +#: src/object/decal.hpp:41 msgid "Decal" msgstr "Taboleiro" -#: src/object/tilemap.cpp:217 +#: src/object/tilemap.cpp:267 msgid "Resize offset x" msgstr "Cambiar tamaño da compensación x" -#: src/object/tilemap.cpp:218 +#: src/object/tilemap.cpp:268 msgid "Resize offset y" msgstr "Cambiar tamaño da compensación y" -#: src/object/tilemap.cpp:223 +#: src/object/tilemap.cpp:270 src/supertux/menu/editor_sector_menu.cpp:41 +#: src/editor/object_option.cpp:178 +msgid "Width" +msgstr "Ancho" + +#: src/object/tilemap.cpp:271 src/supertux/menu/editor_sector_menu.cpp:42 +#: src/editor/object_option.cpp:179 +msgid "Height" +msgstr "Alto" + +#: src/object/tilemap.cpp:273 msgid "Alpha" msgstr "Alfa" -#: src/object/tilemap.cpp:224 +#: src/object/tilemap.cpp:274 msgid "Speed x" msgstr "Velocidade x" -#: src/object/tilemap.cpp:225 +#: src/object/tilemap.cpp:275 msgid "Speed y" msgstr "Velocidade y" -#: src/object/tilemap.cpp:226 +#: src/object/tilemap.cpp:276 msgid "Tint" msgstr "Tonalidade" -#: src/object/tilemap.cpp:244 src/supertux/menu/editor_tilegroup_menu.cpp:26 -#: src/editor/toolbox_widget.cpp:90 +#: src/object/tilemap.cpp:296 src/supertux/menu/editor_tilegroup_menu.cpp:26 +#: src/editor/toolbox_widget.cpp:98 msgid "Tiles" msgstr "Tesela" -#: src/object/gradient.cpp:115 -msgid "Left Colour" -msgstr "Cor Esquerda" - -#: src/object/gradient.cpp:116 -msgid "Right Colour" -msgstr "Cor Dereita" +#: src/object/gradient.cpp:98 +msgid "Primary Colour" +msgstr "Cor Primaria" -#: src/object/gradient.cpp:118 -msgid "Top Colour" -msgstr "Cor de Arriba" - -#: src/object/gradient.cpp:119 -msgid "Bottom Colour" -msgstr "Cor do Fondo" +#: src/object/gradient.cpp:99 +msgid "Secondary Colour" +msgstr "Cor Secundaria" -#: src/object/gradient.cpp:125 +#: src/object/gradient.cpp:104 msgid "Vertical" msgstr "Vertical" -#: src/object/gradient.cpp:125 +#: src/object/gradient.cpp:104 msgid "Horizontal" msgstr "Horizontal" -#: src/object/gradient.cpp:125 +#: src/object/gradient.cpp:104 msgid "Vertical (whole sector)" msgstr "Vertical (sector completo)" -#: src/object/gradient.cpp:125 +#: src/object/gradient.cpp:104 msgid "Horizontal (whole sector)" msgstr "Horizontal (sector completo)" -#: src/object/gradient.cpp:135 +#: src/object/gradient.cpp:114 msgid "Blend mode" msgstr "Modo de fusión" -#: src/object/gradient.cpp:136 +#: src/object/gradient.cpp:115 msgid "Blend" msgstr "Fusión" -#: src/object/gradient.cpp:136 +#: src/object/gradient.cpp:115 msgid "Additive" msgstr "Aditivo" -#: src/object/gradient.cpp:136 +#: src/object/gradient.cpp:115 msgid "Modulate" msgstr "Modulado" -#: src/object/gradient.cpp:136 src/supertux/menu/keyboard_menu.cpp:60 -#: src/supertux/menu/joystick_menu.cpp:106 -#: src/supertux/menu/joystick_menu.cpp:213 src/editor/object_settings.cpp:124 -msgid "None" -msgstr "Ningún" +#: src/object/bumper.hpp:38 +msgid "Bumper" +msgstr "Parachoques" + +#: src/object/conveyor_belt.cpp:63 +msgid "Length" +msgstr "Lonxitude" + +#: src/object/moving_sprite.cpp:192 src/object/pneumatic_platform.cpp:161 +msgid "Sprite" +msgstr "Fada" -#: src/object/unstable_tile.hpp:34 +#: src/object/unstable_tile.hpp:42 msgid "Unstable Tile" msgstr "Tesela Inestable" -#: src/object/brick.hpp:31 -msgid "Brick" -msgstr "Ladrillo" +#: src/object/brick.hpp:70 +msgid "Heavy Brick" +msgstr "" -#: src/object/invisible_wall.hpp:34 +#: src/object/invisible_wall.hpp:37 msgid "Invisible Wall" msgstr "Muro Invisible" -#: src/object/spotlight.hpp:38 +#: src/object/spotlight.hpp:52 msgid "Spotlight" msgstr "Punto de Luz" -#: src/object/scripted_object.hpp:39 +#: src/object/scripted_object.hpp:40 msgid "Scripted Object" msgstr "Obxecto de Script" -#: src/object/coin.hpp:75 +#: src/object/custom_particle_system_file.hpp:40 +msgid "Custom Particles from file" +msgstr "Partículas Personalizados dende ficheiro" + +#: src/object/coin.hpp:97 msgid "Heavy Coin" msgstr "Moeda Pesada" -#: src/object/bonus_block.hpp:55 +#: src/object/explosion.hpp:35 +msgid "Explosion" +msgstr "Explosión" + +#: src/object/bonus_block.hpp:62 msgid "Bonus Block" msgstr "Bloque de Bono" -#: src/object/magicblock.hpp:41 +#: src/object/magicblock.hpp:42 msgid "Magic Tile" msgstr "Tesela Máxica" -#: src/object/camera.hpp:67 +#: src/object/camera.hpp:61 msgid "Camera" msgstr "Cámara" -#: src/object/textscroller.hpp:44 -msgid "TextScroller" -msgstr "Desprazamento do Texto" +#: src/object/textscroller.hpp:45 +msgid "Text Scroller" +msgstr "Texto Móbil" + +#: src/gui/notification.cpp:57 +msgid "Click for more details." +msgstr "Fai clic para máis detalles." + +#: src/gui/notification.cpp:150 +msgid "Do not show again" +msgstr "Non volver a amosar" -#: src/gui/menu_badguy_select.cpp:93 -msgid "List of enemies" -msgstr "Lista de inimigos" +#: src/gui/notification.cpp:157 src/supertux/menu/download_dialog.cpp:124 +msgid "Close" +msgstr "Pechar" + +#: src/gui/menu_string_array.cpp:40 src/gui/menu_string_array.cpp:78 +#, c++-format +msgid "Selected item: {}" +msgstr "" -#: src/gui/menu_badguy_select.cpp:95 -msgid "Enemy" -msgstr "Inimigo" +#: src/gui/menu_string_array.cpp:70 +msgid "Edit string array" +msgstr "" -#: src/gui/menu_badguy_select.cpp:96 +#: src/gui/menu_string_array.cpp:79 src/gui/menu_object_select.cpp:50 +#: src/supertux/menu/profile_menu.cpp:88 msgid "Add" msgstr "Engadir" -#: src/gui/menu_badguy_select.cpp:106 src/gui/menu_color.cpp:34 -#: src/gui/dialog.hpp:80 src/gui/menu_script.cpp:47 -#: src/supertux/menu/editor_sector_menu.cpp:46 -#: src/supertux/menu/editor_levelset_menu.cpp:62 -#: src/supertux/menu/addon_menu.cpp:349 +#: src/gui/menu_string_array.cpp:80 +msgid "Insert" +msgstr "" + +#: src/gui/menu_string_array.cpp:81 +#: src/supertux/menu/addon_preview_menu.cpp:177 src/editor/object_menu.cpp:61 +msgid "Update" +msgstr "" + +#: src/gui/menu_string_array.cpp:82 src/supertux/menu/profile_menu.cpp:108 +#: src/supertux/menu/profile_menu.cpp:110 +msgid "Delete" +msgstr "" + +#: src/gui/menu_string_array.cpp:84 src/gui/menu_object_select.cpp:61 +#: src/gui/menu_color.cpp:37 src/gui/dialog.hpp:87 src/gui/menu_script.cpp:46 +#: src/supertux/menu/editor_sector_menu.cpp:48 +#: src/supertux/menu/editor_levelset_menu.cpp:58 #: src/supertux/menu/editor_new_levelset_menu.cpp:37 -#: src/supertux/menu/editor_level_menu.cpp:44 src/editor/object_menu.cpp:43 +#: src/supertux/menu/editor_level_menu.cpp:45 src/editor/object_menu.cpp:71 msgid "OK" msgstr "OK" -#: src/gui/menu_badguy_select.cpp:135 -msgid "Do you want to delete this badguy from the list?" -msgstr "Queres eliminar a este tipo malo da lista?" +#: src/gui/menu_object_select.cpp:46 +msgid "List of objects" +msgstr "" -#: src/gui/menu_badguy_select.cpp:136 src/gui/dialog.hpp:89 -#: src/supertux/menu/editor_menu.cpp:123 src/editor/editor.cpp:478 -msgid "Yes" -msgstr "Si" +#: src/gui/menu_object_select.cpp:48 +#, c++-format +msgid "Select object ({})" +msgstr "" -#: src/gui/menu_badguy_select.cpp:139 src/gui/dialog.hpp:90 -#: src/supertux/menu/editor_menu.cpp:126 src/editor/editor.cpp:485 -msgid "No" -msgstr "Non" +#: src/gui/menu_object_select.cpp:114 +msgid "Are you sure you want to remove this object from the list?" +msgstr "" #: src/gui/menu_color.cpp:24 msgid "Mix the colour" msgstr "Mesturar a cor" -#: src/gui/menu_filesystem.cpp:111 +#: src/gui/dialog.hpp:96 src/supertux/menu/editor_level_select_menu.cpp:181 +#: src/editor/editor.cpp:663 +msgid "Yes" +msgstr "Si" + +#: src/gui/dialog.hpp:97 src/supertux/menu/editor_level_select_menu.cpp:185 +#: src/editor/particle_editor.cpp:781 src/editor/editor.cpp:670 +msgid "No" +msgstr "Non" + +#: src/gui/menu_list.cpp:38 src/gui/menu_filesystem.cpp:120 +#: src/gui/menu_paths.cpp:48 src/supertux/menu/particle_editor_save_as.cpp:42 #: src/supertux/menu/editor_sectors_menu.cpp:45 -#: src/supertux/menu/editor_sectors_menu.cpp:95 -#: src/supertux/menu/editor_sectors_menu.cpp:100 +#: src/supertux/menu/editor_sectors_menu.cpp:94 +#: src/supertux/menu/editor_sectors_menu.cpp:99 #: src/supertux/menu/editor_objectgroup_menu.cpp:42 -#: src/supertux/menu/editor_tilegroup_menu.cpp:36 src/editor/editor.cpp:489 +#: src/supertux/menu/editor_tilegroup_menu.cpp:36 +#: src/supertux/menu/editor_level_select_menu.cpp:190 +#: src/supertux/menu/editor_save_as.cpp:42 +#: src/supertux/menu/particle_editor_open.cpp:43 +#: src/editor/particle_editor.cpp:785 src/editor/editor.cpp:674 msgid "Cancel" msgstr "Cancelar" +#: src/gui/menu_filesystem.cpp:118 +msgid "Open Directory" +msgstr "" + #: src/gui/menu_script.cpp:28 msgid "Edit script" msgstr "Editar script" -#: src/badguy/toad.hpp:37 +#: src/gui/menu_paths.cpp:32 +msgid "Clone" +msgstr "Clonar" + +#: src/gui/menu_paths.cpp:41 +msgid "" +"An error occurred and the game could\n" +"not clone the path. Please contact\n" +"the developers for support." +msgstr "" + +#: src/gui/menu_paths.cpp:44 +msgid "Bind" +msgstr "Enlazar" + +#: src/gui/menu_paths.cpp:49 +msgid "" +"Do you wish to clone the path to edit it separately,\n" +"or do you want to bind both paths together\n" +"so that any edit on one edits the other?" +msgstr "" + +#: src/gui/menu_paths.cpp:56 +#, c++-format +msgid "Path {}" +msgstr "" + +#: src/gui/menu_paths.cpp:67 src/supertux/menu/integrations_menu.cpp:60 +#: src/supertux/menu/editor_converters_menu.cpp:79 +#: src/supertux/menu/video_system_menu.cpp:45 +#: src/supertux/menu/contrib_menu.cpp:102 src/supertux/menu/debug_menu.cpp:77 +#: src/supertux/menu/multiplayer_menu.cpp:39 +#: src/supertux/menu/custom_menu_menu.cpp:65 +#: src/supertux/menu/editor_level_select_menu.cpp:98 +#: src/supertux/menu/worldmap_cheat_apply_menu.cpp:42 +#: src/supertux/menu/worldmap_cheat_apply_menu.cpp:63 +#: src/supertux/menu/worldmap_cheat_menu.cpp:57 +#: src/supertux/menu/worldmap_cheat_menu.cpp:196 +#: src/supertux/menu/editor_levelset_select_menu.cpp:114 +#: src/supertux/menu/options_menu.cpp:223 +#: src/supertux/menu/editor_delete_levelset_menu.cpp:69 +#: src/supertux/menu/addon_preview_menu.cpp:193 +#: src/supertux/menu/profile_menu.cpp:118 +#: src/supertux/menu/multiplayer_players_menu.cpp:91 +#: src/supertux/menu/addon_menu.cpp:153 +#: src/supertux/menu/editor_new_levelset_menu.cpp:40 +#: src/supertux/menu/options_select_menu.cpp:44 +#: src/supertux/menu/world_set_menu.cpp:33 +#: src/supertux/menu/addon_browse_menu.cpp:162 +#: src/supertux/menu/web_asset_menu.cpp:48 +#: src/supertux/menu/profile_name_menu.cpp:45 +#: src/supertux/menu/keyboard_menu.cpp:71 +#: src/supertux/menu/sorted_contrib_menu.cpp:51 +#: src/supertux/menu/language_menu.cpp:63 +#: src/supertux/menu/joystick_menu.cpp:99 +#: src/supertux/menu/contrib_levelset_menu.cpp:67 +#: src/supertux/menu/cheat_menu.cpp:58 +#: src/supertux/menu/addon_file_install_menu.cpp:36 +#: src/supertux/menu/cheat_apply_menu.cpp:43 +#: src/supertux/menu/cheat_apply_menu.cpp:63 +#: src/supertux/menu/multiplayer_player_menu.cpp:205 +#: src/supertux/menu/editor_delete_level_menu.cpp:68 +msgid "Back" +msgstr "Atrás" + +#: src/addon/addon_manager.cpp:562 +msgid "Only one resource pack is allowed to be enabled at a time." +msgstr "" + +#: src/addon/addon_manager.cpp:837 +#, c++-format +msgid "Add-on {} by {} is already installed." +msgstr "" + +#: src/addon/addon_manager.cpp:857 +#, c++-format +msgid "Add-on {} by {} successfully installed." +msgstr "" + +#: src/addon/addon.cpp:71 src/supertux/menu/editor_levelset_menu.cpp:54 +msgid "Levelset" +msgstr "Conxunto de niveis" + +#: src/addon/addon.cpp:74 src/supertux/menu/editor_levelset_menu.cpp:54 +#: data//images/engine/editor/objects.stoi:389 +msgid "Worldmap" +msgstr "Mapa Principal" + +#: src/addon/addon.cpp:77 +msgid "World" +msgstr "Mundo" + +#: src/addon/addon.cpp:80 +msgid "Add-on" +msgstr "Complemento" + +#: src/addon/addon.cpp:83 +msgid "Language Pack" +msgstr "" + +#: src/addon/addon.cpp:86 +msgid "Resource Pack" +msgstr "" + +#: src/addon/addon.cpp:89 +msgid "Unknown" +msgstr "Descoñecido" + +#: src/addon/addon.cpp:100 +#, c++-format +msgid "{} \"{}\" by \"{}\"" +msgstr "" + +#: src/addon/addon.cpp:114 +msgid "add-on" +msgstr "" + +#: src/addon/addon.cpp:114 +msgid "add-ons" +msgstr "" + +#: src/badguy/toad.hpp:38 msgid "Toad" msgstr "Sapo" -#: src/badguy/mrtree.hpp:29 -msgid "Walking Tree" -msgstr "Árbore Andante" +#: src/badguy/mrtree.hpp:32 +msgid "Mr. Tree" +msgstr "" -#: src/badguy/plant.hpp:33 +#: src/badguy/plant.hpp:34 msgid "Plant" msgstr "Planta" -#: src/badguy/crystallo.hpp:30 +#: src/badguy/tarantula.hpp:39 src/badguy/tarantula.cpp:353 +msgid "Tarantula" +msgstr "" + +#: src/badguy/granito_giant.cpp:71 +msgid "Awake" +msgstr "" + +#: src/badguy/granito_giant.cpp:72 +msgid "Sleeping" +msgstr "" + +#: src/badguy/granito_giant.cpp:73 +msgid "Corrupted A" +msgstr "" + +#: src/badguy/granito_giant.cpp:74 +msgid "Corrupted B" +msgstr "" + +#: src/badguy/granito_giant.cpp:75 +msgid "Corrupted C" +msgstr "" + +#: src/badguy/crystallo.hpp:33 msgid "Crystallo" msgstr "Cristaliño" -#: src/badguy/totem.hpp:36 +#: src/badguy/viciousivy.cpp:45 src/badguy/snail.cpp:70 +#: src/badguy/kamikazesnowball.cpp:118 src/badguy/walkingleaf.cpp:36 +#: src/badguy/jumpy.cpp:46 src/badguy/igel.cpp:189 src/badguy/mrtree.cpp:51 +msgid "Corrupted" +msgstr "" + +#: src/badguy/totem.hpp:37 msgid "Totem" msgstr "Totem" -#: src/badguy/stalactite.hpp:38 +#: src/badguy/stalactite.hpp:42 msgid "Stalactite" msgstr "Estalactita" -#: src/badguy/haywire.hpp:42 +#: src/badguy/fish_chasing.cpp:198 +msgid "Tracking Distance" +msgstr "" + +#: src/badguy/fish_chasing.cpp:199 +msgid "Losing Distance" +msgstr "" + +#: src/badguy/fish_chasing.cpp:200 +msgid "Chase Speed" +msgstr "" + +#: src/badguy/root_sapling.hpp:41 +msgid "Root Sapling" +msgstr "" + +#: src/badguy/haywire.hpp:46 msgid "Haywire" msgstr "Bule bule" -#: src/badguy/dispenser.hpp:48 +#: src/badguy/dispenser.hpp:52 msgid "Dispenser" msgstr "Dispensador" -#: src/badguy/short_fuse.hpp:29 +#: src/badguy/short_fuse.hpp:30 msgid "Short Fuse" msgstr "Mecha Curta" -#: src/badguy/zeekling.hpp:36 +#: src/badguy/zeekling.hpp:39 msgid "Zeekling" msgstr "Dragón" -#: src/badguy/mriceblock.hpp:46 -msgid "Iceblock" -msgstr "Cubiño de xeo" +#: src/badguy/smartball.cpp:35 +msgid "Pumpkin" +msgstr "" + +#: src/badguy/bouncing_snowball.cpp:82 +msgid "Fatbat" +msgstr "" + +#: src/badguy/dive_mine.hpp:50 +msgid "Dive Mine" +msgstr "" + +#: src/badguy/granito_big.hpp:33 +msgid "Big Granito" +msgstr "" + +#: src/badguy/mriceblock.hpp:49 +msgid "Mr. Iceblock" +msgstr "" + +#: src/badguy/granito.hpp:39 src/badguy/darttrap.cpp:163 +#: src/badguy/corrupted_granito.cpp:175 src/badguy/dispenser.cpp:438 +msgid "Granito" +msgstr "" + +#: src/badguy/fish_swimming.cpp:54 src/badguy/jumpy.cpp:44 +#: data//images/ice_world.strf:10 data//images/tiles.strf:28 +#: data//images/worldmap.strf:41 +msgid "Snow" +msgstr "Neve" + +#: src/badguy/fish_swimming.cpp:55 data//images/ice_world.strf:211 +#: data//images/tiles.strf:366 data//images/worldmap.strf:67 +msgid "Forest" +msgstr "Bosque" + +#: src/badguy/crusher.hpp:71 +msgid "Crusher" +msgstr "" + +#: src/badguy/flame.cpp:84 +msgid "Fire" +msgstr "" + +#: src/badguy/flame.cpp:85 +msgid "Ghost" +msgstr "" + +#: src/badguy/corrupted_granito_big.hpp:35 +msgid "Corrupted Big Granito" +msgstr "" + +#: src/badguy/scrystallo.cpp:57 +msgid "Walk Radius" +msgstr "Raio do Paseo" + +#: src/badguy/scrystallo.cpp:58 +msgid "Awakening Radius" +msgstr "Raio ó Espertar" + +#: src/badguy/scrystallo.cpp:59 +msgid "Roof-attached" +msgstr "" -#: src/badguy/jumpy.hpp:36 +#: src/badguy/jumpy.hpp:40 msgid "Jumpy" msgstr "Chouteira" -#: src/badguy/captainsnowball.hpp:31 +#: src/badguy/captainsnowball.hpp:32 msgid "Captain Snowball" msgstr "Capitán Bóla de Neve" -#: src/badguy/ghosttree.hpp:42 +#: src/badguy/ghosttree.hpp:43 msgid "Ghost Tree" msgstr "Árbore Pantasma" -#: src/badguy/willowisp.cpp:283 +#: src/badguy/willowisp.cpp:314 msgid "Track range" msgstr "Intervalo de seguimento" -#: src/badguy/willowisp.cpp:284 +#: src/badguy/willowisp.cpp:315 msgid "Vanish range" msgstr "Intervalo de desaparición" -#: src/badguy/willowisp.cpp:285 +#: src/badguy/willowisp.cpp:316 msgid "Fly speed" msgstr "Velocidade de voo" -#: src/badguy/kugelblitz.hpp:39 +#: src/badguy/kugelblitz.hpp:40 msgid "Kugelblitz" msgstr "Chispún" -#: src/badguy/mole_rock.hpp:42 +#: src/badguy/mole_rock.hpp:44 msgid "Mole's rock" msgstr "Pedras da toupeira" -#: src/badguy/badguy.cpp:841 +#: src/badguy/badguy.cpp:1064 msgid "Death script" msgstr "Script de morte" -#: src/badguy/sspiky.hpp:36 +#: src/badguy/sspiky.hpp:37 msgid "Sleeping Spiky" msgstr "Chouteira Durminte" -#: src/badguy/yeti_stalactite.hpp:33 +#: src/badguy/yeti_stalactite.hpp:34 msgid "Yeti's Stalactite" msgstr "Estalactita do Yeti" -#: src/badguy/livefire.hpp:37 +#: src/badguy/fish_harmless.hpp:30 +msgid "Harmless Fish" +msgstr "" + +#: src/badguy/livefire.hpp:38 msgid "Walking Flame" msgstr "Lapa Camiñante" -#: src/badguy/livefire.hpp:67 +#: src/badguy/livefire.hpp:71 msgid "Sleeping Flame" msgstr "Lapa Durminte" -#: src/badguy/livefire.hpp:83 +#: src/badguy/livefire.hpp:89 msgid "Dormant Flame" msgstr "Lapa Latente" -#: src/badguy/owl.hpp:39 +#: src/badguy/owl.hpp:45 msgid "Owl" msgstr "Moucho" -#: src/badguy/igel.hpp:34 +#: src/badguy/igel.hpp:38 msgid "Igel" msgstr "Ourizo" -#: src/badguy/darttrap.cpp:126 +#: src/badguy/darttrap.cpp:148 msgid "Initial delay" msgstr "Tardanza inicial" -#: src/badguy/darttrap.cpp:128 +#: src/badguy/darttrap.cpp:150 msgid "Fire delay" msgstr "Tardanza do lume" -#: src/badguy/darttrap.cpp:129 +#: src/badguy/darttrap.cpp:151 msgid "Ammo" msgstr "Munición" -#: src/badguy/snowball.hpp:29 -msgid "Snowball" -msgstr "Bóla de neve" +#: src/badguy/darttrap.cpp:152 +msgid "Dart sprite" +msgstr "" + +#: src/badguy/darttrap.cpp:164 +msgid "Skull" +msgstr "" + +#: src/badguy/snowball.hpp:30 +msgid "Mr. Snowball" +msgstr "" -#: src/badguy/smartblock.hpp:29 -msgid "Smartblock" -msgstr "Bloque intelixente" +#: src/badguy/smartblock.hpp:30 +msgid "Mrs. Iceblock" +msgstr "" -#: src/badguy/yeti.cpp:369 +#: src/badguy/yeti.cpp:370 msgid "Fixed position" msgstr "Posición fixa" -#: src/badguy/yeti.cpp:370 +#: src/badguy/yeti.cpp:371 msgid "Lives" msgstr "Vidas" -#: src/badguy/goldbomb.hpp:49 +#: src/badguy/goldbomb.hpp:50 msgid "Gold Bomb" msgstr "Bomba Dourada" -#: src/badguy/flyingsnowball.hpp:32 +#: src/badguy/corrupted_granito.hpp:44 +msgid "Corrupted Granito" +msgstr "" + +#: src/badguy/mrbomb.cpp:48 +msgid "Classic" +msgstr "" + +#: src/badguy/flyingsnowball.hpp:33 msgid "Flying Snowball" msgstr "A Mosca" -#: src/badguy/skullyhop.hpp:37 -msgid "Skullyhop" -msgstr "Caveira Choutadora" +#: src/badguy/crusher.cpp:75 +msgid "Ice (normal)" +msgstr "" + +#: src/badguy/crusher.cpp:76 +msgid "Ice (big)" +msgstr "" + +#: src/badguy/crusher.cpp:77 +msgid "Rock (normal)" +msgstr "" + +#: src/badguy/crusher.cpp:78 +msgid "Rock (big)" +msgstr "" + +#: src/badguy/crusher.cpp:79 +msgid "Corrupted (normal)" +msgstr "" + +#: src/badguy/crusher.cpp:80 +msgid "Corrupted (big)" +msgstr "" + +#: src/badguy/crusher.cpp:492 +msgid "Sideways" +msgstr "Beirarrúas" -#: src/badguy/kamikazesnowball.hpp:32 -msgid "Snowshot" -msgstr "Bala de neve" +#: src/badguy/kamikazesnowball.hpp:34 +msgid "Kamikaze Snowball" +msgstr "" -#: src/badguy/kamikazesnowball.hpp:52 +#: src/badguy/kamikazesnowball.hpp:64 msgid "Leafshot" msgstr "Bala de folla" -#: src/badguy/flame.hpp:41 +#: src/badguy/fish_swimming.hpp:40 +msgid "Swimming Fish" +msgstr "" + +#: src/badguy/flame.hpp:47 msgid "Flame" msgstr "Lapa" -#: src/badguy/poisonivy.hpp:30 -msgid "Spring Leaf" -msgstr "Folla de Primavera" +#: src/badguy/scrystallo.hpp:31 +msgid "Sleeping Crystallo" +msgstr "Cristaliño Durminte" + +#: src/badguy/jumpy.cpp:45 +msgid "Wooden" +msgstr "" + +#: src/badguy/jumpy.cpp:47 +msgid "Metal" +msgstr "" + +#: src/badguy/jumpy.cpp:48 +msgid "Bag" +msgstr "" -#: src/badguy/willowisp.hpp:55 +#: src/badguy/willowisp.hpp:57 msgid "Will o' Wisp" msgstr "Asubía-Bólas" -#: src/badguy/badguy.hpp:53 +#: src/badguy/fish_jumping.hpp:41 +msgid "Jumping Fish" +msgstr "" + +#: src/badguy/badguy.hpp:61 msgid "Badguy" msgstr "Tipo malo" -#: src/badguy/ghostflame.hpp:30 -msgid "Ghost Flame" -msgstr "Lapa Pantasma" +#: src/badguy/rcrystallo.hpp:33 +msgid "Roof Crystallo" +msgstr "Cristaliño no Tellado" -#: src/badguy/spiky.hpp:30 +#: src/badguy/spiky.hpp:31 msgid "Spiky" msgstr "Pinchudo" -#: src/badguy/walkingleaf.hpp:30 -msgid "Autumn Leaf" -msgstr "Folla do Outono" +#: src/badguy/walkingleaf.hpp:33 +msgid "Walking Leaf" +msgstr "" + +#: src/badguy/root.hpp:39 +msgid "Root" +msgstr "" -#: src/badguy/owl.cpp:227 +#: src/badguy/owl.cpp:241 msgid "Carry" msgstr "Levar" -#: src/badguy/darttrap.hpp:33 +#: src/badguy/darttrap.hpp:35 msgid "Dart Trap" msgstr "Trampa de Dardos" -#: src/badguy/skydive.hpp:38 +#: src/badguy/skydive.hpp:43 msgid "Skydive" msgstr "Chouta-Ceos" -#: src/badguy/yeti.hpp:37 +#: src/badguy/yeti.hpp:38 msgid "Yeti" msgstr "Yeti" -#: src/badguy/mole.hpp:39 +#: src/badguy/snowball.cpp:41 +msgid "Bumpkin" +msgstr "" + +#: src/badguy/snowball.cpp:42 +msgid "BSOD" +msgstr "" + +#: src/badguy/mole.hpp:38 msgid "Mole" msgstr "Toupa" -#: src/badguy/mrbomb.hpp:42 -msgid "Bomb" -msgstr "Bomba" +#: src/badguy/corrupted_granito.cpp:176 +msgid "Skullyhop" +msgstr "Caveira Choutadora" + +#: src/badguy/mrbomb.hpp:40 +msgid "Mr. Bomb" +msgstr "" -#: src/badguy/walking_candle.hpp:40 +#: src/badguy/walking_candle.hpp:41 msgid "Walking Candle" msgstr "Vela Camiñante" -#: src/badguy/angrystone.hpp:34 +#: src/badguy/angrystone.hpp:39 msgid "Angry Stone" msgstr "Pedra Furiosa" -#: src/badguy/spidermite.hpp:35 -msgid "Spider" -msgstr "Araña" +#: src/badguy/tarantula.cpp:354 +msgid "Spidermite" +msgstr "" + +#: src/badguy/tarantula.cpp:374 +msgid "Static" +msgstr "" -#: src/badguy/ghoul.hpp:28 +#: src/badguy/ghoul.hpp:30 msgid "Ghoul" msgstr "Demo" -#: src/badguy/snowman.hpp:28 +#: src/badguy/granito_giant.hpp:32 +msgid "Giant Granito" +msgstr "" + +#: src/badguy/snowman.hpp:29 msgid "Snowman" msgstr "Boneco de Neve" -#: src/badguy/stumpy.hpp:35 -msgid "Walking Stump" -msgstr "Cañota Camiñante" +#: src/badguy/viciousivy.hpp:33 +msgid "Vicious Ivy" +msgstr "" + +#: src/badguy/stalactite.cpp:156 +msgid "ice" +msgstr "" + +#: src/badguy/stalactite.cpp:157 +msgid "rock" +msgstr "" + +#: src/badguy/fish_chasing.hpp:33 +msgid "Chasing Fish" +msgstr "" -#: src/badguy/fish.hpp:40 -msgid "Fish" -msgstr "Peixe" +#: src/badguy/stumpy.hpp:38 +msgid "Stumpy" +msgstr "" -#: src/badguy/dispenser.cpp:439 +#: src/badguy/dispenser.cpp:412 msgid "Interval (seconds)" msgstr "Intervalo (segundos)" -#: src/badguy/dispenser.cpp:440 +#: src/badguy/dispenser.cpp:413 msgid "Random" msgstr "Aleatorio" -#: src/badguy/dispenser.cpp:441 data//images/engine/editor/objects.stoi:4 -msgid "Enemies" -msgstr "Inimigos" +#: src/badguy/dispenser.cpp:416 +#: src/supertux/menu/editor_objectgroup_menu.cpp:30 +#: src/editor/toolbox_widget.cpp:101 +msgid "Objects" +msgstr "Obxectos" -#: src/badguy/dispenser.cpp:442 +#: src/badguy/dispenser.cpp:419 msgid "Limit dispensed badguys" msgstr "Limitar a cantidade de tipos malos" -#: src/badguy/dispenser.cpp:444 +#: src/badguy/dispenser.cpp:421 +msgid "Obey Gravity" +msgstr "Seguir a Gravidade" + +#: src/badguy/dispenser.cpp:423 msgid "Max concurrent badguys" msgstr "Cantidade máxima de tipos malos á vez" -#: src/badguy/dispenser.cpp:446 src/supertux/menu/editor_levelset_menu.cpp:60 -msgid "Type" -msgstr "Tipo" - -#: src/badguy/dispenser.cpp:447 -msgid "dropper" -msgstr "pingueira" - -#: src/badguy/dispenser.cpp:447 -msgid "rocket launcher" -msgstr "lanzadeira de mísil" +#: src/badguy/dispenser.cpp:435 +msgid "Dropper" +msgstr "" -#: src/badguy/dispenser.cpp:447 -msgid "cannon" -msgstr "canón" +#: src/badguy/dispenser.cpp:436 +msgid "Cannon" +msgstr "" -#: src/badguy/dispenser.cpp:447 -msgid "invisible" -msgstr "invisible" +#: src/badguy/dispenser.cpp:437 src/worldmap/special_tile.cpp:77 +msgid "Invisible" +msgstr "Invisible" -#: src/badguy/snail.hpp:42 +#: src/badguy/snail.hpp:43 msgid "Snail" msgstr "Caracol" -#: src/badguy/smartball.hpp:31 -msgid "Smartball" -msgstr "Bóla Intelixente" +#: src/badguy/smartball.hpp:32 +msgid "Mrs. Snowball" +msgstr "" -#: src/badguy/bouncing_snowball.hpp:31 +#: src/badguy/bouncing_snowball.hpp:39 msgid "Bouncing Snowball" msgstr "Bóla de Neve Saltadora" -#: src/badguy/iceflame.hpp:33 -msgid "Ice Flame" -msgstr "Lapa de Xeo" +#: src/badguy/granito_big.cpp:52 src/badguy/granito.cpp:263 +msgid "Default" +msgstr "" + +#: src/badguy/granito_big.cpp:53 src/badguy/granito.cpp:264 +msgid "Standing" +msgstr "" + +#: src/badguy/granito_big.cpp:54 src/badguy/granito.cpp:265 +msgid "Walking" +msgstr "" + +#: src/badguy/mriceblock.cpp:63 +msgid "Laptop" +msgstr "" -#: src/badguy/dart.hpp:43 +#: src/badguy/dart.hpp:44 msgid "Dart" msgstr "Dardo" -#: src/supertux/statistics.cpp:47 +#: src/badguy/granito.cpp:268 +msgid "Sitting" +msgstr "" + +#: src/supertux/statistics.cpp:54 msgid "Max coins collected:" msgstr "Máximas moedas recollidas:" -#: src/supertux/statistics.cpp:48 +#: src/supertux/statistics.cpp:55 msgid "Max fragging:" msgstr "Máximos inimigos vencidos:" -#: src/supertux/statistics.cpp:49 +#: src/supertux/statistics.cpp:56 msgid "Max secrets found:" msgstr "Máximos segredos atopados:" -#: src/supertux/statistics.cpp:50 +#: src/supertux/statistics.cpp:57 msgid "Best time completed:" msgstr "Completado no mellor tempo:" -#: src/supertux/statistics.cpp:51 +#: src/supertux/statistics.cpp:58 msgid "Level target time:" msgstr "Tempo para acadar o obxectivo do nivel:" -#: src/supertux/statistics.cpp:139 src/supertux/levelintro.cpp:160 +#: src/supertux/statistics.cpp:149 src/supertux/levelintro.cpp:175 msgid "Best Level Statistics" msgstr "Mellores Estadísticas do Nivel" -#: src/supertux/statistics.cpp:228 +#: src/supertux/statistics.cpp:238 msgid "You" msgstr "Ti" -#: src/supertux/statistics.cpp:230 +#: src/supertux/statistics.cpp:240 msgid "Best" msgstr "Mellor" -#: src/supertux/statistics.cpp:232 src/supertux/levelintro.cpp:166 +#: src/supertux/statistics.cpp:242 src/supertux/levelintro.cpp:181 msgid "Coins" msgstr "Moedas" -#: src/supertux/statistics.cpp:255 +#: src/supertux/statistics.cpp:265 msgid "Badguys" msgstr "Tipos malos" -#: src/supertux/statistics.cpp:271 src/supertux/levelintro.cpp:172 +#: src/supertux/statistics.cpp:281 src/supertux/levelintro.cpp:187 msgid "Secrets" msgstr "Segredos" -#: src/supertux/game_object.hpp:77 +#: src/supertux/game_object.hpp:88 msgid "Unknown object" msgstr "Obxecto descoñecido" -#: src/supertux/command_line_arguments.cpp:74 -#, c-format +#: src/supertux/sector.cpp:507 +msgid "Press escape to skip" +msgstr "Pulsar a tecla escape para saltar" + +#: src/supertux/command_line_arguments.cpp:92 +#, c++-format msgid "Usage: {} [OPTIONS] [LEVELFILE]" -msgstr "Utilización: {} [OPTIONS] [LEVELFILE]" +msgstr "" -#: src/supertux/command_line_arguments.cpp:75 +#: src/supertux/command_line_arguments.cpp:93 msgid "General Options:" msgstr "Opcións Xerais:" -#: src/supertux/command_line_arguments.cpp:76 +#: src/supertux/command_line_arguments.cpp:94 msgid " -h, --help Show this help message and quit" msgstr " -h, --help Amosa esta mensaxe de axuda e sae" -#: src/supertux/command_line_arguments.cpp:77 +#: src/supertux/command_line_arguments.cpp:95 msgid " -v, --version Show SuperTux version and quit" msgstr " -v, --version Amosa a versión de SuperTux e sae" -#: src/supertux/command_line_arguments.cpp:78 +#: src/supertux/command_line_arguments.cpp:96 msgid " --verbose Print verbose messages" msgstr " --verbose Publica mensaxes pormenorizadas" -#: src/supertux/command_line_arguments.cpp:79 +#: src/supertux/command_line_arguments.cpp:97 msgid " --debug Print extra verbose messages" msgstr " --verbose Publica mensaxes pormenorizadas extra" -#: src/supertux/command_line_arguments.cpp:80 +#: src/supertux/command_line_arguments.cpp:98 msgid "" " --print-datadir Print SuperTux's primary data directory." msgstr " --print-datadir Publica o directorio de datos primario de SuperTux." -#: src/supertux/command_line_arguments.cpp:82 +#: src/supertux/command_line_arguments.cpp:99 +msgid "" +" --acknowledgements Print the licenses of libraries used by " +"SuperTux." +msgstr " --agradecementos Amosa as licenzas das librerías utilizadas por SuperTux." + +#: src/supertux/command_line_arguments.cpp:101 msgid "Video Options:" msgstr "Opcións de Vídeo:" -#: src/supertux/command_line_arguments.cpp:83 +#: src/supertux/command_line_arguments.cpp:102 msgid " -f, --fullscreen Run in fullscreen mode" msgstr " -f, --fullscreen Funciona en modo pantalla completa" -#: src/supertux/command_line_arguments.cpp:84 +#: src/supertux/command_line_arguments.cpp:103 msgid " -w, --window Run in window mode" msgstr " -w, --window Funciona en modo xanela" -#: src/supertux/command_line_arguments.cpp:85 +#: src/supertux/command_line_arguments.cpp:104 msgid " -g, --geometry WIDTHxHEIGHT Run SuperTux in given resolution" msgstr " -g, --geometry ANCHOxALTO Executa SuperTux na resolución indicada" -#: src/supertux/command_line_arguments.cpp:86 +#: src/supertux/command_line_arguments.cpp:105 msgid " -a, --aspect WIDTH:HEIGHT Run SuperTux with given aspect ratio" msgstr " -a, --aspect ANCHO:ALTO Executa SuperTux coa resolución de aspecto indicada" -#: src/supertux/command_line_arguments.cpp:87 +#: src/supertux/command_line_arguments.cpp:106 msgid " -d, --default Reset video settings to default values" msgstr " -d, --default Restablece a configuración de vídeo ós valores predeterminados" -#: src/supertux/command_line_arguments.cpp:88 +#: src/supertux/command_line_arguments.cpp:107 msgid " --renderer RENDERER Use sdl, opengl, or auto to render" msgstr " --renderer REPRESENTAR Utiliza sdl, opengl, ou auto para representar" -#: src/supertux/command_line_arguments.cpp:90 +#: src/supertux/command_line_arguments.cpp:109 msgid "Audio Options:" msgstr "Opcións de Audio:" -#: src/supertux/command_line_arguments.cpp:91 +#: src/supertux/command_line_arguments.cpp:110 msgid " --disable-sound Disable sound effects" msgstr " --disable-sound Desactiva os efectos de son" -#: src/supertux/command_line_arguments.cpp:92 +#: src/supertux/command_line_arguments.cpp:111 msgid " --disable-music Disable music" msgstr " --disable-music Desactiva a músicaDisable music" -#: src/supertux/command_line_arguments.cpp:94 +#: src/supertux/command_line_arguments.cpp:113 msgid "Game Options:" msgstr "Opcións do Xogo:" -#: src/supertux/command_line_arguments.cpp:95 +#: src/supertux/command_line_arguments.cpp:114 msgid " --edit-level Open given level in editor" msgstr " --edit-level Abrir o nivel indicado no editor" -#: src/supertux/command_line_arguments.cpp:96 +#: src/supertux/command_line_arguments.cpp:115 msgid " --resave Loads given level and saves it" msgstr " --resave Carga o nivel indicado e gárdao" -#: src/supertux/command_line_arguments.cpp:97 +#: src/supertux/command_line_arguments.cpp:116 msgid " --show-fps Display framerate in levels" msgstr " --show-fps Amosa os fotogramas por segundo nos niveis" -#: src/supertux/command_line_arguments.cpp:98 +#: src/supertux/command_line_arguments.cpp:117 msgid " --no-show-fps Do not display framerate in levels" msgstr " --no-show-fps Non amosa os fotogramas por segundo nos niveis" -#: src/supertux/command_line_arguments.cpp:99 +#: src/supertux/command_line_arguments.cpp:118 msgid " --show-pos Display player's current position" msgstr " --show-pos Amosar a posición actual do xogador" -#: src/supertux/command_line_arguments.cpp:100 +#: src/supertux/command_line_arguments.cpp:119 msgid " --no-show-pos Do not display player's position" msgstr " --no-show-pos Non amosar a posición do xogador" -#: src/supertux/command_line_arguments.cpp:101 +#: src/supertux/command_line_arguments.cpp:120 msgid " --developer Switch on developer feature" msgstr " --developer Acende a función programador" -#: src/supertux/command_line_arguments.cpp:102 +#: src/supertux/command_line_arguments.cpp:121 msgid " -s, --debug-scripts Enable script debugger." msgstr " -s, --debug-scripts Activa o depurador de scripts." -#: src/supertux/command_line_arguments.cpp:103 +#: src/supertux/command_line_arguments.cpp:122 msgid "" " --spawn-pos X,Y Where in the level to spawn Tux. Only used if" " level is specified." msgstr " --spawn-pos X,Y Onde soltar a Tux no nivel. Só se utiliza de especificarse o nivel." -#: src/supertux/command_line_arguments.cpp:104 +#: src/supertux/command_line_arguments.cpp:123 msgid " --sector SECTOR Spawn Tux in SECTOR\n" msgstr " --sector SECTOR Soltar a Tux no SECTOR\n" -#: src/supertux/command_line_arguments.cpp:105 +#: src/supertux/command_line_arguments.cpp:124 msgid " --spawnpoint SPAWNPOINT Spawn Tux at SPAWNPOINT\n" msgstr " --spawnpoint PUNTO DE INICIO Soltar a Tux no PUNTO DE INICIO\n" -#: src/supertux/command_line_arguments.cpp:107 -msgid "Demo Recording Options:" -msgstr "Opcións de Gravación da Demostración:" - -#: src/supertux/command_line_arguments.cpp:108 -msgid " --record-demo FILE LEVEL Record a demo to FILE" -msgstr " --record-demo NIVEL DO FICHEIRO Gravar unha demostración a FICHEIRO" - -#: src/supertux/command_line_arguments.cpp:109 -msgid " --play-demo FILE LEVEL Play a recorded demo" -msgstr " --play-demo FICHEIRO NIVEL Reproducir unha demostración gravada" - -#: src/supertux/command_line_arguments.cpp:111 +#: src/supertux/command_line_arguments.cpp:126 msgid "Directory Options:" msgstr "Opcións do Directorio:" -#: src/supertux/command_line_arguments.cpp:112 +#: src/supertux/command_line_arguments.cpp:127 msgid "" " --datadir DIR Set the directory for the games datafiles" msgstr " --datadir DIRECTORIO Establecer o directorio para os ficheiros de datos dos xogos" -#: src/supertux/command_line_arguments.cpp:113 +#: src/supertux/command_line_arguments.cpp:128 msgid "" " --userdir DIR Set the directory for user data (savegames, " "etc.)" msgstr " --userdir DIRECTORIO Establecer o directorio para os datos de usuario (xogos gardados, etc.)" -#: src/supertux/command_line_arguments.cpp:115 +#: src/supertux/command_line_arguments.cpp:130 msgid "Add-On Options:" msgstr "Opcións dos Complementos:" -#: src/supertux/command_line_arguments.cpp:116 +#: src/supertux/command_line_arguments.cpp:131 msgid " --repository-url URL Set the URL to the Add-On repository" msgstr " --repository-url URL Establecer o URL para o repositorio de Complementos" -#: src/supertux/command_line_arguments.cpp:118 +#: src/supertux/command_line_arguments.cpp:133 msgid "Environment variables:" msgstr "Variables de entorno:" -#: src/supertux/command_line_arguments.cpp:119 +#: src/supertux/command_line_arguments.cpp:134 msgid "" " SUPERTUX2_USER_DIR Directory for user data (savegames, etc.)" msgstr " SUPERTUX2_USER_DIR Directorio para os datos do usuario (xogos gardados, etc.)" -#: src/supertux/command_line_arguments.cpp:120 +#: src/supertux/command_line_arguments.cpp:135 msgid " SUPERTUX2_DATA_DIR Directory for the games datafiles" msgstr " SUPERTUX2_DATA_DIR Directorio para os ficheiros de datos dos xogos" -#: src/supertux/title_screen.cpp:43 +#: src/supertux/title_screen.cpp:272 msgid "Copyright" msgstr "Copyright" -#: src/supertux/title_screen.cpp:44 +#: src/supertux/title_screen.cpp:273 msgid "" "This game comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to\n" "redistribute it under certain conditions; see the license file for details.\n" msgstr "Este xogo vén SEN ABSOLUTAMENTE NINGUNHA GARANTÍA. É software libre e es libre de\nredistribuílo baixo certas condicións; mira o ficheiro de licenza para os detalles.\n" -#: src/supertux/menu/contrib_menu.cpp:79 -#: src/supertux/menu/world_set_menu.cpp:31 -msgid "Contrib Levels" -msgstr "Niveis dos Colaboradores" - -#: src/supertux/menu/contrib_menu.cpp:119 -#: src/supertux/menu/contrib_menu.cpp:150 -msgid "*NEW*" -msgstr "*NOVO*" +#: src/supertux/game_object.cpp:114 +msgid "Version" +msgstr "" -#: src/supertux/menu/contrib_menu.cpp:172 src/supertux/menu/debug_menu.cpp:75 -#: src/supertux/menu/editor_level_select_menu.cpp:84 -#: src/supertux/menu/worldmap_cheat_menu.cpp:55 -#: src/supertux/menu/worldmap_cheat_menu.cpp:153 -#: src/supertux/menu/editor_levelset_select_menu.cpp:96 -#: src/supertux/menu/options_menu.cpp:405 -#: src/supertux/menu/profile_menu.cpp:47 src/supertux/menu/addon_menu.cpp:213 -#: src/supertux/menu/editor_new_levelset_menu.cpp:40 -#: src/supertux/menu/world_set_menu.cpp:33 -#: src/supertux/menu/keyboard_menu.cpp:51 -#: src/supertux/menu/language_menu.cpp:56 -#: src/supertux/menu/joystick_menu.cpp:97 -#: src/supertux/menu/contrib_levelset_menu.cpp:67 -#: src/supertux/menu/cheat_menu.cpp:44 -msgid "Back" -msgstr "Atrás" +#: src/supertux/game_object.cpp:129 +#: src/supertux/menu/editor_levelset_menu.cpp:54 +msgid "Type" +msgstr "Tipo" -#: src/supertux/menu/debug_menu.cpp:32 -msgid "Debug" -msgstr "Depurar" +#: src/supertux/menu/integrations_menu.cpp:49 +msgid "Integrations" +msgstr "Integracións" -#: src/supertux/menu/debug_menu.cpp:56 -msgid "Game Speed" -msgstr "Velocidade do Xogo" +#: src/supertux/menu/integrations_menu.cpp:51 +msgid "Do not share level names when editing" +msgstr "Non compartir os nomes dos niveis ó editar" -#: src/supertux/menu/debug_menu.cpp:57 +#: src/supertux/menu/integrations_menu.cpp:52 +msgid "" +"Enable this if you want to work on secret levels and don't want the names to" +" be spoiled" +msgstr "" + +#: src/supertux/menu/integrations_menu.cpp:54 +msgid "Enable Discord integration" +msgstr "Activar a integración con Discord" + +#: src/supertux/menu/integrations_menu.cpp:55 +msgid "" +"Sends information to your Discord application about what you're doing in the" +" game." +msgstr "" + +#: src/supertux/menu/integrations_menu.cpp:57 +msgid "Discord (disabled; not compiled)" +msgstr "Discord (desactivado; non compilado)" + +#: src/supertux/menu/editor_converters_menu.cpp:61 +#: src/supertux/menu/editor_menu.cpp:85 +msgid "Convert Tiles" +msgstr "" + +#: src/supertux/menu/editor_converters_menu.cpp:64 +msgid "Select Tile Conversion File" +msgstr "" + +#: src/supertux/menu/editor_converters_menu.cpp:72 +#, c++-format +msgid "By: {}" +msgstr "" + +#: src/supertux/menu/editor_converters_menu.cpp:75 +msgid "Convert Tiles By File" +msgstr "" + +#: src/supertux/menu/editor_converters_menu.cpp:76 +msgid "Convert all tiles in the current level by a file, specified above." +msgstr "" + +#: src/supertux/menu/editor_converters_menu.cpp:89 +msgid "No tile conversion file selected." +msgstr "" + +#: src/supertux/menu/editor_converters_menu.cpp:93 +msgid "" +"This will convert all tiles in the level. Proceed?\n" +"\n" +"Note: This should not be ran more than once on a level.\n" +"Creating a separate copy of the level is highly recommended." +msgstr "" + +#: src/supertux/menu/video_system_menu.cpp:36 +msgid "Select Video System" +msgstr "" + +#: src/supertux/menu/video_system_menu.cpp:37 +#, c++-format +msgid "Used video system: {}" +msgstr "" + +#: src/supertux/menu/video_system_menu.cpp:54 +msgid "Restart game for the changes to take effect" +msgstr "" + +#: src/supertux/menu/contrib_menu.cpp:68 +#: src/supertux/menu/world_set_menu.cpp:31 +msgid "Contrib Levels" +msgstr "Niveis dos Colaboradores" + +#: src/supertux/menu/contrib_menu.cpp:98 +#: src/supertux/menu/contrib_menu.cpp:112 +msgid "Official Contrib Levels" +msgstr "" + +#: src/supertux/menu/contrib_menu.cpp:99 +#: src/supertux/menu/contrib_menu.cpp:118 +msgid "Community Contrib Levels" +msgstr "" + +#: src/supertux/menu/contrib_menu.cpp:100 +#: src/supertux/menu/contrib_menu.cpp:124 +msgid "User Contrib Levels" +msgstr "" + +#: src/supertux/menu/contrib_menu.cpp:113 +msgid "How is this possible? There are no Official Contrib Levels!" +msgstr "" + +#: src/supertux/menu/contrib_menu.cpp:119 +msgid "No Community Contrib Levels yet. Download them from the Add-ons Menu." +msgstr "" + +#: src/supertux/menu/contrib_menu.cpp:125 +msgid "No User Contrib Levels yet. Create some with the Level Editor." +msgstr "" + +#: src/supertux/menu/debug_menu.cpp:34 +msgid "Debug" +msgstr "Depurar" + +#: src/supertux/menu/debug_menu.cpp:58 +msgid "Game Speed" +msgstr "Velocidade do Xogo" + +#: src/supertux/menu/debug_menu.cpp:59 msgid "Adjust Game Speed" msgstr "Axustar a Velocidade do Xogo" -#: src/supertux/menu/debug_menu.cpp:63 +#: src/supertux/menu/debug_menu.cpp:65 msgid "Show Collision Rects" msgstr "Amosar Rectángulos de Colisión" -#: src/supertux/menu/debug_menu.cpp:64 +#: src/supertux/menu/debug_menu.cpp:66 msgid "Show Worldmap Path" msgstr "Amosar Camiño do Mapa Principal" -#: src/supertux/menu/debug_menu.cpp:65 +#: src/supertux/menu/debug_menu.cpp:67 msgid "Show Controller" msgstr "Amosar Controlador" -#: src/supertux/menu/debug_menu.cpp:66 +#: src/supertux/menu/debug_menu.cpp:68 msgid "Show Framerate" msgstr "Amosar Fotogramas por segundo" -#: src/supertux/menu/debug_menu.cpp:67 +#: src/supertux/menu/debug_menu.cpp:69 msgid "Draw Redundant Frames" msgstr "Representar Cadros Redundantes" -#: src/supertux/menu/debug_menu.cpp:68 +#: src/supertux/menu/debug_menu.cpp:70 msgid "Show Player Position" msgstr "Amosar a Posición do Xogador" -#: src/supertux/menu/debug_menu.cpp:69 +#: src/supertux/menu/debug_menu.cpp:71 msgid "Use Bitmap Fonts" msgstr "Utilizar Fontes Bitmap" -#: src/supertux/menu/debug_menu.cpp:72 +#: src/supertux/menu/debug_menu.cpp:74 msgid "Dump Texture Cache" msgstr "Baleirar a Caché da Textura" +#: src/supertux/menu/particle_editor_save_as.cpp:33 +msgid "Save particle as" +msgstr "Gardar partícula coma" + +#: src/supertux/menu/particle_editor_save_as.cpp:37 +#: src/supertux/menu/editor_save_as.cpp:37 +msgid "File name" +msgstr "Nome do ficheiro" + +#: src/supertux/menu/particle_editor_save_as.cpp:38 +#: src/supertux/menu/editor_save_as.cpp:38 src/editor/particle_editor.cpp:767 +msgid "Save" +msgstr "Gardar" + +#: src/supertux/menu/multiplayer_menu.cpp:27 +#: src/supertux/menu/multiplayer_players_menu.cpp:34 +msgid "Multiplayer" +msgstr "" + +#: src/supertux/menu/multiplayer_menu.cpp:30 +msgid "Auto-manage Players" +msgstr "" + +#: src/supertux/menu/multiplayer_menu.cpp:31 +msgid "" +"Automatically add and remove players when controllers are plugged or " +"unplugged" +msgstr "" + +#: src/supertux/menu/multiplayer_menu.cpp:33 +msgid "Allow Multibind" +msgstr "" + +#: src/supertux/menu/multiplayer_menu.cpp:34 +msgid "Allow binding multiple joysticks to a single player" +msgstr "" + +#: src/supertux/menu/multiplayer_menu.cpp:36 +msgid "Manage Players" +msgstr "" + #: src/supertux/menu/editor_sectors_menu.cpp:31 msgid "Choose Sector" msgstr "Escoller Sector" @@ -1440,45 +2709,98 @@ msgstr "Crear Sector" msgid "Delete Sector" msgstr "Eliminar Sector" -#: src/supertux/menu/editor_sectors_menu.cpp:93 +#: src/supertux/menu/editor_sectors_menu.cpp:92 msgid "Each level must have at least one sector." msgstr "Cada nivel debe ter polo menos un sector." -#: src/supertux/menu/editor_sectors_menu.cpp:98 +#: src/supertux/menu/editor_sectors_menu.cpp:97 msgid "Do you really want to delete this sector?" msgstr "Realmente queres eliminar este sector?" -#: src/supertux/menu/editor_sectors_menu.cpp:101 +#: src/supertux/menu/editor_sectors_menu.cpp:100 msgid "Delete sector" msgstr "Eliminar sector" -#: src/supertux/menu/editor_objectgroup_menu.cpp:30 -#: src/editor/toolbox_widget.cpp:93 -msgid "Objects" -msgstr "Obxectos" +#: src/supertux/menu/custom_menu_menu.cpp:49 +#: src/supertux/menu/options_menu.cpp:191 +msgid "Menu Customization" +msgstr "" + +#: src/supertux/menu/custom_menu_menu.cpp:51 +msgid "Menu Back Color" +msgstr "" + +#: src/supertux/menu/custom_menu_menu.cpp:52 +msgid "Menu Front Color" +msgstr "" + +#: src/supertux/menu/custom_menu_menu.cpp:53 +msgid "Menu Help Back Color" +msgstr "" + +#: src/supertux/menu/custom_menu_menu.cpp:54 +msgid "Menu Help Front Color" +msgstr "" -#: src/supertux/menu/editor_level_select_menu.cpp:58 +#: src/supertux/menu/custom_menu_menu.cpp:55 +msgid "Label Text Color" +msgstr "" + +#: src/supertux/menu/custom_menu_menu.cpp:56 +msgid "Active Text Color" +msgstr "" + +#: src/supertux/menu/custom_menu_menu.cpp:57 +msgid "Divider Line Color" +msgstr "" + +#: src/supertux/menu/custom_menu_menu.cpp:58 +msgid "Menu Roundness" +msgstr "" + +#: src/supertux/menu/custom_menu_menu.cpp:60 +msgid "Editor Interface Color" +msgstr "" + +#: src/supertux/menu/custom_menu_menu.cpp:61 +msgid "Editor Hover Color" +msgstr "" + +#: src/supertux/menu/custom_menu_menu.cpp:62 +msgid "Editor Grab Color" +msgstr "" + +#: src/supertux/menu/custom_menu_menu.cpp:64 +msgid "Reset to defaults" +msgstr "" + +#: src/supertux/menu/editor_level_select_menu.cpp:72 msgid "Empty World" msgstr "Mundo Baleiro" -#: src/supertux/menu/editor_level_select_menu.cpp:73 +#: src/supertux/menu/editor_level_select_menu.cpp:87 msgid "Create Level" msgstr "Crear Nivel" -#: src/supertux/menu/editor_level_select_menu.cpp:77 +#: src/supertux/menu/editor_level_select_menu.cpp:91 msgid "Edit Worldmap" msgstr "Editar Mapa Principal" -#: src/supertux/menu/editor_level_select_menu.cpp:79 +#: src/supertux/menu/editor_level_select_menu.cpp:93 msgid "Create Worldmap" msgstr "Crear Mapa Principal" -#: src/supertux/menu/editor_level_select_menu.cpp:83 -#: src/supertux/menu/editor_levelset_menu.cpp:56 +#: src/supertux/menu/editor_level_select_menu.cpp:95 +#: src/supertux/menu/editor_delete_level_menu.cpp:55 +msgid "Delete level" +msgstr "Eliminar nivel" + +#: src/supertux/menu/editor_level_select_menu.cpp:97 +#: src/supertux/menu/editor_levelset_menu.cpp:50 msgid "World Settings" msgstr "Configuración do Mundo" -#: src/supertux/menu/editor_level_select_menu.cpp:123 +#: src/supertux/menu/editor_level_select_menu.cpp:141 msgid "" "Share this worldmap under license CC-BY-SA 4.0 International (advised).\n" "It allows modifications and redistribution by third-parties.\n" @@ -1486,7 +2808,7 @@ msgid "" "DISCLAIMER: The SuperTux authors take no responsibility for your choice of license." msgstr "Compartir este mapa principal baixo a licenza CC-BY-SA 4.0 Internacional (aconsellado).\nPermite modificacións e a súa redistribución por terceiras partes.\nSe non estás de acordo con esta licenza, cámbiaa nas propiedades do mapa principal.\nADVERTENCIA: Os autores de SuperTux non adquires ningunha responsabilidade pola túa escolla de licenza." -#: src/supertux/menu/editor_level_select_menu.cpp:130 +#: src/supertux/menu/editor_level_select_menu.cpp:148 msgid "" "Share this level under license CC-BY-SA 4.0 International (advised).\n" "It allows modifications and redistribution by third-parties.\n" @@ -1494,402 +2816,815 @@ msgid "" "DISCLAIMER: The SuperTux authors take no responsibility for your choice of license." msgstr "Compartir este nivel baixo a licenza CC-BY-SA 4.0 Internacional (aconsellado).\nPermite modificacións e a súa redistribución por terceiras partes.\nSe non estás de acordo con esta licenza, cámbiaa nas propiedades do nivel.\nADVERTENCIA: Os autores de SuperTux non adquires ningunha responsabilidade pola túa escolla de licenza." -#: src/supertux/menu/worldmap_cheat_menu.cpp:34 -#: src/supertux/menu/cheat_menu.cpp:30 +#: src/supertux/menu/editor_level_select_menu.cpp:179 +msgid "" +"An auto-save recovery file was found. Would you like to restore the recovery\n" +"file and resume where you were before the editor crashed?" +msgstr "Atopouse un ficheiro de recuperación creado automaticamente. Queres restablecer o ficheiro\nde recuperación e continuar onde estabas antes de que o editor se estragase?" + +#: src/supertux/menu/editor_level_select_menu.cpp:186 +msgid "This will delete the auto-save file. Are you sure?" +msgstr "Isto eliminará o ficheiro gardado automaticamente. Continuar?" + +#: src/supertux/menu/worldmap_cheat_apply_menu.cpp:35 +#: src/supertux/menu/worldmap_cheat_apply_menu.cpp:52 +#: src/supertux/menu/cheat_apply_menu.cpp:33 +#: src/supertux/menu/cheat_apply_menu.cpp:51 +msgid "Apply cheat to player" +msgstr "" + +#: src/supertux/menu/worldmap_cheat_apply_menu.cpp:39 +#: src/supertux/menu/worldmap_cheat_apply_menu.cpp:60 +#: src/supertux/menu/multiplayer_players_menu.cpp:39 +#: src/supertux/menu/keyboard_menu.cpp:63 +#: src/supertux/menu/cheat_apply_menu.cpp:39 +#: src/supertux/menu/cheat_apply_menu.cpp:59 +#: src/supertux/menu/multiplayer_player_menu.cpp:37 +#, c++-format +msgid "Player {}" +msgstr "Xogador {}" + +#: src/supertux/menu/worldmap_cheat_apply_menu.cpp:57 +#: src/supertux/menu/cheat_apply_menu.cpp:36 +#: src/supertux/menu/cheat_apply_menu.cpp:56 +msgid "All Players" +msgstr "Tódolos xogadores" + +#: src/supertux/menu/worldmap_cheat_menu.cpp:36 +#: src/supertux/menu/cheat_menu.cpp:31 msgid "Cheats" msgstr "Trampas" -#: src/supertux/menu/worldmap_cheat_menu.cpp:36 -#: src/supertux/menu/cheat_menu.cpp:32 +#: src/supertux/menu/worldmap_cheat_menu.cpp:38 +#: src/supertux/menu/cheat_menu.cpp:33 msgid "Bonus: Grow" msgstr "Bono: Medrar" -#: src/supertux/menu/worldmap_cheat_menu.cpp:37 -#: src/supertux/menu/cheat_menu.cpp:33 +#: src/supertux/menu/worldmap_cheat_menu.cpp:39 +#: src/supertux/menu/cheat_menu.cpp:34 msgid "Bonus: Fire" msgstr "Bono: Lume" -#: src/supertux/menu/worldmap_cheat_menu.cpp:38 -#: src/supertux/menu/cheat_menu.cpp:34 +#: src/supertux/menu/worldmap_cheat_menu.cpp:40 +#: src/supertux/menu/cheat_menu.cpp:35 msgid "Bonus: Ice" msgstr "Bono: Xeo" -#: src/supertux/menu/worldmap_cheat_menu.cpp:39 -#: src/supertux/menu/cheat_menu.cpp:35 +#: src/supertux/menu/worldmap_cheat_menu.cpp:41 +#: src/supertux/menu/cheat_menu.cpp:36 msgid "Bonus: Air" msgstr "Bono: Aire" -#: src/supertux/menu/worldmap_cheat_menu.cpp:40 -#: src/supertux/menu/cheat_menu.cpp:36 +#: src/supertux/menu/worldmap_cheat_menu.cpp:42 +#: src/supertux/menu/cheat_menu.cpp:37 msgid "Bonus: Earth" msgstr "Bono: Terra" -#: src/supertux/menu/worldmap_cheat_menu.cpp:41 +#: src/supertux/menu/worldmap_cheat_menu.cpp:43 msgid "Bonus: None" msgstr "Bono: Ningún" -#: src/supertux/menu/worldmap_cheat_menu.cpp:44 -#: src/supertux/menu/cheat_menu.cpp:42 +#: src/supertux/menu/worldmap_cheat_menu.cpp:46 +#: src/supertux/menu/cheat_menu.cpp:45 src/supertux/menu/cheat_menu.cpp:51 msgid "Leave Ghost Mode" msgstr "Deixar o Modo Pantasma" -#: src/supertux/menu/worldmap_cheat_menu.cpp:44 -#: src/supertux/menu/cheat_menu.cpp:42 +#: src/supertux/menu/worldmap_cheat_menu.cpp:46 +#: src/supertux/menu/cheat_menu.cpp:45 src/supertux/menu/cheat_menu.cpp:50 msgid "Activate Ghost Mode" msgstr "Activar o Modo Pantasma" -#: src/supertux/menu/worldmap_cheat_menu.cpp:46 -#: src/supertux/menu/cheat_menu.cpp:40 +#: src/supertux/menu/worldmap_cheat_menu.cpp:48 +#: src/supertux/menu/cheat_menu.cpp:41 msgid "Finish Level" msgstr "Rematar Nivel" -#: src/supertux/menu/worldmap_cheat_menu.cpp:47 +#: src/supertux/menu/worldmap_cheat_menu.cpp:49 msgid "Reset Level" msgstr "Restablecer Nivel" -#: src/supertux/menu/worldmap_cheat_menu.cpp:49 +#: src/supertux/menu/worldmap_cheat_menu.cpp:51 msgid "Finish Worldmap" msgstr "Rematar Mapa Principal" -#: src/supertux/menu/worldmap_cheat_menu.cpp:50 +#: src/supertux/menu/worldmap_cheat_menu.cpp:52 msgid "Reset Worldmap" msgstr "Restablecer Mapa Principal" -#: src/supertux/menu/worldmap_cheat_menu.cpp:52 +#: src/supertux/menu/worldmap_cheat_menu.cpp:54 msgid "Go to level" msgstr "Ir ó nivel" -#: src/supertux/menu/worldmap_cheat_menu.cpp:53 +#: src/supertux/menu/worldmap_cheat_menu.cpp:55 msgid "Go to main spawnpoint" msgstr "Ir ó punto de inicio principal" -#: src/supertux/menu/worldmap_cheat_menu.cpp:145 +#: src/supertux/menu/worldmap_cheat_menu.cpp:188 msgid "Select level" msgstr "Seleccionar nivel" -#: src/supertux/menu/editor_levelset_select_menu.cpp:54 +#: src/supertux/menu/editor_save_as.cpp:33 +#: src/supertux/menu/editor_menu.cpp:63 +msgid "Save Level as" +msgstr "Gardar Nivel como" + +#: src/supertux/menu/editor_save_as.cpp:33 +#: src/supertux/menu/editor_menu.cpp:64 +msgid "Save Copy" +msgstr "Gardar Copia" + +#: src/supertux/menu/editor_levelset_select_menu.cpp:71 msgid "Choose World" msgstr "Escoller Mundo" -#: src/supertux/menu/editor_levelset_select_menu.cpp:82 -#, c-format -msgid "%d level" -msgid_plural "%d levels" -msgstr[0] "%d nivel" -msgstr[1] "%d niveis" +#: src/supertux/menu/editor_levelset_select_menu.cpp:99 +#, c++-format +msgid "{} level" +msgid_plural "{} levels" +msgstr[0] "" +msgstr[1] "" -#: src/supertux/menu/editor_levelset_select_menu.cpp:95 +#: src/supertux/menu/editor_levelset_select_menu.cpp:112 msgid "Create World" msgstr "Crear Mundo" -#: src/supertux/menu/options_menu.cpp:85 src/supertux/menu/main_menu.cpp:53 -#: src/supertux/menu/game_menu.cpp:61 src/supertux/menu/worldmap_menu.cpp:31 -msgid "Options" -msgstr "Opcións" +#: src/supertux/menu/editor_levelset_select_menu.cpp:113 +#: src/supertux/menu/editor_delete_levelset_menu.cpp:41 +msgid "Delete World" +msgstr "Eliminar Mundo" -#: src/supertux/menu/options_menu.cpp:91 -#: src/supertux/menu/options_menu.cpp:127 -#: src/supertux/menu/options_menu.cpp:418 -#: src/supertux/menu/options_menu.cpp:439 src/editor/object_settings.cpp:112 -msgid "auto" -msgstr "auto" +#: src/supertux/menu/options_menu.cpp:72 +#: src/supertux/menu/options_select_menu.cpp:35 +msgid "Locale" +msgstr "Locale" -#: src/supertux/menu/options_menu.cpp:206 -msgid "Desktop" -msgstr "Escritorio" - -#: src/supertux/menu/options_menu.cpp:332 +#: src/supertux/menu/options_menu.cpp:76 msgid "Select Language" msgstr "Seleccionar Idioma" -#: src/supertux/menu/options_menu.cpp:333 +#: src/supertux/menu/options_menu.cpp:77 msgid "Select a different language to display text in" msgstr "Selecciona un idioma diferente no que amosar o texto" -#: src/supertux/menu/options_menu.cpp:335 +#: src/supertux/menu/options_menu.cpp:79 msgid "Language Packs" msgstr "Paquetes de Idioma" -#: src/supertux/menu/options_menu.cpp:336 +#: src/supertux/menu/options_menu.cpp:80 msgid "Language packs contain up-to-date translations" msgstr "Os paquetes de idioma conteñen traducións actualizadas" -#: src/supertux/menu/options_menu.cpp:338 -#: src/supertux/menu/profile_menu.cpp:30 -msgid "Select Profile" -msgstr "Seleccionar Perfil" +#: src/supertux/menu/options_menu.cpp:88 +#: src/supertux/menu/options_select_menu.cpp:37 +msgid "Video" +msgstr "Vídeo" -#: src/supertux/menu/options_menu.cpp:339 -msgid "Select a profile to play with" -msgstr "Selecciona un perfil co que xogar" - -#: src/supertux/menu/options_menu.cpp:342 +#: src/supertux/menu/options_menu.cpp:91 msgid "Window Resizable" msgstr "Xanela de tamaño axustable" -#: src/supertux/menu/options_menu.cpp:343 +#: src/supertux/menu/options_menu.cpp:92 msgid "Allow window resizing, might require a restart to take effect" msgstr "Permitir o cambio de tamaño da xanela, pode precisar un reinicio para que tome efecto" -#: src/supertux/menu/options_menu.cpp:345 -msgid "Window Resolution" -msgstr "Resolución da Xanela" - -#: src/supertux/menu/options_menu.cpp:346 -msgid "Resize the window to the given size" -msgstr "Cambiar o tamaño da xanela ó tamaño indicado" - -#: src/supertux/menu/options_menu.cpp:348 +#: src/supertux/menu/options_menu.cpp:96 msgid "Fullscreen" msgstr "Pantalla completa" -#: src/supertux/menu/options_menu.cpp:349 +#: src/supertux/menu/options_menu.cpp:97 msgid "Fill the entire screen" msgstr "Enche a pantalla completa" -#: src/supertux/menu/options_menu.cpp:351 -msgid "Fullscreen Resolution" -msgstr "Resolución de Pantalla Completa" - -#: src/supertux/menu/options_menu.cpp:352 -msgid "" -"Determine the resolution used in fullscreen mode (you must toggle fullscreen" -" to complete the change)" -msgstr "Determina a resolución utilizada no modo pantalla completa (debes activar a pantalla completa para completar o cambio)" - -#: src/supertux/menu/options_menu.cpp:354 -msgid "Magnification" -msgstr "Aumento" +#: src/supertux/menu/options_menu.cpp:104 +msgid "Fit to browser" +msgstr "Axustar ó navegador" -#: src/supertux/menu/options_menu.cpp:355 -msgid "Change the magnification of the game area" -msgstr "Cambiar o aumento da área do xogo" +#: src/supertux/menu/options_menu.cpp:105 +msgid "Fit the resolution to the size of your browser" +msgstr "Axustar a resolución ó tamaño do navegador" -#: src/supertux/menu/options_menu.cpp:357 -msgid "VSync" -msgstr "VSync" - -#: src/supertux/menu/options_menu.cpp:358 -msgid "Set the VSync mode" -msgstr "Establecer o modo VSync " +#: src/supertux/menu/options_menu.cpp:116 +msgid "Change Video System" +msgstr "Cambiar o Sistema de Vídeo" -#: src/supertux/menu/options_menu.cpp:360 -msgid "Aspect Ratio" -msgstr "Relación de Aspecto" +#: src/supertux/menu/options_menu.cpp:117 +msgid "Change video system used to render graphics" +msgstr "" -#: src/supertux/menu/options_menu.cpp:361 -msgid "Adjust the aspect ratio" -msgstr "Axustar a relación de aspecto" +#: src/supertux/menu/options_menu.cpp:124 +#: src/supertux/menu/options_select_menu.cpp:38 +msgid "Audio" +msgstr "Audio" -#: src/supertux/menu/options_menu.cpp:366 +#: src/supertux/menu/options_menu.cpp:129 msgid "Disable all sound effects" msgstr "Desactivar tódolos efectos de sonido" -#: src/supertux/menu/options_menu.cpp:368 +#: src/supertux/menu/options_menu.cpp:131 msgid "Disable all music" msgstr "Desactivar toda a música" -#: src/supertux/menu/options_menu.cpp:370 -msgid "Sound Volume" -msgstr "Volume do Son" - -#: src/supertux/menu/options_menu.cpp:371 -msgid "Adjust sound volume" -msgstr "Axustar o volume do son" - -#: src/supertux/menu/options_menu.cpp:373 -msgid "Music Volume" -msgstr "Volume da Música" - -#: src/supertux/menu/options_menu.cpp:374 -msgid "Adjust music volume" -msgstr "Axustar o volume da música" - -#: src/supertux/menu/options_menu.cpp:378 +#: src/supertux/menu/options_menu.cpp:138 msgid "Sound (disabled)" msgstr "Son (desactivado)" -#: src/supertux/menu/options_menu.cpp:379 +#: src/supertux/menu/options_menu.cpp:139 msgid "Music (disabled)" msgstr "Música (desactivada)" -#: src/supertux/menu/options_menu.cpp:382 -#: src/supertux/menu/keyboard_menu.cpp:30 +#: src/supertux/menu/options_menu.cpp:147 +#: src/supertux/menu/options_select_menu.cpp:39 +msgid "Controls" +msgstr "Controis" + +#: src/supertux/menu/options_menu.cpp:151 +msgid "Enable Rumbling Controllers" +msgstr "" + +#: src/supertux/menu/options_menu.cpp:152 +msgid "Enable vibrating the game controllers." +msgstr "" + +#: src/supertux/menu/options_menu.cpp:152 +msgid "This feature is currently only used in the multiplayer options menu." +msgstr "" + +#: src/supertux/menu/options_menu.cpp:154 +#: src/supertux/menu/keyboard_menu.cpp:34 msgid "Setup Keyboard" msgstr "Configurar Teclado" -#: src/supertux/menu/options_menu.cpp:383 +#: src/supertux/menu/options_menu.cpp:155 msgid "Configure key-action mappings" msgstr "Configurar a asignación de teclas de acción" -#: src/supertux/menu/options_menu.cpp:385 -#: src/supertux/menu/joystick_menu.cpp:52 +#: src/supertux/menu/options_menu.cpp:158 +#: src/supertux/menu/joystick_menu.cpp:54 msgid "Setup Joystick" msgstr "Configurar Joystick" -#: src/supertux/menu/options_menu.cpp:386 +#: src/supertux/menu/options_menu.cpp:159 msgid "Configure joystick control-action mappings" msgstr "Configurar a asignación do control de acción do joystick" -#: src/supertux/menu/options_menu.cpp:388 +#: src/supertux/menu/options_menu.cpp:167 +#: src/supertux/menu/options_select_menu.cpp:40 +msgid "Extras" +msgstr "Extras" + +#: src/supertux/menu/options_menu.cpp:170 +#: src/supertux/menu/profile_menu.cpp:56 +msgid "Select Profile" +msgstr "Seleccionar Perfil" + +#: src/supertux/menu/options_menu.cpp:171 +msgid "Select a profile to play with" +msgstr "Selecciona un perfil co que xogar" + +#: src/supertux/menu/options_menu.cpp:174 +msgid "Multiplayer settings" +msgstr "" + +#: src/supertux/menu/options_menu.cpp:175 +msgid "Configure settings specific to multiplayer" +msgstr "" + +#: src/supertux/menu/options_menu.cpp:178 msgid "Enable transitions" msgstr "Activar transicións" -#: src/supertux/menu/options_menu.cpp:389 +#: src/supertux/menu/options_menu.cpp:179 msgid "Enable screen transitions and smooth menu animation" msgstr "Permitir transicións de pantalla e animación suave do menú" -#: src/supertux/menu/options_menu.cpp:393 -msgid "Developer Mode" -msgstr "Modo Programador" +#: src/supertux/menu/options_menu.cpp:181 +msgid "Custom title screen levels" +msgstr "" -#: src/supertux/menu/options_menu.cpp:398 +#: src/supertux/menu/options_menu.cpp:182 +msgid "Allow overriding the title screen level, when loading certain worlds" +msgstr "" + +#: src/supertux/menu/options_menu.cpp:185 msgid "Christmas Mode" msgstr "Modo Nadal" -#: src/supertux/menu/options_menu.cpp:401 +#: src/supertux/menu/options_menu.cpp:187 +msgid "Integrations and presence" +msgstr "Integracións e presencia" + +#: src/supertux/menu/options_menu.cpp:188 +msgid "" +"Manage whether SuperTux should display the levels you play on your social " +"media profiles (Discord)" +msgstr "Xestiona se SuperTux debe amosar os niveis ós que xogas nos perfís das redes sociais (Discord)" + +#: src/supertux/menu/options_menu.cpp:192 +msgid "Customize the appearance of the menus" +msgstr "" + +#: src/supertux/menu/options_menu.cpp:199 +#: src/supertux/menu/options_select_menu.cpp:41 +msgid "Advanced" +msgstr "Avanzado" + +#: src/supertux/menu/options_menu.cpp:204 +msgid "Developer Mode" +msgstr "Modo Programador" + +#: src/supertux/menu/options_menu.cpp:206 msgid "Confirmation Dialog" msgstr "Diálogo de Confirmación" -#: src/supertux/menu/options_menu.cpp:401 +#: src/supertux/menu/options_menu.cpp:206 msgid "Confirm aborting level" msgstr "Confirma se queres cancelar o nivel" -#: src/supertux/menu/options_menu.cpp:402 +#: src/supertux/menu/options_menu.cpp:208 msgid "Pause on focus loss" msgstr "Pausa ó perder o foco" +#: src/supertux/menu/options_menu.cpp:209 +msgid "Automatically pause the game when the window loses focus" +msgstr "Poñer en pausa o xogo automaticamente cando cambie a xanela " + +#: src/supertux/menu/options_menu.cpp:211 +msgid "Use custom mouse cursor" +msgstr "Utilizar un cursor do rato personalizado" + +#: src/supertux/menu/options_menu.cpp:211 +msgid "Whether the game renders its own cursor or uses the system's cursor" +msgstr "Se o xogo representa o seu propio cursor ou utiliza o cursor do sistema" + +#: src/supertux/menu/options_menu.cpp:214 +msgid "Check for new releases" +msgstr "" + +#: src/supertux/menu/options_menu.cpp:215 +msgid "" +"Allows the game to perform checks for new SuperTux releases on startup and " +"notify if any found." +msgstr "" + +#: src/supertux/menu/options_menu.cpp:245 +#: src/supertux/menu/options_menu.cpp:288 src/supertux/direction.cpp:76 +msgid "auto" +msgstr "auto" + +#: src/supertux/menu/options_menu.cpp:281 +msgid "Magnification" +msgstr "Aumento" + +#: src/supertux/menu/options_menu.cpp:282 +msgid "Change the magnification of the game area" +msgstr "Cambiar o aumento da área do xogo" + +#: src/supertux/menu/options_menu.cpp:318 +msgid "Aspect Ratio" +msgstr "Relación de Aspecto" + +#: src/supertux/menu/options_menu.cpp:319 +msgid "Adjust the aspect ratio" +msgstr "Axustar a relación de aspecto" + +#: src/supertux/menu/options_menu.cpp:346 +msgid "Window Resolution" +msgstr "Resolución da Xanela" + +#: src/supertux/menu/options_menu.cpp:347 +msgid "Resize the window to the given size" +msgstr "Cambiar o tamaño da xanela ó tamaño indicado" + +#: src/supertux/menu/options_menu.cpp:377 +msgid "Desktop" +msgstr "Escritorio" + +#: src/supertux/menu/options_menu.cpp:404 +msgid "Fullscreen Resolution" +msgstr "Resolución de Pantalla Completa" + +#: src/supertux/menu/options_menu.cpp:405 +msgid "" +"Determine the resolution used in fullscreen mode (you must toggle fullscreen" +" to complete the change)" +msgstr "Determina a resolución utilizada no modo pantalla completa (debes activar a pantalla completa para completar o cambio)" + +#: src/supertux/menu/options_menu.cpp:411 +msgid "on" +msgstr "aceso" + +#: src/supertux/menu/options_menu.cpp:412 +msgid "off" +msgstr "apagado" + +#: src/supertux/menu/options_menu.cpp:413 +msgid "adaptive" +msgstr "adaptativo" + +#: src/supertux/menu/options_menu.cpp:431 +msgid "VSync" +msgstr "VSync" + +#: src/supertux/menu/options_menu.cpp:432 +msgid "Set the VSync mode" +msgstr "Establecer o modo VSync " + +#: src/supertux/menu/options_menu.cpp:467 +msgid "Sound Volume" +msgstr "Volume do Son" + +#: src/supertux/menu/options_menu.cpp:468 +msgid "Adjust sound volume" +msgstr "Axustar o volume do son" + +#: src/supertux/menu/options_menu.cpp:503 +msgid "Music Volume" +msgstr "Volume da Música" + +#: src/supertux/menu/options_menu.cpp:504 +msgid "Adjust music volume" +msgstr "Axustar o volume da música" + +#: src/supertux/menu/options_menu.cpp:517 +msgid "On-screen controls scale" +msgstr "" + +#: src/supertux/menu/options_menu.cpp:638 +msgid "" +"The game couldn't detect your browser resolution.\n" +"This most likely happens because it is not embedded\n" +"in the SuperTux custom HTML template.\n" +msgstr "O xogo non puido detectar a resolución do teu navegador.\nIsto acontece frecuentemente porque non está integrado\nno modelo HTML personalizado de SuperTux.\n" + +#: src/supertux/menu/editor_delete_levelset_menu.cpp:80 +msgid "You cannot delete the world that you are editing" +msgstr "" + +#: src/supertux/menu/editor_delete_levelset_menu.cpp:83 +#, c++-format +msgid "You are about to delete world \"{}\". Are you sure?" +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:82 +#, c++-format +msgid "{} \"{}\"" +msgstr "{} \"{}\"" + +#: src/supertux/menu/addon_preview_menu.cpp:87 +msgid "Some information about this add-on is not available." +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:88 +msgid "Perform a \"Check Online\" to try retrieving it." +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:92 +msgid "No author specified." +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:92 +#, c++-format +msgid "Author: {}" +msgstr "Autor: {}" + +#: src/supertux/menu/addon_preview_menu.cpp:93 +#, c++-format +msgid "Type: {}" +msgstr "Tipo: {}" + +#: src/supertux/menu/addon_preview_menu.cpp:94 +msgid "No license specified." +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:94 +#, c++-format +msgid "License: {}" +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:99 +msgid "Dependencies:" +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:108 +msgid "Installed" +msgstr "Instalado" + +#: src/supertux/menu/addon_preview_menu.cpp:108 +msgid "Not installed" +msgstr "Non instalado" + +#: src/supertux/menu/addon_preview_menu.cpp:113 +msgid "Not available!" +msgstr "Non dispoñible!" + +#: src/supertux/menu/addon_preview_menu.cpp:120 +msgid "Description:" +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:123 +msgid "No description available." +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:147 +msgid "Failed to load all available screenshot previews." +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:152 +msgid "Show screenshots" +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:165 +msgid "Screenshot previews are disabled for automatic installs." +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:169 +msgid "No screenshot previews available." +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:177 +msgid "Install" +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:190 +msgid "Uninstall" +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:214 +#, c++-format +msgid "Are you sure you want to uninstall \"{}\"?" +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:215 +msgid "" +"\n" +"Your progress won't be lost." +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:227 +#, c++-format +msgid "" +"NOTE: The add-on \"{}\" is a dependency of {} other installed {}.\n" +"Are you sure you wish to uninstall?" +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:246 +#, c++-format +msgid "" +"Cannot toggle add-on \"{}\":\n" +"{}" +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:279 +msgid "Fetching screenshot previews..." +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:300 +msgid "Updating" +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:300 +msgid "Downloading" +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:328 +msgid "Add-on uninstalled successfully." +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:333 +#, c++-format +msgid "" +"Error uninstalling add-on:\n" +"{}" +msgstr "" + +#: src/supertux/menu/addon_preview_menu.cpp:361 +msgid "" +"Please restart SuperTux\n" +"for these changes to take effect." +msgstr "Reinicie SuperTux\npara que estes cambios teñan efecto." + #: src/supertux/menu/main_menu.cpp:51 src/supertux/menu/world_set_menu.cpp:28 msgid "Start Game" msgstr "Comezar Xogo" -#: src/supertux/menu/main_menu.cpp:52 src/supertux/menu/addon_menu.cpp:122 +#: src/supertux/menu/main_menu.cpp:55 msgid "Add-ons" msgstr "Complementos" -#: src/supertux/menu/main_menu.cpp:54 src/supertux/menu/editor_menu.cpp:39 +#: src/supertux/menu/main_menu.cpp:57 src/supertux/menu/web_asset_menu.cpp:38 +msgid "Manage Assets" +msgstr "Xestionar Datos" + +#: src/supertux/menu/main_menu.cpp:59 +#: src/supertux/menu/options_select_menu.cpp:29 +#: src/supertux/menu/game_menu.cpp:58 src/supertux/menu/worldmap_menu.cpp:31 +#: src/supertux/menu/editor_menu.cpp:70 +msgid "Options" +msgstr "Opcións" + +#: src/supertux/menu/main_menu.cpp:60 src/supertux/menu/editor_menu.cpp:58 msgid "Level Editor" msgstr "Editor de Niveis" -#: src/supertux/menu/main_menu.cpp:55 +#: src/supertux/menu/main_menu.cpp:61 msgid "Credits" msgstr "Créditos" -#: src/supertux/menu/main_menu.cpp:56 +#: src/supertux/menu/main_menu.cpp:64 msgid "Donate" msgstr "Doar" -#: src/supertux/menu/main_menu.cpp:57 +#: src/supertux/menu/main_menu.cpp:67 msgid "Quit" msgstr "Saír" -#: src/supertux/menu/editor_sector_menu.cpp:35 +#: src/supertux/menu/main_menu.cpp:106 +msgid "" +"This will take you to the SuperTux donation page. Are you sure you want to " +"continue?" +msgstr "" + +#: src/supertux/menu/editor_sector_menu.cpp:34 +#, c++-format +msgid "Sector {}" +msgstr "" + +#: src/supertux/menu/editor_sector_menu.cpp:37 msgid "Initialization script" msgstr "Script de iniciación" -#: src/supertux/menu/editor_sector_menu.cpp:36 +#: src/supertux/menu/editor_sector_menu.cpp:38 msgid "Gravity" msgstr "Gravidade" -#: src/supertux/menu/editor_sector_menu.cpp:41 +#: src/supertux/menu/editor_sector_menu.cpp:43 msgid "Resize offset X" msgstr "Cambiar tamaño da compensación X" -#: src/supertux/menu/editor_sector_menu.cpp:42 +#: src/supertux/menu/editor_sector_menu.cpp:44 msgid "Resize offset Y" msgstr "Cambiar tamaño da compensación Y" -#: src/supertux/menu/editor_sector_menu.cpp:43 +#: src/supertux/menu/editor_sector_menu.cpp:45 msgid "Resize" msgstr "Cambiar o tamaño" -#: src/supertux/menu/profile_menu.cpp:37 -#, c-format -msgid "[Profile {}]" -msgstr "[Perfil {}]" +#: src/supertux/menu/profile_menu.cpp:60 +msgid "No profiles found." +msgstr "" -#: src/supertux/menu/profile_menu.cpp:41 -#, c-format +#: src/supertux/menu/profile_menu.cpp:68 +#: src/supertux/menu/profile_menu.cpp:149 +#: src/supertux/menu/profile_menu.cpp:168 +#, c++-format msgid "Profile {}" -msgstr "Perfil {}" +msgstr "" + +#: src/supertux/menu/profile_menu.cpp:69 +#, c++-format +msgid "{} (Profile {})" +msgstr "" + +#: src/supertux/menu/profile_menu.cpp:84 +msgid "No profile selected." +msgstr "" + +#: src/supertux/menu/profile_menu.cpp:91 src/supertux/menu/profile_menu.cpp:93 +#: src/supertux/menu/profile_name_menu.cpp:42 +msgid "Rename" +msgstr "" + +#: src/supertux/menu/profile_menu.cpp:98 +#: src/supertux/menu/profile_menu.cpp:100 +msgid "Reset" +msgstr "" + +#: src/supertux/menu/profile_menu.cpp:103 +#: src/supertux/menu/profile_menu.cpp:105 +msgid "Reset all" +msgstr "" + +#: src/supertux/menu/profile_menu.cpp:113 +#: src/supertux/menu/profile_menu.cpp:115 +msgid "Delete all" +msgstr "" -#: src/supertux/menu/editor_levelset_menu.cpp:59 +#: src/supertux/menu/profile_menu.cpp:148 +#, c++-format +msgid "" +"This will reset all game progress on the profile \"{}\".\n" +"Are you sure?" +msgstr "" + +#: src/supertux/menu/profile_menu.cpp:157 +msgid "This will reset your game progress on all profiles. Are you sure?" +msgstr "Isto restablecerá o progreso no xogo en tódolos perfís. Estás seguro?" + +#: src/supertux/menu/profile_menu.cpp:167 +#, c++-format +msgid "" +"This will delete the profile \"{}\",\n" +"including all game progress on it. Are you sure?" +msgstr "" + +#: src/supertux/menu/profile_menu.cpp:178 +msgid "" +"This will delete all profiles, including all game progress on them.\n" +"Are you sure?" +msgstr "" + +#: src/supertux/menu/editor_levelset_menu.cpp:53 #: src/supertux/menu/editor_new_levelset_menu.cpp:35 msgid "Description" msgstr "Descrición" -#: src/supertux/menu/editor_levelset_menu.cpp:60 -#: src/supertux/menu/addon_menu.cpp:48 -#: data//images/engine/editor/objects.stoi:332 -msgid "Worldmap" -msgstr "Mapa Principal" +#: src/supertux/menu/editor_levelset_menu.cpp:55 +msgid "Title Screen Level" +msgstr "" -#: src/supertux/menu/editor_levelset_menu.cpp:60 -#: src/supertux/menu/addon_menu.cpp:45 -msgid "Levelset" -msgstr "Conxunto de niveis" +#: src/supertux/menu/editor_levelset_menu.cpp:56 +msgid "A level to be used for the title screen, after exiting the world." +msgstr "" -#: src/supertux/menu/addon_menu.cpp:51 -msgid "World" -msgstr "Mundo" +#: src/supertux/menu/multiplayer_players_menu.cpp:46 +msgid "Add Player" +msgstr "" -#: src/supertux/menu/addon_menu.cpp:54 -msgid "Add-on" -msgstr "Complemento" +#: src/supertux/menu/multiplayer_players_menu.cpp:59 +msgid "Remove Last Player" +msgstr "" -#: src/supertux/menu/addon_menu.cpp:60 -msgid "Unknown" -msgstr "Descoñecido" +#: src/supertux/menu/multiplayer_players_menu.cpp:62 +msgid "" +"Warning: The player you are trying to\n" +"remove is currently in-game.\n" +"\n" +"Do you wish to remove them anyways?" +msgstr "" -#: src/supertux/menu/addon_menu.cpp:71 -#, c-format -msgid "{} \"{}\" by \"{}\"" -msgstr "{} \"{}\" por \"{}\"" +#: src/supertux/menu/addon_menu.cpp:68 +msgid "Installed Language Packs" +msgstr "" + +#: src/supertux/menu/addon_menu.cpp:68 +msgid "Installed Add-ons" +msgstr "" + +#: src/supertux/menu/addon_menu.cpp:76 src/supertux/menu/addon_menu.cpp:117 +msgid "No language packs installed" +msgstr "" -#: src/supertux/menu/addon_menu.cpp:129 +#: src/supertux/menu/addon_menu.cpp:76 msgid "No Add-ons installed" msgstr "Non hai Complementos instalados" -#: src/supertux/menu/addon_menu.cpp:133 -msgid "No Add-ons found" -msgstr "Non se atoparon Complementos" +#: src/supertux/menu/addon_menu.cpp:124 +#, c++-format +msgid "{} {}*UPDATE*" +msgstr "" -#: src/supertux/menu/addon_menu.cpp:179 -#, c-format -msgid "Install {} *NEW*" -msgstr "Instalar {} *NOVO*" +#: src/supertux/menu/addon_menu.cpp:130 +#, c++-format +msgid "{}{}" +msgstr "" -#: src/supertux/menu/addon_menu.cpp:190 -#, c-format -msgid "Install {}" -msgstr "Instalar {}" +#: src/supertux/menu/addon_menu.cpp:140 +msgid "No updates available." +msgstr "" -#: src/supertux/menu/addon_menu.cpp:199 -msgid "No new Add-ons found" -msgstr "Non se atoparon Complementos novos" +#: src/supertux/menu/addon_menu.cpp:144 +#, c++-format +msgid "{} {} available" +msgstr "" -#: src/supertux/menu/addon_menu.cpp:205 -msgid "Check Online (disabled)" -msgstr "Verificar En Liña (desactivado)" +#: src/supertux/menu/addon_menu.cpp:144 +msgid "update" +msgstr "" -#: src/supertux/menu/addon_menu.cpp:209 -msgid "Check Online" -msgstr "Verificar En Liña" +#: src/supertux/menu/addon_menu.cpp:144 +msgid "updates" +msgstr "" -#: src/supertux/menu/addon_menu.cpp:286 -msgid "Downloading Add-On Repository Index" -msgstr "Descargar o Índice do Repositorio de Complementos" +#: src/supertux/menu/addon_menu.cpp:146 +msgid "Check for updates" +msgstr "" -#: src/supertux/menu/addon_menu.cpp:301 -#, c-format -msgid "Downloading {}" -msgstr "Descargando {}" +#: src/supertux/menu/addon_menu.cpp:150 +msgid "Browse language packs" +msgstr "" -#: src/supertux/menu/addon_menu.cpp:348 -msgid "" -"Please restart SuperTux\n" -"for these changes to take effect." -msgstr "Reinicie SuperTux\npara que estes cambios teñan efecto." +#: src/supertux/menu/addon_menu.cpp:150 +#: src/supertux/menu/addon_browse_menu.cpp:70 +msgid "Browse Add-ons" +msgstr "" + +#: src/supertux/menu/addon_menu.cpp:151 +msgid "Install from file" +msgstr "" + +#: src/supertux/menu/addon_menu.cpp:208 +msgid "Checking for updates..." +msgstr "" #: src/supertux/menu/editor_new_levelset_menu.cpp:31 msgid "New World" @@ -1903,217 +3638,302 @@ msgstr "Introduza un nome para este subconxunto de niveis" msgid "Story Mode" msgstr "Modo Historia" -#: src/supertux/menu/game_menu.cpp:31 -msgid "Are you sure?" -msgstr "Estás seguro?" +#: src/supertux/menu/addon_browse_menu.cpp:70 +msgid "Browse Language Packs" +msgstr "" + +#: src/supertux/menu/addon_browse_menu.cpp:112 +#, c++-format +msgid "Page {}/{}" +msgstr "" + +#: src/supertux/menu/addon_browse_menu.cpp:124 +msgid "No new language packs available" +msgstr "" + +#: src/supertux/menu/addon_browse_menu.cpp:124 +msgid "No new Add-ons available" +msgstr "" + +#: src/supertux/menu/addon_browse_menu.cpp:127 +msgid "No language packs available" +msgstr "" + +#: src/supertux/menu/addon_browse_menu.cpp:127 +msgid "No Add-ons available" +msgstr "" + +#: src/supertux/menu/addon_browse_menu.cpp:135 +#: src/supertux/menu/addon_browse_menu.cpp:139 +msgid "Previous page" +msgstr "Páxina previa" + +#: src/supertux/menu/addon_browse_menu.cpp:143 +#: src/supertux/menu/addon_browse_menu.cpp:147 +msgid "Next page" +msgstr "Seguinte páxina" + +#: src/supertux/menu/addon_browse_menu.cpp:154 +msgid "Check Online (disabled)" +msgstr "Verificar En Liña (desactivado)" + +#: src/supertux/menu/addon_browse_menu.cpp:158 +msgid "Check Online" +msgstr "Verificar En Liña" + +#: src/supertux/menu/addon_browse_menu.cpp:195 +msgid "Downloading Add-On Repository Index" +msgstr "Descargar o Índice do Repositorio de Complementos" -#: src/supertux/menu/game_menu.cpp:54 src/supertux/menu/worldmap_menu.cpp:30 +#: src/supertux/menu/web_asset_menu.cpp:42 +msgid "New files location" +msgstr "Localización dos novos ficheiros" + +#: src/supertux/menu/web_asset_menu.cpp:43 +msgid "Add Files" +msgstr "Engadir Ficheiros" + +#: src/supertux/menu/web_asset_menu.cpp:44 +msgid "Download Files" +msgstr "Descargar Ficheiros" + +#: src/supertux/menu/particle_editor_open.cpp:32 +msgid "Load particle file" +msgstr "Cargar ficheiro de partícula" + +#: src/supertux/menu/particle_editor_open.cpp:39 +msgid "Open" +msgstr "Abrir" + +#: src/supertux/menu/game_menu.cpp:51 src/supertux/menu/worldmap_menu.cpp:30 msgid "Continue" msgstr "Continuar" -#: src/supertux/menu/game_menu.cpp:55 +#: src/supertux/menu/game_menu.cpp:52 msgid "Restart Level" msgstr "Reiniciar Nivel" -#: src/supertux/menu/game_menu.cpp:58 +#: src/supertux/menu/game_menu.cpp:55 msgid "Restart from Checkpoint" msgstr "Reiniciar dende o Punto de Rescate" -#: src/supertux/menu/game_menu.cpp:63 +#: src/supertux/menu/game_menu.cpp:60 msgid "Abort Level" msgstr "Cancelar Nivel" -#: src/supertux/menu/keyboard_menu.cpp:32 -#: src/supertux/menu/joystick_menu.cpp:69 -msgid "Up" -msgstr "Arriba" +#: src/supertux/menu/game_menu.cpp:76 src/supertux/menu/game_menu.cpp:87 +#: src/supertux/menu/game_menu.cpp:99 +msgid "Are you sure?" +msgstr "Estás seguro?" -#: src/supertux/menu/keyboard_menu.cpp:33 -#: src/supertux/menu/joystick_menu.cpp:70 -msgid "Down" -msgstr "Abaixo" +#: src/supertux/menu/profile_name_menu.cpp:36 +#, c++-format +msgid "Rename \"{}\"" +msgstr "" -#: src/supertux/menu/keyboard_menu.cpp:34 +#: src/supertux/menu/profile_name_menu.cpp:36 +msgid "Add profile" +msgstr "Engadir perfil" + +#: src/supertux/menu/profile_name_menu.cpp:40 +msgid "Profile names must have a maximum of 20 characters." +msgstr "Os nomes do perfil deben ter un máximo de 20 caracteres." + +#: src/supertux/menu/profile_name_menu.cpp:42 +msgid "Create" +msgstr "Crear" + +#: src/supertux/menu/profile_name_menu.cpp:56 +msgid "" +"Profile names must have a maximum of 20 characters.\n" +"Please choose a different name." +msgstr "Os nomes do perfil deben ter un máximo de 20 caracteres.\nPor favor, elixe un nome diferente." + +#: src/supertux/menu/profile_name_menu.cpp:77 +msgid "An error occurred while creating the profile." +msgstr "Produciuse un erro ó crear o perfil." + +#: src/supertux/menu/keyboard_menu.cpp:36 #: src/supertux/menu/joystick_menu.cpp:71 -msgid "Left" -msgstr "Esquerda" +msgid "Up" +msgstr "Arriba" -#: src/supertux/menu/keyboard_menu.cpp:35 +#: src/supertux/menu/keyboard_menu.cpp:37 #: src/supertux/menu/joystick_menu.cpp:72 -msgid "Right" -msgstr "Dereita" +msgid "Down" +msgstr "Abaixo" -#: src/supertux/menu/keyboard_menu.cpp:36 -#: src/supertux/menu/joystick_menu.cpp:73 +#: src/supertux/menu/keyboard_menu.cpp:40 +#: src/supertux/menu/joystick_menu.cpp:75 msgid "Jump" msgstr "Saltar" -#: src/supertux/menu/keyboard_menu.cpp:38 -#: src/supertux/menu/joystick_menu.cpp:76 +#: src/supertux/menu/keyboard_menu.cpp:43 +#: src/supertux/menu/joystick_menu.cpp:78 msgid "Peek Left" msgstr "Ollar á Esquerda" -#: src/supertux/menu/keyboard_menu.cpp:39 -#: src/supertux/menu/joystick_menu.cpp:77 +#: src/supertux/menu/keyboard_menu.cpp:44 +#: src/supertux/menu/joystick_menu.cpp:79 msgid "Peek Right" msgstr "Ollar á Dereita" -#: src/supertux/menu/keyboard_menu.cpp:40 -#: src/supertux/menu/joystick_menu.cpp:78 +#: src/supertux/menu/keyboard_menu.cpp:45 +#: src/supertux/menu/joystick_menu.cpp:80 msgid "Peek Up" msgstr "Ollar Arriba" -#: src/supertux/menu/keyboard_menu.cpp:41 -#: src/supertux/menu/joystick_menu.cpp:79 +#: src/supertux/menu/keyboard_menu.cpp:46 +#: src/supertux/menu/joystick_menu.cpp:81 msgid "Peek Down" msgstr "Ollar Embaixo" -#: src/supertux/menu/keyboard_menu.cpp:43 -#: src/supertux/menu/joystick_menu.cpp:81 +#: src/supertux/menu/keyboard_menu.cpp:51 +#: src/supertux/menu/joystick_menu.cpp:83 msgid "Console" msgstr "Consola" -#: src/supertux/menu/keyboard_menu.cpp:46 -#: src/supertux/menu/joystick_menu.cpp:82 +#: src/supertux/menu/keyboard_menu.cpp:52 +#: src/supertux/menu/joystick_menu.cpp:84 msgid "Cheat Menu" msgstr "Menú das Trampas" -#: src/supertux/menu/keyboard_menu.cpp:47 -#: src/supertux/menu/joystick_menu.cpp:83 +#: src/supertux/menu/keyboard_menu.cpp:53 +#: src/supertux/menu/joystick_menu.cpp:85 msgid "Debug Menu" msgstr "Menú da Depuración" -#: src/supertux/menu/keyboard_menu.cpp:49 -#: src/supertux/menu/joystick_menu.cpp:85 +#: src/supertux/menu/keyboard_menu.cpp:56 +#: src/supertux/menu/joystick_menu.cpp:87 msgid "Jump with Up" msgstr "Saltar coa frecha Arriba" -#: src/supertux/menu/keyboard_menu.cpp:62 +#: src/supertux/menu/keyboard_menu.cpp:82 msgid "Up cursor" msgstr "Cursor arriba" -#: src/supertux/menu/keyboard_menu.cpp:64 +#: src/supertux/menu/keyboard_menu.cpp:84 msgid "Down cursor" msgstr "Cursor abaixo" -#: src/supertux/menu/keyboard_menu.cpp:66 +#: src/supertux/menu/keyboard_menu.cpp:86 msgid "Left cursor" msgstr "Cursor esquerdo" -#: src/supertux/menu/keyboard_menu.cpp:68 +#: src/supertux/menu/keyboard_menu.cpp:88 msgid "Right cursor" msgstr "Cursor dereito" -#: src/supertux/menu/keyboard_menu.cpp:70 +#: src/supertux/menu/keyboard_menu.cpp:90 msgid "Return" msgstr "Retroceso" -#: src/supertux/menu/keyboard_menu.cpp:72 +#: src/supertux/menu/keyboard_menu.cpp:92 msgid "Space" msgstr "Espazo" -#: src/supertux/menu/keyboard_menu.cpp:74 +#: src/supertux/menu/keyboard_menu.cpp:94 msgid "Right Shift" msgstr "Maiúscula Dereita" -#: src/supertux/menu/keyboard_menu.cpp:76 +#: src/supertux/menu/keyboard_menu.cpp:96 msgid "Left Shift" msgstr "Maiúscula Esquerda" -#: src/supertux/menu/keyboard_menu.cpp:78 +#: src/supertux/menu/keyboard_menu.cpp:98 msgid "Right Control" msgstr "Control Dereita" -#: src/supertux/menu/keyboard_menu.cpp:80 +#: src/supertux/menu/keyboard_menu.cpp:100 msgid "Left Control" msgstr "Control Esquerda" -#: src/supertux/menu/keyboard_menu.cpp:82 +#: src/supertux/menu/keyboard_menu.cpp:102 msgid "Right Alt" msgstr "Alt Dereita" -#: src/supertux/menu/keyboard_menu.cpp:84 +#: src/supertux/menu/keyboard_menu.cpp:104 msgid "Left Alt" msgstr "Alt Esquerda" -#: src/supertux/menu/keyboard_menu.cpp:86 +#: src/supertux/menu/keyboard_menu.cpp:106 msgid "Right Command" msgstr "Tecla Orde Dereita" -#: src/supertux/menu/keyboard_menu.cpp:88 +#: src/supertux/menu/keyboard_menu.cpp:108 msgid "Left Command" msgstr "Tecla Orde Esquerda" -#: src/supertux/menu/keyboard_menu.cpp:102 +#: src/supertux/menu/keyboard_menu.cpp:122 msgid "Press Key" msgstr "Preme Tecla" -#: src/supertux/menu/language_menu.cpp:40 +#: src/supertux/menu/language_menu.cpp:43 msgid "Language" msgstr "Idioma" -#: src/supertux/menu/language_menu.cpp:42 +#: src/supertux/menu/language_menu.cpp:45 msgid "" msgstr "" -#: src/supertux/menu/joystick_menu.cpp:55 +#: src/supertux/menu/joystick_menu.cpp:57 msgid "Manual Configuration" msgstr "Configuración Manual" -#: src/supertux/menu/joystick_menu.cpp:57 +#: src/supertux/menu/joystick_menu.cpp:59 msgid "" "Use manual configuration instead of SDL2's automatic GameController support" msgstr "Utiliza a configuración manual en vez da asistencia automática GameController SDL2" -#: src/supertux/menu/joystick_menu.cpp:75 +#: src/supertux/menu/joystick_menu.cpp:77 msgid "Pause/Menu" msgstr "Pausa/Menú" -#: src/supertux/menu/joystick_menu.cpp:91 +#: src/supertux/menu/joystick_menu.cpp:93 msgid "No Joysticks found" msgstr "Non se atoparon Joysticks" -#: src/supertux/menu/joystick_menu.cpp:92 +#: src/supertux/menu/joystick_menu.cpp:94 msgid "Scan for Joysticks" msgstr "Buscar Joysticks" -#: src/supertux/menu/joystick_menu.cpp:125 +#: src/supertux/menu/joystick_menu.cpp:127 msgid "Press Button" msgstr "Premer Botón" -#: src/supertux/menu/joystick_menu.cpp:162 +#: src/supertux/menu/joystick_menu.cpp:164 msgid "Axis " msgstr "Eixo" -#: src/supertux/menu/joystick_menu.cpp:165 +#: src/supertux/menu/joystick_menu.cpp:167 msgid "-" msgstr "-" -#: src/supertux/menu/joystick_menu.cpp:167 +#: src/supertux/menu/joystick_menu.cpp:169 msgid "+" msgstr "+" -#: src/supertux/menu/joystick_menu.cpp:174 +#: src/supertux/menu/joystick_menu.cpp:176 msgid "X2" msgstr "X2" -#: src/supertux/menu/joystick_menu.cpp:176 +#: src/supertux/menu/joystick_menu.cpp:178 msgid "Y2" msgstr "Y2" -#: src/supertux/menu/joystick_menu.cpp:189 +#: src/supertux/menu/joystick_menu.cpp:191 msgid "Hat Up" msgstr "Inclinar Arriba" -#: src/supertux/menu/joystick_menu.cpp:193 +#: src/supertux/menu/joystick_menu.cpp:195 msgid "Hat Down" msgstr "Inclinar Abaixo" -#: src/supertux/menu/joystick_menu.cpp:197 +#: src/supertux/menu/joystick_menu.cpp:199 msgid "Hat Left" msgstr "Inclinar Esquerda" -#: src/supertux/menu/joystick_menu.cpp:201 +#: src/supertux/menu/joystick_menu.cpp:203 msgid "Hat Right" msgstr "Inclinar Dereito" @@ -2125,37 +3945,103 @@ msgstr "Pausa" msgid "Leave World" msgstr "Deixar o Mundo" -#: src/supertux/menu/download_dialog.cpp:27 +#: src/supertux/menu/download_dialog.cpp:42 msgid "Abort Download" msgstr "Cancelar a Descarga" -#: src/supertux/menu/download_dialog.cpp:42 -msgid "Error:\n" -msgstr "Erro:\n" - -#: src/supertux/menu/download_dialog.cpp:96 -msgid "Close" -msgstr "Pechar" +#: src/supertux/menu/download_dialog.cpp:59 +#, c++-format +msgid "" +"Error:\n" +"{}" +msgstr "Erro:\n{}" -#: src/supertux/menu/cheat_menu.cpp:37 +#: src/supertux/menu/cheat_menu.cpp:38 msgid "Bonus: Star" msgstr "Bono: Estrela" -#: src/supertux/menu/cheat_menu.cpp:38 +#: src/supertux/menu/cheat_menu.cpp:39 msgid "Shrink Tux" -msgstr "Afundir Tux" +msgstr "Encoller a Tux" -#: src/supertux/menu/cheat_menu.cpp:39 +#: src/supertux/menu/cheat_menu.cpp:40 msgid "Kill Tux" msgstr "Destruír a Tux" +#: src/supertux/menu/cheat_menu.cpp:55 +msgid "Prevent Death" +msgstr "" + +#: src/supertux/menu/addon_file_install_menu.cpp:32 +msgid "Install Add-on from file" +msgstr "" + +#: src/supertux/menu/addon_file_install_menu.cpp:34 +msgid "Drag and drop add-on ZIP archive" +msgstr "" + +#: src/supertux/menu/particle_editor_menu.cpp:32 +msgid "Particle Editor" +msgstr "Editor de Partículas" + +#: src/supertux/menu/particle_editor_menu.cpp:36 +#: src/supertux/menu/editor_menu.cpp:60 +msgid "Return to Editor" +msgstr "Volver ó Editor" + +#: src/supertux/menu/particle_editor_menu.cpp:37 +msgid "New Particle Config" +msgstr "Nova Configuración da Partícula" + +#: src/supertux/menu/particle_editor_menu.cpp:38 +msgid "Save Particle Config" +msgstr "Gardar Configuración da Partícula" + +#: src/supertux/menu/particle_editor_menu.cpp:39 +msgid "Save Particle Config as..." +msgstr "Gardar Configuración da Partícula como..." + +#: src/supertux/menu/particle_editor_menu.cpp:40 +msgid "Load Another Particle Config" +msgstr "Cargar Outra Configuración da Partícula" + +#: src/supertux/menu/particle_editor_menu.cpp:44 +msgid "Open Particle Directory" +msgstr "Abrir Directorio da Partícula" + +#: src/supertux/menu/particle_editor_menu.cpp:45 +#: src/supertux/menu/editor_menu.cpp:118 +msgid "Keyboard Shortcuts" +msgstr "Atallos do Teclado" + +#: src/supertux/menu/particle_editor_menu.cpp:49 +msgid "Exit Particle Editor" +msgstr "Saír do Editor da Partícula" + +#: src/supertux/menu/particle_editor_menu.cpp:121 +msgid "" +"Keyboard Shortcuts:\n" +"---------------------\n" +"Esc = Open Menu\n" +"Ctrl+S = Save\n" +"Ctrl+Shift+S = Save as\n" +"Ctrl+O = Open\n" +"Ctrl+Z = Undo\n" +"Ctrl+Y = Redo" +msgstr "Atallos de Teclado:\n---------------------\nEsc = Abrir Menú\nCtrl+S = Gardar\nCtrl+Shift+S = Gardar coma\nCtrl+O = Abrir\nCtrl+Z = Desfacer\nCtrl+Y = Refacer" + +#: src/supertux/menu/particle_editor_menu.cpp:122 +#: src/supertux/menu/editor_menu.cpp:206 +msgid "Got it!" +msgstr "Conseguido!" + #: src/supertux/menu/editor_level_menu.cpp:31 -#: src/supertux/menu/editor_menu.cpp:70 +#: src/supertux/menu/editor_menu.cpp:116 msgid "Worldmap Settings" msgstr "Configuración do Mapa Principal" #: src/supertux/menu/editor_level_menu.cpp:31 -#: src/supertux/menu/editor_menu.cpp:70 +#: src/supertux/menu/editor_menu.cpp:116 msgid "Level Settings" msgstr "Configuración do Nivel" @@ -2163,7 +4049,7 @@ msgstr "Configuración do Nivel" msgid "Author" msgstr "Autor" -#: src/supertux/menu/editor_level_menu.cpp:35 data//credits.stxt:1129 +#: src/supertux/menu/editor_level_menu.cpp:35 data//credits.stxt:1253 msgid "Contact" msgstr "Contacto" @@ -2172,106 +4058,152 @@ msgid "License" msgstr "Licenza" #: src/supertux/menu/editor_level_menu.cpp:37 +msgid "Level Note" +msgstr "Nota do Nivel" + +#: src/supertux/menu/editor_level_menu.cpp:38 msgid "Tileset" msgstr "Conxunto de Teselas" -#: src/supertux/menu/editor_level_menu.cpp:40 +#: src/supertux/menu/editor_level_menu.cpp:41 msgid "Target Time" msgstr "Tempo para acadar o Obxectivo" -#: src/supertux/menu/editor_level_menu.cpp:82 +#: src/supertux/menu/editor_level_menu.cpp:83 msgid "Please enter a name for this level." msgstr "Introduce un nome para este nivel." -#: src/supertux/menu/editor_level_menu.cpp:86 +#: src/supertux/menu/editor_level_menu.cpp:87 msgid "Please enter a level author for this level." msgstr "Introduce un autor do nivel para este nivel." -#: src/supertux/menu/editor_level_menu.cpp:90 +#: src/supertux/menu/editor_level_menu.cpp:91 msgid "Please enter a license for this level." msgstr "Introduce unha licenza para este nivel." -#: src/supertux/menu/editor_menu.cpp:34 -msgid "1/8 tile (4px)" -msgstr "1/8 tesela (4px)" +#: src/supertux/menu/editor_menu.cpp:53 +msgid "tiny tile (4px)" +msgstr "tesela minúscula (4px)" -#: src/supertux/menu/editor_menu.cpp:35 -msgid "1/4 tile (8px)" -msgstr "1/4 tesela (8px)" - -#: src/supertux/menu/editor_menu.cpp:36 -msgid "1/2 tile (16px)" -msgstr "1/2 tesela (16px)" +#: src/supertux/menu/editor_menu.cpp:54 +msgid "small tile (8px)" +msgstr "tesela pequena (8px)" -#: src/supertux/menu/editor_menu.cpp:37 -msgid "1 tile (32px)" -msgstr "1 tesela (32px)" +#: src/supertux/menu/editor_menu.cpp:55 +msgid "medium tile (16px)" +msgstr "tesela media (16px)" -#: src/supertux/menu/editor_menu.cpp:41 -msgid "Return to Editor" -msgstr "Volver ó Editor" +#: src/supertux/menu/editor_menu.cpp:56 +msgid "big tile (32px)" +msgstr "tesela grande (32px)" -#: src/supertux/menu/editor_menu.cpp:42 +#: src/supertux/menu/editor_menu.cpp:61 msgid "Save Worldmap" msgstr "Gardar Mapa Principal" -#: src/supertux/menu/editor_menu.cpp:42 +#: src/supertux/menu/editor_menu.cpp:61 msgid "Save Level" msgstr "Gardar Nivel" -#: src/supertux/menu/editor_menu.cpp:45 +#: src/supertux/menu/editor_menu.cpp:65 msgid "Test Level" msgstr "Probar Nivel" -#: src/supertux/menu/editor_menu.cpp:49 +#: src/supertux/menu/editor_menu.cpp:67 msgid "Test Worldmap" msgstr "Probar Mapa Principal" -#: src/supertux/menu/editor_menu.cpp:52 +#: src/supertux/menu/editor_menu.cpp:72 msgid "Share Level" msgstr "Compartir Nivel" -#: src/supertux/menu/editor_menu.cpp:54 +#: src/supertux/menu/editor_menu.cpp:74 +msgid "Package Add-On" +msgstr "Empaquetar como extensión" + +#: src/supertux/menu/editor_menu.cpp:76 msgid "Open Level Directory" msgstr "Abrir o Directorio do Nivel" -#: src/supertux/menu/editor_menu.cpp:57 +#: src/supertux/menu/editor_menu.cpp:79 msgid "Edit Another Level" msgstr "Editar Outro Nivel" -#: src/supertux/menu/editor_menu.cpp:60 +#: src/supertux/menu/editor_menu.cpp:81 msgid "Edit Another World" msgstr "Editar Outro Mundo" -#: src/supertux/menu/editor_menu.cpp:64 +#: src/supertux/menu/editor_menu.cpp:86 +msgid "Convert all tiles in the level using converters." +msgstr "" + +#: src/supertux/menu/editor_menu.cpp:90 msgid "Grid Size" msgstr "Tamaño da Grade" -#: src/supertux/menu/editor_menu.cpp:65 +#: src/supertux/menu/editor_menu.cpp:91 msgid "Show Grid" msgstr "Amosar Grade" -#: src/supertux/menu/editor_menu.cpp:66 +#: src/supertux/menu/editor_menu.cpp:92 msgid "Grid Snapping" msgstr "Axuste da Grade" -#: src/supertux/menu/editor_menu.cpp:67 -msgid "Render Background" -msgstr "Representar Fondo" +#: src/supertux/menu/editor_menu.cpp:93 +msgid "Render Background" +msgstr "Representar Fondo" + +#: src/supertux/menu/editor_menu.cpp:94 +msgid "Render Light" +msgstr "Representar Luz" + +#: src/supertux/menu/editor_menu.cpp:95 +msgid "Autotile Mode" +msgstr "Modo de Tesela Automática" + +#: src/supertux/menu/editor_menu.cpp:96 +msgid "Enable Autotile Help" +msgstr "Activar axuda de autoteselado" + +#: src/supertux/menu/editor_menu.cpp:97 +msgid "Enable Object Undo Tracking" +msgstr "" + +#: src/supertux/menu/editor_menu.cpp:100 +msgid "Undo Stack Size" +msgstr "" + +#: src/supertux/menu/editor_menu.cpp:102 +msgid "Autosave Frequency" +msgstr "Frecuencia de Auto-gardado" + +#: src/supertux/menu/editor_menu.cpp:108 +msgid "Check for Deprecated Tiles" +msgstr "" + +#: src/supertux/menu/editor_menu.cpp:109 +msgid "Check if any deprecated tiles are currently present in the level." +msgstr "" -#: src/supertux/menu/editor_menu.cpp:68 -msgid "Render Light" -msgstr "Representar Luz" +#: src/supertux/menu/editor_menu.cpp:110 +msgid "Show Deprecated Tiles" +msgstr "" -#: src/supertux/menu/editor_menu.cpp:72 -msgid "Keyboard Shortcuts" -msgstr "Atallos do Teclado" +#: src/supertux/menu/editor_menu.cpp:111 +msgid "" +"Indicate all deprecated tiles on the active tilemap, without the need of " +"hovering over." +msgstr "" -#: src/supertux/menu/editor_menu.cpp:75 +#: src/supertux/menu/editor_menu.cpp:121 msgid "Exit Level Editor" msgstr "Saír do Editor do Niveis" -#: src/supertux/menu/editor_menu.cpp:122 +#: src/supertux/menu/editor_menu.cpp:170 +msgid "Do you want to package this world as an add-on?" +msgstr "Queres empaquetar este mundo como unha expansión extra?" + +#: src/supertux/menu/editor_menu.cpp:196 msgid "" "We encourage you to share your levels in the SuperTux forum.\n" "To find your level, click the\n" @@ -2279,7 +4211,7 @@ msgid "" "Do you want to go to the forum now?" msgstr "Animámoste a que compartas os teus niveis no foro de SuperTux.\nPara atopar o teu nivel, preme o\nelemento do menú \"Abrir Directorio de Niveis\".\nQueres ir xa ó foro?" -#: src/supertux/menu/editor_menu.cpp:134 +#: src/supertux/menu/editor_menu.cpp:205 msgid "" "Keyboard Shortcuts:\n" "---------------------\n" @@ -2290,127 +4222,456 @@ msgid "" "Ctrl+Y = Redo\n" "F6 = Render Light\n" "F7 = Grid Snapping\n" -"F8 = Show Grid" -msgstr "Atallos do Teclado:\n---------------------\nEsc = Abrir Menú\nCtrl+S = Gardar\nCtrl+T = Probar\nCtrl+Z = Desfacer\nCtrl+Y = Refacer\nF6 = Representar a Luz\nF7 = Axuste á Grade\nF8 = Amosar Grade" +"F8 = Show Grid\n" +"Ctrl++ or Ctrl+Scroll Up = Zoom In\n" +"Ctrl+- or Ctrl+Scroll Down = Zoom Out\n" +"Ctrl+D = Reset Zoom\n" +"\n" +"Scripting Shortcuts:\n" +" ------------- \n" +"Home = Go to beginning of line\n" +"End = Go to end of line\n" +"Left arrow = Go back in text\n" +"Right arrow = Go forward in text\n" +"Backspace = Delete in front of text cursor\n" +"Delete = Delete behind text cursor\n" +"Ctrl+X = Cut whole line\n" +"Ctrl+C = Copy whole line\n" +"Ctrl+V = Paste\n" +"Ctrl+D = Duplicate line\n" +"Ctrl+Z = Undo\n" +"Ctrl+Y = Redo" +msgstr "" -#: src/supertux/menu/editor_menu.cpp:135 -msgid "Got it!" -msgstr "Conseguido!" +#: src/supertux/menu/editor_menu.cpp:232 +msgid "Deprecated tiles are still present in the level." +msgstr "" + +#: src/supertux/menu/editor_menu.cpp:239 +msgid "Do you want to show all deprecated tiles on active tilemaps?" +msgstr "" + +#: src/supertux/menu/editor_menu.cpp:246 +msgid "There are no more deprecated tiles in the level!" +msgstr "" + +#: src/supertux/menu/multiplayer_player_menu.cpp:40 +msgid "Play with the keyboard" +msgstr "Xogar co teclado" + +#: src/supertux/menu/multiplayer_player_menu.cpp:58 +msgid "Remove Player" +msgstr "Eliminar Xogador" + +#: src/supertux/menu/multiplayer_player_menu.cpp:82 +msgid "Respawn Player" +msgstr "" + +#: src/supertux/menu/multiplayer_player_menu.cpp:108 +msgid "Spawn Player" +msgstr "" + +#: src/supertux/menu/multiplayer_player_menu.cpp:136 +msgid "Controllers" +msgstr "" + +#: src/supertux/menu/multiplayer_player_menu.cpp:152 +msgid "" +"This controller does not support rumbling;\n" +"please check the controllers manually." +msgstr "" + +#: src/supertux/menu/multiplayer_player_menu.cpp:157 +msgid "" +"This SuperTux build does not support rumbling\n" +"controllers; please check the controllers manually." +msgstr "" + +#: src/supertux/menu/multiplayer_player_menu.cpp:184 +msgid "" +"This joystick does not support rumbling;\n" +"please check the joysticks manually." +msgstr "" -#: src/supertux/levelintro.cpp:136 -#, c-format +#: src/supertux/menu/multiplayer_player_menu.cpp:189 +msgid "" +"This SuperTux build does not support rumbling\n" +"joysticks; please check the joysticks manually." +msgstr "" + +#: src/supertux/menu/editor_delete_level_menu.cpp:59 +msgid "No levels available" +msgstr "Non hai niveis dispoñibles" + +#: src/supertux/menu/editor_delete_level_menu.cpp:79 +msgid "You cannot delete the level that you are editing!" +msgstr "Non podes eliminar o nivel que estas editando!" + +#: src/supertux/menu/editor_delete_level_menu.cpp:82 +#, c++-format +msgid "You are about to delete level \"{}\". Are you sure?" +msgstr "" + +#: src/supertux/levelintro.cpp:137 +#, c++-format msgid "contributed by {}" -msgstr "aportado por {}" +msgstr "" -#: src/supertux/levelintro.cpp:169 +#: src/supertux/levelintro.cpp:184 msgid "Badguys killed" msgstr "Tipos malos destruídos" -#: src/supertux/levelintro.cpp:177 +#: src/supertux/levelintro.cpp:192 msgid "Best time" msgstr "Mellor tempo" -#: src/supertux/levelintro.cpp:181 +#: src/supertux/levelintro.cpp:196 msgid "Level target time" msgstr "Tempo para acadar o obxectivo do nivel" -#: src/supertux/tile_set.cpp:92 +#: src/supertux/tile_set.cpp:113 msgid "Others" msgstr "Outros" -#: src/supertux/moving_object.cpp:44 +#: src/supertux/direction.cpp:67 +msgid "up" +msgstr "arriba" + +#: src/supertux/direction.cpp:69 +msgid "down" +msgstr "abaixo" + +#: src/supertux/moving_object.cpp:63 msgid "Region" msgstr "Rexión" +#: src/supertux/main.cpp:801 +#, c++-format +msgid "New release: SuperTux v{}!" +msgstr "" + +#: src/supertux/main.cpp:804 +#, c++-format +msgid "" +"A new release of SuperTux (v{}) is available!\n" +"For more information, you can visit the SuperTux website.\n" +"\n" +"Do you want to visit the website now?" +msgstr "" + +#: src/supertux/main.cpp:815 +msgid "Checking for new releases..." +msgstr "" + #: src/control/joystick_config.cpp:85 msgid "Joystick Mappings" msgstr "Asignación do Joystick" -#: src/worldmap/worldmap_parser.cpp:167 +#: src/worldmap/sprite_change.cpp:91 +msgid "Stay action" +msgstr "Posición estática" + +#: src/worldmap/sprite_change.cpp:92 +msgid "Initial stay action" +msgstr "Posición estática inicial" + +#: src/worldmap/sprite_change.cpp:93 +msgid "Stay group" +msgstr "Grupo estático" + +#: src/worldmap/sprite_change.cpp:94 +msgid "Change on touch" +msgstr "Cambiar ó tocar" + +#: src/worldmap/special_tile.hpp:36 +msgid "Special Tile" +msgstr "" + +#: src/worldmap/level_tile.hpp:36 src/worldmap/level_tile.cpp:161 +msgid "Level" +msgstr "Nivel" + +#: src/worldmap/teleporter.cpp:50 +msgid "Automatic" +msgstr "Automático" + +#: src/worldmap/teleporter.cpp:51 +msgid "Target worldmap" +msgstr "Mapa principal obxectivo" + +#: src/worldmap/sprite_change.hpp:35 +msgid "Sprite Change" +msgstr "Cambio de Fada" + +#: src/worldmap/special_tile.cpp:75 +msgid "Show message" +msgstr "Amosar mensaxe" + +#: src/worldmap/level_tile.cpp:84 msgid "" msgstr "" -#: src/editor/node_marker.cpp:79 +#: src/worldmap/level_tile.cpp:162 +msgid "Outro script" +msgstr "Script de saída" + +#: src/worldmap/level_tile.cpp:163 +msgid "Auto play" +msgstr "Reprodución automática" + +#: src/worldmap/level_tile.cpp:164 +msgid "Title colour" +msgstr "Cor do título" + +#: src/worldmap/teleporter.hpp:34 +msgid "Teleporter" +msgstr "Teletransporte" + +#: src/editor/tip.cpp:80 +msgid "" +"This object's current functionality is deprecated.\n" +"Updating to get its latest functionality is recommended." +msgstr "" + +#: src/editor/node_marker.cpp:122 msgid "Path Node" msgstr "Nodo do Camiño" -#: src/editor/object_settings.cpp:112 -msgid "up" -msgstr "arriba" +#: src/editor/node_marker.cpp:123 +msgid "Press CTRL to move Bezier handles" +msgstr "Pulsa CTRL para mover os puntos de control Bézier" -#: src/editor/object_settings.cpp:112 -msgid "down" -msgstr "abaixo" +#: src/editor/node_marker.cpp:127 +msgid "Easing" +msgstr "Transición animada" -#: src/editor/object_settings.cpp:124 +#: src/editor/object_settings.cpp:129 msgid "West" msgstr "Oeste" -#: src/editor/object_settings.cpp:124 +#: src/editor/object_settings.cpp:129 msgid "East" msgstr "Leste" -#: src/editor/object_settings.cpp:124 +#: src/editor/object_settings.cpp:129 msgid "North" msgstr "Norte" -#: src/editor/object_settings.cpp:124 +#: src/editor/object_settings.cpp:129 msgid "South" msgstr "Sur" -#: src/editor/object_settings.cpp:137 +#: src/editor/object_settings.cpp:142 msgid "One shot" msgstr "Un tiro" -#: src/editor/object_settings.cpp:137 +#: src/editor/object_settings.cpp:142 msgid "Ping-pong" msgstr "Ping-pong" -#: src/editor/object_settings.cpp:137 +#: src/editor/object_settings.cpp:142 msgid "Circular" msgstr "Circular" -#: src/editor/object_settings.cpp:137 -msgid "Unordered" -msgstr "Desordenado" +#: src/editor/layers_widget.cpp:331 +#, c++-format +msgid "Sector: {}" +msgstr "" -#: src/editor/object_option.cpp:83 +#: src/editor/object_option.cpp:92 msgid "true" msgstr "certo" -#: src/editor/object_option.cpp:83 +#: src/editor/object_option.cpp:92 msgid "false" msgstr "falso" -#: src/editor/object_option.cpp:246 src/editor/object_option.cpp:295 +#: src/editor/object_option.cpp:308 src/editor/object_option.cpp:356 msgid "invalid" msgstr "non válido" -#: src/editor/object_option.cpp:553 +#: src/editor/object_option.cpp:665 +msgid "Scale X" +msgstr "" + +#: src/editor/object_option.cpp:666 +msgid "Scale Y" +msgstr "" + +#: src/editor/object_option.cpp:667 +msgid "Offset X" +msgstr "" + +#: src/editor/object_option.cpp:668 +msgid "Offset Y" +msgstr "" + +#: src/editor/object_option.cpp:672 src/editor/object_menu.cpp:67 msgid "Remove" msgstr "Eliminar" -#: src/editor/worldmap_objects.hpp:56 src/editor/worldmap_objects.cpp:129 -msgid "Level" -msgstr "Nivel" +#: src/editor/object_option.cpp:689 +msgid "Test from here" +msgstr "Probar dende aquí" -#: src/editor/worldmap_objects.hpp:79 -msgid "Teleporter" -msgstr "Teletransporte" +#: src/editor/object_option.cpp:706 +msgid "Open Particle Editor" +msgstr "Abrir o Editor de Partículas" -#: src/editor/worldmap_objects.hpp:119 -msgid "Sprite Change" -msgstr "Cambio de Fada" +#: src/editor/particle_editor.cpp:114 +msgid "Change texture... ->" +msgstr "" + +#: src/editor/particle_editor.cpp:126 +msgid "Max amount" +msgstr "Cantidade máxima" + +#: src/editor/particle_editor.cpp:142 +msgid "Spawn anywhere" +msgstr "Aparecer en calquera lugar" + +#: src/editor/particle_editor.cpp:143 +msgid "Life duration" +msgstr "Duración de vida" -#: src/editor/worldmap_objects.hpp:140 -msgid "Special tile" -msgstr "Tesela especial" +#: src/editor/particle_editor.cpp:148 +msgid "Birth duration" +msgstr "Tempo de creación" -#: src/editor/editor.cpp:477 +#: src/editor/particle_editor.cpp:153 +msgid "Death duration" +msgstr "Tempo de destrucción" + +#: src/editor/particle_editor.cpp:160 +msgid "Grow" +msgstr "Crecer" + +#: src/editor/particle_editor.cpp:175 +msgid "Horizontal speed" +msgstr "Velocidade horizontal" + +#: src/editor/particle_editor.cpp:180 +msgid "Vertical speed" +msgstr "Velocidade vertical" + +#: src/editor/particle_editor.cpp:185 +msgid "Horizontal acceleration" +msgstr "Aceleración horizontal" + +#: src/editor/particle_editor.cpp:186 +msgid "Vertical acceleration" +msgstr "Aceleración vertical" + +#: src/editor/particle_editor.cpp:187 +msgid "Horizontal friction" +msgstr "Fricción horizontal" + +#: src/editor/particle_editor.cpp:188 +msgid "Vertical friction" +msgstr "Fricción vertical" + +#: src/editor/particle_editor.cpp:190 +msgid "Initial rotation" +msgstr "Rotación inicial" + +#: src/editor/particle_editor.cpp:201 +msgid "Rotation friction/decceleration" +msgstr "Fricción de giro/desaceleración" + +#: src/editor/particle_editor.cpp:211 +msgid "Destroy" +msgstr "Destruír" + +#: src/editor/particle_editor.cpp:215 +msgid "Stick to surface" +msgstr "Pegarse á superficie" + +#: src/editor/particle_editor.cpp:216 +msgid "Stick and stay" +msgstr "Pegarse e quedarse" + +#: src/editor/particle_editor.cpp:217 +msgid "No collision" +msgstr "Sen colisión" + +#: src/editor/particle_editor.cpp:222 +msgid "Always destroy" +msgstr "Destruír sempre" + +#: src/editor/particle_editor.cpp:226 +msgid "Offscreen mode" +msgstr "Modo fora da pantalla" + +#: src/editor/particle_editor.cpp:229 +msgid "Clear" +msgstr "" + +#: src/editor/particle_editor.cpp:245 +msgid "<- General settings" +msgstr "" + +#: src/editor/particle_editor.cpp:255 +msgid "Likeliness" +msgstr "" + +#: src/editor/particle_editor.cpp:266 +msgid "Color (RGBA)" +msgstr "" + +#: src/editor/particle_editor.cpp:311 +msgid "Scale (x, y)" +msgstr "" + +#: src/editor/particle_editor.cpp:332 +msgid "Hitbox scale (x, y)" +msgstr "" + +#: src/editor/particle_editor.cpp:353 +msgid "Hitbox offset relative to scale" +msgstr "" + +#: src/editor/particle_editor.cpp:372 +msgid "Change texture..." +msgstr "" + +#: src/editor/particle_editor.cpp:766 +msgid "" +"This particle configuration contains unsaved changes,\n" +"do you want to save?" +msgstr "Estos axustes de partícula teñen cambios sen gardar, \nqueres gardar?" + +#: src/editor/particle_editor.cpp:774 +msgid "Save as" +msgstr "Gardar coma" + +#: src/editor/editor.cpp:577 +msgid "" +"This level contains deprecated tiles.\n" +"It is strongly recommended to replace all deprecated tiles\n" +"to avoid loss of compatibility in future versions." +msgstr "" + +#: src/editor/editor.cpp:579 +msgid "Tip: Turn on \"Show Deprecated Tiles\" from the level editor menu." +msgstr "" + +#: src/editor/editor.cpp:626 +msgid "" +"Don't forget that your levels and assets\n" +"aren't saved between sessions!\n" +"If you want to keep your levels, download them\n" +"from the \"Manage Assets\" menu." +msgstr "Non esquezas que os teus niveles e datos\ngárdanse entre sesións!\nSe queres gardar os niveis, descárgaos\ndende o menú de “Xestionar Datos”." + +#: src/editor/editor.cpp:661 msgid "This level contains unsaved changes, do you want to save?" msgstr "Este nivel contén cambios non gardados, queres gardalos?" -#: src/editor/editor.cpp:517 +#: src/editor/editor.cpp:662 +msgid "This level may contain unsaved changes, do you want to save?" +msgstr "" + +#: src/editor/editor.cpp:797 msgid "" "Some obsolete add-ons are still active\n" "and might cause collisions with default Super Tux structure.\n" @@ -2418,432 +4679,463 @@ msgid "" "Disabling these add-ons will not delete your game progress." msgstr "Algúns complementos obsoletos aínda están activos\ne poden crear colisións coa estrutura predeterminada de Super Tux.\nAínda podes activar estes complementos no menú.\nDesactivar estes complementos non eliminará o teu progreso no xogo." -#: src/editor/editor.cpp:520 +#: src/editor/editor.cpp:800 msgid "Disable add-ons" msgstr "Desactivar complementos" -#: src/editor/editor.cpp:525 +#: src/editor/editor.cpp:805 msgid "Ignore (not advised)" msgstr "Ignorar (non aconsellado)" -#: src/editor/editor.cpp:529 +#: src/editor/editor.cpp:809 msgid "Leave editor" msgstr "Deixar o editor" -#: src/editor/editor.cpp:740 +#: src/editor/editor.cpp:1023 msgid "" "Couldn't find a \"main\" sector.\n" "Please change the name of the sector where\n" "you'd like the player to start to \"main\"" msgstr "Non se puido atopar un sector \"principal\".\nCambia o nome do sector onde\nqueiras que o xogador inicie como \"principal\"" -#: src/editor/editor.cpp:744 +#: src/editor/editor.cpp:1027 msgid "" "Couldn't find a \"main\" spawnpoint.\n" " Please change the name of the spawnpoint where\n" "you'd like the player to start to \"main\"" msgstr "Non se puido atopar un punto de inicio \"principal\".\nCambia o nome do punto de inicio onde\nqueiras que o xogador inicie como \"principal\"" -#: src/editor/worldmap_objects.cpp:130 -msgid "Outro script" -msgstr "Script de saída" - -#: src/editor/worldmap_objects.cpp:131 -msgid "Auto play" -msgstr "Reprodución automática" - -#: src/editor/worldmap_objects.cpp:133 -msgid "Title colour" -msgstr "Cor do título" +#: src/editor/object_menu.cpp:60 +msgid "Patch Notes" +msgstr "" -#: src/editor/worldmap_objects.cpp:175 -msgid "Automatic" -msgstr "Automático" +#: src/editor/object_menu.cpp:84 +msgid "" +"This will update the object to its latest functionality.\n" +"Check the \"Patch Notes\" for more information.\n" +"\n" +"Keep in mind this is very likely to break the proper behaviour of the object.\n" +"Make sure to re-check any behaviour, related to the object." +msgstr "" -#: src/editor/worldmap_objects.cpp:177 -msgid "Target worldmap" -msgstr "Mapa principal obxectivo" +#: src/editor/object_menu.cpp:98 +#, c++-format +msgid "Patch notes for v{}:" +msgstr "" -#: src/editor/worldmap_objects.cpp:240 -msgid "Stay action" -msgstr "Posición estática" +#: src/editor/overlay_widget.cpp:1062 +msgid "Cannot select deprecated tiles" +msgstr "" -#: src/editor/worldmap_objects.cpp:241 -msgid "Initial stay action" -msgstr "Posición estática inicial" +#: src/editor/overlay_widget.cpp:1567 +msgid "Autotile mode is on" +msgstr "O modo de Tesela Automática está activado" -#: src/editor/worldmap_objects.cpp:242 -msgid "Stay group" -msgstr "Grupo estático" +#: src/editor/overlay_widget.cpp:1571 +msgid "Hold Ctrl to enable autotile" +msgstr "Pulsar a tecla Ctrl para activar a tesela automática" -#: src/editor/worldmap_objects.cpp:243 -msgid "Change on touch" -msgstr "Cambiar ó tocar" +#: src/editor/overlay_widget.cpp:1578 +msgid "Autotile erasing mode is on" +msgstr "O modo de borrado de tesela automática está activado" -#: src/editor/worldmap_objects.cpp:273 -msgid "Show message" -msgstr "Amosar mensaxe" +#: src/editor/overlay_widget.cpp:1582 +msgid "Selected tile isn't autotileable" +msgstr "A tesela seleccionada non é autoteselable" -#: src/editor/worldmap_objects.cpp:275 -msgid "Invisible" -msgstr "Invisible" +#: src/editor/overlay_widget.cpp:1587 +msgid "Hold Ctrl to enable autotile erasing" +msgstr "Pulsar a tecla Ctrl para activar o borrado da tesela automática" #: data//credits.stxt:25 msgid "Current SuperTux Team" msgstr "Equipo Actual de SuperTux" #: data//credits.stxt:30 -msgid "Programming, project lead ad interim" -msgstr "Programación, líder do proxecto como interino" +msgid "Maintainer, Programming" +msgstr "" #: data//credits.stxt:35 msgid "Graphics, Level Design, Story" msgstr "Gráficos, Deseño de Niveis, Historia" #: data//credits.stxt:40 -msgid "Graphics, Story, Optimisation" -msgstr "Gráficos, Historia, Optimización" +msgid "Level Design, Story, Optimisation, Coordination" +msgstr "Deseño de Niveis, Historia, Optimización, Coordinación" -#: data//credits.stxt:45 data//credits.stxt:100 data//credits.stxt:186 -#: data//credits.stxt:498 +#: data//credits.stxt:45 data//credits.stxt:120 data//credits.stxt:206 +#: data//credits.stxt:538 msgid "Graphics" msgstr "Gráficos" -#: data//credits.stxt:50 data//credits.stxt:60 data//credits.stxt:82 -#: data//credits.stxt:88 +#: data//credits.stxt:50 data//credits.stxt:102 data//credits.stxt:108 msgid "Graphics, Programming, Level Design" msgstr "Gráficos, Programación, Deseño de Niveis" #: data//credits.stxt:55 +msgid "Features and Programming" +msgstr "Funcións e Programación" + +#: data//credits.stxt:60 +msgid "Minor features and programming" +msgstr "Pequenas melloras e programación" + +#: data//credits.stxt:65 +msgid "Programming, Level Updates" +msgstr "Programación, Actualización de Niveis" + +#: data//credits.stxt:70 msgid "Graphics, Programming" msgstr "Gráficos, Programación" -#: data//credits.stxt:65 data//credits.stxt:130 data//credits.stxt:135 -#: data//credits.stxt:140 data//credits.stxt:145 data//credits.stxt:160 -#: data//credits.stxt:165 data//credits.stxt:494 data//credits.stxt:506 +#: data//credits.stxt:75 data//credits.stxt:85 data//credits.stxt:150 +#: data//credits.stxt:155 data//credits.stxt:160 data//credits.stxt:165 +#: data//credits.stxt:180 data//credits.stxt:185 data//credits.stxt:534 +#: data//credits.stxt:546 msgid "Programming" msgstr "Programación" -#: data//credits.stxt:71 +#: data//credits.stxt:80 data//credits.stxt:266 +msgid "Level Design" +msgstr "Deseño de Niveis" + +#: data//credits.stxt:91 msgid "Original Developers" msgstr "Programadores Orixinais" -#: data//credits.stxt:76 +#: data//credits.stxt:96 msgid "Original Developer" msgstr "Programador Orixinal" -#: data//credits.stxt:94 +#: data//credits.stxt:114 msgid "Music, Level Design" msgstr "Música, Deseño de Niveis" -#: data//credits.stxt:106 +#: data//credits.stxt:126 msgid "Programming, Graphics, Level Design" msgstr "Programación, Gráficos, Deseño de Niveis" -#: data//credits.stxt:112 +#: data//credits.stxt:132 msgid "Programming, Level Design" msgstr "Programación, Deseño de Niveis" -#: data//credits.stxt:118 +#: data//credits.stxt:138 msgid "Graphics, Story" msgstr "Gráficos, Historia" -#: data//credits.stxt:124 +#: data//credits.stxt:144 msgid "Programming, Documentation" msgstr "Programación, Documentación" -#: data//credits.stxt:150 +#: data//credits.stxt:170 msgid "Coordination" msgstr "Coordinación" -#: data//credits.stxt:155 +#: data//credits.stxt:175 msgid "Programming, \"Flexlay\" Level editor" msgstr "Programación, Editor de Niveis \"Flexlay\"" -#: data//credits.stxt:170 +#: data//credits.stxt:190 msgid "Windows build fixes" msgstr "Arranxos das compilacións de Windows" -#: data//credits.stxt:175 +#: data//credits.stxt:195 msgid "Packaging, Nightly builds" msgstr "Empaquetado, Compilacións automáticas" -#: data//credits.stxt:180 +#: data//credits.stxt:200 msgid "Translation Guru (and many details anyone else could have done)" msgstr "Gurú da Tradución (e moitos máis detalles que ninguén máis ten feito)" -#: data//credits.stxt:240 -msgid "Level Design" -msgstr "Deseño de Niveis" - -#: data//credits.stxt:414 +#: data//credits.stxt:450 msgid "Additional contributors" msgstr "Colaboradores adicionais" -#: data//credits.stxt:419 +#: data//credits.stxt:455 msgid "Bug fixes" msgstr "Arranxos de erros" -#: data//credits.stxt:423 +#: data//credits.stxt:459 msgid "Scripting functions, Level fixes" msgstr "Funcións de script, Arranxos de niveis" -#: data//credits.stxt:427 +#: data//credits.stxt:463 msgid "Code quality fixes" msgstr "Arranxos da calidade do código" -#: data//credits.stxt:431 data//credits.stxt:435 data//credits.stxt:439 -#: data//credits.stxt:466 +#: data//credits.stxt:467 data//credits.stxt:471 data//credits.stxt:475 +#: data//credits.stxt:502 msgid "Various contributions" msgstr "Contribucións varias" -#: data//credits.stxt:443 +#: data//credits.stxt:479 msgid "Build issue fix" msgstr "Arranxo de incidencia da compilación" -#: data//credits.stxt:447 data//credits.stxt:451 +#: data//credits.stxt:483 data//credits.stxt:487 msgid "Code contributions" msgstr "Contribucións de código" -#: data//credits.stxt:454 +#: data//credits.stxt:490 msgid "Code contribution, AppData file" msgstr "Contribución de código, Ficheiro AppData" -#: data//credits.stxt:458 +#: data//credits.stxt:494 msgid "Bug fix" msgstr "Amaño de erros" -#: data//credits.stxt:462 +#: data//credits.stxt:498 msgid "Menu reorganization" msgstr "Reorganización do Menú" -#: data//credits.stxt:470 +#: data//credits.stxt:506 msgid "Fixing tile bugs" msgstr "Amañar erros das teselas" -#: data//credits.stxt:474 +#: data//credits.stxt:510 msgid "Build error fix" msgstr "Arranxo de erro da compilación" -#: data//credits.stxt:478 +#: data//credits.stxt:514 msgid "Scripting function fix" msgstr "Arranxo da función de script" -#: data//credits.stxt:482 +#: data//credits.stxt:518 +msgid "New features and notable updates" +msgstr "Novas funcións e actualizacións importantes" + +#: data//credits.stxt:522 msgid "Support for \"glbinding\" as optional OpenGL binding" msgstr "Asistencia para \"glbinding\" como vínculo opcional a OpenGL" -#: data//credits.stxt:486 +#: data//credits.stxt:526 msgid "New menu code" msgstr "Código do novo menú" -#: data//credits.stxt:490 +#: data//credits.stxt:530 msgid "Big Tux Walking Sprites improvements" msgstr "Grandes melloras das Fadas Camiñantes de Tux" -#: data//credits.stxt:502 data//credits.stxt:510 +#: data//credits.stxt:542 data//credits.stxt:550 msgid "Contrib Programming" msgstr "Programación de Colaboradores" -#: data//credits.stxt:514 +#: data//credits.stxt:554 msgid "Programming, Previous Maintainer" msgstr "Programación, Encargado de Mantemento Anterior" -#: data//credits.stxt:518 +#: data//credits.stxt:558 msgid "Various Contributions" msgstr "Contribucións Varias" -#: data//credits.stxt:522 data//credits.stxt:526 data//credits.stxt:530 -#: data//credits.stxt:534 data//credits.stxt:538 data//credits.stxt:542 -#: data//credits.stxt:546 data//credits.stxt:550 data//credits.stxt:554 +#: data//credits.stxt:562 data//credits.stxt:566 data//credits.stxt:570 +#: data//credits.stxt:574 data//credits.stxt:578 data//credits.stxt:582 +#: data//credits.stxt:586 data//credits.stxt:590 data//credits.stxt:594 +#: data//credits.stxt:598 data//credits.stxt:602 data//credits.stxt:606 +#: data//credits.stxt:610 data//credits.stxt:614 data//credits.stxt:618 +#: data//credits.stxt:622 data//credits.stxt:626 data//credits.stxt:630 +#: data//credits.stxt:634 data//credits.stxt:638 data//credits.stxt:642 +#: data//credits.stxt:646 data//credits.stxt:650 data//credits.stxt:654 +#: data//credits.stxt:658 data//credits.stxt:662 msgid "Contributions" msgstr "Colaboracións" -#: data//credits.stxt:560 +#: data//credits.stxt:668 msgid "Localization" msgstr "Localización" -#: data//credits.stxt:1107 +#: data//credits.stxt:1231 msgid " Special Thanks to" msgstr "Agradecemento Especial a" -#: data//credits.stxt:1112 +#: data//credits.stxt:1236 msgid "Creator of Tux, the Linux penguin" msgstr "Creador de Tux, o pingüín de Linux" -#: data//credits.stxt:1116 +#: data//credits.stxt:1240 msgid "SDL, OpenAL and OpenGL" msgstr "SDL, OpenAL e OpenGL" -#: data//credits.stxt:1117 +#: data//credits.stxt:1241 msgid "" "For making such a great gaming experience\n" " possible on Linux" msgstr "Por facer posible esta gran experiencia de xogo\nen Linux" -#: data//credits.stxt:1122 +#: data//credits.stxt:1246 msgid "and you, the player" msgstr "e a ti, o xogador" -#: data//credits.stxt:1123 +#: data//credits.stxt:1247 msgid "for giving this game a chance and playing it" msgstr "por darlle unha oportunidade e xogar con el" -#: data//credits.stxt:1134 +#: data//credits.stxt:1258 msgid "Visit our webpage at" msgstr "Visita a nosa páxina web en" -#: data//credits.stxt:1143 +#: data//credits.stxt:1267 msgid "Or visit us directly at IRC:" msgstr "Ou visítanos directamente no IRC:" -#: data//credits.stxt:1147 -msgid "#supertux at webchat.freenode.net" -msgstr "#supertux en webchat.freenode.net" +#: data//credits.stxt:1271 +msgid "#supertux at web.libera.chat" +msgstr "#supertux en web.libera.chat" -#: data//credits.stxt:1152 +#: data//credits.stxt:1276 msgid "Or at our Forum:" msgstr "Ou no Foro:" -#: data//credits.stxt:1161 +#: data//credits.stxt:1285 msgid "Comments, ideas and suggestions" msgstr "Comentarios, ideas e suxerencias" -#: data//credits.stxt:1165 +#: data//credits.stxt:1289 msgid "go to our mailing list" msgstr "vai á nosa lista de correo" #. l10n: typo contact -#: data//credits.stxt:1175 +#: data//credits.stxt:1299 msgid "Typographical errors can be" msgstr "Os erros tipográficos poden" #. l10n: typo contact -#: data//credits.stxt:1180 +#: data//credits.stxt:1304 msgid "reported to" msgstr "informarse en" #. l10n: typo contact, see -#: data//credits.stxt:1185 +#: data//credits.stxt:1309 msgid "supertux-devel@lists.lethargik.org" msgstr "supertux-devel@lists.lethargik.org" -#: data//credits.stxt:1192 +#: data//credits.stxt:1316 msgid "Want to help…" msgstr "Queres axudar..." -#: data//credits.stxt:1197 +#: data//credits.stxt:1321 msgid "…with localization?" msgstr "...coa localización?" -#: data//credits.stxt:1207 +#: data//credits.stxt:1331 msgid "…with something else?" msgstr "...con algo máis?" -#: data//credits.stxt:1218 +#: data//credits.stxt:1342 msgid "Thank you for" msgstr "Grazas por" -#: data//credits.stxt:1222 +#: data//credits.stxt:1346 msgid "playing" msgstr "xogar" -#: data//credits.stxt:1232 +#: data//credits.stxt:1356 msgid "Penny awaits you in warmer temperatures!" msgstr "Penny agárdate en temperaturas máis cálidas!" -#: data//images/engine/editor/objects.stoi:156 +#: data//images/engine/editor/objects.stoi:4 +msgid "Enemies" +msgstr "Inimigos" + +#: data//images/engine/editor/objects.stoi:162 msgid "Bosses" msgstr "Xefes" -#: data//images/engine/editor/objects.stoi:167 +#: data//images/engine/editor/objects.stoi:173 msgid "Projectiles" msgstr "Proxectís" -#: data//images/engine/editor/objects.stoi:181 +#: data//images/engine/editor/objects.stoi:184 msgid "Environment" msgstr "Ambiente" -#: data//images/ice_world.strf:6 data//images/tiles.strf:327 -#: data//images/worldmap.strf:67 -msgid "Forest" -msgstr "Bosque" - -#: data//images/ice_world.strf:106 +#: data//images/ice_world.strf:80 msgid "Ice Cave & Crystal" msgstr "Cova de Xeo & Cristal" -#: data//images/ice_world.strf:153 +#: data//images/ice_world.strf:127 msgid "Embellishments" msgstr "Adornos" -#: data//images/ice_world.strf:237 -msgid "Ice" -msgstr "Xeo" +#: data//images/ice_world.strf:320 +msgid "Underground Forest" +msgstr "Bosque Subterráneo" -#: data//images/ice_world.strf:282 data//images/tiles.strf:693 -msgid "Castle" -msgstr "Castelo" +#: data//images/ice_world.strf:375 +msgid "Trees & Bushes" +msgstr "Árbores & Arbustos" + +#: data//images/ice_world.strf:406 +msgid "Seasonal" +msgstr "Estacional" + +#: data//images/ice_world.strf:496 +msgid "Structure" +msgstr "Estrutura" -#: data//images/ice_world.strf:328 +#: data//images/ice_world.strf:557 msgid "Pathing" msgstr "Camiñar" -#: data//images/ice_world.strf:424 +#: data//images/ice_world.strf:718 msgid "Water" msgstr "Auga" -#: data//images/tiles.strf:19 data//images/worldmap.strf:41 -msgid "Snow" -msgstr "Neve" - -#: data//images/tiles.strf:124 +#: data//images/tiles.strf:252 msgid "Snow Background" msgstr "Fondo de Neve" -#: data//images/tiles.strf:162 -msgid "Snow Mountain" -msgstr "Montaña Nevada" - -#: data//images/tiles.strf:236 +#: data//images/tiles.strf:300 msgid "Crystal" msgstr "Cristal" -#: data//images/tiles.strf:457 +#: data//images/tiles.strf:539 msgid "Forest Background" msgstr "Fondo de Bosque" -#: data//images/tiles.strf:572 +#: data//images/tiles.strf:690 +msgid "Corrupted Forest" +msgstr "" + +#: data//images/tiles.strf:868 +msgid "Corrupted Background" +msgstr "" + +#: data//images/tiles.strf:991 msgid "Block + Bonus" msgstr "Bloque + Bono" -#: data//images/tiles.strf:618 +#: data//images/tiles.strf:1069 msgid "Pole + Signs" msgstr "Signos de Polo +" -#: data//images/tiles.strf:661 +#: data//images/tiles.strf:1113 msgid "Liquid" msgstr "Líquido" -#: data//images/tiles.strf:833 data//images/worldmap.strf:199 +#: data//images/tiles.strf:1131 +msgid "Castle" +msgstr "Castelo" + +#: data//images/tiles.strf:1231 data//images/worldmap.strf:199 msgid "Halloween" msgstr "Halloween" -#: data//images/tiles.strf:861 +#: data//images/tiles.strf:1272 msgid "Industrial" msgstr "Industrial" -#: data//images/tiles.strf:876 +#: data//images/tiles.strf:1287 msgid "Unisolid + Lightmap" msgstr "Unisolid + Mapa de Luz" -#: data//images/tiles.strf:893 +#: data//images/tiles.strf:1314 msgid "Miscellaneous" msgstr "Miscelánea" -#: data//images/tiles.strf:927 -msgid "Old/Unused" -msgstr "Antigo/Non utilizado" +#: data//images/tiles.strf:1342 +msgid "Retro Tiles" +msgstr "" #: data//images/worldmap.strf:24 msgid "Water paths" @@ -2856,3 +5148,19 @@ msgstr "Camiños do castelo" #: data//images/worldmap.strf:135 msgid "Darker Forest" msgstr "O Bosque Máis Escuro" + +#: data//images/converters/data.stcd:3 +msgid "Nightly Tiles" +msgstr "" + +#: data//images/converters/data.stcd:5 +msgid "For levels, created in previous Nightly builds." +msgstr "" + +#: data//images/converters/data.stcd:8 +msgid "Pre-0.6.3 Crystal Tiles" +msgstr "" + +#: data//images/converters/data.stcd:10 +msgid "For levels, created in pre-0.6.3 versions, which use crystal tiles." +msgstr "" From dc981ecf176cf07d654e2437c52be9c45d0514cd Mon Sep 17 00:00:00 2001 From: Daniel Ward <39805490+weluvgoatz@users.noreply.github.com> Date: Wed, 10 Jul 2024 00:31:04 -0700 Subject: [PATCH 10/33] Update yeti behavior (#2969) * Add boss class, add pinch mode * New Yeti behavior!!!!! * Update yeti.cpp * Update yeti.cpp * The yeti can no longer ascend to heaven * Add big snowball attack for Yeti * Update bigsnowball.cpp * Update bigsnowball.cpp * yeah * yeah 2 * unerror thineself * Update the rolling snowball a bit * PLAYER CAN BUTTJUMP BALL * Rolling balls die in spikes now * They kill enemies now * ugh * More dynamics for the big snowball * Yeti snowball changes [read desc] - No more propagation of movement - Don't break if merging with upwards spikes. This is for some levels. Only break on downwards spikes if they fall hard on them. --- data/images/creatures/ghosttree/hudlife.png | Bin 0 -> 9435 bytes data/images/engine/editor/objects.stoi | 5 +- .../objects/big_snowball/big_snowball.png | Bin 0 -> 3737 bytes .../objects/big_snowball/big_snowball.sprite | 11 + .../big_snowball/big_snowball_particle.png | Bin 0 -> 2929 bytes src/badguy/boss.cpp | 93 ++++++ src/badguy/boss.hpp | 52 ++++ src/badguy/bouncing_snowball.cpp | 22 +- src/badguy/bouncing_snowball.hpp | 3 + src/badguy/ghosttree.cpp | 33 ++- src/badguy/ghosttree.hpp | 8 +- src/badguy/yeti.cpp | 276 +++++++++++++----- src/badguy/yeti.hpp | 26 +- src/object/bigsnowball.cpp | 223 ++++++++++++++ src/object/bigsnowball.hpp | 59 ++++ src/object/bumper.cpp | 10 +- src/object/bumper.hpp | 2 + src/object/pushbutton.cpp | 5 +- src/supertux/game_object_factory.cpp | 2 + 19 files changed, 717 insertions(+), 113 deletions(-) create mode 100644 data/images/creatures/ghosttree/hudlife.png create mode 100644 data/images/objects/big_snowball/big_snowball.png create mode 100644 data/images/objects/big_snowball/big_snowball.sprite create mode 100644 data/images/objects/big_snowball/big_snowball_particle.png create mode 100644 src/badguy/boss.cpp create mode 100644 src/badguy/boss.hpp create mode 100644 src/object/bigsnowball.cpp create mode 100644 src/object/bigsnowball.hpp diff --git a/data/images/creatures/ghosttree/hudlife.png b/data/images/creatures/ghosttree/hudlife.png new file mode 100644 index 0000000000000000000000000000000000000000..80d24a63c6015c4793beabf7a438adbebd599383 GIT binary patch literal 9435 zcmeHqXHZjJ)NYU}(t9Ta5D)?+^d>Eofb=3DC}}{X1ViXuKq8>h1?fdVibxZXq7*@- zNt341RHP_^G(q78-#+)7x%1B4@86p<=j7~Fp1szy*WPp1O>MmxhY;AMm}Mto&v5+K!oKg#(*j5*HLCEIj-9_{U*W_-0%?<=x8hH~6rC z`{@p!vd5Q0cY?Rgp7b8l=H=}l_4_XOe)EkD2jy-4bojP>RK0c-9I;pA;}XtYHZ;t* zG%4tCkZ>iOZrk2+JdV(Qp1fgL3(~5&KMeT!_I1i7aQNHKsg31>8D!|3X{>d))9ze5 zXJKPPAd*JyVBb3d(t3s%B*v*GmRWQsTGwD`XEd!E%$zv)eC2S$Ze+xA42L_QOxvgv zbgLR(eQQ>4x&MYGoI)i${Al;dx80@KeU0$_wSfm=L!H%=3vUB1ZVMj-<<+e=2fJ`; zV03acvkqn!HI~j(!S6j$O;6A3oaHKf^R(wm%mnMXN>}L8eCv0BW3SlLkiFiGLzSQC zn-U(Jv|>U7OdHR6jNK6W3wO7d&BSY-vr7Vp&jiOU1cQ%EXLDD+c%)_CU4A{!J@D;? z;Bm8N=se&3>w9q@g2bkm9IW#8S-AC^X&w~8gQN2nT$MRo$na2y=*bP_#u ziVAL51tgB%@kn`3U*m_6pB7%CovNQAlN6286tz(v2RlIPJf4>;tf_oV1ur|+!fNi? zB}>}kCGMx&2HjGysc24jaIa{K;b1m#Z%(tliT|YEQdEp5Ye4Gf+36I=e1e+4Sm8+C_WchKa^Gb8M-n+D7e~SBqeoU!mH{R9|U!(9FtQS*Y{R z**U@dkD6sM@u^-?b7j{WQmchp-*-oIM_A~o6FId31yQoWoyLzq zuTZnFp@$o<2aVQBHLGHu7^XWrH{%%}NEascDO^&hA=chpS1d7X`;b%-)1BVRZeZ%A z)|&Z>!I)C^ThV9c%qqk9@ey~M6TH_Ppdl^dwtC2@Nsb)vE3ZMjt|LPvYVPt7w|gG zWz>6U-cl8BzV5z@{GLBDd^vPpf4);ZQftqqgYZ7r-3&Hp)EKihE28{PXId^h&ENLN zBy&!^;Ns*ift*K?=Cdw!6qRVNQG-T;WjduD`PmWH^saj`_w$S*u5G8BVq|s==DWXA zY5nmf1mLtrkkQHn{THCwZpw*q5ACsijr46_ z_VhDhei}y`R9$c;TWnFp9 z>!xJ=o{OBm$aekRScvMwgq;r|*~bXMm5kBBncP zudI8`r}o9U?zR>xn}}+*owI7-StJ+ct+hT_Eicg(ajl|L%hJ^#3U`?-j?AxRalO zmiZy3R5;j?TD;sn2W!0g=@t8HaxvBc6E@ycOuB1~%{Dr)({!`wZ@{EtphR^&T4QE; zDx&!<7By@+K$u_~N-@4(V$ug;8WITt7AZk5c{PvYXX(;@==(@rej=w7sxNOsb ze|c+?j)q{p2|DHb?(JLea`lwUM1IKD#Ky{n0GV4o;jY3O{qt$T(0DBk^hCL$(X@diIN=VR6fd`{+uX{Ddw&!@k--BlU!EjioCXQj#Lmz>HqKfqIk*P;%o zNWq*yAP1Qn!>$9zD98dnhZ;rj~^rYaW;I z(YLAn_DZJU?5$SsmrxzIK-HT?Ba1sJf__4G9+}5`E}B_WoDE#aw|GY119JI#M{)jjJ$3TE^5Ejf zi#&PWo8k50j<45=$vUFDHKp2TAc#(0Al>Enr#(5Wldk8?zZb7(QKuW;v{(1_PG)LF z+jdtvYunrW_!=7FYNlWZ85{^)zzz zeZc~aNfa&8{FWh9l5te;Xeq2A>DFmyPAG32_P)QEJEU7TD$*E#h(2J@I@srBjFn@% zo3yO2%&Gp8>0w<`MLjV?+pCfeu6u+2`I$>8Iu`WCWi926PxZ}gp9WNlO9M2z$*dTR z5G^CLHtlH>virRH>gyEz*FJDmM;ARX5=|%TrbthYdfedC#`^lUb9Hh%x5^79nh_WN zBwkB@OWLC9AoOS#IC+a-M4C3NYpnc8>~zV4Q(A64SzGKYA8$~wskQOLy7jFD#~s;X zZcE>fPMP~0lrWJ4psF3_jS)XAS5FRR@3h&?U~t>EOnlcK$s5*oGwyqb%jlwzfVedM zWZ)y7SeKzak$59BJ^HRY*SB=83Qo~lJ-Nr?>mUZxlx4|sfM-d#Cw~AM?+|l%p6TAZ z2IweQPX{i4SR7nwdtKZqfa;ydQit;>WsmE80uFY$iu~;D!pySN*(kU%<0f?;Rw)%m z)mnBxtGwXE8#nfW;rrRg6wjsxh^{?o#+5QRJ^qT9l7?Si$w>sPE(%|>q>SJl$eN>n zVX!pKusTU@5q+xsF@;y{EfoY$gLISZ%R&1*AXkYbW>vJMIr5ECqSeRTzJN#1m_Np* z5bk4oSo?4uB4>5zqcUh-bFi8i7Z|k8FIK!3DYY(rG$4{2*S8g4qd_ zNJ=XvE;^J>Zl|Q}SGvBU>$@V_Pfrhud5TZueWcUHdkxx2nfPrTwQ z_c_fdvCGjQb?No45H(jImNmcSOip+)Ty4xrC~Ci~@D0~sgrhW>_G>Z|3HMcDvn)CB zLF#h%Lj^7r|3RC{756W@b6-6`G3>RIq89AjU9bIU4rx{cE?}c>fybZD21~@)+_?5& zU$gWG{!ro_ZFK)PSLEHA5zFMBuQVn2FR%09OI*aIs%Paq@x=kD5Yt8Sh6n1(ccsVB zpel!i!uk@+1*OZm<%1Wk)W)JZ*o587^3Uid3vX8ky;A3y80nv`p>YLV~6_>(NzwqI(w0!}V{6+X(D&^=)ESuuQcy?a%XW^nB6UU!?dp zq*Bp*eCpmr$~};8)+PWz7K7E*HHYi!{?WCNdX?W;h;Dn(!pEaT;_q%+L2CCpwF)m(8I& z!28V||2+Z!4FImHo2|(6l)1H)8BAD5weH;hm61rVZ4^Z)NUq)v522jg^krncveBvD z|MN{=k--oT-B+4!p9^Cqi}Z_`CRR(WW_)N$i?ip&1SVImci(Zm%NMqk-8kJZ7Zr34 zV#X)Ju?3cDkd^#IyD5Lo(AN6pUI~A?3htV%5&P>Vv2X;i;-N^hsSlThl+X=j3d6E| zBFlwntPLEJnE#U)AO2#uw@);wf=2%~Wom&|{m=REuPv8^l@wM)C_!3>@tDwrQ%6qu zmm4ZKQ2ph3fOgk;BhQ0=1?SzA?W_0j-sv^)g?v1kp@MFkUC z6K`FN8`dxgkFg3ewMGTGqg2o!&GWSC0jeYbPYeM84Dj^u@=*=Y0R6&MCB2`BWkA4R zCIoj4ke!J+P#1^C0Oh6SrDef-0a!mM=sYb@9glWVwS?*a4nZ1efZPZKZ&eu?e}8{z ze>rI!-c<&oqM{-r3zdOF!6XZ?PoNh85dik`5k7(V4FiVpLE*991T4-Ac!G&Q;(Q4j zAP`9p{3AY3ZxfS0;k|r*XMx0rOaQ`L1|lsh2Ft3bD1hamXebz=gjNPCC}QMQTx1nd3JS=-LBYLz2na6}<^+la zE{!GOxF8kLE-DBJSV37y5iGAl@oH7`#DC+{2my=flBb6agFiOQmMG2*VkyVjb_yvVVsp{kKo(R%%Vm%SA z7#VLb*I$Yg!d11+;Tj;QwCrCJa}NZ;h2%im16VIK&fn)Rl{MBAV?{um@Ci|ZC`06A zl~j}!l@%dMN`D#IV(>nsT0B98$V$sWe`!t@MwOHfiCV--rIG-C$w}F$>f$j70uFDD z!+B_cPJ#lSc>bw2A#Er$f`EV_2pAHmEL2`qR#6oKv4%iY<>XW$B=(e4W&dW6Lt|Y6 z|6kT8+Xtxr+oBs{eMs{M{u2GRr>rp7ejEKZ^uYewOhDkTZJ~-l{g#3c!ViP~6(>qOM|4{uzzG8|GvkNR)wP6~TW|rVNt#Jz1HP z6XTC;)n)!KKGc61{OyP#`TZs%9bKf8Q0C90@OQpQvHoxVeqV?G%_)Gu|0elY{QgJR ze{}sT2L6@tf7SILUH^)Ke`Wk%b^U*%i}tT(3gbok0`e!dN^cIHkCNIfDx|Ri3~+pM z<+qilkR+$Q4efmZfHSNoHyPkwHWx`qO@N!|QGcR3!y?4OKxKIe0HDc(!?djpdo|Jr z@7y==?FnDDZrcbZU7y=STS}MvcL$U`m6o`l+2JolqkAnP4DGw|95+*eh-eDQBg#|m zBDIl}M3X`(kchAlvjhmAY6pLG(=(=qjFCH7UGA-h#?MgAgLXk1U%NMvHfh%7s>|xj z50+K7?i|ZE3|##2X#!`SdIhz#`He0;b(+ql4mNgnRrS?lXR3FSlDfUqI|)n-fg5d; z$~l3#!C%h3-9o(yQ1V`8;NyEXG6F8C)9rRbLz}g2Cgi_`7mNkpEDVXO%qYM;bz&}D z`p$X2w<_z((wpy$)BEK6`@RPDs+M276ImS$5?;DJuYqQNt;_pKKKG-?H6vle`|}Ky zm{?Zpri(Lf7*KGL_N`aGRE+6fgjaRpCu?9VF&BsgG!4yHg!}JZM*Hqq%(x6yREOoI z9wqL`QU1I<^o9IBHuW((R1w#}cU5kfj zo1T+XiTFby8W$ZSeIq88=+}ld{i~~2WOMSM{J0`7Lt96YZeJZAPUfx)o1mLd&SU(S zH8b+wbzyJsIckawGpXq7J8 zs~w)!p(83kZoFLT>0oK8#mt;+b3yEB0oG4E?o9U6eeQA5+I9caTDg+%WOnroR(2$x z{N#W64$>tz*%z|zIs8|!mSIbX;srs*o)cbQxxObN(j#wKPm!L7* zcL&b;OW?JAwTyJ2vOpOlftKy%klk+=PctLqx@jO(-dju(x@gnfyUL7ZMTE71SxDVx zixlJWjp=db+1Y1;LOh$E=EzGCJL16?r$bg}v$?DC9avHpQXV;HzWQAG2zsDgS{hjb z4-nkUeIB@#A>k<}*3V~j8-CkJo0eXpvY=hpV}oTziRrt$HLF980P1X+xP7`sdc}Ta z3vhJfsDT@le=cB$jo%=hEcr#PA&ow7G*k3rlkO(-!KommwJAg6ip-V#dvl#=ZgXVo zEyM1{&q8mJrnYQNcJn#&jxZ6jI3eN`sEISAWPiZtd#&*BtxJNinb+DZNQzG*<4mj~ z^ocxv{$YAHc?F(E(V`){QU!s6BW85S9r3+^dIYkzXI-nTL)?K>@6@cL z%c0pmb}YyUCSbI*&{-Y248?3k#!oVu!}~)r*i{~jF3w5jx4QBRYgg$TSQ@0S@{jv_ z-&?RY$8_KoX3R$(`wT>LQNKAd?4V#80P2_V7L^0LVQ;BGJpmyw*8GPCBA4_B%_qA? zH7L3SH>wg_*yCDt#bmq#O|5W6{ha1DFczVK?_ZBp|L~|HH6Q=m_a6uI%-M8d(0u)dMsqo!sBkpQsUsv8lBwgQ3&`(o((zbk^sLpd zH?wFb3hl4FC)XDi(u*Y`6-zuB0yf$31fd(l^pc zFyhVkOe?uj?q!iDJFVk%id8Bofi{id{8Ne*veh@|eB0tP3ux^>UK_Gt3-y`{yJb4! zT91!W->{fm(tDbcWEs>XeOB~>Ide9Lv%+fhk>%j%D2MB$nRq{0djM@-PS@yrAw0uQ z4ujCqjg-x&1vAntU%7`kw-45~sh7DPI%+Ej_oPelN|k%wVgibit?vl{gA#`6mRa9Kc4AItSD1;4i!lyfR`bPR|-7cJZ48YgadRhv(L@m*U&TN^!tfR?XA z;;6(Fm$5-HftXp?nc&0uR0|rbk^MoIrUu!B&kQ?OFIRczpE105vxf4G4mZCt^{eaJ zaq+8|Bv?W>kkF(RMd?XK-t#-3-(=K46`(jvbTU8~;p<>!?| zq;c+E-xk@8q(GtmX!R>Ed}ak$h2?KCqi{lYS_!lXOx#JM%;z=ZKk>z1;<_Q^mag(7 zN_guFn=ja=ZP>#vFP>9#Fy#EgRvPC@y0Cr`y=sn-onG$RMpOl@1eorD7YIUch>!kQ zT2^7<#ARUc1#t|#KJtmSYeDpjXIoznYu?gO&ZNW^-$V>21xq54gXV#def&sm y?RtixZszj(I$yE}t$3h6Yo%5wXHqwg>~>$sK!U4OJL&5M0M|2xJ=Af&{(k^zBl+9_ literal 0 HcmV?d00001 diff --git a/data/images/engine/editor/objects.stoi b/data/images/engine/editor/objects.stoi index 090bfbc3ef9..a0314e2b306 100644 --- a/data/images/engine/editor/objects.stoi +++ b/data/images/engine/editor/objects.stoi @@ -177,7 +177,10 @@ (icon "images/engine/editor/stalactite_ice_yeti.png")) (object (class "dart") - (icon "images/creatures/darttrap/granito/root_dart_left.png")) + (icon "images/creatures/darttrap/granito/root_dart_left.png")) + (object + (class "bigsnowball") + (icon "images/objects/big_snowball/big_snowball.png")) ) (objectgroup diff --git a/data/images/objects/big_snowball/big_snowball.png b/data/images/objects/big_snowball/big_snowball.png new file mode 100644 index 0000000000000000000000000000000000000000..f8e7f6d46e7a7c6aa62dd2a90bb16e121a9c7c76 GIT binary patch literal 3737 zcmV;K4rcL*P)EX>4Tx04R}tkv&MmKpe$iQ?()$5j%)<$WS|35EXHhDi*;)X)CnqU~=h)(4-+r zad8w}3l4rPRvlcNb#-tR1i=pwX9p)m7b)?7NufoI2gm(*ckglc4iFj@rkY*jfT~$W zIuRFh`4utniXH?ph$zAmGxcOitw zOXs{#9AafjAwDM_Gw6cEk6f2se&bwnSm2oiDq zBgZ_dP$4;f@IUz7ty!F$aFc>@p!>zPKSqJTF3_yo_V=-EH%|cnGjOG~{nZ9A^GSNW ztwoN2fo~U-2exN zK(s{JYaZ|J?dy{D4^000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j~V25h*(x{Knq^01TB$L_t(|+U=cNj9q0F$Isqp zpX*F#re&BZ(;M`L7=(hoL?8@cQLF@_K53!}ni%!L7!zK~lMmptFFyF$j7Aumqa!mTx_++5PsnFW*`J{@3MO+bUfr z***W{4~DvBSyS>4mOVC9_wC(te5m(aPlmX?uINs=EPAui&}qt!=oglj7KVBf$G?_; zNRz&(Y1$gJfdrn}@U0*pi z)Gz+??`MoB?U zH%diM(=_)1Ec_A2vFIH?54l-b`0C5g8Oykd z#VkgFwl0pBb--KG~=OMk={;dIN=^jlQoik|-P{7+*zfiV}cL z*_Qt1VvJd8t21Z;;>K$VS!Kkyme)5#|J83^5`FRC|M*xS%UDK%#4JXE#QCr%Jo()p z3tl{Y^b2zQks}91zon^gR0ESCCPsiAKT_ZcV?9nNt5@_^D_~!at+U3Mvll4)>iNpb z5?pHna73rF4DWHJuk(zJPl*1|=k?j+k}YwzG|`(l^Ou)C)PDoUG72PSF$yGC1ykSr z$>V195ljI2nOXtuR1y>oxzClB~U9H@Zx|SSvU?9 zEL9M$-`db?O*WJPI%Q>aD?Np*-LtoderE5TqEFNmLen&r7~R#xvW#UENX%jsNJhdG z!{AAzY~;R!hxKGD&4m#M(3A;l15$ue85pTmD!J#{fSoAOi3SnfI6Yy2i-jW`MuyOF zJEb}p;La&6a$sDm2lh38@PM8S-FMyNdGB@g}9WWIRFh6i72CVT~%oy@nx`D#-7C5le z(0grVS%lE0qfc<;sjrK^d~V@5-t#YqI*S~PWfVxvViZU+Fm>?ZqY?@}Hvga;pPQZ5 z)kDZS##;7a<_uqxrVw6gfS@!3O?EDfl<4#kf>IrSrLQ4z)?d}&JeC2oA?Y2mdmb{0 zZUu2L&Iw+|F#DRP=T>m7{r7%W^j5q53?BJ8V;Kb$vls=E3{1tX%cAeNLt{{NB=;Lm zepI**2GT>F5}5|^s29e$zld^Eojy8-128cU@X`(RTCG6mY*zF>8&%cofRwojb?6AQ z6c#_YWRGPl_nn;TxT5>G&)o;qSw4UAZDCf62BwNBW-$sR&aT6cNS12gXhpYEQ{4;H z!SQ^>jN7HfNypHNm0|jc9TD&aW!PJV{b8d1GOhY@uI8Ao*uC8n&!8Usu*+Zdp7KE|_q zzMfmzti=qa3uldG6j97#6iA#h!ppNWGcZ*PD`w@w0^>yl3qn@eBHZbi2=h1ygC}u* zkpm?e0gnUFvdOyQ4mZ(QBj)LYSy>pxnA?HUE@U99kK@KNZU8ZhQ6O<@ zb&WyQ5o_Y+6bs>E#$+;OoFOxPU@2fqj9+Eo3pYfEix5OeAq!$ydkR~XvyN(-d(UK9 z0p{t0HT6;CkOG=qKfpbs`rX5Ej49dr9&E6zauT7XHD)$oYA_cP5U5o|6{A&nbvBG=+ z7QwxK+|y@U`58BcsY&9v;e`-NDDVdgJKTU%8W9H@z=`W2rW6CFHoEG>EqC?3l@h%c z3nzM>jv0g)U$Ts46j97#6iA%Tnznas3V9Lk`!c@6Z%{6DTmr)rvGNllVh_NP)uX1ZJ;E2#cSco#+67shnwp@h* zpjXKa6h@*b$%P0yxoyB&8?2I$=p}TD!R|8b2=5JhA(Mfh``${H)iRb*KrxF^AaPDC zEJ_olYEuh(9z1kEhN)R);zbCXH!__8bc~O1w2gjKF>-@d#BCU{$~bhacVahAz*+() ziz$E*OsVe!QgENl%GsIwSGZegYY%oGOlkADrXd12cV0&s6q#7!b&X{dUCd$>NE~lt zRd#Xox}61uqx?c8HeKNuCg|w|B_k@p$-W{B``|{jxnpK9Q|d|X#v+G|Z-;IPAxkv% zKF6x4NRRboX71cj=h=iF>{Zl~wJ%-9JPLglw@Y{1s^k3|%P5eT#VC+C+@ZhcPVKsR z^2~YBXJ)i-IUPU>Sq($Y+{}_%`Hmi)AS=!9Th0dX`NHMWzpZ)cc5Q4Y0|`N)fZ#(D9~2f`KU`{}-nC$3~DW4fRte-jZ)8 zY}mprpBhXerc$`w|M$3 z8Fch<8MAe2T;Zaw=DFNh)hd|MpOS z@EhO%?NER7Z-0GisPFj7(=vW?Ty2;=rUp^|R$rDomf(~HU@R_TM?uI!0>vrUS6HC4 zxejNITb`L!T(z{`DMo5w4A2w;`j#%O>n%qL%iLDnUDGjD!1CIKi=vNWP{uL}DrPYX zBqN&)$KzX`9qO;W{<^@_UH9nr~%FO$M$*_iVYZp@@&M=S_)sL7y1n*W-$sR zSM}u+_C$L0k$K4m&L4e3XveM7(=u1RuFRy}^K-A}fk6?DdWZ`#PGygPpa%3RbV8Yr zd3v}m%Q(-!_rB;?E~-8`g=+k^!cGkMS_kA_yrk!Ptt-;Y>uSE3Y%HTdViu!7@{zvN z_q87$7cAJeZHLUYW5-Sz6V{YvMW~^goYId;@zbBRO8&>K*gz&zU=Xv33d8RTkIOA( zbc|Vb`nvy)%x7|-@Wsqs2-dW5>4NAho@>6-ce9CEi~@=CQBJ<-Tf2t(`a373f?;vt zUBQ>n%|9mN=ccu%`Uc7@msb@c(h;2#CYzdJv@nKy^aAYN>-H6n)=`$Z*6xVjZtLek zt6dF!Uq)Q359jXk`{!g*%eLhU?hCKHIBzWDCKIz51rqC8OnT^4L(h$B_CS2_DQWjbx5MvJAStbS)pI@eVO)yICu!0pM&VZS4K90tD| z>g)eK^{t`4w)jrRSjJ5(W-$sR*7dsZXTJI!$Ov1 z?CKCl3R5W?2xFgJlB7Q!>Wi86iEID%1058s}hEX>4Tx04R}tkv&MmKpe$iQ?()$5j%)<$WS|35EXHhDi*;)X)CnqU~=h)(4-+r zad8w}3l4rPRvlcNb#-tR1i=pwX9p)m7b)?7NufoI2gm(*ckglc4iFj@rkY*jfT~$W zIuRFh`4utniXH?ph$zAmGxcOitw zOXs{#9AafjAwDM_Gw6cEk6f2se&bwnSm2oiDq zBgZ_dP$4;f@IUz7ty!F$aFc>@p!>zPKSqJTF3_yo_V=-EH%|cnGjOG~{nZ9A^GSNW ztwoN2fo~U-2exN zK(s{JYaZ|J?dy{D4^000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j~V30stWd1lj@s010hLL_t(o!=0Dgk0sYthrfNP zs&h_X=hkD-&DZhFAP8f}nSkTq*aRb@D3(AGNC+f?gb)uALh{S-#6!$8LgGKjQzVNB zgaitXqWB>wiAfaMV|y+h51yXsZg=;&)NNlE57lEsFyN$~N?Ti1Yp=b2-})`Z$9x`s z=8J!(lv+pWrL&Jda=C6h+IoRChRJx0GM4u?H?QWDzJcUMM5Z^s^N)Y`alWnozYQm! zc>2-F;f;T~^u*(5_gjZCn&T%5>+&erDUOV_{s&ApZQGfMB#{T$U78Gi@DRNQkxsWqA9|H~80o`DZrYxpwvHw_bkiqyA++YVoxLvikdbH?I8cPyf&U^uibanUqvkqkx!&K4yFp#$~~%uoTu{ zwIXGqcAmNqtm*^qmIHePhNy4FVeT|Wq^CdYVOJK!uj*x`0|&3kM-p-pwLQTjV8;zYe>XA zsG+h3lp^I!8zQZXv@sJ>CgkA&07fg8D~pebX&=#Avs7rRGZ%RGNB{O&Jz4qs;?Au- z1MuAMer5Mdzxf+H^zcI%V?k+B&bXN9e8R>q zOG@49X*JKpQl$?Cx=|}BjzwnE1pE`9Ct-xwcmQ2nGjj&Q#VoZnv z5kVC6F%C)z5u;_0g$Owh1dTaU`$TE$v{XMqckEAC1XXC(}&fcMFvHPVr^tFdH`D% zq45cYqH%%c(h^dl50P2j;C!H|n-7UujYf<{6_N#I6ooMut-vQ-id5DNm9I1cxHL#H zi?DD*(XChI!Bq-I4_R>`(Kt^NGLjN)?{G<|JBRBXXoJoPQ&t14VvJO6Li&)H z^S0;6p>?LnP&c z=A`rhECeKBHHc)q_gJM^Dh;L8G%nEk%*td$Srp8sGg1mD5xT{UZhz;Jz5Uv&*B&`{ zfh*VEWn<$QDGw@eF_D6&2?rs-Z_jkGd+N;+zz`o0yZ@vCw3Jph>Dzwsopp<5HJi>>FkC6}q zv(B+St=U`DlnP3%FiLPS5>lorEIvl&ooC*=ArpPi&h9?5MS~2OrQY5|L|y{W082;j z`>k8o-^MD%ee26SczD9ZC`9ssy&EL8w`f_kJvl}6LC+9`dE2wQXz9a%>RIQR^`1#t zvNjpfENa@WMFHJxibO}fbN9cSn)iPA-L2ynKKVou`g7;bpJRDkktJcZA!h*@q}#bb z)As}QLd1p0&b;B~&XoPSqw|qz(=m6ENm-)EY;A4he2+?jW^Wr~Ewekf@Ll`TJ&X5& zy-Ul7U;NJZzW1dIpSZ}06USMfOi)Vk{=A`cncfHHZO6Rr2`Qu0z?F3HUKJK&3`!fu zRYCHe*KgdQTP&!oMa4jHJ)KUp(>?y{9P)wDeeZ|g-IdYu*K>4VT|crR39Woi%$k0f zPDB_LmeOhpV_2#R4lhr*e|?1$hu1i~G-g~_6wtICH*UVm?Cu@bmX}eBDKg!oc8<+k z*XXA2pIzL!wfBDxKfm+U%lYKV)9Uo;Gx%ykbe^^KRmNpWRSY(NToi*OQ^NVkyzRL= zZP;D3%$u5ay2o1RXxa|%diL+U$9C6#X)o;E0%+EZF ze(H~2e7W7*excGzpE`4fN6((ci$RrRW_2^Tr{D)i?mS)ZY1^7+cL&$j;+wf7@BU%$ z=39Tbd;N|1&pnmjdw%J+|M+e{+dW +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +namespace +{ + const int DEFAULT_LIVES = 5; // default lives + const int DEFAULT_PINCH_LIVES = 2; // default pinch lives +} + +#include "badguy/boss.hpp" + +#include "object/player.hpp" +#include "sprite/sprite.hpp" +#include "supertux/sector.hpp" +#include "util/reader_mapping.hpp" +#include "video/surface.hpp" + +Boss::Boss(const ReaderMapping& reader, const std::string& sprite_name, int layer) : + BadGuy(reader, sprite_name, layer), + m_lives(), + m_pinch_lives(), + m_hud_head(), + m_hud_icon(), + m_pinch_mode(), + m_pinch_activation_script() +{ + reader.get("lives", m_lives, DEFAULT_LIVES); + reader.get("pinch-lives", m_pinch_lives, DEFAULT_PINCH_LIVES); + m_countMe = true; + + reader.get("pinch-activation-script", m_pinch_activation_script, ""); +} + +void +Boss::boss_update(float dt_sec) +{ + if (!m_pinch_mode && (m_lives <= m_pinch_lives)) + { + m_pinch_mode = true; + Sector::get().run_script(m_pinch_activation_script, "pinch-activation-script"); + } +} + +void +Boss::draw(DrawingContext& context) +{ + draw_hit_points(context); + BadGuy::draw(context); +} + +void +Boss::draw_hit_points(DrawingContext& context) +{ + if (m_hud_head) + { + context.push_transform(); + context.set_translation(Vector(0, 0)); + context.transform().scale = 1.f; + + for (int i = 0; i < m_lives; ++i) + { + context.color().draw_surface(m_hud_head, Vector(BORDER_X + (static_cast(i * m_hud_head->get_width())), BORDER_Y + 1), LAYER_HUD); + } + + context.pop_transform(); + } +} + +ObjectSettings +Boss::get_settings() +{ + ObjectSettings result = BadGuy::get_settings(); + + result.add_text("hud-icon", &m_hud_icon, "hud-icon", "images/creatures/yeti/hudlife.png", OPTION_HIDDEN); + result.add_int(_("Lives"), &m_lives, "lives", DEFAULT_LIVES); + result.add_int(_("Lives to Pinch Mode"), &m_pinch_lives, "pinch-lives", DEFAULT_PINCH_LIVES); + result.add_script(_("Pinch Mode Activation Script"), &m_pinch_activation_script, "pinch-activation-script"); + + return result; +} diff --git a/src/badguy/boss.hpp b/src/badguy/boss.hpp new file mode 100644 index 00000000000..7fa942174b8 --- /dev/null +++ b/src/badguy/boss.hpp @@ -0,0 +1,52 @@ +// SuperTux +// Copyright (C) 2024 Daniel Ward +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#ifndef HEADER_SUPERTUX_BADGUY_BOSS_HPP +#define HEADER_SUPERTUX_BADGUY_BOSS_HPP + +#include "badguy/badguy.hpp" + +// This is a class for our (currently two) bosses, but can apply to future ones also. +// Includes information on lives, HUD, pinch mode activation, and death behavior. + +class Boss : public BadGuy +{ +public: + Boss(const ReaderMapping& mapping, const std::string& sprite_name, int layer = LAYER_OBJECTS); + virtual void boss_update(float dt_sec); + virtual void draw(DrawingContext& context) override; + void draw_hit_points(DrawingContext& context); + virtual ObjectSettings get_settings() override; + + virtual bool is_flammable() const override { return false; } + virtual bool is_freezable() const override { return false; } + +protected: + int m_lives; + int m_pinch_lives; + SurfacePtr m_hud_head; + std::string m_hud_icon; + bool m_pinch_mode; + std::string m_pinch_activation_script; + +private: + Boss(const Boss&) = delete; + Boss& operator=(const Boss&) = delete; +}; + +#endif + +/* EOF */ diff --git a/src/badguy/bouncing_snowball.cpp b/src/badguy/bouncing_snowball.cpp index 125a8d3d93e..ff397a347a1 100644 --- a/src/badguy/bouncing_snowball.cpp +++ b/src/badguy/bouncing_snowball.cpp @@ -24,16 +24,26 @@ static const float JUMPSPEED = -450; static const float BSNOWBALL_WALKSPEED = 80; -BouncingSnowball::BouncingSnowball(const ReaderMapping& reader) - : BadGuy(reader, "images/creatures/bouncing_snowball/bouncing_snowball.sprite") +BouncingSnowball::BouncingSnowball(const ReaderMapping& reader) : + BadGuy(reader, "images/creatures/bouncing_snowball/bouncing_snowball.sprite"), + m_x_speed() { + m_x_speed = BSNOWBALL_WALKSPEED; parse_type(reader); } +BouncingSnowball::BouncingSnowball(const Vector& pos, Direction d, float x_vel) : + BadGuy(pos, d, "images/creatures/bouncing_snowball/bouncing_snowball.sprite"), + m_x_speed() +{ + m_countMe = false; + m_x_speed = x_vel; +} + void BouncingSnowball::initialize() { - m_physic.set_velocity_x(m_dir == Direction::LEFT ? -BSNOWBALL_WALKSPEED : BSNOWBALL_WALKSPEED); + m_physic.set_velocity_x(m_dir == Direction::LEFT ? -m_x_speed : m_x_speed); set_action(m_dir); } @@ -49,8 +59,10 @@ BouncingSnowball::active_update(float dt_sec) set_action(m_dir); } Rectf lookbelow = get_bbox(); - lookbelow.set_bottom(lookbelow.get_bottom() + 48); - lookbelow.set_top(lookbelow.get_top() + 31); + lookbelow.set_bottom(get_bbox().get_bottom() + 48); + lookbelow.set_left(get_bbox().get_left() + 10); + lookbelow.set_right(get_bbox().get_right() - 10); + lookbelow.set_top(get_bbox().get_top() + 31); bool groundBelow = !Sector::get().is_free_of_statics(lookbelow); if (groundBelow && (m_physic.get_velocity_y() >= 64.0f)) { diff --git a/src/badguy/bouncing_snowball.hpp b/src/badguy/bouncing_snowball.hpp index 3b65c5319a2..e5cd1b9d641 100644 --- a/src/badguy/bouncing_snowball.hpp +++ b/src/badguy/bouncing_snowball.hpp @@ -23,6 +23,7 @@ class BouncingSnowball final : public BadGuy { public: BouncingSnowball(const ReaderMapping& reader); + BouncingSnowball(const Vector& pos, Direction d, float x_vel = 80); virtual void initialize() override; @@ -55,6 +56,8 @@ class BouncingSnowball final : public BadGuy FATBAT }; + float m_x_speed; + private: BouncingSnowball(const BouncingSnowball&) = delete; BouncingSnowball& operator=(const BouncingSnowball&) = delete; diff --git a/src/badguy/ghosttree.cpp b/src/badguy/ghosttree.cpp index b74b3b60725..c777ddaed45 100644 --- a/src/badguy/ghosttree.cpp +++ b/src/badguy/ghosttree.cpp @@ -29,6 +29,8 @@ #include "sprite/sprite_manager.hpp" #include "supertux/flip_level_transformer.hpp" #include "supertux/sector.hpp" +#include "util/reader_mapping.hpp" +#include "video/surface.hpp" static const size_t WILLOWISP_COUNT = 10; static const float WILLOWISP_TOP_OFFSET = -64; @@ -36,7 +38,7 @@ static const Vector SUCK_TARGET_OFFSET = Vector(-16,-16); static const float SUCK_TARGET_SPREAD = 8; GhostTree::GhostTree(const ReaderMapping& mapping) : - BadGuy(mapping, "images/creatures/ghosttree/ghosttree.sprite", LAYER_OBJECTS - 10), + Boss(mapping, "images/creatures/ghosttree/ghosttree.sprite", LAYER_OBJECTS - 10), mystate(STATE_IDLE), willowisp_timer(), willo_spawn_y(0), @@ -49,9 +51,13 @@ GhostTree::GhostTree(const ReaderMapping& mapping) : root_timer(), treecolor(0), suck_lantern_color(), + m_taking_life(), suck_lantern(nullptr), willowisps() { + mapping.get("hud-icon", m_hud_icon, "images/creatures/ghosttree/hudlife.png"); + m_hud_head = Surface::from_file(m_hud_icon); + set_colgroup_active(COLGROUP_TOUCHABLE); SoundManager::current()->preload("sounds/tree_howling.ogg"); SoundManager::current()->preload("sounds/tree_suck.ogg"); @@ -60,14 +66,17 @@ GhostTree::GhostTree(const ReaderMapping& mapping) : void GhostTree::die() { - mystate = STATE_DYING; - set_action("dying", 1); - glow_sprite->set_action("dying", 1); for (const auto& willo : willowisps) { willo->vanish(); } - run_dead_script(); + + if (m_lives <= 0) { + mystate = STATE_DYING; + set_action("dying", 1); + glow_sprite->set_action("dying", 1); + run_dead_script(); + } } void @@ -79,9 +88,12 @@ GhostTree::activate() } void -GhostTree::active_update(float /*dt_sec*/) +GhostTree::active_update(float dt_sec) { + Boss::boss_update(dt_sec); + if (mystate == STATE_IDLE) { + m_taking_life = false; if (colorchange_timer.check()) { SoundManager::current()->play("sounds/tree_howling.ogg", get_pos()); suck_timer.start(3); @@ -180,8 +192,13 @@ GhostTree::active_update(float /*dt_sec*/) // Wait until the lantern is swallowed completely. if (m_sprite->animation_done()) { if (is_color_deadly(suck_lantern_color)) { + if (!m_taking_life) { + m_lives--; + m_taking_life = true; + } die(); - } else { + } + if (m_lives > 0) { set_action("normal"); mystate = STATE_IDLE; spawn_lantern(); @@ -215,7 +232,7 @@ GhostTree::willowisp_died(TreeWillOWisp* willowisp) void GhostTree::draw(DrawingContext& context) { - BadGuy::draw(context); + Boss::draw(context); context.push_transform(); if (mystate == STATE_SUCKING) { diff --git a/src/badguy/ghosttree.hpp b/src/badguy/ghosttree.hpp index caad21d9ca9..19fac6ddf62 100644 --- a/src/badguy/ghosttree.hpp +++ b/src/badguy/ghosttree.hpp @@ -17,18 +17,16 @@ #ifndef HEADER_SUPERTUX_BADGUY_GHOSTTREE_HPP #define HEADER_SUPERTUX_BADGUY_GHOSTTREE_HPP -#include "badguy/badguy.hpp" +#include "badguy/boss.hpp" class TreeWillOWisp; class Lantern; -class GhostTree final : public BadGuy +class GhostTree final : public Boss { public: GhostTree(const ReaderMapping& mapping); - virtual bool is_flammable() const override { return false; } - virtual bool is_freezable() const override { return false; } virtual void kill_fall() override { } virtual void activate() override; @@ -75,6 +73,8 @@ class GhostTree final : public BadGuy int treecolor; Color suck_lantern_color; + bool m_taking_life; + Lantern* suck_lantern; /**< Lantern that is currently being sucked in */ std::vector willowisps; diff --git a/src/badguy/yeti.cpp b/src/badguy/yeti.cpp index 2bc4d7ef3c1..13b8e6079bf 100644 --- a/src/badguy/yeti.cpp +++ b/src/badguy/yeti.cpp @@ -20,8 +20,10 @@ #include #include "audio/sound_manager.hpp" +#include "badguy/bouncing_snowball.hpp" #include "badguy/yeti_stalactite.hpp" #include "math/random.hpp" +#include "object/bigsnowball.hpp" #include "object/camera.hpp" #include "object/player.hpp" #include "sprite/sprite.hpp" @@ -31,21 +33,19 @@ namespace { -const float JUMP_DOWN_VX = 250; /**< Horizontal speed while jumping off the dais. */ -const float JUMP_DOWN_VY = -250; /**< Vertical speed while jumping off the dais. */ - const float RUN_VX = 350; /**< Horizontal speed while running. */ +const float RUN_PINCH_VX = 400; /**< Horizontal speed while running. */ -const float JUMP_UP_VX = 350; /**< Horizontal speed while jumping on the dais. */ -const float JUMP_UP_VY = -700; /**< Vertical speed while jumping on the dais. */ +const float JUMP_UP_VY = -750; /**< Vertical speed while jumping on the dais. */ const float STOMP_VY = -300; /**< Vertical speed while stomping on the dais. */ const float RUN_DISTANCE = 1060; /**< Distance between the x-coordinates of left and right end positions. */ const float JUMP_SPACE = 448; /**< Distance between the jump position and the stand position. */ +const float BEFORE_WAIT = 3; +const float BALL_WAIT = 2; const float STOMP_WAIT = 0.5; /**< Time we stay on the dais before jumping again. */ -const float SAFE_TIME = 0.5; /**< The time we are safe when Tux just hit us. */ -const int INITIAL_HITPOINTS = 5; /**< Number of hits we can take. */ +const float SAFE_TIME = 1; /**< The time we are safe when Tux just hit us. */ const float YETI_SQUISH_TIME = 3; @@ -56,34 +56,32 @@ const float SNOW_EXPLOSIONS_VY = -200; /**< Speed of snowballs. */ } Yeti::Yeti(const ReaderMapping& reader) : - BadGuy(reader, "images/creatures/yeti/yeti.sprite"), + Boss(reader, "images/creatures/yeti/yeti.sprite"), m_state(), m_state_timer(), m_safe_timer(), m_stomp_count(), - m_hit_points(), - m_hud_head(), m_left_stand_x(), m_right_stand_x(), m_left_jump_x(), m_right_jump_x(), m_fixed_pos(), - m_hud_icon() + m_just_hit(), + m_just_threw(), + m_grabbed_tux(), + m_jumped() { - reader.get("lives", m_hit_points, INITIAL_HITPOINTS); - m_countMe = true; - SoundManager::current()->preload("sounds/yeti_gna.wav"); - SoundManager::current()->preload("sounds/yeti_roar.wav"); - reader.get("hud-icon", m_hud_icon, "images/creatures/yeti/hudlife.png"); m_hud_head = Surface::from_file(m_hud_icon); + SoundManager::current()->preload("sounds/yeti_gna.wav"); + SoundManager::current()->preload("sounds/yeti_roar.wav"); initialize(); reader.get("fixed-pos", m_fixed_pos, false); if (m_fixed_pos) { - m_left_stand_x = 80; - m_right_stand_x = 1140; + m_left_stand_x = 216; + m_right_stand_x = 1014; m_left_jump_x = 528; m_right_jump_x = 692; } else { @@ -95,7 +93,7 @@ void Yeti::initialize() { m_dir = Direction::RIGHT; - jump_down(); + run(); } void @@ -120,46 +118,103 @@ Yeti::draw(DrawingContext& context) if (m_safe_timer.started() && size_t(g_game_time * 40) % 2) return; - draw_hit_points(context); - - BadGuy::draw(context); + Boss::draw(context); } void -Yeti::draw_hit_points(DrawingContext& context) +Yeti::active_update(float dt_sec) { - if (m_hud_head) - { - context.push_transform(); - context.set_translation(Vector(0, 0)); - context.transform().scale = 1.f; + Boss::boss_update(dt_sec); + auto player = get_nearest_player(); - for (int i = 0; i < m_hit_points; ++i) - { - context.color().draw_surface(m_hud_head, Vector(BORDER_X + (static_cast(i * m_hud_head->get_width())), BORDER_Y + 1), LAYER_FOREGROUND1); - } + float push_distance; + push_distance = player ? (glm::length(get_bbox().get_middle() - player->get_bbox().get_middle())) : 0.f; - context.pop_transform(); + if (on_ground() && (m_state == BE_ANGRY || m_state == THROW) && push_distance <= 160.f && m_physic.get_velocity_x() == 0.f) + { + m_state_timer.stop(); + m_physic.enable_gravity(false); + set_group(COLGROUP_DISABLED); + m_state = REMOVE_TUX; } -} -void -Yeti::active_update(float dt_sec) -{ switch (m_state) { - case JUMP_DOWN: - m_physic.set_velocity_x((m_dir==Direction::RIGHT)?+JUMP_DOWN_VX:-JUMP_DOWN_VX); - break; case RUN: - m_physic.set_velocity_x((m_dir==Direction::RIGHT)?+RUN_VX:-RUN_VX); - if (((m_dir == Direction::RIGHT) && (get_pos().x >= m_right_jump_x)) || ((m_dir == Direction::LEFT) && (get_pos().x <= m_left_jump_x))) jump_up(); + if (!m_just_threw || m_state_timer.check()) + { + set_action("jump", m_dir); + m_just_threw = false; + if (!m_jumped && (push_distance >= 160.f)) { + m_physic.set_velocity_y(STOMP_VY * 2.5f / 3.f); + m_jumped = true; + } + + if (m_pinch_mode) + { + if (std::abs(m_physic.get_velocity_x()) < (RUN_PINCH_VX - 10.f)) { + m_physic.set_acceleration_x(5.f * (m_dir == Direction::RIGHT ? RUN_PINCH_VX : -RUN_PINCH_VX)); + } + else + { + m_physic.set_acceleration_x(0.f); + m_physic.set_velocity_x(RUN_PINCH_VX * (m_dir == Direction::RIGHT ? 1.f : -1.f)); + } + } + else + { + if (std::abs(m_physic.get_velocity_x()) < (RUN_VX - 10.f)) { + m_physic.set_acceleration_x(5.f * (m_dir == Direction::RIGHT ? RUN_VX : -RUN_VX)); + } + else + { + m_physic.set_acceleration_x(0.f); + m_physic.set_velocity_x(RUN_VX * (m_dir == Direction::RIGHT ? 1.f : -1.f)); + } + } + + if (((m_dir == Direction::RIGHT) && (get_pos().x >= m_right_jump_x)) || ((m_dir == Direction::LEFT) && (get_pos().x <= m_left_jump_x))) jump_up(); + } break; case JUMP_UP: - m_physic.set_velocity_x((m_dir==Direction::RIGHT)?+JUMP_UP_VX:-JUMP_UP_VX); - if (((m_dir == Direction::RIGHT) && (get_pos().x >= m_right_stand_x)) || ((m_dir == Direction::LEFT) && (get_pos().x <= m_left_stand_x))) be_angry(); + if (((m_dir == Direction::RIGHT) && (get_pos().x >= m_right_stand_x)) || ((m_dir == Direction::LEFT) && (get_pos().x <= m_left_stand_x))) + { + m_jumped = false; + m_dir = (m_dir == Direction::RIGHT) ? Direction::LEFT : Direction::RIGHT; + throw_snowballs(); + } + break; + case THROW: + m_physic.set_velocity_x((std::abs(m_physic.get_velocity_x()) > 10.f) ? (m_physic.get_velocity_x() / 1.125f) : 0.f); + if (m_state_timer.check()) + { + summon_snowball(); + set_action("stand", m_dir); + m_stomp_count++; + if ((m_pinch_mode && m_stomp_count == 3) || (!m_pinch_mode && m_stomp_count == 2)) { + be_angry(); + } else { + m_state_timer.start(BALL_WAIT / (m_pinch_mode ? 1.2f : 1.f)); + } + } + break; + case THROW_BIG: + if (m_state_timer.check()) + { + summon_big_snowball(); + set_action("stand", m_dir); + m_stomp_count++; + if ((m_lives == 1 && m_stomp_count == 3) || (m_lives > 1 && m_stomp_count == 1)) { + m_just_threw = true; + run(); + } + else { + m_state_timer.start(BALL_WAIT); + } + } break; case BE_ANGRY: - if (m_state_timer.check() && on_ground()) { + if (m_state_timer.check() && on_ground()) + { m_physic.set_velocity_y(STOMP_VY); set_action("stomp", m_dir); SoundManager::current()->play("sounds/yeti_gna.wav", get_pos()); @@ -176,7 +231,8 @@ Yeti::active_update(float dt_sec) m_dir = newdir; set_action("jump", m_dir); } - if (m_state_timer.check()) { + if (m_state_timer.check()) + { BadGuy::kill_fall(); m_state = FALLING; m_physic.set_velocity_y(JUMP_UP_VY / 2); // Move up a bit before falling @@ -189,56 +245,93 @@ Yeti::active_update(float dt_sec) break; case FALLING: break; + case REMOVE_TUX: + if (push_distance < 160.f && player) + { + if (!m_grabbed_tux) { + player->get_physic().set_velocity(5.f * Vector(get_bbox().get_middle().x - player->get_bbox().get_middle().x, + get_bbox().get_middle().y - player->get_bbox().get_middle().y)); + } + if (!m_grabbed_tux && push_distance < 10.f) + { + m_state_timer.start(BALL_WAIT / 2.f); + m_grabbed_tux = true; + player->get_physic().set_velocity(m_dir == Direction::RIGHT ? 600.f : -600.f, -200.f); + } + } + if (m_state_timer.check()) + { + set_group(COLGROUP_MOVING); + m_physic.enable_gravity(true); + m_grabbed_tux = false; + throw_snowballs(); + } + break; } m_col.set_movement(m_physic.get_movement(dt_sec)); } -void -Yeti::jump_down() -{ - set_action("jump", m_dir); - m_physic.set_velocity(m_dir == Direction::RIGHT ? JUMP_DOWN_VX : -JUMP_DOWN_VX, JUMP_DOWN_VY); - m_state = JUMP_DOWN; -} - void Yeti::run() { - set_action("walking", m_dir); - m_physic.set_velocity(m_dir == Direction::RIGHT ? RUN_VX : -RUN_VX, 0); m_state = RUN; + m_state_timer.start(BEFORE_WAIT); } void Yeti::jump_up() { set_action("jump", m_dir); - m_physic.set_velocity(m_dir == Direction::RIGHT ? JUMP_UP_VX : -JUMP_UP_VX, JUMP_UP_VY); + m_physic.set_velocity_y(JUMP_UP_VY); m_state = JUMP_UP; } void -Yeti::be_angry() +Yeti::throw_snowballs() { // Turn around. - m_dir = (m_dir==Direction::RIGHT) ? Direction::LEFT : Direction::RIGHT; - set_action("stand", m_dir); - m_physic.set_velocity_x(0); + + m_stomp_count = 0; + m_state = THROW; + m_state_timer.start(STOMP_WAIT / (m_pinch_mode ? 1.2f : 1.f)); +} + +void +Yeti::throw_big_snowballs() +{ + m_stomp_count = 0; + m_state = THROW_BIG; + m_state_timer.start(BALL_WAIT); +} + +void +Yeti::be_angry() +{ m_stomp_count = 0; m_state = BE_ANGRY; - m_state_timer.start(STOMP_WAIT); + m_state_timer.start(BALL_WAIT); } bool Yeti::collision_squished(GameObject& object) { - kill_squished(object); + if (m_state != YetiState::JUMP_UP && m_state != YetiState::RUN && m_state != YetiState::BE_ANGRY) { + return false; + } + kill_squished(object); return true; } +HitResponse +Yeti::collision_badguy(BadGuy& badguy, const CollisionHit& hit) +{ + badguy.kill_fall(); + return FORCE_MOVE; +} + void Yeti::kill_squished(GameObject& object) { @@ -251,13 +344,16 @@ Yeti::kill_squished(GameObject& object) void Yeti::take_hit(Player& ) { - if (m_safe_timer.started()) + if (m_safe_timer.started() || m_just_hit || + std::abs(m_left_stand_x - get_pos().x) < 80 || std::abs(m_right_stand_x - get_pos().x) < 80) return; + m_just_hit = true; + SoundManager::current()->play("sounds/yeti_roar.wav", get_pos()); - m_hit_points--; + m_lives--; - if (m_hit_points <= 0) { + if (m_lives <= 0) { // We're dead. m_physic.set_velocity((m_dir == Direction::RIGHT ? RUN_VX : -RUN_VX) / 5, 0); @@ -292,7 +388,7 @@ Yeti::drop_stalactite() for (auto& stalactite : Sector::get().get_objects_by_type()) { if (stalactite.is_hanging()) { - if (m_hit_points >= 3) { + if (!m_pinch_mode) { // Drop stalactites within 3 units of player, going out with each jump. float distancex = fabsf(stalactite.get_bbox().get_middle().x - player->get_bbox().get_middle().x); if (distancex < static_cast(m_stomp_count) * 32.0f) { @@ -308,6 +404,20 @@ Yeti::drop_stalactite() } } +void +Yeti::summon_snowball() +{ + Vector bs_pos = get_pos() + Vector(m_dir == Direction::LEFT ? -32.f : (get_bbox().get_width() + 1.f), 0.f); + Sector::get().add(bs_pos, m_dir, 150.f * (m_pinch_mode ? 1.2f : 1.f)); +} + +void +Yeti::summon_big_snowball() +{ + Vector bs_pos = Vector(get_bbox().get_middle().x - 44.f, get_bbox().get_top() - 89.f); + Sector::get().add(bs_pos, m_dir, true); +} + void Yeti::collision_solid(const CollisionHit& hit) { @@ -316,13 +426,17 @@ Yeti::collision_solid(const CollisionHit& hit) // Hit floor or roof. m_physic.set_velocity_y(0); switch (m_state) { - case JUMP_DOWN: - run(); - break; case RUN: + if (!m_just_threw) { + set_action("walking", m_dir); + } break; case JUMP_UP: break; + case THROW: + break; + case THROW_BIG: + break; case BE_ANGRY: // We just landed. if (!m_state_timer.started()) @@ -334,12 +448,18 @@ Yeti::collision_solid(const CollisionHit& hit) // Go to the other side after 3 jumps. if (m_stomp_count == 3) { - jump_down(); + m_just_hit = false; + if (m_pinch_mode) { + throw_big_snowballs(); + } + else { + run(); + } } else { // Jump again. - m_state_timer.start(STOMP_WAIT); + m_state_timer.start(STOMP_WAIT / (m_pinch_mode ? 1.2f : 1.f)); } } break; @@ -347,6 +467,8 @@ Yeti::collision_solid(const CollisionHit& hit) break; case FALLING: break; + case REMOVE_TUX: + break; } } else if (hit.left || hit.right) { // Hit wall. @@ -355,20 +477,12 @@ Yeti::collision_solid(const CollisionHit& hit) } } -bool -Yeti::is_flammable() const -{ - return false; -} - ObjectSettings Yeti::get_settings() { - ObjectSettings result = BadGuy::get_settings(); + ObjectSettings result = Boss::get_settings(); - result.add_text("hud-icon", &m_hud_icon, "hud-icon", "images/creatures/yeti/hudlife.png", OPTION_HIDDEN); result.add_bool(_("Fixed position"), &m_fixed_pos, "fixed-pos", false); - result.add_int(_("Lives"), &m_hit_points, "lives", 5); return result; } diff --git a/src/badguy/yeti.hpp b/src/badguy/yeti.hpp index 68aea592bb5..8b98b2e9132 100644 --- a/src/badguy/yeti.hpp +++ b/src/badguy/yeti.hpp @@ -18,9 +18,9 @@ #ifndef HEADER_SUPERTUX_BADGUY_YETI_HPP #define HEADER_SUPERTUX_BADGUY_YETI_HPP -#include "badguy/badguy.hpp" +#include "badguy/boss.hpp" -class Yeti final : public BadGuy +class Yeti final : public Boss { public: Yeti(const ReaderMapping& mapping); @@ -30,9 +30,9 @@ class Yeti final : public BadGuy virtual void active_update(float dt_sec) override; virtual void collision_solid(const CollisionHit& hit) override; virtual bool collision_squished(GameObject& object) override; + virtual HitResponse collision_badguy(BadGuy& badguy, const CollisionHit& hit) override; virtual void kill_fall() override; - virtual bool is_flammable() const override; static std::string class_name() { return "yeti"; } virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Yeti"); } @@ -48,11 +48,12 @@ class Yeti final : public BadGuy private: void run(); void jump_up(); + void throw_snowballs(); + void throw_big_snowballs(); void be_angry(); void drop_stalactite(); - void jump_down(); - - void draw_hit_points(DrawingContext& context); + void summon_snowball(); + void summon_big_snowball(); void take_hit(Player& player); @@ -61,12 +62,14 @@ class Yeti final : public BadGuy private: enum YetiState { - JUMP_DOWN, RUN, JUMP_UP, + THROW, + THROW_BIG, BE_ANGRY, SQUISHED, - FALLING + FALLING, + REMOVE_TUX }; private: @@ -74,8 +77,6 @@ class Yeti final : public BadGuy Timer m_state_timer; Timer m_safe_timer; int m_stomp_count; - int m_hit_points; - SurfacePtr m_hud_head; float m_left_stand_x; float m_right_stand_x; @@ -83,7 +84,10 @@ class Yeti final : public BadGuy float m_right_jump_x; bool m_fixed_pos; - std::string m_hud_icon; + bool m_just_hit; + bool m_just_threw; + bool m_grabbed_tux; + bool m_jumped; class SnowExplosionParticle: public BadGuy { diff --git a/src/object/bigsnowball.cpp b/src/object/bigsnowball.cpp new file mode 100644 index 00000000000..3f8239b8ebf --- /dev/null +++ b/src/object/bigsnowball.cpp @@ -0,0 +1,223 @@ +// Copyright (C) 2024 Daniel Ward +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#include "object/bigsnowball.hpp" + +#include "badguy/badguy.hpp" +#include "badguy/yeti.hpp" +#include "math/random.hpp" +#include "math/util.hpp" +#include "object/bumper.hpp" +#include "object/player.hpp" +#include "object/sprite_particle.hpp" +#include "object/trampoline.hpp" +#include "sprite/sprite.hpp" +#include "sprite/sprite_manager.hpp" +#include "supertux/sector.hpp" +#include "supertux/tile.hpp" +#include "util/reader_mapping.hpp" + +namespace { + const float SPEED_X = 350.f; + const float SPEED_Y = -300.f; +} + +BigSnowball::BigSnowball(const ReaderMapping& reader) : + MovingSprite(reader, "images/objects/big_snowball/big_snowball.sprite", LAYER_OBJECTS, COLGROUP_MOVING_STATIC), + m_physic(), + m_dir(Direction::LEFT), + m_speed(), + m_break_on_impact(), + m_bounce() +{ + reader.get("speed", m_speed, SPEED_X); + reader.get("break-on-impact", m_break_on_impact, false); + reader.get("bounce", m_bounce, true); + std::string dir_str; + if (reader.get("direction", dir_str)) { + m_dir = string_to_dir(dir_str); + } + m_physic.set_velocity_x(m_dir == Direction::RIGHT ? m_speed : -m_speed); + set_action("normal", m_dir); +} + +BigSnowball::BigSnowball(const Vector& pos, const Direction& dir, bool bounce) : + MovingSprite(pos, "images/objects/big_snowball/big_snowball.sprite", LAYER_OBJECTS, COLGROUP_MOVING_STATIC), + m_physic(), + m_dir(Direction::LEFT), + m_speed(), + m_break_on_impact(), + m_bounce() +{ + // settings used by Yeti when it throws it + m_dir = dir; + m_speed = SPEED_X; + m_break_on_impact = true; + m_bounce = false; + m_physic.set_velocity_x(m_dir == Direction::RIGHT ? SPEED_X : -SPEED_X); + if (bounce) { + m_physic.set_velocity_y(SPEED_Y); + } + set_action("normal", m_dir); +} + +ObjectSettings +BigSnowball::get_settings() +{ + ObjectSettings result = MovingSprite::get_settings(); + + result.add_direction(_("Direction"), &m_dir, { Direction::RIGHT, Direction::LEFT }, "direction"); + result.add_float(_("Speed"), &m_speed, "speed", SPEED_X); + result.add_bool(_("Break on impact?"), &m_break_on_impact, "break-on-impact", false); + result.add_bool(_("Bounce?"), &m_bounce, "bounce", true); + result.reorder({ "direction", "speed", "break-on-impact", "bounce", "sprite", "x", "y" }); + return result; +} + +void +BigSnowball::update(float dt_sec) +{ + if (get_bbox().get_top() > Sector::get().get_height()) { + remove_me(); + } + + // Left-right faux collision + + Rectf side_look_box = get_bbox().grown(-1.f); + side_look_box.set_left(get_bbox().get_left() + (m_dir == Direction::LEFT ? -1.f : 1.f)); + side_look_box.set_right(get_bbox().get_right() + (m_dir == Direction::LEFT ? -1.f : 1.f)); + if (!Sector::get().is_free_of_statics(side_look_box)) + { + if (m_break_on_impact) { + spawn_particles(); + } + else + { + m_dir = m_dir == Direction::LEFT ? Direction::RIGHT : Direction::LEFT; + set_action(m_dir); + m_physic.set_velocity_x(-m_physic.get_velocity_x()); + } + } + + Rectf spikebox = get_bbox().grown(-6.f); + spikebox.set_bottom(get_bbox().get_bottom() - (m_physic.get_velocity_y() > 300.f ? 6.f : 40.f)); + if (!Sector::get().is_free_of_tiles(spikebox, false, Tile::HURTS)) { + spawn_particles(); + } + + bool in_water = !Sector::get().is_free_of_tiles(get_bbox(), true, Tile::WATER); + + Vector movement = m_physic.get_movement(dt_sec) * Vector(in_water ? 0.4f : 1.f, in_water ? 0.6f : 1.f); + m_sprite->set_angle(m_sprite->get_angle() + movement.x * 3.141592653898f / 2.f); + m_col.set_movement(movement); + //m_col.propagate_movement(movement); +} + +HitResponse +BigSnowball::collision(GameObject& other, const CollisionHit& hit) +{ + // ignore collisions with yeti + auto yeti = dynamic_cast(&other); // cppcheck-suppress constVariablePointer + if (yeti) { + return ABORT_MOVE; + } + + auto badguy = dynamic_cast(&other); // cppcheck-suppress constVariablePointer + if (badguy && ((m_dir == Direction::LEFT && hit.left) || (m_dir == Direction::RIGHT && hit.right) || hit.bottom)) + { + badguy->kill_fall(); + return ABORT_MOVE; + } + + auto player = dynamic_cast(&other); // cppcheck-suppress constVariablePointer + if (player && player->m_does_buttjump && hit.top) + { + spawn_particles(); + return ABORT_MOVE; + } + + auto bs = dynamic_cast(&other); // cppcheck-suppress constVariablePointer + if (bs) { + collision_solid(hit); + return ABORT_MOVE; + } + + auto tramp = dynamic_cast(&other); // cppcheck-suppress constVariablePointer + if (tramp) + { + m_physic.set_velocity_y(-500.f); + tramp->bounce(); + return ABORT_MOVE; + } + + auto bumper = dynamic_cast(&other); // cppcheck-suppress constVariablePointer + if (bumper) + { + m_physic.set_velocity_x(-m_physic.get_velocity_x()); + m_dir = m_dir == Direction::LEFT ? Direction::RIGHT : Direction::LEFT; + bumper->bounce(); + return ABORT_MOVE; + } + + return FORCE_MOVE; +} + +void +BigSnowball::collision_solid(const CollisionHit& hit) +{ + if (hit.bottom) + { + if (m_physic.get_velocity_y() > 10.f && m_bounce) { + m_physic.set_velocity_y(-std::pow(m_physic.get_velocity_y(), (9.f / 10.f))); + } + else { + m_physic.set_velocity_y(0.f); + } + } + + if ((hit.left || hit.right) && m_break_on_impact) { + spawn_particles(); + } + + if (!m_break_on_impact) + { + if (m_dir == Direction::LEFT && hit.left) + { + m_physic.set_velocity_x(m_speed); + m_dir = Direction::RIGHT; + } + if (m_dir == Direction::RIGHT && hit.right) + { + m_physic.set_velocity_x(-m_speed); + m_dir = Direction::LEFT; + } + } +} + +void +BigSnowball::spawn_particles() +{ + for (int i = 0; i < 8; i++) + { + Sector::get().add(m_sprite_name, "particle", + get_bbox().get_middle() + (15.f * Vector(std::cos(math::PI_4*static_cast(i)), std::sin(math::PI_4*static_cast(i)))), + ANCHOR_MIDDLE, (150.f * (glm::normalize(Vector(std::cos(math::PI_4*static_cast(i)), std::sin(math::PI_4*static_cast(i)))))) + + Vector(gameRandom.randf(-40.f, 40.f), gameRandom.randf(-40.f, 40.f)), + Vector(0.f, 1000.f), LAYER_OBJECTS + 1, true); + } + remove_me(); +} + +/* EOF */ diff --git a/src/object/bigsnowball.hpp b/src/object/bigsnowball.hpp new file mode 100644 index 00000000000..f22c2e5dcfe --- /dev/null +++ b/src/object/bigsnowball.hpp @@ -0,0 +1,59 @@ +// Copyright (C) 2024 Daniel Ward +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#ifndef HEADER_SUPERTUX_OBJECT_BIGSNOWBALL_HPP +#define HEADER_SUPERTUX_OBJECT_BIGSNOWBALL_HPP + +#include "object/moving_sprite.hpp" + +#include "supertux/physic.hpp" + +enum class Direction; + +class BigSnowball final : public MovingSprite +{ +public: + BigSnowball(const ReaderMapping& reader); + BigSnowball(const Vector& pos, const Direction& dir, bool bounce = false); + + virtual ObjectSettings get_settings() override; + + virtual void update(float dt_sec) override; + virtual void collision_solid(const CollisionHit& hit) override; + virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; + + static std::string class_name() { return "bigsnowball"; } + virtual std::string get_class_name() const override { return class_name(); } + static std::string display_name() { return _("Big Snowball"); } + virtual std::string get_display_name() const override { return display_name(); } + +private: + void spawn_particles(); + +private: + Physic m_physic; + Direction m_dir; + float m_speed; + bool m_break_on_impact; + bool m_bounce; + +private: + BigSnowball(const BigSnowball&) = delete; + BigSnowball& operator=(const BigSnowball&) = delete; +}; + +#endif + +/* EOF */ diff --git a/src/object/bumper.cpp b/src/object/bumper.cpp index 3e28edb4d91..aed2c14b563 100644 --- a/src/object/bumper.cpp +++ b/src/object/bumper.cpp @@ -101,8 +101,7 @@ Bumper::collision(GameObject& other, const CollisionHit& hit) { player->get_physic().set_velocity(0.f, player->is_swimming() ? 0.f : BOUNCE_Y); player->sideways_push(m_dir == Direction::LEFT ? -BOUNCE_X : BOUNCE_X); - SoundManager::current()->play(TRAMPOLINE_SOUND, get_pos()); - set_action("swinging", m_dir, 1); + bounce(); } auto badguy = dynamic_cast (&other); @@ -143,4 +142,11 @@ Bumper::on_flip(float height) FlipLevelTransformer::transform_flip(m_flip); } +void +Bumper::bounce() +{ + SoundManager::current()->play(TRAMPOLINE_SOUND, get_pos()); + set_action("swinging", m_dir, 1); +} + /* EOF */ diff --git a/src/object/bumper.hpp b/src/object/bumper.hpp index bc9b40c8700..d4b6a3aab3a 100644 --- a/src/object/bumper.hpp +++ b/src/object/bumper.hpp @@ -43,6 +43,8 @@ class Bumper final : public StickyObject Physic& get_physic(); + void bounce(); + private: Physic m_physic; diff --git a/src/object/pushbutton.cpp b/src/object/pushbutton.cpp index 9d50f9e5e13..c49d462c899 100644 --- a/src/object/pushbutton.cpp +++ b/src/object/pushbutton.cpp @@ -17,6 +17,7 @@ #include "object/pushbutton.hpp" #include "audio/sound_manager.hpp" +#include "object/bigsnowball.hpp" #include "object/player.hpp" #include "object/rock.hpp" #include "sprite/sprite.hpp" @@ -88,7 +89,9 @@ PushButton::collision(GameObject& other, const CollisionHit& hit) { auto player = dynamic_cast(&other); auto rock = dynamic_cast(&other); - if (!player && !rock) + auto bs = dynamic_cast(&other); + + if (!player && !rock && !bs) return FORCE_MOVE; if (player) { diff --git a/src/supertux/game_object_factory.cpp b/src/supertux/game_object_factory.cpp index ff14c62f316..66185b31a54 100644 --- a/src/supertux/game_object_factory.cpp +++ b/src/supertux/game_object_factory.cpp @@ -84,6 +84,7 @@ #include "object/ambient_sound.hpp" #include "object/background.hpp" #include "object/bicycle_platform.hpp" +#include "object/bigsnowball.hpp" #include "object/bonus_block.hpp" #include "object/brick.hpp" #include "object/bumper.hpp" @@ -251,6 +252,7 @@ GameObjectFactory::init_factories() add_factory("ambient_sound"); // Backward compatibilty. add_factory("ambient-sound"); add_factory("background", OBJ_PARAM_WORLDMAP); + add_factory("bigsnowball", OBJ_PARAM_DISPENSABLE); add_factory("path"); add_factory("bicycle-platform"); add_factory("bonusblock", OBJ_PARAM_DISPENSABLE); From be1b59606282445293187032823016ac2e310207 Mon Sep 17 00:00:00 2001 From: SuperTux Bot Date: Thu, 11 Jul 2024 01:37:40 +0000 Subject: [PATCH 11/33] Update translations --- data/locale/gl.po | 564 +++++++++++++++++++++++----------------------- data/locale/ja.po | 2 +- data/locale/nl.po | 2 +- data/locale/pt.po | 2 +- 4 files changed, 285 insertions(+), 285 deletions(-) diff --git a/data/locale/gl.po b/data/locale/gl.po index 2278c70a8b4..72ec2e59114 100644 --- a/data/locale/gl.po +++ b/data/locale/gl.po @@ -500,7 +500,7 @@ msgstr "Contido Personalizado" #: src/object/bonus_block.cpp:278 msgid "Coin sprite" -msgstr "Fada da moeda" +msgstr "Gráfico animado da moeda" #: src/object/pneumatic_platform.hpp:65 msgid "Pneumatic Platform" @@ -714,23 +714,23 @@ msgstr "Música" #: src/object/lit_object.cpp:68 msgid "Light sprite" -msgstr "sprite de luz" +msgstr "Gráfico animado de luz" #: src/object/lit_object.cpp:71 msgid "Sprite starting action" -msgstr "" +msgstr "Acción inicial do gráfico animado" #: src/object/lit_object.cpp:72 msgid "Light sprite starting action" -msgstr "" +msgstr "Acción inicial do gráfico animado de luz" #: src/object/lit_object.cpp:74 msgid "Light sprite offset X" -msgstr "" +msgstr "Desprazamento do eixo X do gráfico animado de luz" #: src/object/lit_object.cpp:75 msgid "Light sprite offset Y" -msgstr "" +msgstr "Desprazamento do eixo Y do gráfico animado de luz" #: src/object/rusty_trampoline.hpp:40 msgid "Rusty Trampoline" @@ -750,19 +750,19 @@ msgstr "Intermitente" #: src/object/snow_particle_system.cpp:104 msgid "Epsilon" -msgstr "" +msgstr "Epsilon" #: src/object/snow_particle_system.cpp:105 msgid "Spin Speed" -msgstr "" +msgstr "Velocidade de Rotación" #: src/object/snow_particle_system.cpp:106 msgid "State Length" -msgstr "" +msgstr "Duración do Estado" #: src/object/snow_particle_system.cpp:107 msgid "Wind Speed" -msgstr "" +msgstr "Velocidade do Vento" #: src/object/text_array_object.hpp:47 msgid "Text array" @@ -778,7 +778,7 @@ msgstr "Ovo" #: src/object/powerup.cpp:62 msgid "Fire Flower" -msgstr "" +msgstr "Flor de Lume" #: src/object/powerup.cpp:63 msgid "Ice Flower" @@ -786,31 +786,31 @@ msgstr "Flor de Xeo" #: src/object/powerup.cpp:64 msgid "Air Flower" -msgstr "" +msgstr "Flor de Aire" #: src/object/powerup.cpp:65 msgid "Earth Flower" -msgstr "" +msgstr "Flor de Terra" #: src/object/powerup.cpp:67 msgid "Tux Doll" -msgstr "" +msgstr "Boneco de Tux" #: src/object/powerup.cpp:68 msgid "Flip Potion" -msgstr "" +msgstr "Poción de viraxe" #: src/object/powerup.cpp:69 msgid "Mints" -msgstr "" +msgstr "Mentolados" #: src/object/powerup.cpp:70 msgid "Coffee" -msgstr "" +msgstr "Café" #: src/object/powerup.cpp:71 msgid "Herring" -msgstr "" +msgstr "Arenque" #: src/object/powerup.cpp:302 msgid "Disable gravity" @@ -820,7 +820,7 @@ msgstr "Desactivar gravidade" msgid "" "Sprites no longer define the behaviour of the object.\n" "Object types are used instead." -msgstr "" +msgstr "Os sprites xa non definen o comportamento do obxecto.\nEmpreganse tipos de obxecto en troques." #: src/object/ambient_sound.hpp:43 msgid "Ambient Sound" @@ -1388,7 +1388,7 @@ msgstr "Limpar partículas" #: src/object/weak_block.cpp:98 msgid "Hay" -msgstr "" +msgstr "Feo" #: src/object/decal.hpp:41 msgid "Decal" @@ -1483,7 +1483,7 @@ msgstr "Lonxitude" #: src/object/moving_sprite.cpp:192 src/object/pneumatic_platform.cpp:161 msgid "Sprite" -msgstr "Fada" +msgstr "Gráfico animado \"sprite\"" #: src/object/unstable_tile.hpp:42 msgid "Unstable Tile" @@ -1491,7 +1491,7 @@ msgstr "Tesela Inestable" #: src/object/brick.hpp:70 msgid "Heavy Brick" -msgstr "" +msgstr "Ladrillo Pesado" #: src/object/invisible_wall.hpp:37 msgid "Invisible Wall" @@ -1548,11 +1548,11 @@ msgstr "Pechar" #: src/gui/menu_string_array.cpp:40 src/gui/menu_string_array.cpp:78 #, c++-format msgid "Selected item: {}" -msgstr "" +msgstr "Elemento escollido: {}" #: src/gui/menu_string_array.cpp:70 msgid "Edit string array" -msgstr "" +msgstr "Editar matriz de cadeas" #: src/gui/menu_string_array.cpp:79 src/gui/menu_object_select.cpp:50 #: src/supertux/menu/profile_menu.cpp:88 @@ -1561,17 +1561,17 @@ msgstr "Engadir" #: src/gui/menu_string_array.cpp:80 msgid "Insert" -msgstr "" +msgstr "Inserir" #: src/gui/menu_string_array.cpp:81 #: src/supertux/menu/addon_preview_menu.cpp:177 src/editor/object_menu.cpp:61 msgid "Update" -msgstr "" +msgstr "Actualizar" #: src/gui/menu_string_array.cpp:82 src/supertux/menu/profile_menu.cpp:108 #: src/supertux/menu/profile_menu.cpp:110 msgid "Delete" -msgstr "" +msgstr "Eliminar" #: src/gui/menu_string_array.cpp:84 src/gui/menu_object_select.cpp:61 #: src/gui/menu_color.cpp:37 src/gui/dialog.hpp:87 src/gui/menu_script.cpp:46 @@ -1584,16 +1584,16 @@ msgstr "OK" #: src/gui/menu_object_select.cpp:46 msgid "List of objects" -msgstr "" +msgstr "Lista de Obxectos" #: src/gui/menu_object_select.cpp:48 #, c++-format msgid "Select object ({})" -msgstr "" +msgstr "Escoller obxecto ({})" #: src/gui/menu_object_select.cpp:114 msgid "Are you sure you want to remove this object from the list?" -msgstr "" +msgstr "Estás certo de que queres eliminar este obxecto da lista?" #: src/gui/menu_color.cpp:24 msgid "Mix the colour" @@ -1625,7 +1625,7 @@ msgstr "Cancelar" #: src/gui/menu_filesystem.cpp:118 msgid "Open Directory" -msgstr "" +msgstr "Abrir Cartafol" #: src/gui/menu_script.cpp:28 msgid "Edit script" @@ -1640,7 +1640,7 @@ msgid "" "An error occurred and the game could\n" "not clone the path. Please contact\n" "the developers for support." -msgstr "" +msgstr "Produciuse un erro e o xogo non puido clonar a ruta. Por favor, contacta cos desenroladores para obter soporte." #: src/gui/menu_paths.cpp:44 msgid "Bind" @@ -1651,12 +1651,12 @@ msgid "" "Do you wish to clone the path to edit it separately,\n" "or do you want to bind both paths together\n" "so that any edit on one edits the other?" -msgstr "" +msgstr "Queres clonar a ruta para editala por separado,\nou prefires ligar ambas as rutas\nde maneira que calquera edición nunha se reflicta na outra?" #: src/gui/menu_paths.cpp:56 #, c++-format msgid "Path {}" -msgstr "" +msgstr "Ruta {}" #: src/gui/menu_paths.cpp:67 src/supertux/menu/integrations_menu.cpp:60 #: src/supertux/menu/editor_converters_menu.cpp:79 @@ -1698,17 +1698,17 @@ msgstr "Atrás" #: src/addon/addon_manager.cpp:562 msgid "Only one resource pack is allowed to be enabled at a time." -msgstr "" +msgstr "Só se permite activar un paquete de recursos á vez." #: src/addon/addon_manager.cpp:837 #, c++-format msgid "Add-on {} by {} is already installed." -msgstr "" +msgstr "O complemento {} de {} xa está instalado." #: src/addon/addon_manager.cpp:857 #, c++-format msgid "Add-on {} by {} successfully installed." -msgstr "" +msgstr "O complemento {} de {} instalouse correctamente." #: src/addon/addon.cpp:71 src/supertux/menu/editor_levelset_menu.cpp:54 msgid "Levelset" @@ -1729,11 +1729,11 @@ msgstr "Complemento" #: src/addon/addon.cpp:83 msgid "Language Pack" -msgstr "" +msgstr "Paquete de Idiomas" #: src/addon/addon.cpp:86 msgid "Resource Pack" -msgstr "" +msgstr "Paquete de Recursos" #: src/addon/addon.cpp:89 msgid "Unknown" @@ -1742,15 +1742,15 @@ msgstr "Descoñecido" #: src/addon/addon.cpp:100 #, c++-format msgid "{} \"{}\" by \"{}\"" -msgstr "" +msgstr "{} \"{}\" por \"{}\"" #: src/addon/addon.cpp:114 msgid "add-on" -msgstr "" +msgstr "complemento" #: src/addon/addon.cpp:114 msgid "add-ons" -msgstr "" +msgstr "complementos" #: src/badguy/toad.hpp:38 msgid "Toad" @@ -1758,7 +1758,7 @@ msgstr "Sapo" #: src/badguy/mrtree.hpp:32 msgid "Mr. Tree" -msgstr "" +msgstr "Sr. árbore" #: src/badguy/plant.hpp:34 msgid "Plant" @@ -1766,27 +1766,27 @@ msgstr "Planta" #: src/badguy/tarantula.hpp:39 src/badguy/tarantula.cpp:353 msgid "Tarantula" -msgstr "" +msgstr "tarántula" #: src/badguy/granito_giant.cpp:71 msgid "Awake" -msgstr "" +msgstr "Esperto" #: src/badguy/granito_giant.cpp:72 msgid "Sleeping" -msgstr "" +msgstr "Durmindo" #: src/badguy/granito_giant.cpp:73 msgid "Corrupted A" -msgstr "" +msgstr "Corrompido A" #: src/badguy/granito_giant.cpp:74 msgid "Corrupted B" -msgstr "" +msgstr "Corrompido B" #: src/badguy/granito_giant.cpp:75 msgid "Corrupted C" -msgstr "" +msgstr "Corrompido C" #: src/badguy/crystallo.hpp:33 msgid "Crystallo" @@ -1796,7 +1796,7 @@ msgstr "Cristaliño" #: src/badguy/kamikazesnowball.cpp:118 src/badguy/walkingleaf.cpp:36 #: src/badguy/jumpy.cpp:46 src/badguy/igel.cpp:189 src/badguy/mrtree.cpp:51 msgid "Corrupted" -msgstr "" +msgstr "Corrompido" #: src/badguy/totem.hpp:37 msgid "Totem" @@ -1808,19 +1808,19 @@ msgstr "Estalactita" #: src/badguy/fish_chasing.cpp:198 msgid "Tracking Distance" -msgstr "" +msgstr "Distancia de Seguimento" #: src/badguy/fish_chasing.cpp:199 msgid "Losing Distance" -msgstr "" +msgstr "Distancia de Perda" #: src/badguy/fish_chasing.cpp:200 msgid "Chase Speed" -msgstr "" +msgstr "Velocidade de Persecución" #: src/badguy/root_sapling.hpp:41 msgid "Root Sapling" -msgstr "" +msgstr "Gromo de Ráiz" #: src/badguy/haywire.hpp:46 msgid "Haywire" @@ -1840,28 +1840,28 @@ msgstr "Dragón" #: src/badguy/smartball.cpp:35 msgid "Pumpkin" -msgstr "" +msgstr "Cabaza" #: src/badguy/bouncing_snowball.cpp:82 msgid "Fatbat" -msgstr "" +msgstr "Morcego Gordo" #: src/badguy/dive_mine.hpp:50 msgid "Dive Mine" -msgstr "" +msgstr "Mina de mergullo" #: src/badguy/granito_big.hpp:33 msgid "Big Granito" -msgstr "" +msgstr "Granito Grande" #: src/badguy/mriceblock.hpp:49 msgid "Mr. Iceblock" -msgstr "" +msgstr "Mr. Bloque de Xeo" #: src/badguy/granito.hpp:39 src/badguy/darttrap.cpp:163 #: src/badguy/corrupted_granito.cpp:175 src/badguy/dispenser.cpp:438 msgid "Granito" -msgstr "" +msgstr "Granito" #: src/badguy/fish_swimming.cpp:54 src/badguy/jumpy.cpp:44 #: data//images/ice_world.strf:10 data//images/tiles.strf:28 @@ -1876,19 +1876,19 @@ msgstr "Bosque" #: src/badguy/crusher.hpp:71 msgid "Crusher" -msgstr "" +msgstr "Trituradora" #: src/badguy/flame.cpp:84 msgid "Fire" -msgstr "" +msgstr "Lume" #: src/badguy/flame.cpp:85 msgid "Ghost" -msgstr "" +msgstr "Pantasma" #: src/badguy/corrupted_granito_big.hpp:35 msgid "Corrupted Big Granito" -msgstr "" +msgstr "Granito Grande Corrompido" #: src/badguy/scrystallo.cpp:57 msgid "Walk Radius" @@ -1900,7 +1900,7 @@ msgstr "Raio ó Espertar" #: src/badguy/scrystallo.cpp:59 msgid "Roof-attached" -msgstr "" +msgstr "Fixado ao tellado" #: src/badguy/jumpy.hpp:40 msgid "Jumpy" @@ -1948,7 +1948,7 @@ msgstr "Estalactita do Yeti" #: src/badguy/fish_harmless.hpp:30 msgid "Harmless Fish" -msgstr "" +msgstr "Peixe inofensivo" #: src/badguy/livefire.hpp:38 msgid "Walking Flame" @@ -1984,19 +1984,19 @@ msgstr "Munición" #: src/badguy/darttrap.cpp:152 msgid "Dart sprite" -msgstr "" +msgstr "Gráfico animado escuro" #: src/badguy/darttrap.cpp:164 msgid "Skull" -msgstr "" +msgstr "Cranio" #: src/badguy/snowball.hpp:30 msgid "Mr. Snowball" -msgstr "" +msgstr "Sr. Bola de Neve" #: src/badguy/smartblock.hpp:30 msgid "Mrs. Iceblock" -msgstr "" +msgstr "Sra. Bloque de Xeo" #: src/badguy/yeti.cpp:370 msgid "Fixed position" @@ -2012,11 +2012,11 @@ msgstr "Bomba Dourada" #: src/badguy/corrupted_granito.hpp:44 msgid "Corrupted Granito" -msgstr "" +msgstr "Granito Corrompido" #: src/badguy/mrbomb.cpp:48 msgid "Classic" -msgstr "" +msgstr "Clásico" #: src/badguy/flyingsnowball.hpp:33 msgid "Flying Snowball" @@ -2024,27 +2024,27 @@ msgstr "A Mosca" #: src/badguy/crusher.cpp:75 msgid "Ice (normal)" -msgstr "" +msgstr "Xeo (normal)" #: src/badguy/crusher.cpp:76 msgid "Ice (big)" -msgstr "" +msgstr "Xeo (grande)" #: src/badguy/crusher.cpp:77 msgid "Rock (normal)" -msgstr "" +msgstr "Rocha (normal)" #: src/badguy/crusher.cpp:78 msgid "Rock (big)" -msgstr "" +msgstr "Rocha (grande)" #: src/badguy/crusher.cpp:79 msgid "Corrupted (normal)" -msgstr "" +msgstr "Corrompido (normal)" #: src/badguy/crusher.cpp:80 msgid "Corrupted (big)" -msgstr "" +msgstr "Corrompido (grande)" #: src/badguy/crusher.cpp:492 msgid "Sideways" @@ -2052,7 +2052,7 @@ msgstr "Beirarrúas" #: src/badguy/kamikazesnowball.hpp:34 msgid "Kamikaze Snowball" -msgstr "" +msgstr "Bola de neve kamikaze" #: src/badguy/kamikazesnowball.hpp:64 msgid "Leafshot" @@ -2060,7 +2060,7 @@ msgstr "Bala de folla" #: src/badguy/fish_swimming.hpp:40 msgid "Swimming Fish" -msgstr "" +msgstr "Peixe Nadador" #: src/badguy/flame.hpp:47 msgid "Flame" @@ -2072,15 +2072,15 @@ msgstr "Cristaliño Durminte" #: src/badguy/jumpy.cpp:45 msgid "Wooden" -msgstr "" +msgstr "Madeira" #: src/badguy/jumpy.cpp:47 msgid "Metal" -msgstr "" +msgstr "Metal" #: src/badguy/jumpy.cpp:48 msgid "Bag" -msgstr "" +msgstr "Saco" #: src/badguy/willowisp.hpp:57 msgid "Will o' Wisp" @@ -2088,7 +2088,7 @@ msgstr "Asubía-Bólas" #: src/badguy/fish_jumping.hpp:41 msgid "Jumping Fish" -msgstr "" +msgstr "Peixe Brincador" #: src/badguy/badguy.hpp:61 msgid "Badguy" @@ -2104,11 +2104,11 @@ msgstr "Pinchudo" #: src/badguy/walkingleaf.hpp:33 msgid "Walking Leaf" -msgstr "" +msgstr "Folla Andante" #: src/badguy/root.hpp:39 msgid "Root" -msgstr "" +msgstr "Ráiz" #: src/badguy/owl.cpp:241 msgid "Carry" @@ -2128,11 +2128,11 @@ msgstr "Yeti" #: src/badguy/snowball.cpp:41 msgid "Bumpkin" -msgstr "" +msgstr "Pailán" #: src/badguy/snowball.cpp:42 msgid "BSOD" -msgstr "" +msgstr "BSOD" #: src/badguy/mole.hpp:38 msgid "Mole" @@ -2144,7 +2144,7 @@ msgstr "Caveira Choutadora" #: src/badguy/mrbomb.hpp:40 msgid "Mr. Bomb" -msgstr "" +msgstr "Sr. Bomba" #: src/badguy/walking_candle.hpp:41 msgid "Walking Candle" @@ -2156,11 +2156,11 @@ msgstr "Pedra Furiosa" #: src/badguy/tarantula.cpp:354 msgid "Spidermite" -msgstr "" +msgstr "Ácaro araña" #: src/badguy/tarantula.cpp:374 msgid "Static" -msgstr "" +msgstr "Estático" #: src/badguy/ghoul.hpp:30 msgid "Ghoul" @@ -2168,7 +2168,7 @@ msgstr "Demo" #: src/badguy/granito_giant.hpp:32 msgid "Giant Granito" -msgstr "" +msgstr "Granito Xigante" #: src/badguy/snowman.hpp:29 msgid "Snowman" @@ -2176,23 +2176,23 @@ msgstr "Boneco de Neve" #: src/badguy/viciousivy.hpp:33 msgid "Vicious Ivy" -msgstr "" +msgstr "Hedra Viciosa" #: src/badguy/stalactite.cpp:156 msgid "ice" -msgstr "" +msgstr "xeo" #: src/badguy/stalactite.cpp:157 msgid "rock" -msgstr "" +msgstr "rocha" #: src/badguy/fish_chasing.hpp:33 msgid "Chasing Fish" -msgstr "" +msgstr "Perseguindo Peixes" #: src/badguy/stumpy.hpp:38 msgid "Stumpy" -msgstr "" +msgstr "Tronco" #: src/badguy/dispenser.cpp:412 msgid "Interval (seconds)" @@ -2222,11 +2222,11 @@ msgstr "Cantidade máxima de tipos malos á vez" #: src/badguy/dispenser.cpp:435 msgid "Dropper" -msgstr "" +msgstr "Contagotas" #: src/badguy/dispenser.cpp:436 msgid "Cannon" -msgstr "" +msgstr "canón" #: src/badguy/dispenser.cpp:437 src/worldmap/special_tile.cpp:77 msgid "Invisible" @@ -2238,7 +2238,7 @@ msgstr "Caracol" #: src/badguy/smartball.hpp:32 msgid "Mrs. Snowball" -msgstr "" +msgstr "Sra. Bola de neve" #: src/badguy/bouncing_snowball.hpp:39 msgid "Bouncing Snowball" @@ -2246,19 +2246,19 @@ msgstr "Bóla de Neve Saltadora" #: src/badguy/granito_big.cpp:52 src/badguy/granito.cpp:263 msgid "Default" -msgstr "" +msgstr "Predeterminado" #: src/badguy/granito_big.cpp:53 src/badguy/granito.cpp:264 msgid "Standing" -msgstr "" +msgstr "De pé" #: src/badguy/granito_big.cpp:54 src/badguy/granito.cpp:265 msgid "Walking" -msgstr "" +msgstr "Camiñando" #: src/badguy/mriceblock.cpp:63 msgid "Laptop" -msgstr "" +msgstr "Portátil" #: src/badguy/dart.hpp:44 msgid "Dart" @@ -2266,7 +2266,7 @@ msgstr "Dardo" #: src/badguy/granito.cpp:268 msgid "Sitting" -msgstr "" +msgstr "Sentado" #: src/supertux/statistics.cpp:54 msgid "Max coins collected:" @@ -2323,7 +2323,7 @@ msgstr "Pulsar a tecla escape para saltar" #: src/supertux/command_line_arguments.cpp:92 #, c++-format msgid "Usage: {} [OPTIONS] [LEVELFILE]" -msgstr "" +msgstr "Uso: {} [OPCIÓNS] [ARQUIVO NÍVEL]" #: src/supertux/command_line_arguments.cpp:93 msgid "General Options:" @@ -2494,7 +2494,7 @@ msgstr "Este xogo vén SEN ABSOLUTAMENTE NINGUNHA GARANTÍA. É software libre e #: src/supertux/game_object.cpp:114 msgid "Version" -msgstr "" +msgstr "Versión" #: src/supertux/game_object.cpp:129 #: src/supertux/menu/editor_levelset_menu.cpp:54 @@ -2513,7 +2513,7 @@ msgstr "Non compartir os nomes dos niveis ó editar" msgid "" "Enable this if you want to work on secret levels and don't want the names to" " be spoiled" -msgstr "" +msgstr "Activa isto se queres traballar en niveis secretos e non queres que se desvelen os nomes." #: src/supertux/menu/integrations_menu.cpp:54 msgid "Enable Discord integration" @@ -2523,7 +2523,7 @@ msgstr "Activar a integración con Discord" msgid "" "Sends information to your Discord application about what you're doing in the" " game." -msgstr "" +msgstr "Envía información á túa aplicación de Discord sobre o que estás a facer no xogo." #: src/supertux/menu/integrations_menu.cpp:57 msgid "Discord (disabled; not compiled)" @@ -2532,28 +2532,28 @@ msgstr "Discord (desactivado; non compilado)" #: src/supertux/menu/editor_converters_menu.cpp:61 #: src/supertux/menu/editor_menu.cpp:85 msgid "Convert Tiles" -msgstr "" +msgstr "Converter Bloques" #: src/supertux/menu/editor_converters_menu.cpp:64 msgid "Select Tile Conversion File" -msgstr "" +msgstr "Seleccione Ficheiro de conversión de Bloques" #: src/supertux/menu/editor_converters_menu.cpp:72 #, c++-format msgid "By: {}" -msgstr "" +msgstr "Por: {}" #: src/supertux/menu/editor_converters_menu.cpp:75 msgid "Convert Tiles By File" -msgstr "" +msgstr "Converter Bloques por ficheiro" #: src/supertux/menu/editor_converters_menu.cpp:76 msgid "Convert all tiles in the current level by a file, specified above." -msgstr "" +msgstr "Converte todos os bloques do nivel actual mediante un ficheiro, especificado anteriormente." #: src/supertux/menu/editor_converters_menu.cpp:89 msgid "No tile conversion file selected." -msgstr "" +msgstr "Non se seleccionou ningún ficheiro de conversión de bloque." #: src/supertux/menu/editor_converters_menu.cpp:93 msgid "" @@ -2561,20 +2561,20 @@ msgid "" "\n" "Note: This should not be ran more than once on a level.\n" "Creating a separate copy of the level is highly recommended." -msgstr "" +msgstr "Isto converterá tódolos bloques do nivel. Queres continuar?\n\nNota: Non se debe executar máis dunha vez nun nivel.\nRecoméndase crear unha copia separada do nivel." #: src/supertux/menu/video_system_menu.cpp:36 msgid "Select Video System" -msgstr "" +msgstr "Escolle Sistema de vídeo" #: src/supertux/menu/video_system_menu.cpp:37 #, c++-format msgid "Used video system: {}" -msgstr "" +msgstr "Sistema de vídeo usado: {}" #: src/supertux/menu/video_system_menu.cpp:54 msgid "Restart game for the changes to take effect" -msgstr "" +msgstr "Reinicia o xogo para que os cambios teñan efecto" #: src/supertux/menu/contrib_menu.cpp:68 #: src/supertux/menu/world_set_menu.cpp:31 @@ -2584,29 +2584,29 @@ msgstr "Niveis dos Colaboradores" #: src/supertux/menu/contrib_menu.cpp:98 #: src/supertux/menu/contrib_menu.cpp:112 msgid "Official Contrib Levels" -msgstr "" +msgstr "Niveis oficiais dos colaboradores" #: src/supertux/menu/contrib_menu.cpp:99 #: src/supertux/menu/contrib_menu.cpp:118 msgid "Community Contrib Levels" -msgstr "" +msgstr "Niveis de colaboración comunitaria" #: src/supertux/menu/contrib_menu.cpp:100 #: src/supertux/menu/contrib_menu.cpp:124 msgid "User Contrib Levels" -msgstr "" +msgstr "Niveis de colaboración do usuario" #: src/supertux/menu/contrib_menu.cpp:113 msgid "How is this possible? There are no Official Contrib Levels!" -msgstr "" +msgstr "Como é posible? Non hai niveis Oficiais de Contribución!" #: src/supertux/menu/contrib_menu.cpp:119 msgid "No Community Contrib Levels yet. Download them from the Add-ons Menu." -msgstr "" +msgstr "Aínda non hai niveis da Comunidade. Descárgaos dende o menú de Complementos." #: src/supertux/menu/contrib_menu.cpp:125 msgid "No User Contrib Levels yet. Create some with the Level Editor." -msgstr "" +msgstr "Aínda non hai niveis de Usuarios. Crea algúns co Editor de Niveis." #: src/supertux/menu/debug_menu.cpp:34 msgid "Debug" @@ -2669,29 +2669,29 @@ msgstr "Gardar" #: src/supertux/menu/multiplayer_menu.cpp:27 #: src/supertux/menu/multiplayer_players_menu.cpp:34 msgid "Multiplayer" -msgstr "" +msgstr "Multixogador" #: src/supertux/menu/multiplayer_menu.cpp:30 msgid "Auto-manage Players" -msgstr "" +msgstr "Xestionar Automaticamente os Xogadores" #: src/supertux/menu/multiplayer_menu.cpp:31 msgid "" "Automatically add and remove players when controllers are plugged or " "unplugged" -msgstr "" +msgstr "Engade e elimina xogadores automaticamente cando se conecten ou desconecten os mandos." #: src/supertux/menu/multiplayer_menu.cpp:33 msgid "Allow Multibind" -msgstr "" +msgstr "Permitir Multivinculación" #: src/supertux/menu/multiplayer_menu.cpp:34 msgid "Allow binding multiple joysticks to a single player" -msgstr "" +msgstr "Permite vincular varios joysticks a un único xogador." #: src/supertux/menu/multiplayer_menu.cpp:36 msgid "Manage Players" -msgstr "" +msgstr "Xestionar Xogadores" #: src/supertux/menu/editor_sectors_menu.cpp:31 msgid "Choose Sector" @@ -2724,55 +2724,55 @@ msgstr "Eliminar sector" #: src/supertux/menu/custom_menu_menu.cpp:49 #: src/supertux/menu/options_menu.cpp:191 msgid "Menu Customization" -msgstr "" +msgstr "Personalización do menú" #: src/supertux/menu/custom_menu_menu.cpp:51 msgid "Menu Back Color" -msgstr "" +msgstr "Cor de fondo do menú" #: src/supertux/menu/custom_menu_menu.cpp:52 msgid "Menu Front Color" -msgstr "" +msgstr "Cor frontal do Menú" #: src/supertux/menu/custom_menu_menu.cpp:53 msgid "Menu Help Back Color" -msgstr "" +msgstr "Cor de Fondo do Menú de Axuda " #: src/supertux/menu/custom_menu_menu.cpp:54 msgid "Menu Help Front Color" -msgstr "" +msgstr "Cor frontal do Menú de Axuda" #: src/supertux/menu/custom_menu_menu.cpp:55 msgid "Label Text Color" -msgstr "" +msgstr "Cor do texto da etiqueta" #: src/supertux/menu/custom_menu_menu.cpp:56 msgid "Active Text Color" -msgstr "" +msgstr "Cor activa do texto" #: src/supertux/menu/custom_menu_menu.cpp:57 msgid "Divider Line Color" -msgstr "" +msgstr "Cor da liña divisoria" #: src/supertux/menu/custom_menu_menu.cpp:58 msgid "Menu Roundness" -msgstr "" +msgstr "Redondez do menú" #: src/supertux/menu/custom_menu_menu.cpp:60 msgid "Editor Interface Color" -msgstr "" +msgstr "Cor da interface do editor" #: src/supertux/menu/custom_menu_menu.cpp:61 msgid "Editor Hover Color" -msgstr "" +msgstr "Editor de cor do cursor" #: src/supertux/menu/custom_menu_menu.cpp:62 msgid "Editor Grab Color" -msgstr "" +msgstr "Cor de Capturar no editor" #: src/supertux/menu/custom_menu_menu.cpp:64 msgid "Reset to defaults" -msgstr "" +msgstr "Restablecer os valores predeterminados" #: src/supertux/menu/editor_level_select_menu.cpp:72 msgid "Empty World" @@ -2831,7 +2831,7 @@ msgstr "Isto eliminará o ficheiro gardado automaticamente. Continuar?" #: src/supertux/menu/cheat_apply_menu.cpp:33 #: src/supertux/menu/cheat_apply_menu.cpp:51 msgid "Apply cheat to player" -msgstr "" +msgstr "Aplicar trucos ao xogador" #: src/supertux/menu/worldmap_cheat_apply_menu.cpp:39 #: src/supertux/menu/worldmap_cheat_apply_menu.cpp:60 @@ -2941,8 +2941,8 @@ msgstr "Escoller Mundo" #, c++-format msgid "{} level" msgid_plural "{} levels" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{} nivel" +msgstr[1] "{} niveis" #: src/supertux/menu/editor_levelset_select_menu.cpp:112 msgid "Create World" @@ -3009,7 +3009,7 @@ msgstr "Cambiar o Sistema de Vídeo" #: src/supertux/menu/options_menu.cpp:117 msgid "Change video system used to render graphics" -msgstr "" +msgstr "Cambiar o sistema de vídeo empregado para renderizar gráficos." #: src/supertux/menu/options_menu.cpp:124 #: src/supertux/menu/options_select_menu.cpp:38 @@ -3039,15 +3039,15 @@ msgstr "Controis" #: src/supertux/menu/options_menu.cpp:151 msgid "Enable Rumbling Controllers" -msgstr "" +msgstr "Activar mandos con vibración" #: src/supertux/menu/options_menu.cpp:152 msgid "Enable vibrating the game controllers." -msgstr "" +msgstr "Activa a vibración dos mandos do xogo." #: src/supertux/menu/options_menu.cpp:152 msgid "This feature is currently only used in the multiplayer options menu." -msgstr "" +msgstr "Esta característica só se utiliza actualmente no menú de opcións multixogador." #: src/supertux/menu/options_menu.cpp:154 #: src/supertux/menu/keyboard_menu.cpp:34 @@ -3083,11 +3083,11 @@ msgstr "Selecciona un perfil co que xogar" #: src/supertux/menu/options_menu.cpp:174 msgid "Multiplayer settings" -msgstr "" +msgstr "Configuración multixogador" #: src/supertux/menu/options_menu.cpp:175 msgid "Configure settings specific to multiplayer" -msgstr "" +msgstr "Configura axustes específicos para o multixogador" #: src/supertux/menu/options_menu.cpp:178 msgid "Enable transitions" @@ -3099,11 +3099,11 @@ msgstr "Permitir transicións de pantalla e animación suave do menú" #: src/supertux/menu/options_menu.cpp:181 msgid "Custom title screen levels" -msgstr "" +msgstr "Niveis de pantalla de título personalizados" #: src/supertux/menu/options_menu.cpp:182 msgid "Allow overriding the title screen level, when loading certain worlds" -msgstr "" +msgstr "Permitir substituír o nivel da pantalla de título ao cargar certos mundos." #: src/supertux/menu/options_menu.cpp:185 msgid "Christmas Mode" @@ -3121,7 +3121,7 @@ msgstr "Xestiona se SuperTux debe amosar os niveis ós que xogas nos perfís das #: src/supertux/menu/options_menu.cpp:192 msgid "Customize the appearance of the menus" -msgstr "" +msgstr "Personaliza a aparencia dos menús" #: src/supertux/menu/options_menu.cpp:199 #: src/supertux/menu/options_select_menu.cpp:41 @@ -3158,13 +3158,13 @@ msgstr "Se o xogo representa o seu propio cursor ou utiliza o cursor do sistema" #: src/supertux/menu/options_menu.cpp:214 msgid "Check for new releases" -msgstr "" +msgstr "Consulta novas versións" #: src/supertux/menu/options_menu.cpp:215 msgid "" "Allows the game to perform checks for new SuperTux releases on startup and " "notify if any found." -msgstr "" +msgstr "Permite ao xogo realizar comprobacións de novas versións de SuperTux ao iniciarse e notificar se se atopan algunhas." #: src/supertux/menu/options_menu.cpp:245 #: src/supertux/menu/options_menu.cpp:288 src/supertux/direction.cpp:76 @@ -3247,7 +3247,7 @@ msgstr "Axustar o volume da música" #: src/supertux/menu/options_menu.cpp:517 msgid "On-screen controls scale" -msgstr "" +msgstr "Escala de controis en pantalla" #: src/supertux/menu/options_menu.cpp:638 msgid "" @@ -3258,12 +3258,12 @@ msgstr "O xogo non puido detectar a resolución do teu navegador.\nIsto acontece #: src/supertux/menu/editor_delete_levelset_menu.cpp:80 msgid "You cannot delete the world that you are editing" -msgstr "" +msgstr "Non podes eliminar o mundo que estás editando" #: src/supertux/menu/editor_delete_levelset_menu.cpp:83 #, c++-format msgid "You are about to delete world \"{}\". Are you sure?" -msgstr "" +msgstr "Estás a piques de eliminar o mundo \"{}\". Estás certo?" #: src/supertux/menu/addon_preview_menu.cpp:82 #, c++-format @@ -3272,15 +3272,15 @@ msgstr "{} \"{}\"" #: src/supertux/menu/addon_preview_menu.cpp:87 msgid "Some information about this add-on is not available." -msgstr "" +msgstr "Algunha información sobre este complemento non está dispoñible." #: src/supertux/menu/addon_preview_menu.cpp:88 msgid "Perform a \"Check Online\" to try retrieving it." -msgstr "" +msgstr "Realiza un \"Comprobar en liña\" para tentar recuperalo." #: src/supertux/menu/addon_preview_menu.cpp:92 msgid "No author specified." -msgstr "" +msgstr "Non se especifica ningún autor." #: src/supertux/menu/addon_preview_menu.cpp:92 #, c++-format @@ -3294,16 +3294,16 @@ msgstr "Tipo: {}" #: src/supertux/menu/addon_preview_menu.cpp:94 msgid "No license specified." -msgstr "" +msgstr "Non se especifica ningunha licenza." #: src/supertux/menu/addon_preview_menu.cpp:94 #, c++-format msgid "License: {}" -msgstr "" +msgstr "Licenza: {}" #: src/supertux/menu/addon_preview_menu.cpp:99 msgid "Dependencies:" -msgstr "" +msgstr "Dependencias:" #: src/supertux/menu/addon_preview_menu.cpp:108 msgid "Installed" @@ -3319,83 +3319,83 @@ msgstr "Non dispoñible!" #: src/supertux/menu/addon_preview_menu.cpp:120 msgid "Description:" -msgstr "" +msgstr "Descrición:" #: src/supertux/menu/addon_preview_menu.cpp:123 msgid "No description available." -msgstr "" +msgstr "Non hai descrición dispoñible." #: src/supertux/menu/addon_preview_menu.cpp:147 msgid "Failed to load all available screenshot previews." -msgstr "" +msgstr "Produciuse un erro ao cargar todas as vistas previas das capturas de pantalla dispoñibles." #: src/supertux/menu/addon_preview_menu.cpp:152 msgid "Show screenshots" -msgstr "" +msgstr "Mostrar capturas de pantalla" #: src/supertux/menu/addon_preview_menu.cpp:165 msgid "Screenshot previews are disabled for automatic installs." -msgstr "" +msgstr "As vistas previas das capturas de pantalla están desactivadas para as instalacións automáticas." #: src/supertux/menu/addon_preview_menu.cpp:169 msgid "No screenshot previews available." -msgstr "" +msgstr "Non hai vistas previas de capturas de pantalla dispoñibles." #: src/supertux/menu/addon_preview_menu.cpp:177 msgid "Install" -msgstr "" +msgstr "Instalar" #: src/supertux/menu/addon_preview_menu.cpp:190 msgid "Uninstall" -msgstr "" +msgstr "Desinstalar" #: src/supertux/menu/addon_preview_menu.cpp:214 #, c++-format msgid "Are you sure you want to uninstall \"{}\"?" -msgstr "" +msgstr "Estás seguro de que queres desinstalar \"{}\"?" #: src/supertux/menu/addon_preview_menu.cpp:215 msgid "" "\n" "Your progress won't be lost." -msgstr "" +msgstr "\nO teu progreso non se perderá." #: src/supertux/menu/addon_preview_menu.cpp:227 #, c++-format msgid "" "NOTE: The add-on \"{}\" is a dependency of {} other installed {}.\n" "Are you sure you wish to uninstall?" -msgstr "" +msgstr "NOTA: O complemento \"{}\" é unha dependencia de {} outros complementos instalados{}.\nEstás certo de que desexas desinstalar?" #: src/supertux/menu/addon_preview_menu.cpp:246 #, c++-format msgid "" "Cannot toggle add-on \"{}\":\n" "{}" -msgstr "" +msgstr "Non se pode alternar o complemento \"{}\":\n{}" #: src/supertux/menu/addon_preview_menu.cpp:279 msgid "Fetching screenshot previews..." -msgstr "" +msgstr "Obtendo vistas previas das capturas de pantalla..." #: src/supertux/menu/addon_preview_menu.cpp:300 msgid "Updating" -msgstr "" +msgstr "Actualizando" #: src/supertux/menu/addon_preview_menu.cpp:300 msgid "Downloading" -msgstr "" +msgstr "Descargando" #: src/supertux/menu/addon_preview_menu.cpp:328 msgid "Add-on uninstalled successfully." -msgstr "" +msgstr "O complemento desinstalouse correctamente." #: src/supertux/menu/addon_preview_menu.cpp:333 #, c++-format msgid "" "Error uninstalling add-on:\n" "{}" -msgstr "" +msgstr "Produciuse un erro ao desinstalar o complemento:\n{}" #: src/supertux/menu/addon_preview_menu.cpp:361 msgid "" @@ -3442,12 +3442,12 @@ msgstr "Saír" msgid "" "This will take you to the SuperTux donation page. Are you sure you want to " "continue?" -msgstr "" +msgstr "Isto levaráche á páxina de doazóns de SuperTux. Estás seguro de que queres continuar?" #: src/supertux/menu/editor_sector_menu.cpp:34 #, c++-format msgid "Sector {}" -msgstr "" +msgstr "Sector {}" #: src/supertux/menu/editor_sector_menu.cpp:37 msgid "Initialization script" @@ -3471,50 +3471,50 @@ msgstr "Cambiar o tamaño" #: src/supertux/menu/profile_menu.cpp:60 msgid "No profiles found." -msgstr "" +msgstr "Non se atoparon perfís." #: src/supertux/menu/profile_menu.cpp:68 #: src/supertux/menu/profile_menu.cpp:149 #: src/supertux/menu/profile_menu.cpp:168 #, c++-format msgid "Profile {}" -msgstr "" +msgstr "Perfil {}" #: src/supertux/menu/profile_menu.cpp:69 #, c++-format msgid "{} (Profile {})" -msgstr "" +msgstr "{} (Perfil {})" #: src/supertux/menu/profile_menu.cpp:84 msgid "No profile selected." -msgstr "" +msgstr "Non se seleccionou ningún perfil." #: src/supertux/menu/profile_menu.cpp:91 src/supertux/menu/profile_menu.cpp:93 #: src/supertux/menu/profile_name_menu.cpp:42 msgid "Rename" -msgstr "" +msgstr "Renomear" #: src/supertux/menu/profile_menu.cpp:98 #: src/supertux/menu/profile_menu.cpp:100 msgid "Reset" -msgstr "" +msgstr "Restablecer" #: src/supertux/menu/profile_menu.cpp:103 #: src/supertux/menu/profile_menu.cpp:105 msgid "Reset all" -msgstr "" +msgstr "Restablecer todo" #: src/supertux/menu/profile_menu.cpp:113 #: src/supertux/menu/profile_menu.cpp:115 msgid "Delete all" -msgstr "" +msgstr "Eliminar todo" #: src/supertux/menu/profile_menu.cpp:148 #, c++-format msgid "" "This will reset all game progress on the profile \"{}\".\n" "Are you sure?" -msgstr "" +msgstr "Isto reseteará todo o progreso do xogo no perfil \"{}\".\nEstás seguro/a?" #: src/supertux/menu/profile_menu.cpp:157 msgid "This will reset your game progress on all profiles. Are you sure?" @@ -3525,13 +3525,13 @@ msgstr "Isto restablecerá o progreso no xogo en tódolos perfís. Estás seguro msgid "" "This will delete the profile \"{}\",\n" "including all game progress on it. Are you sure?" -msgstr "" +msgstr "Isto eliminará o perfil \"{}\", incluíndo todo o progreso do xogo nel. Estás seguro/a?" #: src/supertux/menu/profile_menu.cpp:178 msgid "" "This will delete all profiles, including all game progress on them.\n" "Are you sure?" -msgstr "" +msgstr "Isto eliminará todos os perfís, incluíndo todo o progreso do xogo neles.\nEstás seguro/a?" #: src/supertux/menu/editor_levelset_menu.cpp:53 #: src/supertux/menu/editor_new_levelset_menu.cpp:35 @@ -3540,19 +3540,19 @@ msgstr "Descrición" #: src/supertux/menu/editor_levelset_menu.cpp:55 msgid "Title Screen Level" -msgstr "" +msgstr "Nivel de pantalla de título" #: src/supertux/menu/editor_levelset_menu.cpp:56 msgid "A level to be used for the title screen, after exiting the world." -msgstr "" +msgstr "Un nivel para ser usado para a pantalla de título, despois de saír do mundo." #: src/supertux/menu/multiplayer_players_menu.cpp:46 msgid "Add Player" -msgstr "" +msgstr "Engadir xogador" #: src/supertux/menu/multiplayer_players_menu.cpp:59 msgid "Remove Last Player" -msgstr "" +msgstr "Eliminar o último xogador" #: src/supertux/menu/multiplayer_players_menu.cpp:62 msgid "" @@ -3560,19 +3560,19 @@ msgid "" "remove is currently in-game.\n" "\n" "Do you wish to remove them anyways?" -msgstr "" +msgstr "Aviso: O xogador que estás a intentar \neliminar está actualmente no xogo.\n\nQueres eliminá-lo de todos xeitos?" #: src/supertux/menu/addon_menu.cpp:68 msgid "Installed Language Packs" -msgstr "" +msgstr "Paquetes de idioma instalados" #: src/supertux/menu/addon_menu.cpp:68 msgid "Installed Add-ons" -msgstr "" +msgstr "Complementos instalados" #: src/supertux/menu/addon_menu.cpp:76 src/supertux/menu/addon_menu.cpp:117 msgid "No language packs installed" -msgstr "" +msgstr "Non hai paquetes de idioma instalados" #: src/supertux/menu/addon_menu.cpp:76 msgid "No Add-ons installed" @@ -3581,50 +3581,50 @@ msgstr "Non hai Complementos instalados" #: src/supertux/menu/addon_menu.cpp:124 #, c++-format msgid "{} {}*UPDATE*" -msgstr "" +msgstr "{} {}*ACTUALIZACIÓN*" #: src/supertux/menu/addon_menu.cpp:130 #, c++-format msgid "{}{}" -msgstr "" +msgstr "{}{}" #: src/supertux/menu/addon_menu.cpp:140 msgid "No updates available." -msgstr "" +msgstr "Non hai actualizacións dispoñibles." #: src/supertux/menu/addon_menu.cpp:144 #, c++-format msgid "{} {} available" -msgstr "" +msgstr "{} {} dispoñibles" #: src/supertux/menu/addon_menu.cpp:144 msgid "update" -msgstr "" +msgstr "actualizar" #: src/supertux/menu/addon_menu.cpp:144 msgid "updates" -msgstr "" +msgstr "actualizacións" #: src/supertux/menu/addon_menu.cpp:146 msgid "Check for updates" -msgstr "" +msgstr "Comproba se hai actualizacións" #: src/supertux/menu/addon_menu.cpp:150 msgid "Browse language packs" -msgstr "" +msgstr "Explorar paquetes de idiomas" #: src/supertux/menu/addon_menu.cpp:150 #: src/supertux/menu/addon_browse_menu.cpp:70 msgid "Browse Add-ons" -msgstr "" +msgstr "Explorar complementos" #: src/supertux/menu/addon_menu.cpp:151 msgid "Install from file" -msgstr "" +msgstr "Instalar dende o ficheiro" #: src/supertux/menu/addon_menu.cpp:208 msgid "Checking for updates..." -msgstr "" +msgstr "Buscando actualizacións..." #: src/supertux/menu/editor_new_levelset_menu.cpp:31 msgid "New World" @@ -3640,28 +3640,28 @@ msgstr "Modo Historia" #: src/supertux/menu/addon_browse_menu.cpp:70 msgid "Browse Language Packs" -msgstr "" +msgstr "Explorar paquetes de idiomas" #: src/supertux/menu/addon_browse_menu.cpp:112 #, c++-format msgid "Page {}/{}" -msgstr "" +msgstr "Páxina {}/{}" #: src/supertux/menu/addon_browse_menu.cpp:124 msgid "No new language packs available" -msgstr "" +msgstr "Non hai novos paquetes de idiomas dispoñibles" #: src/supertux/menu/addon_browse_menu.cpp:124 msgid "No new Add-ons available" -msgstr "" +msgstr "Non hai novos complementos dispoñibles" #: src/supertux/menu/addon_browse_menu.cpp:127 msgid "No language packs available" -msgstr "" +msgstr "Non hai paquetes de idiomas dispoñibles" #: src/supertux/menu/addon_browse_menu.cpp:127 msgid "No Add-ons available" -msgstr "" +msgstr "Non hai complementos dispoñibles" #: src/supertux/menu/addon_browse_menu.cpp:135 #: src/supertux/menu/addon_browse_menu.cpp:139 @@ -3729,7 +3729,7 @@ msgstr "Estás seguro?" #: src/supertux/menu/profile_name_menu.cpp:36 #, c++-format msgid "Rename \"{}\"" -msgstr "" +msgstr "Renomear \"{}\"" #: src/supertux/menu/profile_name_menu.cpp:36 msgid "Add profile" @@ -3970,15 +3970,15 @@ msgstr "Destruír a Tux" #: src/supertux/menu/cheat_menu.cpp:55 msgid "Prevent Death" -msgstr "" +msgstr "Previr a Morte" #: src/supertux/menu/addon_file_install_menu.cpp:32 msgid "Install Add-on from file" -msgstr "" +msgstr "Instala o complemento desde o ficheiro" #: src/supertux/menu/addon_file_install_menu.cpp:34 msgid "Drag and drop add-on ZIP archive" -msgstr "" +msgstr "Arrastra e solta o arquivo ZIP do complemento" #: src/supertux/menu/particle_editor_menu.cpp:32 msgid "Particle Editor" @@ -4135,7 +4135,7 @@ msgstr "Editar Outro Mundo" #: src/supertux/menu/editor_menu.cpp:86 msgid "Convert all tiles in the level using converters." -msgstr "" +msgstr "Converte todos os bloques do nivel usando conversores." #: src/supertux/menu/editor_menu.cpp:90 msgid "Grid Size" @@ -4167,11 +4167,11 @@ msgstr "Activar axuda de autoteselado" #: src/supertux/menu/editor_menu.cpp:97 msgid "Enable Object Undo Tracking" -msgstr "" +msgstr "Activar o seguimento de desfacer de obxectos" #: src/supertux/menu/editor_menu.cpp:100 msgid "Undo Stack Size" -msgstr "" +msgstr "Desfacer o tamaño da pila" #: src/supertux/menu/editor_menu.cpp:102 msgid "Autosave Frequency" @@ -4179,21 +4179,21 @@ msgstr "Frecuencia de Auto-gardado" #: src/supertux/menu/editor_menu.cpp:108 msgid "Check for Deprecated Tiles" -msgstr "" +msgstr "Verificar bloques obsoletos" #: src/supertux/menu/editor_menu.cpp:109 msgid "Check if any deprecated tiles are currently present in the level." -msgstr "" +msgstr "Comproba se hai algún bloque obsoleto presente actualmente no nivel." #: src/supertux/menu/editor_menu.cpp:110 msgid "Show Deprecated Tiles" -msgstr "" +msgstr "Mostrar Bloques Obsoletos" #: src/supertux/menu/editor_menu.cpp:111 msgid "" "Indicate all deprecated tiles on the active tilemap, without the need of " "hovering over." -msgstr "" +msgstr "Indica todos os bloques obsoletos no mapa de bloques activo, sen necesidade de pasar o rato." #: src/supertux/menu/editor_menu.cpp:121 msgid "Exit Level Editor" @@ -4241,19 +4241,19 @@ msgid "" "Ctrl+D = Duplicate line\n" "Ctrl+Z = Undo\n" "Ctrl+Y = Redo" -msgstr "" +msgstr "Atallos de teclado:\n---------------------\nEsc = Abrir menú\nCtrl+S = Gardar\nCtrl+T = Probar\nCtrl+Z = Desfacer\nCtrl+Y = Refacer\nF6 = Renderizar luz\nF7 = Axuste á grella\nF8 = Mostrar grella\nCtrl++ ou Ctrl+Rodar arriba = Zoom dentro\nCtrl+- ou Ctrl+Rodar abaixo = Zoom fóra\nCtrl+D = Restablecer zoom\n\nAtallos de escritura:\n---------------------\nInicio = Ir ao comezo da liña\nFin = Ir ao final da liña\nFrecha esquerda = Retroceder no texto\nFrecha dereita = Avanzar no texto\nRetroceso = Eliminar diante do cursor\nSuprimir = Eliminar detrás do cursor\nCtrl+X = Cortar toda a liña\nCtrl+C = Copiar toda a liña\nCtrl+V = Pegar\nCtrl+D = Duplicar liña\nCtrl+Z = Desfacer\nCtrl+Y = Refacer" #: src/supertux/menu/editor_menu.cpp:232 msgid "Deprecated tiles are still present in the level." -msgstr "" +msgstr "Os bloques obsoletos aínda están presentes no nivel." #: src/supertux/menu/editor_menu.cpp:239 msgid "Do you want to show all deprecated tiles on active tilemaps?" -msgstr "" +msgstr "Queres mostrar todos os bloques obsoletos nos mapas de bloques ativos?" #: src/supertux/menu/editor_menu.cpp:246 msgid "There are no more deprecated tiles in the level!" -msgstr "" +msgstr "Non hai máis bloques obsoletos no nivel!" #: src/supertux/menu/multiplayer_player_menu.cpp:40 msgid "Play with the keyboard" @@ -4265,39 +4265,39 @@ msgstr "Eliminar Xogador" #: src/supertux/menu/multiplayer_player_menu.cpp:82 msgid "Respawn Player" -msgstr "" +msgstr "Reiniciar Xogador" #: src/supertux/menu/multiplayer_player_menu.cpp:108 msgid "Spawn Player" -msgstr "" +msgstr "Crear Xogador" #: src/supertux/menu/multiplayer_player_menu.cpp:136 msgid "Controllers" -msgstr "" +msgstr "Mandos" #: src/supertux/menu/multiplayer_player_menu.cpp:152 msgid "" "This controller does not support rumbling;\n" "please check the controllers manually." -msgstr "" +msgstr "Este mando non admite vibracións; \ncomproba os mandos manualmente, por favor." #: src/supertux/menu/multiplayer_player_menu.cpp:157 msgid "" "This SuperTux build does not support rumbling\n" "controllers; please check the controllers manually." -msgstr "" +msgstr "Esta compilación de SuperTux non admite mandos con vibración; \ncomproba os mandos manualmente, por favor." #: src/supertux/menu/multiplayer_player_menu.cpp:184 msgid "" "This joystick does not support rumbling;\n" "please check the joysticks manually." -msgstr "" +msgstr "Este joystick non admite vibracións; \ncomproba os joysticks manualmente, por favor." #: src/supertux/menu/multiplayer_player_menu.cpp:189 msgid "" "This SuperTux build does not support rumbling\n" "joysticks; please check the joysticks manually." -msgstr "" +msgstr "Esta compilación de SuperTux non admite joysticks con vibración; \ncomproba os joysticks manualmente, por favor." #: src/supertux/menu/editor_delete_level_menu.cpp:59 msgid "No levels available" @@ -4310,12 +4310,12 @@ msgstr "Non podes eliminar o nivel que estas editando!" #: src/supertux/menu/editor_delete_level_menu.cpp:82 #, c++-format msgid "You are about to delete level \"{}\". Are you sure?" -msgstr "" +msgstr "Estás a piques de eliminar o nivel \"{}\". Estás certo?" #: src/supertux/levelintro.cpp:137 #, c++-format msgid "contributed by {}" -msgstr "" +msgstr "aportado por {}" #: src/supertux/levelintro.cpp:184 msgid "Badguys killed" @@ -4348,7 +4348,7 @@ msgstr "Rexión" #: src/supertux/main.cpp:801 #, c++-format msgid "New release: SuperTux v{}!" -msgstr "" +msgstr "Nova versión: SuperTux v{}!" #: src/supertux/main.cpp:804 #, c++-format @@ -4357,11 +4357,11 @@ msgid "" "For more information, you can visit the SuperTux website.\n" "\n" "Do you want to visit the website now?" -msgstr "" +msgstr "Hai unha nova versión de SuperTux (v{}) dispoñible!\nPara máis información, podes visitar o sitio web de SuperTux.\n\nQueres visitar o sitio web agora?" #: src/supertux/main.cpp:815 msgid "Checking for new releases..." -msgstr "" +msgstr "Buscando novos lanzamentos..." #: src/control/joystick_config.cpp:85 msgid "Joystick Mappings" @@ -4385,7 +4385,7 @@ msgstr "Cambiar ó tocar" #: src/worldmap/special_tile.hpp:36 msgid "Special Tile" -msgstr "" +msgstr "Bloque especial" #: src/worldmap/level_tile.hpp:36 src/worldmap/level_tile.cpp:161 msgid "Level" @@ -4401,7 +4401,7 @@ msgstr "Mapa principal obxectivo" #: src/worldmap/sprite_change.hpp:35 msgid "Sprite Change" -msgstr "Cambio de Fada" +msgstr "Cambio de gráfico animado \"sprite\"" #: src/worldmap/special_tile.cpp:75 msgid "Show message" @@ -4431,7 +4431,7 @@ msgstr "Teletransporte" msgid "" "This object's current functionality is deprecated.\n" "Updating to get its latest functionality is recommended." -msgstr "" +msgstr "A funcionalidade actual deste obxecto está obsoleta.\nRecoméndase actualizar para obter a súa última funcionalidade." #: src/editor/node_marker.cpp:122 msgid "Path Node" @@ -4476,7 +4476,7 @@ msgstr "Circular" #: src/editor/layers_widget.cpp:331 #, c++-format msgid "Sector: {}" -msgstr "" +msgstr "Sector: {}" #: src/editor/object_option.cpp:92 msgid "true" @@ -4492,19 +4492,19 @@ msgstr "non válido" #: src/editor/object_option.cpp:665 msgid "Scale X" -msgstr "" +msgstr "Escala X" #: src/editor/object_option.cpp:666 msgid "Scale Y" -msgstr "" +msgstr "Escala Y" #: src/editor/object_option.cpp:667 msgid "Offset X" -msgstr "" +msgstr "Desprazamento X" #: src/editor/object_option.cpp:668 msgid "Offset Y" -msgstr "" +msgstr "Desprazamento Y" #: src/editor/object_option.cpp:672 src/editor/object_menu.cpp:67 msgid "Remove" @@ -4520,7 +4520,7 @@ msgstr "Abrir o Editor de Partículas" #: src/editor/particle_editor.cpp:114 msgid "Change texture... ->" -msgstr "" +msgstr "Cambiar textura... ->" #: src/editor/particle_editor.cpp:126 msgid "Max amount" @@ -4604,35 +4604,35 @@ msgstr "Modo fora da pantalla" #: src/editor/particle_editor.cpp:229 msgid "Clear" -msgstr "" +msgstr "Limpar" #: src/editor/particle_editor.cpp:245 msgid "<- General settings" -msgstr "" +msgstr "<- Configuración xeral" #: src/editor/particle_editor.cpp:255 msgid "Likeliness" -msgstr "" +msgstr "Probabilidade" #: src/editor/particle_editor.cpp:266 msgid "Color (RGBA)" -msgstr "" +msgstr "Color (RGBA)" #: src/editor/particle_editor.cpp:311 msgid "Scale (x, y)" -msgstr "" +msgstr "Escala (x, y)" #: src/editor/particle_editor.cpp:332 msgid "Hitbox scale (x, y)" -msgstr "" +msgstr "Escala da caixa de colisión (x, y)" #: src/editor/particle_editor.cpp:353 msgid "Hitbox offset relative to scale" -msgstr "" +msgstr "Desprazamento da caixa de colisión relativo á escala" #: src/editor/particle_editor.cpp:372 msgid "Change texture..." -msgstr "" +msgstr "Cambiar textura..." #: src/editor/particle_editor.cpp:766 msgid "" @@ -4649,11 +4649,11 @@ msgid "" "This level contains deprecated tiles.\n" "It is strongly recommended to replace all deprecated tiles\n" "to avoid loss of compatibility in future versions." -msgstr "" +msgstr "Este nivel contén bloques obsoletos.\nRecoméndase encarecidamente substituír todos os bloques obsoletos para evitar a perda de compatibilidade en versións futuras." #: src/editor/editor.cpp:579 msgid "Tip: Turn on \"Show Deprecated Tiles\" from the level editor menu." -msgstr "" +msgstr "Consello: Activa \"Mostrar bloques obsoletos\" dende o menú do editor de niveis." #: src/editor/editor.cpp:626 msgid "" @@ -4669,7 +4669,7 @@ msgstr "Este nivel contén cambios non gardados, queres gardalos?" #: src/editor/editor.cpp:662 msgid "This level may contain unsaved changes, do you want to save?" -msgstr "" +msgstr "Este nivel pode conter cambios sen gardar, queres gardar?" #: src/editor/editor.cpp:797 msgid "" @@ -4707,7 +4707,7 @@ msgstr "Non se puido atopar un punto de inicio \"principal\".\nCambia o nome do #: src/editor/object_menu.cpp:60 msgid "Patch Notes" -msgstr "" +msgstr "Notas do parche" #: src/editor/object_menu.cpp:84 msgid "" @@ -4716,16 +4716,16 @@ msgid "" "\n" "Keep in mind this is very likely to break the proper behaviour of the object.\n" "Make sure to re-check any behaviour, related to the object." -msgstr "" +msgstr "Isto actualizará o obxecto á súa última funcionalidade.\nConsulta as \"Notas do parche\" para máis información.\n\nTen en conta que isto probablemente afectará o comportamento correcto do obxecto.\nAsegúrate de volver comprobar calquera comportamento relacionado co obxecto." #: src/editor/object_menu.cpp:98 #, c++-format msgid "Patch notes for v{}:" -msgstr "" +msgstr "Notas do parche para v{}:" #: src/editor/overlay_widget.cpp:1062 msgid "Cannot select deprecated tiles" -msgstr "" +msgstr "Non se poden seleccionar bloques obsoletos" #: src/editor/overlay_widget.cpp:1567 msgid "Autotile mode is on" @@ -4753,7 +4753,7 @@ msgstr "Equipo Actual de SuperTux" #: data//credits.stxt:30 msgid "Maintainer, Programming" -msgstr "" +msgstr "Mantedor, Programación" #: data//credits.stxt:35 msgid "Graphics, Level Design, Story" @@ -4914,7 +4914,7 @@ msgstr "Código do novo menú" #: data//credits.stxt:530 msgid "Big Tux Walking Sprites improvements" -msgstr "Grandes melloras das Fadas Camiñantes de Tux" +msgstr "Grandes melloras nos Gráficos animados do camiñar de Tux" #: data//credits.stxt:542 data//credits.stxt:550 msgid "Contrib Programming" @@ -5095,11 +5095,11 @@ msgstr "Fondo de Bosque" #: data//images/tiles.strf:690 msgid "Corrupted Forest" -msgstr "" +msgstr "Bosque corrupto" #: data//images/tiles.strf:868 msgid "Corrupted Background" -msgstr "" +msgstr "Fondo corrompido" #: data//images/tiles.strf:991 msgid "Block + Bonus" @@ -5135,7 +5135,7 @@ msgstr "Miscelánea" #: data//images/tiles.strf:1342 msgid "Retro Tiles" -msgstr "" +msgstr "Bloques retro" #: data//images/worldmap.strf:24 msgid "Water paths" @@ -5151,16 +5151,16 @@ msgstr "O Bosque Máis Escuro" #: data//images/converters/data.stcd:3 msgid "Nightly Tiles" -msgstr "" +msgstr "bloques nocturnos (nightly)" #: data//images/converters/data.stcd:5 msgid "For levels, created in previous Nightly builds." -msgstr "" +msgstr "Para niveis, creados en compilacións nocturnas (nightly) anteriores." #: data//images/converters/data.stcd:8 msgid "Pre-0.6.3 Crystal Tiles" -msgstr "" +msgstr "Bloques de cristal anteriores á versión -0.6.3" #: data//images/converters/data.stcd:10 msgid "For levels, created in pre-0.6.3 versions, which use crystal tiles." -msgstr "" +msgstr "Para niveis creados en versións anteriores á -0.6.3, que usan bloques de cristal." diff --git a/data/locale/ja.po b/data/locale/ja.po index 08a13639956..80f4b296003 100644 --- a/data/locale/ja.po +++ b/data/locale/ja.po @@ -6,7 +6,7 @@ # 0ea743a388003249c3a27027490eb004_eb62725 <93be5fa112647d5d896be9f7b3c2eda8_426397>, 2019 # 111More1, 2023 # b1e11c107ebf1f339ff7adfc86b9dbe0_2e3e89d, 2016 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # 515ce455fbf38ec9585626e8d26b6324_7a9a6ef, 2016-2017 # Ryo Nakano, 2016 # Ryo Nakano, 2018-2022,2024 diff --git a/data/locale/nl.po b/data/locale/nl.po index 3437fabee78..918fdf5803a 100644 --- a/data/locale/nl.po +++ b/data/locale/nl.po @@ -7,7 +7,7 @@ # Frank van der Loo , 2014-2015 # Heimen Stoffels , 2021-2022,2024 # Heimen Stoffels , 2015-2016,2018-2020 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # thetuxgirl, 2024 # Pieter De Decker , 2007,2013 # 62bd5b1da39b746abffbed10afdf3f48_dd9a6d2 , 2015 diff --git a/data/locale/pt.po b/data/locale/pt.po index 787d4db65eb..05653a8d010 100644 --- a/data/locale/pt.po +++ b/data/locale/pt.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # André Pinheiro , 2021 # Benjamin Leduc , 2015 # BlaCoiso, 2016 From 6d7afa2f8448e16a40ba4cb56fa02cddffa85486 Mon Sep 17 00:00:00 2001 From: SuperTux Bot Date: Fri, 12 Jul 2024 01:36:21 +0000 Subject: [PATCH 12/33] Update translations --- data/levels/community2016/es.po | 37 ++++++++++++++++----------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/data/levels/community2016/es.po b/data/levels/community2016/es.po index 1778c1472c5..f37f9312d09 100644 --- a/data/levels/community2016/es.po +++ b/data/levels/community2016/es.po @@ -4,8 +4,7 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Germana , 2019 -# Tam Ezquerra , 2019 +# Diego Enmanuel Rosales Santander, 2024 # #, fuzzy msgid "" @@ -14,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: Tam Ezquerra , 2019\n" +"Last-Translator: Diego Enmanuel Rosales Santander, 2024\n" "Language-Team: Spanish (https://app.transifex.com/arctic-games/teams/95/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -28,64 +27,64 @@ msgstr "Las Ruinas Antiguas del Bosque" #: data/levels/community2016/Double_Problems (herobrine).stl:3 msgid "Double Problems" -msgstr "Problemas dobles" +msgstr "Problemas Dobles" #: data/levels/community2016/Double_Problems (herobrine).stl:82 msgid "-Concentrate! Tux! It's not Mario!" -msgstr "¡Concéntrate, Tux! - ¡No es Mario!" +msgstr "" #: data/levels/community2016/Double_Problems (herobrine).stl:142 msgid "You found a secret area!" -msgstr "¡Hallaste un área secreta!" +msgstr "" #: data/levels/community2016/Entrance_To_Cave (gelada).stl:3 msgid "The Entrance To The Cave" -msgstr "La entrada a la Cueva" +msgstr "La Entrada A La Cueva" #: data/levels/community2016/Entrance_To_Lava_Castle (herobrine).stl:3 msgid "The Entrance To The Lava Castle" -msgstr "La Entrada al Castillo de Lava" +msgstr "La Entrada Al Castillo De Lava" #: data/levels/community2016/HMS_Snowballs_Ahoy (Vellidragon).stl:3 msgid "HMS Snowball Ahoy!" -msgstr "¡Bola de nieve HMS a la vista!" +msgstr "¡Bola de Nieve HMS a la Vista!" #: data/levels/community2016/Into_The_Palace (ThomyW).stl:3 msgid "Into The Palace" -msgstr "Dentro del Palacio" +msgstr "" #: data/levels/community2016/Is_The_Biggest_Fish (cookie monster).stl:3 msgid "Is The Biggest Fish" -msgstr "Es el Pez más Grande" +msgstr "" #: data/levels/community2016/Problem_With_Green (herobrine).stl:3 msgid "The Problem With GREEN" -msgstr "El Problema con el VERDE" +msgstr "" #: data/levels/community2016/Sunny_Hills (Serano).stl:3 msgid "Sunny Hills" -msgstr "Colinas Soleadas" +msgstr "" #: data/levels/community2016/The_Mountains (gelada).stl:3 msgid "The Mountains" -msgstr "Las Montañas" +msgstr "" #: data/levels/community2016/The_Strange_Thing (herobrine).stl:3 msgid "The Strange Thing" -msgstr "La Cosa Extraña" +msgstr "" #: data/levels/community2016/Uncontrolled_Lift (gelada).stl:3 msgid "Uncontrolled Lift" -msgstr "Ascenso Incontrolable" +msgstr "" #: data/levels/community2016/Up_Or_Down (Serano).stl:3 msgid "Up, Or Down?" -msgstr "¿Arriba o Abajo?" +msgstr "" #: data/levels/community2016/Welcome_To_Icy_Island (gelada).stl:3 msgid "Welcome To The Icy Island" -msgstr "Bienvenido a la Isla Helada" +msgstr "" #: data/levels/community2016/worldmap.stwm:3 msgid "Community Island 2016" -msgstr "Isla de la Comunidad 2016" +msgstr "" From aac5e669fed572dbe448684251ed282fc27e8709 Mon Sep 17 00:00:00 2001 From: SuperTux Bot Date: Sun, 14 Jul 2024 01:44:49 +0000 Subject: [PATCH 13/33] Update translations --- data/levels/bonus1/ar.po | 4 ++-- data/levels/bonus1/az.po | 4 ++-- data/levels/bonus1/ca.po | 4 ++-- data/levels/bonus1/el.po | 4 ++-- data/levels/bonus1/et.po | 4 ++-- data/levels/bonus1/eu.po | 4 ++-- data/levels/bonus1/fr_CA.po | 4 ++-- data/levels/bonus1/he.po | 4 ++-- data/levels/bonus1/hr.po | 4 ++-- data/levels/bonus1/hy.po | 4 ++-- data/levels/bonus1/is.po | 4 ++-- data/levels/bonus1/nb.po | 4 ++-- data/levels/bonus1/nn.po | 4 ++-- data/levels/bonus1/sk.po | 4 ++-- data/levels/bonus1/sq.po | 4 ++-- data/levels/bonus1/tr.po | 4 ++-- data/levels/bonus1/tt.po | 4 ++-- data/levels/bonus1/uk.po | 2 +- data/levels/bonus1/uz.po | 4 ++-- data/levels/bonus2/ar.po | 4 ++-- data/levels/bonus2/az.po | 4 ++-- data/levels/bonus2/et.po | 4 ++-- data/levels/bonus2/fr_CA.po | 4 ++-- data/levels/bonus2/he.po | 4 ++-- data/levels/bonus2/hr.po | 4 ++-- data/levels/bonus2/hy.po | 4 ++-- data/levels/bonus2/id.po | 4 ++-- data/levels/bonus2/is.po | 4 ++-- data/levels/bonus2/sk.po | 4 ++-- data/levels/bonus2/sq.po | 4 ++-- data/levels/bonus2/uk.po | 2 +- data/levels/bonus2/uz.po | 4 ++-- data/levels/bonus3/ar.po | 4 ++-- data/levels/bonus3/az.po | 4 ++-- data/levels/bonus3/ca.po | 4 ++-- data/levels/bonus3/el.po | 4 ++-- data/levels/bonus3/et.po | 4 ++-- data/levels/bonus3/eu.po | 4 ++-- data/levels/bonus3/fr_CA.po | 4 ++-- data/levels/bonus3/he.po | 4 ++-- data/levels/bonus3/hr.po | 4 ++-- data/levels/bonus3/hy.po | 4 ++-- data/levels/bonus3/id.po | 4 ++-- data/levels/bonus3/is.po | 4 ++-- data/levels/bonus3/nb.po | 4 ++-- data/levels/bonus3/nn.po | 4 ++-- data/levels/bonus3/ro.po | 4 ++-- data/levels/bonus3/sk.po | 4 ++-- data/levels/bonus3/sq.po | 4 ++-- data/levels/bonus3/tr.po | 4 ++-- data/levels/bonus3/tt.po | 4 ++-- data/levels/bonus3/uk.po | 4 ++-- data/levels/bonus3/uz.po | 4 ++-- data/levels/bonus4/ar.po | 4 ++-- data/levels/bonus4/az.po | 4 ++-- data/levels/bonus4/ca.po | 4 ++-- data/levels/bonus4/el.po | 4 ++-- data/levels/bonus4/eo.po | 4 ++-- data/levels/bonus4/et.po | 4 ++-- data/levels/bonus4/fr_CA.po | 4 ++-- data/levels/bonus4/he.po | 4 ++-- data/levels/bonus4/hr.po | 4 ++-- data/levels/bonus4/hy.po | 4 ++-- data/levels/bonus4/id.po | 4 ++-- data/levels/bonus4/is.po | 4 ++-- data/levels/bonus4/nb.po | 4 ++-- data/levels/bonus4/sk.po | 4 ++-- data/levels/bonus4/sq.po | 4 ++-- data/levels/bonus4/tt.po | 4 ++-- data/levels/bonus4/uk.po | 4 ++-- data/levels/bonus4/uz.po | 4 ++-- data/levels/community2016/ar.po | 4 ++-- data/levels/community2016/az.po | 4 ++-- data/levels/community2016/ca.po | 4 ++-- data/levels/community2016/el.po | 4 ++-- data/levels/community2016/eo.po | 4 ++-- data/levels/community2016/et.po | 4 ++-- data/levels/community2016/fr_CA.po | 4 ++-- data/levels/community2016/he.po | 4 ++-- data/levels/community2016/hr.po | 4 ++-- data/levels/community2016/hy.po | 4 ++-- data/levels/community2016/id.po | 4 ++-- data/levels/community2016/is.po | 4 ++-- data/levels/community2016/nb.po | 4 ++-- data/levels/community2016/ro.po | 4 ++-- data/levels/community2016/sk.po | 4 ++-- data/levels/community2016/sq.po | 4 ++-- data/levels/community2016/tt.po | 4 ++-- data/levels/community2016/uk.po | 4 ++-- data/levels/community2016/uz.po | 4 ++-- data/levels/halloween2014/ar.po | 4 ++-- data/levels/halloween2014/az.po | 4 ++-- data/levels/halloween2014/eo.po | 4 ++-- data/levels/halloween2014/et.po | 4 ++-- data/levels/halloween2014/fr_CA.po | 4 ++-- data/levels/halloween2014/he.po | 4 ++-- data/levels/halloween2014/hr.po | 4 ++-- data/levels/halloween2014/hy.po | 4 ++-- data/levels/halloween2014/id.po | 4 ++-- data/levels/halloween2014/is.po | 4 ++-- data/levels/halloween2014/ro.po | 4 ++-- data/levels/halloween2014/sq.po | 4 ++-- data/levels/halloween2014/uz.po | 4 ++-- data/levels/world1/ar.po | 4 ++-- data/levels/world1/az.po | 4 ++-- data/levels/world1/ca.po | 4 ++-- data/levels/world1/el.po | 4 ++-- data/levels/world1/fr_CA.po | 6 +++--- data/levels/world1/he.po | 4 ++-- data/levels/world1/hr.po | 4 ++-- data/levels/world1/hy.po | 4 ++-- data/levels/world1/id.po | 4 ++-- data/levels/world1/is.po | 4 ++-- data/levels/world1/nb.po | 4 ++-- data/levels/world1/ro.po | 2 +- data/levels/world1/sk.po | 4 ++-- data/levels/world1/sq.po | 4 ++-- data/levels/world1/tr.po | 4 ++-- data/levels/world1/tt.po | 4 ++-- data/levels/world1/uk.po | 2 +- data/levels/world1/uz.po | 6 +++--- data/levels/world2/ar.po | 4 ++-- data/levels/world2/az.po | 4 ++-- data/levels/world2/ca.po | 4 ++-- data/levels/world2/el.po | 4 ++-- data/levels/world2/et.po | 6 +++--- data/levels/world2/eu.po | 4 ++-- data/levels/world2/fr_CA.po | 4 ++-- data/levels/world2/he.po | 4 ++-- data/levels/world2/hr.po | 4 ++-- data/levels/world2/hu.po | 4 ++-- data/levels/world2/hy.po | 4 ++-- data/levels/world2/is.po | 4 ++-- data/levels/world2/ja.po | 4 ++-- data/levels/world2/ko.po | 4 ++-- data/levels/world2/nb.po | 4 ++-- data/levels/world2/nn.po | 4 ++-- data/levels/world2/ro.po | 4 ++-- data/levels/world2/sk.po | 4 ++-- data/levels/world2/sq.po | 4 ++-- data/levels/world2/tr.po | 4 ++-- data/levels/world2/tt.po | 4 ++-- data/levels/world2/uk.po | 4 ++-- data/levels/world2/uz.po | 4 ++-- data/locale/bg.po | 2 +- 145 files changed, 288 insertions(+), 288 deletions(-) diff --git a/data/levels/bonus1/ar.po b/data/levels/bonus1/ar.po index 2a37c11bd6c..f4a7ad8baab 100644 --- a/data/levels/bonus1/ar.po +++ b/data/levels/bonus1/ar.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # Israa Zamzami, 2018 # Hasan Nahleh , 2019 msgid "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Arabic (http://app.transifex.com/arctic-games/supertux/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/az.po b/data/levels/bonus1/az.po index 1a12fb97c1a..07e67ea2289 100644 --- a/data/levels/bonus1/az.po +++ b/data/levels/bonus1/az.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Azerbaijani (http://app.transifex.com/arctic-games/supertux/language/az/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/ca.po b/data/levels/bonus1/ca.po index c8813141678..cd597ce979e 100644 --- a/data/levels/bonus1/ca.po +++ b/data/levels/bonus1/ca.po @@ -5,7 +5,7 @@ # Translators: # Ariadna Pascual , 2016 # Catalanoic , 2016 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # 76352799d6904fac47e3a0fa3ed5fd59_334826e , 2014 # Yael Codesal, 2016 msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Catalan (http://app.transifex.com/arctic-games/supertux/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/el.po b/data/levels/bonus1/el.po index 30e14872ce3..90147c52686 100644 --- a/data/levels/bonus1/el.po +++ b/data/levels/bonus1/el.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # I will not tell you that , 2015 # Vangelis Nomikos , 2013-2014 # Vangelis Skarmoutsos (SkarmoutsosV) , 2016 @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Greek (http://app.transifex.com/arctic-games/supertux/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/et.po b/data/levels/bonus1/et.po index 7eb5817d339..853e3dd3f0f 100644 --- a/data/levels/bonus1/et.po +++ b/data/levels/bonus1/et.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Estonian (http://app.transifex.com/arctic-games/supertux/language/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/eu.po b/data/levels/bonus1/eu.po index 18c74761d7b..12e00218a62 100644 --- a/data/levels/bonus1/eu.po +++ b/data/levels/bonus1/eu.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # Mielanjel Iraeta , 2018 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Basque (http://app.transifex.com/arctic-games/supertux/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/fr_CA.po b/data/levels/bonus1/fr_CA.po index 5334c354a3a..9adecdbce35 100644 --- a/data/levels/bonus1/fr_CA.po +++ b/data/levels/bonus1/fr_CA.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Jean-Philippe L'Étoile , 2019 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: French (Canada) (http://app.transifex.com/arctic-games/supertux/language/fr_CA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/he.po b/data/levels/bonus1/he.po index 9c6a3379e1e..189546fa421 100644 --- a/data/levels/bonus1/he.po +++ b/data/levels/bonus1/he.po @@ -4,7 +4,7 @@ # # Translators: # Evgeny Satanovsky , 2019 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2020-2021 # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2021 # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2020 @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Hebrew (http://app.transifex.com/arctic-games/supertux/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/hr.po b/data/levels/bonus1/hr.po index 7d56e464ad8..b2893a8e30d 100644 --- a/data/levels/bonus1/hr.po +++ b/data/levels/bonus1/hr.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Croatian (http://app.transifex.com/arctic-games/supertux/language/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/hy.po b/data/levels/bonus1/hy.po index cd2dad81ffb..467351e8de7 100644 --- a/data/levels/bonus1/hy.po +++ b/data/levels/bonus1/hy.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Armenian (http://app.transifex.com/arctic-games/supertux/language/hy/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/is.po b/data/levels/bonus1/is.po index 7c9a2f9c8f3..5bca0218218 100644 --- a/data/levels/bonus1/is.po +++ b/data/levels/bonus1/is.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Kristján Magnússon, 2022 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Icelandic (http://app.transifex.com/arctic-games/supertux/language/is/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/nb.po b/data/levels/bonus1/nb.po index 345a62cd9f0..3f8d459d871 100644 --- a/data/levels/bonus1/nb.po +++ b/data/levels/bonus1/nb.po @@ -4,7 +4,7 @@ # # Translators: # Allan Nordhøy , 2016 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Karl Ove Hufthammer , 2007,2015-2016 msgid "" msgstr "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Norwegian Bokmål (http://app.transifex.com/arctic-games/supertux/language/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/nn.po b/data/levels/bonus1/nn.po index 5005ee9e993..4282ac67389 100644 --- a/data/levels/bonus1/nn.po +++ b/data/levels/bonus1/nn.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Karl Ove Hufthammer , 2006-2007,2015-2016,2019-2020 # Karl Ove Hufthammer , 2015 msgid "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Norwegian Nynorsk (http://app.transifex.com/arctic-games/supertux/language/nn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/sk.po b/data/levels/bonus1/sk.po index 64a7bfc7712..5380e36b742 100644 --- a/data/levels/bonus1/sk.po +++ b/data/levels/bonus1/sk.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # c79a840bffc1621596a73d9f7d995b66_5f97bea <821296eb068acbf38f8fe02d322f4248_155187>, 2014 # MiroslavR , 2015-2016 msgid "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Slovak (http://app.transifex.com/arctic-games/supertux/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/sq.po b/data/levels/bonus1/sq.po index 151c275081b..9dc718b52c5 100644 --- a/data/levels/bonus1/sq.po +++ b/data/levels/bonus1/sq.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Indrit Bashkimi , 2015 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Albanian (http://app.transifex.com/arctic-games/supertux/language/sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/tr.po b/data/levels/bonus1/tr.po index db01f12f67c..15713eb6715 100644 --- a/data/levels/bonus1/tr.po +++ b/data/levels/bonus1/tr.po @@ -6,7 +6,7 @@ # Alkım Kaçmaz , 2013 # mahmut özcan , 2015 # Tan Siret Akıncı , 2020 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # mahmut özcan , 2020 # Yusuf Özsoy , 2013 msgid "" @@ -15,7 +15,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Turkish (http://app.transifex.com/arctic-games/supertux/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/tt.po b/data/levels/bonus1/tt.po index f90b06dcdb4..3b3fa937264 100644 --- a/data/levels/bonus1/tt.po +++ b/data/levels/bonus1/tt.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Булат Ибраһим , 2016 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Tatar (http://app.transifex.com/arctic-games/supertux/language/tt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus1/uk.po b/data/levels/bonus1/uk.po index d82d440fba0..df7ed42c818 100644 --- a/data/levels/bonus1/uk.po +++ b/data/levels/bonus1/uk.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Asemif official, 2023 # Ievgen Tkach , 2018 # Max Lyashuk , 2015 diff --git a/data/levels/bonus1/uz.po b/data/levels/bonus1/uz.po index c06b347c550..be027da7ed8 100644 --- a/data/levels/bonus1/uz.po +++ b/data/levels/bonus1/uz.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:04+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Uzbek (http://app.transifex.com/arctic-games/supertux/language/uz/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus2/ar.po b/data/levels/bonus2/ar.po index 58182779d35..07837069ad3 100644 --- a/data/levels/bonus2/ar.po +++ b/data/levels/bonus2/ar.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:07+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Arabic (http://app.transifex.com/arctic-games/supertux/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus2/az.po b/data/levels/bonus2/az.po index 1b730353fc2..a39c7943163 100644 --- a/data/levels/bonus2/az.po +++ b/data/levels/bonus2/az.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:07+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Azerbaijani (http://app.transifex.com/arctic-games/supertux/language/az/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus2/et.po b/data/levels/bonus2/et.po index c07c26109fe..bb823a674ed 100644 --- a/data/levels/bonus2/et.po +++ b/data/levels/bonus2/et.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:07+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Estonian (http://app.transifex.com/arctic-games/supertux/language/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus2/fr_CA.po b/data/levels/bonus2/fr_CA.po index 649f323ab15..7c2ab7846ec 100644 --- a/data/levels/bonus2/fr_CA.po +++ b/data/levels/bonus2/fr_CA.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:07+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: French (Canada) (http://app.transifex.com/arctic-games/supertux/language/fr_CA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus2/he.po b/data/levels/bonus2/he.po index ada2b26ce59..65aa28a1bc1 100644 --- a/data/levels/bonus2/he.po +++ b/data/levels/bonus2/he.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2020-2021 # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2020 msgid "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:07+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Hebrew (http://app.transifex.com/arctic-games/supertux/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus2/hr.po b/data/levels/bonus2/hr.po index b7fbd430516..adcaa17fd11 100644 --- a/data/levels/bonus2/hr.po +++ b/data/levels/bonus2/hr.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:07+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Croatian (http://app.transifex.com/arctic-games/supertux/language/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus2/hy.po b/data/levels/bonus2/hy.po index 98839c2e1be..3902437e10b 100644 --- a/data/levels/bonus2/hy.po +++ b/data/levels/bonus2/hy.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:07+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Armenian (http://app.transifex.com/arctic-games/supertux/language/hy/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus2/id.po b/data/levels/bonus2/id.po index 312528a323d..c52dfd2b938 100644 --- a/data/levels/bonus2/id.po +++ b/data/levels/bonus2/id.po @@ -6,14 +6,14 @@ # Chris , 2017 # Chris , 2022 # Chris , 2017 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:07+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Indonesian (http://app.transifex.com/arctic-games/supertux/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus2/is.po b/data/levels/bonus2/is.po index 3bb2eec8a18..4f50e901bf6 100644 --- a/data/levels/bonus2/is.po +++ b/data/levels/bonus2/is.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:07+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Icelandic (http://app.transifex.com/arctic-games/supertux/language/is/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus2/sk.po b/data/levels/bonus2/sk.po index 947851b6f88..8625ca8b0b7 100644 --- a/data/levels/bonus2/sk.po +++ b/data/levels/bonus2/sk.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # c79a840bffc1621596a73d9f7d995b66_5f97bea <821296eb068acbf38f8fe02d322f4248_155187>, 2014 # MiroslavR , 2016 # Roman 'Kaktuxista' Benji , 2014 @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:07+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Slovak (http://app.transifex.com/arctic-games/supertux/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus2/sq.po b/data/levels/bonus2/sq.po index 5fa532e4613..f0ffa470a48 100644 --- a/data/levels/bonus2/sq.po +++ b/data/levels/bonus2/sq.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Indrit Bashkimi , 2015 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:07+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Albanian (http://app.transifex.com/arctic-games/supertux/language/sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus2/uk.po b/data/levels/bonus2/uk.po index df68bf5ce2e..542ee25daeb 100644 --- a/data/levels/bonus2/uk.po +++ b/data/levels/bonus2/uk.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Asemif official, 2023 # Max Lyashuk , 2015 msgid "" diff --git a/data/levels/bonus2/uz.po b/data/levels/bonus2/uz.po index e7fcc8a38f3..cef82b2f99c 100644 --- a/data/levels/bonus2/uz.po +++ b/data/levels/bonus2/uz.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:07+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Uzbek (http://app.transifex.com/arctic-games/supertux/language/uz/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/ar.po b/data/levels/bonus3/ar.po index a482f083f3c..5be232781c9 100644 --- a/data/levels/bonus3/ar.po +++ b/data/levels/bonus3/ar.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # Israa Zamzami, 2018 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Arabic (http://app.transifex.com/arctic-games/supertux/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/az.po b/data/levels/bonus3/az.po index a40ff8802ea..3b02bd8527f 100644 --- a/data/levels/bonus3/az.po +++ b/data/levels/bonus3/az.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Azerbaijani (http://app.transifex.com/arctic-games/supertux/language/az/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/ca.po b/data/levels/bonus3/ca.po index a40b779224f..b4252c2332e 100644 --- a/data/levels/bonus3/ca.po +++ b/data/levels/bonus3/ca.po @@ -5,7 +5,7 @@ # Translators: # Ariadna Pascual , 2016 # Catalanoic , 2016 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # 76352799d6904fac47e3a0fa3ed5fd59_334826e , 2015 # Yael Codesal, 2016 msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Catalan (http://app.transifex.com/arctic-games/supertux/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/el.po b/data/levels/bonus3/el.po index 6544754ae7f..4835c63ecf6 100644 --- a/data/levels/bonus3/el.po +++ b/data/levels/bonus3/el.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # I will not tell you that , 2015 # Vangelis Nomikos , 2013-2014 # Vangelis Skarmoutsos (SkarmoutsosV) , 2016,2019 @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Greek (http://app.transifex.com/arctic-games/supertux/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/et.po b/data/levels/bonus3/et.po index 7a9de61f9d8..13b8f4403e8 100644 --- a/data/levels/bonus3/et.po +++ b/data/levels/bonus3/et.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Estonian (http://app.transifex.com/arctic-games/supertux/language/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/eu.po b/data/levels/bonus3/eu.po index 0d999ab40e8..e489a0a2e34 100644 --- a/data/levels/bonus3/eu.po +++ b/data/levels/bonus3/eu.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # Mielanjel Iraeta , 2018-2019 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Basque (http://app.transifex.com/arctic-games/supertux/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/fr_CA.po b/data/levels/bonus3/fr_CA.po index 24457458d5a..79976dd7d39 100644 --- a/data/levels/bonus3/fr_CA.po +++ b/data/levels/bonus3/fr_CA.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022-2023 +# IAN RODRÍGUEZ Lorenzo, 2022-2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2022-2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022-2023\n" "Language-Team: French (Canada) (http://app.transifex.com/arctic-games/supertux/language/fr_CA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/he.po b/data/levels/bonus3/he.po index 77efeee6229..73ec1a1a1eb 100644 --- a/data/levels/bonus3/he.po +++ b/data/levels/bonus3/he.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2020-2021 # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2020 msgid "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Hebrew (http://app.transifex.com/arctic-games/supertux/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/hr.po b/data/levels/bonus3/hr.po index 16f40adef6f..8bc5f7f868d 100644 --- a/data/levels/bonus3/hr.po +++ b/data/levels/bonus3/hr.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Croatian (http://app.transifex.com/arctic-games/supertux/language/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/hy.po b/data/levels/bonus3/hy.po index f675a251b57..ada538a29b8 100644 --- a/data/levels/bonus3/hy.po +++ b/data/levels/bonus3/hy.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Armenian (http://app.transifex.com/arctic-games/supertux/language/hy/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/id.po b/data/levels/bonus3/id.po index ba9077b7e50..10349160563 100644 --- a/data/levels/bonus3/id.po +++ b/data/levels/bonus3/id.po @@ -4,14 +4,14 @@ # # Translators: # Chris , 2017 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Indonesian (http://app.transifex.com/arctic-games/supertux/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/is.po b/data/levels/bonus3/is.po index 97a2ee0dc98..4302db0c9a3 100644 --- a/data/levels/bonus3/is.po +++ b/data/levels/bonus3/is.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Icelandic (http://app.transifex.com/arctic-games/supertux/language/is/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/nb.po b/data/levels/bonus3/nb.po index 3c45e9cb15c..ed8f099dbaa 100644 --- a/data/levels/bonus3/nb.po +++ b/data/levels/bonus3/nb.po @@ -4,7 +4,7 @@ # # Translators: # Allan Nordhøy , 2016,2018 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Karl Ove Hufthammer , 2015-2016 msgid "" msgstr "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Norwegian Bokmål (http://app.transifex.com/arctic-games/supertux/language/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/nn.po b/data/levels/bonus3/nn.po index 6f96248296b..6410d76e9de 100644 --- a/data/levels/bonus3/nn.po +++ b/data/levels/bonus3/nn.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Karl Ove Hufthammer , 2015-2016,2018-2020 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Norwegian Nynorsk (http://app.transifex.com/arctic-games/supertux/language/nn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/ro.po b/data/levels/bonus3/ro.po index 96ca7e89277..fcd4d25812f 100644 --- a/data/levels/bonus3/ro.po +++ b/data/levels/bonus3/ro.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # Nicolae Crefelean, 2015-2016,2019 # drazvan, 2019 msgid "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Romanian (http://app.transifex.com/arctic-games/supertux/language/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/sk.po b/data/levels/bonus3/sk.po index 4ec1748e72b..3dea149cef5 100644 --- a/data/levels/bonus3/sk.po +++ b/data/levels/bonus3/sk.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Jose Riha , 2021 # Roman 'Kaktuxista' Benji , 2014 # Roman 'Kaktuxista' Benji , 2014 @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Slovak (http://app.transifex.com/arctic-games/supertux/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/sq.po b/data/levels/bonus3/sq.po index 42f6b9751cc..90ac37d0a54 100644 --- a/data/levels/bonus3/sq.po +++ b/data/levels/bonus3/sq.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Indrit Bashkimi , 2015 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Albanian (http://app.transifex.com/arctic-games/supertux/language/sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/tr.po b/data/levels/bonus3/tr.po index c49e6518ec9..b43ec2b2ded 100644 --- a/data/levels/bonus3/tr.po +++ b/data/levels/bonus3/tr.po @@ -6,7 +6,7 @@ # Alkım Kaçmaz , 2013 # Erdoğan Şahin, 2016 # mahmut özcan , 2015-2016 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # mahmut özcan , 2020 # 9d4282795e87ad099e39d98812f1a822_ade2f01 , 2014 # Yusuf Özsoy , 2013 @@ -16,7 +16,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Turkish (http://app.transifex.com/arctic-games/supertux/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/tt.po b/data/levels/bonus3/tt.po index cb91761d1f4..9614fbc94e7 100644 --- a/data/levels/bonus3/tt.po +++ b/data/levels/bonus3/tt.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Timur Seber , 2021 # Булат Ибраһим , 2016 msgid "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Tatar (http://app.transifex.com/arctic-games/supertux/language/tt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/uk.po b/data/levels/bonus3/uk.po index e8840ab9924..7650393fa88 100644 --- a/data/levels/bonus3/uk.po +++ b/data/levels/bonus3/uk.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Max Lyashuk , 2015 # Olexandr Nesterenko , 2019 msgid "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Ukrainian (http://app.transifex.com/arctic-games/supertux/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus3/uz.po b/data/levels/bonus3/uz.po index 0f171d99e7b..fbde3d92449 100644 --- a/data/levels/bonus3/uz.po +++ b/data/levels/bonus3/uz.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:08+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Uzbek (http://app.transifex.com/arctic-games/supertux/language/uz/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/ar.po b/data/levels/bonus4/ar.po index 7c2b071bfb2..28c9a57ede7 100644 --- a/data/levels/bonus4/ar.po +++ b/data/levels/bonus4/ar.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , YEAR. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Arabic (https://app.transifex.com/arctic-games/teams/95/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/az.po b/data/levels/bonus4/az.po index e6c0e5df6bb..c9400ef4104 100644 --- a/data/levels/bonus4/az.po +++ b/data/levels/bonus4/az.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , YEAR. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Azerbaijani (https://app.transifex.com/arctic-games/teams/95/az/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/ca.po b/data/levels/bonus4/ca.po index 2c2a05c9635..2329233f5bb 100644 --- a/data/levels/bonus4/ca.po +++ b/data/levels/bonus4/ca.po @@ -5,7 +5,7 @@ # # Translators: # Yael Codesal, 2019 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Catalan (https://app.transifex.com/arctic-games/teams/95/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/el.po b/data/levels/bonus4/el.po index 36fe8d8d7b8..3ce69f6e117 100644 --- a/data/levels/bonus4/el.po +++ b/data/levels/bonus4/el.po @@ -7,7 +7,7 @@ # Vangelis Nomikos , 2019 # I will not tell you that , 2019 # Vangelis Skarmoutsos (SkarmoutsosV) , 2019 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -16,7 +16,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Greek (https://app.transifex.com/arctic-games/teams/95/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/eo.po b/data/levels/bonus4/eo.po index d6516085e7b..1fff866ced1 100644 --- a/data/levels/bonus4/eo.po +++ b/data/levels/bonus4/eo.po @@ -5,7 +5,7 @@ # # Translators: # tellovishous , 2021 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Esperanto (https://app.transifex.com/arctic-games/teams/95/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/et.po b/data/levels/bonus4/et.po index 00ab61f91b4..54a3d4ea79b 100644 --- a/data/levels/bonus4/et.po +++ b/data/levels/bonus4/et.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , YEAR. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Estonian (https://app.transifex.com/arctic-games/teams/95/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/fr_CA.po b/data/levels/bonus4/fr_CA.po index babd64941dd..275fb420411 100644 --- a/data/levels/bonus4/fr_CA.po +++ b/data/levels/bonus4/fr_CA.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , YEAR. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: French (Canada) (https://app.transifex.com/arctic-games/teams/95/fr_CA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/he.po b/data/levels/bonus4/he.po index bf0f8381af6..97a5cc96b61 100644 --- a/data/levels/bonus4/he.po +++ b/data/levels/bonus4/he.po @@ -5,7 +5,7 @@ # # Translators: # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2020 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Hebrew (https://app.transifex.com/arctic-games/teams/95/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/hr.po b/data/levels/bonus4/hr.po index 17dae55b4d7..ff10d52c605 100644 --- a/data/levels/bonus4/hr.po +++ b/data/levels/bonus4/hr.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , YEAR. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Croatian (https://app.transifex.com/arctic-games/teams/95/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/hy.po b/data/levels/bonus4/hy.po index 2ea3c752733..a8933189930 100644 --- a/data/levels/bonus4/hy.po +++ b/data/levels/bonus4/hy.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , YEAR. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Armenian (https://app.transifex.com/arctic-games/teams/95/hy/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/id.po b/data/levels/bonus4/id.po index 5a7ba33eb8c..dbb6140df62 100644 --- a/data/levels/bonus4/id.po +++ b/data/levels/bonus4/id.po @@ -5,7 +5,7 @@ # # Translators: # Chris , 2019 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Indonesian (https://app.transifex.com/arctic-games/teams/95/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/is.po b/data/levels/bonus4/is.po index ac374495cfc..0a4605c9ecb 100644 --- a/data/levels/bonus4/is.po +++ b/data/levels/bonus4/is.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , YEAR. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Icelandic (https://app.transifex.com/arctic-games/teams/95/is/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/nb.po b/data/levels/bonus4/nb.po index d6786ccf4fc..2fc7ee3b0d6 100644 --- a/data/levels/bonus4/nb.po +++ b/data/levels/bonus4/nb.po @@ -5,7 +5,7 @@ # # Translators: # Karl Ove Hufthammer , 2019 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Norwegian Bokmål (https://app.transifex.com/arctic-games/teams/95/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/sk.po b/data/levels/bonus4/sk.po index 57938ae26b9..117449ecc90 100644 --- a/data/levels/bonus4/sk.po +++ b/data/levels/bonus4/sk.po @@ -5,7 +5,7 @@ # # Translators: # Roman 'Kaktuxista' Benji , 2019 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Slovak (https://app.transifex.com/arctic-games/teams/95/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/sq.po b/data/levels/bonus4/sq.po index 167f88fed5e..6fe9b6a000b 100644 --- a/data/levels/bonus4/sq.po +++ b/data/levels/bonus4/sq.po @@ -5,7 +5,7 @@ # # Translators: # Indrit Bashkimi , 2019 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Albanian (https://app.transifex.com/arctic-games/teams/95/sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/tt.po b/data/levels/bonus4/tt.po index 203e7c812b1..db3c61726f5 100644 --- a/data/levels/bonus4/tt.po +++ b/data/levels/bonus4/tt.po @@ -6,7 +6,7 @@ # Translators: # Булат Ибраһим , 2019 # Timur Seber , 2021 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -15,7 +15,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Tatar (https://app.transifex.com/arctic-games/teams/95/tt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/uk.po b/data/levels/bonus4/uk.po index e15c02c74ea..ae59e051ef7 100644 --- a/data/levels/bonus4/uk.po +++ b/data/levels/bonus4/uk.po @@ -5,7 +5,7 @@ # # Translators: # Max Lyashuk , 2019 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Ukrainian (https://app.transifex.com/arctic-games/teams/95/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/bonus4/uz.po b/data/levels/bonus4/uz.po index 7717b95b60d..c6a6dbe7a27 100644 --- a/data/levels/bonus4/uz.po +++ b/data/levels/bonus4/uz.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , YEAR. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:58+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Uzbek (https://app.transifex.com/arctic-games/teams/95/uz/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/ar.po b/data/levels/community2016/ar.po index 2d358c4d890..37d50b1e016 100644 --- a/data/levels/community2016/ar.po +++ b/data/levels/community2016/ar.po @@ -5,7 +5,7 @@ # # Translators: # Israa Zamzami, 2019 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Arabic (https://app.transifex.com/arctic-games/teams/95/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/az.po b/data/levels/community2016/az.po index e4951f93632..e5a49964ddc 100644 --- a/data/levels/community2016/az.po +++ b/data/levels/community2016/az.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , YEAR. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Azerbaijani (https://app.transifex.com/arctic-games/teams/95/az/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/ca.po b/data/levels/community2016/ca.po index d61195626bd..1977ddfadc0 100644 --- a/data/levels/community2016/ca.po +++ b/data/levels/community2016/ca.po @@ -5,7 +5,7 @@ # # Translators: # Alícia Folgarona , 2019 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Catalan (https://app.transifex.com/arctic-games/teams/95/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/el.po b/data/levels/community2016/el.po index 08b55243860..1d59210883e 100644 --- a/data/levels/community2016/el.po +++ b/data/levels/community2016/el.po @@ -5,7 +5,7 @@ # # Translators: # Vangelis Nomikos , 2019 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Greek (https://app.transifex.com/arctic-games/teams/95/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/eo.po b/data/levels/community2016/eo.po index b113dd75c30..4b8a6a555df 100644 --- a/data/levels/community2016/eo.po +++ b/data/levels/community2016/eo.po @@ -5,7 +5,7 @@ # # Translators: # vpzomtrrfrt , 2020 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Esperanto (https://app.transifex.com/arctic-games/teams/95/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/et.po b/data/levels/community2016/et.po index 6a4454df97a..49123363130 100644 --- a/data/levels/community2016/et.po +++ b/data/levels/community2016/et.po @@ -5,7 +5,7 @@ # # Translators: # Günter Kits , 2019 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Estonian (https://app.transifex.com/arctic-games/teams/95/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/fr_CA.po b/data/levels/community2016/fr_CA.po index b0e882722ef..66c63ebc1e0 100644 --- a/data/levels/community2016/fr_CA.po +++ b/data/levels/community2016/fr_CA.po @@ -5,7 +5,7 @@ # # Translators: # Jean-Philippe L'Étoile , 2019 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: French (Canada) (https://app.transifex.com/arctic-games/teams/95/fr_CA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/he.po b/data/levels/community2016/he.po index 8048600b5b5..a7c94554c09 100644 --- a/data/levels/community2016/he.po +++ b/data/levels/community2016/he.po @@ -6,7 +6,7 @@ # Translators: # gk , 2019 # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2021 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -15,7 +15,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Hebrew (https://app.transifex.com/arctic-games/teams/95/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/hr.po b/data/levels/community2016/hr.po index 81558ba82cb..952061c7941 100644 --- a/data/levels/community2016/hr.po +++ b/data/levels/community2016/hr.po @@ -5,7 +5,7 @@ # # Translators: # Ilija Ćulap , 2019 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Croatian (https://app.transifex.com/arctic-games/teams/95/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/hy.po b/data/levels/community2016/hy.po index 6da42d46a92..3409ff614a1 100644 --- a/data/levels/community2016/hy.po +++ b/data/levels/community2016/hy.po @@ -5,7 +5,7 @@ # # Translators: # Grant Davtjan, 2019 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Armenian (https://app.transifex.com/arctic-games/teams/95/hy/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/id.po b/data/levels/community2016/id.po index ecd7c273f87..a16cabed6f0 100644 --- a/data/levels/community2016/id.po +++ b/data/levels/community2016/id.po @@ -5,7 +5,7 @@ # # Translators: # Chris , 2019 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Indonesian (https://app.transifex.com/arctic-games/teams/95/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/is.po b/data/levels/community2016/is.po index 51418df81f4..b4bed63e5bc 100644 --- a/data/levels/community2016/is.po +++ b/data/levels/community2016/is.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , YEAR. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Icelandic (https://app.transifex.com/arctic-games/teams/95/is/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/nb.po b/data/levels/community2016/nb.po index 3cab939275f..4dc7bf3d0af 100644 --- a/data/levels/community2016/nb.po +++ b/data/levels/community2016/nb.po @@ -5,7 +5,7 @@ # # Translators: # Benjamin Leduc , 2019 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Norwegian Bokmål (https://app.transifex.com/arctic-games/teams/95/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/ro.po b/data/levels/community2016/ro.po index ba03799a4cc..7a89121c48d 100644 --- a/data/levels/community2016/ro.po +++ b/data/levels/community2016/ro.po @@ -6,7 +6,7 @@ # Translators: # Nicolae Crefelean, 2019 # Laurențiu Matei, 2022 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -15,7 +15,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Romanian (https://app.transifex.com/arctic-games/teams/95/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/sk.po b/data/levels/community2016/sk.po index 6f1ee117321..096ff3f305b 100644 --- a/data/levels/community2016/sk.po +++ b/data/levels/community2016/sk.po @@ -5,7 +5,7 @@ # # Translators: # Jose Riha , 2021 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Slovak (https://app.transifex.com/arctic-games/teams/95/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/sq.po b/data/levels/community2016/sq.po index b1fcff0c277..06466c2f864 100644 --- a/data/levels/community2016/sq.po +++ b/data/levels/community2016/sq.po @@ -5,7 +5,7 @@ # # Translators: # Indrit Bashkimi , 2019 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Albanian (https://app.transifex.com/arctic-games/teams/95/sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/tt.po b/data/levels/community2016/tt.po index 1ed71c5d602..c85fa116525 100644 --- a/data/levels/community2016/tt.po +++ b/data/levels/community2016/tt.po @@ -5,7 +5,7 @@ # # Translators: # Булат Ибраһим , 2019 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Tatar (https://app.transifex.com/arctic-games/teams/95/tt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/uk.po b/data/levels/community2016/uk.po index 23ad7db18ec..889b483f1d2 100644 --- a/data/levels/community2016/uk.po +++ b/data/levels/community2016/uk.po @@ -5,7 +5,7 @@ # # Translators: # Max Lyashuk , 2019 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # #, fuzzy msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Ukrainian (https://app.transifex.com/arctic-games/teams/95/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/community2016/uz.po b/data/levels/community2016/uz.po index 3c78eecaaf8..b682a009089 100644 --- a/data/levels/community2016/uz.po +++ b/data/levels/community2016/uz.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , YEAR. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # #, fuzzy msgid "" @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Uzbek (https://app.transifex.com/arctic-games/teams/95/uz/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/halloween2014/ar.po b/data/levels/halloween2014/ar.po index 5bc42bae344..c8b15055ecc 100644 --- a/data/levels/halloween2014/ar.po +++ b/data/levels/halloween2014/ar.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2015-10-19 18:02+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Arabic (http://app.transifex.com/arctic-games/supertux/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/halloween2014/az.po b/data/levels/halloween2014/az.po index 1b62b407764..9ba5919de1a 100644 --- a/data/levels/halloween2014/az.po +++ b/data/levels/halloween2014/az.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2015-10-19 18:02+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Azerbaijani (http://app.transifex.com/arctic-games/supertux/language/az/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/halloween2014/eo.po b/data/levels/halloween2014/eo.po index 5fe108a3c8a..3497f75e8f1 100644 --- a/data/levels/halloween2014/eo.po +++ b/data/levels/halloween2014/eo.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # Robin van der Vliet , 2015 # Любомир Василев, 2016 msgid "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2015-10-19 18:02+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Esperanto (http://app.transifex.com/arctic-games/supertux/language/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/halloween2014/et.po b/data/levels/halloween2014/et.po index b0374b140dd..5ac278d2cbb 100644 --- a/data/levels/halloween2014/et.po +++ b/data/levels/halloween2014/et.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2015-10-19 18:02+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Estonian (http://app.transifex.com/arctic-games/supertux/language/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/halloween2014/fr_CA.po b/data/levels/halloween2014/fr_CA.po index 1f012ea1d3c..d57f3b0e9c3 100644 --- a/data/levels/halloween2014/fr_CA.po +++ b/data/levels/halloween2014/fr_CA.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2015-10-19 18:02+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: French (Canada) (http://app.transifex.com/arctic-games/supertux/language/fr_CA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/halloween2014/he.po b/data/levels/halloween2014/he.po index d96098a5fac..dcabe020b0e 100644 --- a/data/levels/halloween2014/he.po +++ b/data/levels/halloween2014/he.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2020 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2015-10-19 18:02+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Hebrew (http://app.transifex.com/arctic-games/supertux/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/halloween2014/hr.po b/data/levels/halloween2014/hr.po index a5399886f6e..bda1ec9a930 100644 --- a/data/levels/halloween2014/hr.po +++ b/data/levels/halloween2014/hr.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2015-10-19 18:02+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Croatian (http://app.transifex.com/arctic-games/supertux/language/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/halloween2014/hy.po b/data/levels/halloween2014/hy.po index 366c68a1144..d77063fded9 100644 --- a/data/levels/halloween2014/hy.po +++ b/data/levels/halloween2014/hy.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2015-10-19 18:02+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Armenian (http://app.transifex.com/arctic-games/supertux/language/hy/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/halloween2014/id.po b/data/levels/halloween2014/id.po index 89e4eafbfac..afe5772d990 100644 --- a/data/levels/halloween2014/id.po +++ b/data/levels/halloween2014/id.po @@ -4,14 +4,14 @@ # # Translators: # Chris , 2017 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2015-10-19 18:02+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Indonesian (http://app.transifex.com/arctic-games/supertux/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/halloween2014/is.po b/data/levels/halloween2014/is.po index 302a604745c..198942650ad 100644 --- a/data/levels/halloween2014/is.po +++ b/data/levels/halloween2014/is.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2015-10-19 18:02+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Icelandic (http://app.transifex.com/arctic-games/supertux/language/is/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/halloween2014/ro.po b/data/levels/halloween2014/ro.po index aeb76a66c9d..c8d5b416472 100644 --- a/data/levels/halloween2014/ro.po +++ b/data/levels/halloween2014/ro.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2015-10-19 18:02+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Romanian (http://app.transifex.com/arctic-games/supertux/language/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/halloween2014/sq.po b/data/levels/halloween2014/sq.po index 702ee95aaed..da57e192cd6 100644 --- a/data/levels/halloween2014/sq.po +++ b/data/levels/halloween2014/sq.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2015-10-19 18:02+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Albanian (http://app.transifex.com/arctic-games/supertux/language/sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/halloween2014/uz.po b/data/levels/halloween2014/uz.po index db9a7434382..94c6ad494b2 100644 --- a/data/levels/halloween2014/uz.po +++ b/data/levels/halloween2014/uz.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2015-10-19 18:02+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Uzbek (http://app.transifex.com/arctic-games/supertux/language/uz/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/ar.po b/data/levels/world1/ar.po index 50e819d31ab..3c67e18a0f2 100644 --- a/data/levels/world1/ar.po +++ b/data/levels/world1/ar.po @@ -4,7 +4,7 @@ # # Translators: # Fahad Al-Saidi , 2016 -# 111More1, 2022-2023 +# IAN RODRÍGUEZ Lorenzo, 2022-2023 # Israa Zamzami, 2018 # Hasan Nahleh , 2022 msgid "" @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2022-2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022-2023\n" "Language-Team: Arabic (http://app.transifex.com/arctic-games/supertux/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/az.po b/data/levels/world1/az.po index d3819137b48..5d62b0ee8e7 100644 --- a/data/levels/world1/az.po +++ b/data/levels/world1/az.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Azerbaijani (http://app.transifex.com/arctic-games/supertux/language/az/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/ca.po b/data/levels/world1/ca.po index 4384e29f570..321179b4956 100644 --- a/data/levels/world1/ca.po +++ b/data/levels/world1/ca.po @@ -5,7 +5,7 @@ # Translators: # Ariadna Pascual , 2016 # Catalanoic , 2016 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # 76352799d6904fac47e3a0fa3ed5fd59_334826e , 2014-2015 # Yael Codesal, 2016 msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Catalan (http://app.transifex.com/arctic-games/supertux/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/el.po b/data/levels/world1/el.po index f449986d612..5fd8436f3d3 100644 --- a/data/levels/world1/el.po +++ b/data/levels/world1/el.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # I will not tell you that , 2015 # Vangelis Nomikos , 2013-2014 # Vangelis Skarmoutsos (SkarmoutsosV) , 2016,2019 @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Greek (http://app.transifex.com/arctic-games/supertux/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/fr_CA.po b/data/levels/world1/fr_CA.po index bc5a3af4c3e..83655da374c 100644 --- a/data/levels/world1/fr_CA.po +++ b/data/levels/world1/fr_CA.po @@ -3,8 +3,8 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Jean-Philippe L'Étoile , 2018-2019 msgid "" msgstr "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: French (Canada) (http://app.transifex.com/arctic-games/supertux/language/fr_CA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/he.po b/data/levels/world1/he.po index e710c685277..9481a85ddac 100644 --- a/data/levels/world1/he.po +++ b/data/levels/world1/he.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2020-2022 # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2021 # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2020 @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Hebrew (http://app.transifex.com/arctic-games/supertux/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/hr.po b/data/levels/world1/hr.po index 478ee47e5c5..745ab8ebd52 100644 --- a/data/levels/world1/hr.po +++ b/data/levels/world1/hr.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Ilija Ćulap , 2013 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Croatian (http://app.transifex.com/arctic-games/supertux/language/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/hy.po b/data/levels/world1/hy.po index 458b7b1596b..b8738a06bc1 100644 --- a/data/levels/world1/hy.po +++ b/data/levels/world1/hy.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Armenian (http://app.transifex.com/arctic-games/supertux/language/hy/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/id.po b/data/levels/world1/id.po index 5db3c9c0604..1a2ab6bec4e 100644 --- a/data/levels/world1/id.po +++ b/data/levels/world1/id.po @@ -6,14 +6,14 @@ # Chris , 2022 # Chris , 2017 # Christian Elbrianno Yoga, 2017 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Indonesian (http://app.transifex.com/arctic-games/supertux/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/is.po b/data/levels/world1/is.po index 246d7a41d72..364155feff7 100644 --- a/data/levels/world1/is.po +++ b/data/levels/world1/is.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Icelandic (http://app.transifex.com/arctic-games/supertux/language/is/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/nb.po b/data/levels/world1/nb.po index 48b2935a04d..80c546e0d39 100644 --- a/data/levels/world1/nb.po +++ b/data/levels/world1/nb.po @@ -4,7 +4,7 @@ # # Translators: # Allan Nordhøy , 2016,2018 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Karl Ove Hufthammer , 2007,2013,2015-2016 msgid "" msgstr "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Norwegian Bokmål (http://app.transifex.com/arctic-games/supertux/language/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/ro.po b/data/levels/world1/ro.po index e7f0dc528ea..e60fdc81e1e 100644 --- a/data/levels/world1/ro.po +++ b/data/levels/world1/ro.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # Ioan Moldovan , 2019,2023 # Nicolae Crefelean, 2015-2016 # Razvan , 2007 diff --git a/data/levels/world1/sk.po b/data/levels/world1/sk.po index 514cf644f97..a16c6bb40f6 100644 --- a/data/levels/world1/sk.po +++ b/data/levels/world1/sk.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Jose Riha , 2021 # c79a840bffc1621596a73d9f7d995b66_5f97bea <821296eb068acbf38f8fe02d322f4248_155187>, 2014 # MiroslavR , 2015-2016 @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Slovak (http://app.transifex.com/arctic-games/supertux/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/sq.po b/data/levels/world1/sq.po index abb4c5c2a46..a7bc573aad4 100644 --- a/data/levels/world1/sq.po +++ b/data/levels/world1/sq.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Indrit Bashkimi , 2015-2016 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Albanian (http://app.transifex.com/arctic-games/supertux/language/sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/tr.po b/data/levels/world1/tr.po index 5126b32d6ff..64a7f9a2dc6 100644 --- a/data/levels/world1/tr.po +++ b/data/levels/world1/tr.po @@ -5,7 +5,7 @@ # Translators: # Alkım Kaçmaz , 2013 # mahmut özcan , 2015-2016 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Tan Siret Akıncı , 2021 # 9d4282795e87ad099e39d98812f1a822_ade2f01 , 2013-2014 # Yusuf Özsoy , 2013 @@ -15,7 +15,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Turkish (http://app.transifex.com/arctic-games/supertux/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/tt.po b/data/levels/world1/tt.po index 4c217d4c49b..fbfae8e9a1c 100644 --- a/data/levels/world1/tt.po +++ b/data/levels/world1/tt.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Булат Ибраһим , 2016 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Tatar (http://app.transifex.com/arctic-games/supertux/language/tt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world1/uk.po b/data/levels/world1/uk.po index e2d593b9287..917c8cb1668 100644 --- a/data/levels/world1/uk.po +++ b/data/levels/world1/uk.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Asemif official, 2023 # Benjamin Leduc , 2015 # Max Lyashuk , 2015-2016 diff --git a/data/levels/world1/uz.po b/data/levels/world1/uz.po index 54d787064b6..05eac7a866f 100644 --- a/data/levels/world1/uz.po +++ b/data/levels/world1/uz.po @@ -3,15 +3,15 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022-2023 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022-2023 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 22:58+0000\n" -"Last-Translator: 111More1, 2022-2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022-2023\n" "Language-Team: Uzbek (http://app.transifex.com/arctic-games/supertux/language/uz/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/ar.po b/data/levels/world2/ar.po index 55e0fbe0a1f..ed0c26ca355 100644 --- a/data/levels/world2/ar.po +++ b/data/levels/world2/ar.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022-2023 +# IAN RODRÍGUEZ Lorenzo, 2022-2023 # Israa Zamzami, 2018 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022-2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022-2023\n" "Language-Team: Arabic (http://app.transifex.com/arctic-games/supertux/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/az.po b/data/levels/world2/az.po index 8804d4334ed..a0158d497bd 100644 --- a/data/levels/world2/az.po +++ b/data/levels/world2/az.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Azerbaijani (http://app.transifex.com/arctic-games/supertux/language/az/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/ca.po b/data/levels/world2/ca.po index ae3ed84068b..291c367713a 100644 --- a/data/levels/world2/ca.po +++ b/data/levels/world2/ca.po @@ -5,7 +5,7 @@ # Translators: # Ariadna Pascual , 2016 # Catalanoic , 2016 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # 76352799d6904fac47e3a0fa3ed5fd59_334826e , 2014-2015 # Yael Codesal, 2016 msgid "" @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Catalan (http://app.transifex.com/arctic-games/supertux/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/el.po b/data/levels/world2/el.po index 5aaaefd98bf..a037712a03c 100644 --- a/data/levels/world2/el.po +++ b/data/levels/world2/el.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Vangelis Nomikos , 2013-2014 # Vangelis Skarmoutsos (SkarmoutsosV) , 2016,2019 msgid "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Greek (http://app.transifex.com/arctic-games/supertux/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/et.po b/data/levels/world2/et.po index 94df704a29a..53e8b71921f 100644 --- a/data/levels/world2/et.po +++ b/data/levels/world2/et.po @@ -3,8 +3,8 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2022 +# IAN RODRÍGUEZ Lorenzo, 2023 # Urmas Kvell, 2020,2022 # Urmas Kvell, 2020 msgid "" @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Estonian (http://app.transifex.com/arctic-games/supertux/language/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/eu.po b/data/levels/world2/eu.po index 12337abccb6..9dd2ddf599c 100644 --- a/data/levels/world2/eu.po +++ b/data/levels/world2/eu.po @@ -4,7 +4,7 @@ # # Translators: # Bingen Galartza Iparragirre , 2017 -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # Mielanjel Iraeta , 2018-2020 # Urtzi Odriozola , 2017 msgid "" @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Basque (http://app.transifex.com/arctic-games/supertux/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/fr_CA.po b/data/levels/world2/fr_CA.po index bdf4e48ed6f..fa014627be0 100644 --- a/data/levels/world2/fr_CA.po +++ b/data/levels/world2/fr_CA.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: French (Canada) (http://app.transifex.com/arctic-games/supertux/language/fr_CA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/he.po b/data/levels/world2/he.po index eac7e77bf0c..51bf724b097 100644 --- a/data/levels/world2/he.po +++ b/data/levels/world2/he.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2020-2021 # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2021 # 63f334ffc0709ba0fc2361b80bf3c0f0_00ffd1e , 2020 @@ -13,7 +13,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Hebrew (http://app.transifex.com/arctic-games/supertux/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/hr.po b/data/levels/world2/hr.po index d55613af7a5..cb4aaa7456b 100644 --- a/data/levels/world2/hr.po +++ b/data/levels/world2/hr.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Croatian (http://app.transifex.com/arctic-games/supertux/language/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/hu.po b/data/levels/world2/hu.po index 7a964962fd9..9bc937ce554 100644 --- a/data/levels/world2/hu.po +++ b/data/levels/world2/hu.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Balázs Úr, 2018 # Levente Krisztián Büte , 2014 # D. J. S. , 2012 @@ -21,7 +21,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Hungarian (http://app.transifex.com/arctic-games/supertux/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/hy.po b/data/levels/world2/hy.po index 8ad005dbc76..65675cb8729 100644 --- a/data/levels/world2/hy.po +++ b/data/levels/world2/hy.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Armenian (http://app.transifex.com/arctic-games/supertux/language/hy/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/is.po b/data/levels/world2/is.po index 525eb7690c9..29fccc0ba23 100644 --- a/data/levels/world2/is.po +++ b/data/levels/world2/is.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Icelandic (http://app.transifex.com/arctic-games/supertux/language/is/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/ja.po b/data/levels/world2/ja.po index 917c959d5f1..ea9908d6a1e 100644 --- a/data/levels/world2/ja.po +++ b/data/levels/world2/ja.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # 515ce455fbf38ec9585626e8d26b6324_7a9a6ef, 2017 # Ryo Nakano, 2019-2021 # b1e11c107ebf1f339ff7adfc86b9dbe0_2e3e89d, 2016 @@ -16,7 +16,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Japanese (http://app.transifex.com/arctic-games/supertux/language/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/ko.po b/data/levels/world2/ko.po index 5fb5f15f063..92a90e3c7e4 100644 --- a/data/levels/world2/ko.po +++ b/data/levels/world2/ko.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Junghee Lee , 2022 # Junghee Lee , 2022 # Myeongjin , 2016-2017,2019,2021 @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Korean (http://app.transifex.com/arctic-games/supertux/language/ko/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/nb.po b/data/levels/world2/nb.po index bf263144a7a..cf946157206 100644 --- a/data/levels/world2/nb.po +++ b/data/levels/world2/nb.po @@ -4,7 +4,7 @@ # # Translators: # Allan Nordhøy , 2016,2018 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Karl Ove Hufthammer , 2007,2013,2015-2016 msgid "" msgstr "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Norwegian Bokmål (http://app.transifex.com/arctic-games/supertux/language/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/nn.po b/data/levels/world2/nn.po index 3e6c63712d1..b6658b8fae5 100644 --- a/data/levels/world2/nn.po +++ b/data/levels/world2/nn.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Karl Ove Hufthammer , 2006-2007,2013-2016,2018-2020 # Karl Ove Hufthammer , 2015 msgid "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Norwegian Nynorsk (http://app.transifex.com/arctic-games/supertux/language/nn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/ro.po b/data/levels/world2/ro.po index b037ff2f704..8f96b6a712e 100644 --- a/data/levels/world2/ro.po +++ b/data/levels/world2/ro.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # Nicolae Crefelean, 2015-2016 # Razvan , 2007 msgid "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Romanian (http://app.transifex.com/arctic-games/supertux/language/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/sk.po b/data/levels/world2/sk.po index dcc9affdc2d..fe23836849e 100644 --- a/data/levels/world2/sk.po +++ b/data/levels/world2/sk.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Jose Riha , 2021 # c79a840bffc1621596a73d9f7d995b66_5f97bea <821296eb068acbf38f8fe02d322f4248_155187>, 2014 # MiroslavR , 2016 @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Slovak (http://app.transifex.com/arctic-games/supertux/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/sq.po b/data/levels/world2/sq.po index 55c602c28e4..5b547c72ffc 100644 --- a/data/levels/world2/sq.po +++ b/data/levels/world2/sq.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Indrit Bashkimi , 2015 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Albanian (http://app.transifex.com/arctic-games/supertux/language/sq/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/tr.po b/data/levels/world2/tr.po index 85928abdb09..2dfea0422cc 100644 --- a/data/levels/world2/tr.po +++ b/data/levels/world2/tr.po @@ -4,7 +4,7 @@ # # Translators: # Alkım Kaçmaz , 2013 -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # mahmut özcan , 2020 # 9d4282795e87ad099e39d98812f1a822_ade2f01 , 2013 # Yusuf Özsoy , 2013 @@ -14,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Turkish (http://app.transifex.com/arctic-games/supertux/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/tt.po b/data/levels/world2/tt.po index 1be246124c0..d77c30b61c6 100644 --- a/data/levels/world2/tt.po +++ b/data/levels/world2/tt.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Булат Ибраһим , 2016 msgid "" msgstr "" @@ -11,7 +11,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Tatar (http://app.transifex.com/arctic-games/supertux/language/tt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/uk.po b/data/levels/world2/uk.po index 191c87263ab..f45f1b4c847 100644 --- a/data/levels/world2/uk.po +++ b/data/levels/world2/uk.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2022 +# IAN RODRÍGUEZ Lorenzo, 2022 # Max Lyashuk , 2015-2016 # Olexandr Nesterenko , 2019 msgid "" @@ -12,7 +12,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2022\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2022\n" "Language-Team: Ukrainian (http://app.transifex.com/arctic-games/supertux/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/levels/world2/uz.po b/data/levels/world2/uz.po index 5d340e0a9fd..a518d063542 100644 --- a/data/levels/world2/uz.po +++ b/data/levels/world2/uz.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 msgid "" msgstr "" "Project-Id-Version: SuperTux\n" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-03-03 03:26+0100\n" "PO-Revision-Date: 2013-08-10 23:00+0000\n" -"Last-Translator: 111More1, 2023\n" +"Last-Translator: IAN RODRÍGUEZ Lorenzo, 2023\n" "Language-Team: Uzbek (http://app.transifex.com/arctic-games/supertux/language/uz/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/data/locale/bg.po b/data/locale/bg.po index 7e76e5548b6..d24358bcf01 100644 --- a/data/locale/bg.po +++ b/data/locale/bg.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the SuperTux package. # # Translators: -# 111More1, 2023 +# IAN RODRÍGUEZ Lorenzo, 2023 # Любомир Василев, 2015-2016 # Tony Ivanov , 2014 # Любомир Василев, 2016,2018-2020 From edb4a9ccd9102e52d4b9607c7023c6b14e624923 Mon Sep 17 00:00:00 2001 From: Vankata453 <78196474+Vankata453@users.noreply.github.com> Date: Sun, 14 Jul 2024 15:41:45 +0300 Subject: [PATCH 14/33] SimpleSquirrel: Fix error converting Squirrel array to `std::vector` --- external/simplesquirrel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/simplesquirrel b/external/simplesquirrel index e7eab2d6203..c7a7259903b 160000 --- a/external/simplesquirrel +++ b/external/simplesquirrel @@ -1 +1 @@ -Subproject commit e7eab2d62035d933022ac1a15272c00951a7385b +Subproject commit c7a7259903b920eacf8c37c5382a386381cfbab9 From c9255d99bd6d3a5e1b58358169ee9d0193b5061d Mon Sep 17 00:00:00 2001 From: Vankata453 <78196474+Vankata453@users.noreply.github.com> Date: Sun, 14 Jul 2024 21:37:19 +0300 Subject: [PATCH 15/33] SimpleSquirrel: Call `Array::convert()` from `Array::convertRaw()` Eliminates some code duplication. [ci skip] --- external/simplesquirrel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/simplesquirrel b/external/simplesquirrel index c7a7259903b..801de40151c 160000 --- a/external/simplesquirrel +++ b/external/simplesquirrel @@ -1 +1 @@ -Subproject commit c7a7259903b920eacf8c37c5382a386381cfbab9 +Subproject commit 801de40151ca978b8554a9e590b01c398b7417c0 From 60f5cb36d88aa2fc90eca7bf2cfc4c332fe2e0e7 Mon Sep 17 00:00:00 2001 From: SuperTux Bot Date: Mon, 15 Jul 2024 01:40:05 +0000 Subject: [PATCH 16/33] Update translations --- data/locale/de.po | 87 ++++++++++++++++++++------------------- data/locale/pt_BR.po | 98 ++++++++++++++++++++++---------------------- 2 files changed, 93 insertions(+), 92 deletions(-) diff --git a/data/locale/de.po b/data/locale/de.po index 692c26d8c0d..6cfa8b3f9e1 100644 --- a/data/locale/de.po +++ b/data/locale/de.po @@ -15,6 +15,7 @@ # Larson März , 2016 # Marcel Haring , 2013-2014 # Matthias Braun , 2004 +# Moritz Hofmann , 2024 # mteufel, 2018 # mteufel, 2018 # Sless , 2014 @@ -29,7 +30,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-05-30 16:19+0200\n" "PO-Revision-Date: 2013-08-10 22:56+0000\n" -"Last-Translator: Iwan Gabovitch, 2024\n" +"Last-Translator: Moritz Hofmann , 2024\n" "Language-Team: German (http://app.transifex.com/arctic-games/supertux/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1666,7 +1667,7 @@ msgid "" "Do you wish to clone the path to edit it separately,\n" "or do you want to bind both paths together\n" "so that any edit on one edits the other?" -msgstr "" +msgstr "Möchtest du den Pfad klonen, um ihn separat zu bearbeiten,\noder möchtest du beide Pfade miteinander verbinden\nso dass jede Bearbeitung des einen Pfads auch den anderen Pfad bearbeitet?" #: src/gui/menu_paths.cpp:56 #, c++-format @@ -1781,7 +1782,7 @@ msgstr "Pflanze" #: src/badguy/tarantula.hpp:39 src/badguy/tarantula.cpp:353 msgid "Tarantula" -msgstr "" +msgstr "Vogelspinne" #: src/badguy/granito_giant.cpp:71 msgid "Awake" @@ -1863,7 +1864,7 @@ msgstr "" #: src/badguy/dive_mine.hpp:50 msgid "Dive Mine" -msgstr "" +msgstr "Tauchergrube" #: src/badguy/granito_big.hpp:33 msgid "Big Granito" @@ -1871,7 +1872,7 @@ msgstr "" #: src/badguy/mriceblock.hpp:49 msgid "Mr. Iceblock" -msgstr "" +msgstr "Mr. Eisblock" #: src/badguy/granito.hpp:39 src/badguy/darttrap.cpp:163 #: src/badguy/corrupted_granito.cpp:175 src/badguy/dispenser.cpp:438 @@ -2031,7 +2032,7 @@ msgstr "Korrupter Granito" #: src/badguy/mrbomb.cpp:48 msgid "Classic" -msgstr "" +msgstr "Klassisch" #: src/badguy/flyingsnowball.hpp:33 msgid "Flying Snowball" @@ -2067,7 +2068,7 @@ msgstr "Seitwärts" #: src/badguy/kamikazesnowball.hpp:34 msgid "Kamikaze Snowball" -msgstr "" +msgstr "Kamikaze Schneeball" #: src/badguy/kamikazesnowball.hpp:64 msgid "Leafshot" @@ -2123,7 +2124,7 @@ msgstr "Laufendes Blatt" #: src/badguy/root.hpp:39 msgid "Root" -msgstr "" +msgstr "Wurzel" #: src/badguy/owl.cpp:241 msgid "Carry" @@ -2143,7 +2144,7 @@ msgstr "Yeti" #: src/badguy/snowball.cpp:41 msgid "Bumpkin" -msgstr "" +msgstr "Tölpel" #: src/badguy/snowball.cpp:42 msgid "BSOD" @@ -2171,11 +2172,11 @@ msgstr "Wütender Stein" #: src/badguy/tarantula.cpp:354 msgid "Spidermite" -msgstr "" +msgstr "Spinne" #: src/badguy/tarantula.cpp:374 msgid "Static" -msgstr "" +msgstr "Statisch" #: src/badguy/ghoul.hpp:30 msgid "Ghoul" @@ -2183,7 +2184,7 @@ msgstr "Ghul" #: src/badguy/granito_giant.hpp:32 msgid "Giant Granito" -msgstr "" +msgstr "Riesiger Granito" #: src/badguy/snowman.hpp:29 msgid "Snowman" @@ -2191,7 +2192,7 @@ msgstr "Schneemann" #: src/badguy/viciousivy.hpp:33 msgid "Vicious Ivy" -msgstr "" +msgstr "Tückischer Efeu" #: src/badguy/stalactite.cpp:156 msgid "ice" @@ -2237,7 +2238,7 @@ msgstr "Maximale Anzahl gleichzeitiger Gegner" #: src/badguy/dispenser.cpp:435 msgid "Dropper" -msgstr "" +msgstr "Pipette" #: src/badguy/dispenser.cpp:436 msgid "Cannon" @@ -2265,11 +2266,11 @@ msgstr "Standard" #: src/badguy/granito_big.cpp:53 src/badguy/granito.cpp:264 msgid "Standing" -msgstr "" +msgstr "Stehend" #: src/badguy/granito_big.cpp:54 src/badguy/granito.cpp:265 msgid "Walking" -msgstr "" +msgstr "Laufend" #: src/badguy/mriceblock.cpp:63 msgid "Laptop" @@ -2281,7 +2282,7 @@ msgstr "Dart" #: src/badguy/granito.cpp:268 msgid "Sitting" -msgstr "" +msgstr "Sitzend" #: src/supertux/statistics.cpp:54 msgid "Max coins collected:" @@ -3291,7 +3292,7 @@ msgstr "Einige Informationen über dieses Add-on sind nicht verfügbar." #: src/supertux/menu/addon_preview_menu.cpp:88 msgid "Perform a \"Check Online\" to try retrieving it." -msgstr "" +msgstr "Führe eine \"Online-Prüfung\" durch, um zu versuchen, sie abzurufen." #: src/supertux/menu/addon_preview_menu.cpp:92 msgid "No author specified." @@ -4182,11 +4183,11 @@ msgstr "Kachel-Hilfsmodus aktivieren" #: src/supertux/menu/editor_menu.cpp:97 msgid "Enable Object Undo Tracking" -msgstr "" +msgstr "Objekt-Rückgängig-Verfolgung einschalten" #: src/supertux/menu/editor_menu.cpp:100 msgid "Undo Stack Size" -msgstr "" +msgstr "Stapelgröße rückgängig machen" #: src/supertux/menu/editor_menu.cpp:102 msgid "Autosave Frequency" @@ -4256,7 +4257,7 @@ msgid "" "Ctrl+D = Duplicate line\n" "Ctrl+Z = Undo\n" "Ctrl+Y = Redo" -msgstr "" +msgstr "Tastaturabkürzungen:\n---------------------\nEsc = Menü öffnen\nStrg+S = Speichern\nStrg+T = Testen\nStrg+Z = Rückgängig\nStrg+Y = Wiederholen\nF6 = Licht rendern\nF7 = Raster fangen\nF8 = Raster anzeigen\nStrg++ oder Strg+Scroll Up = Vergrößern\nStrg+- oder Strg+Scroll Down = Herauszoomen\nStrg+D = Zoom zurücksetzen\n\nSkripting-Kurzbefehle:\n------------- \nHome = Zum Anfang der Zeile gehen\nEnde = Zum Ende der Zeile gehen\nPfeil nach links = Im Text zurückgehen\nPfeil nach rechts = Im Text vorwärts gehen\nBackspace = Löschen vor dem Textcursor\nLöschen = Löschen hinter dem Textcursor\nStrg+X = Ganze Zeile ausschneiden\nStrg+C = Ganze Zeile kopieren\nStrg+V = Einfügen\nStrg+D = Zeile duplizieren\nStrg+Z = Rückgängig\nStrg+Y = Wiederholen" #: src/supertux/menu/editor_menu.cpp:232 msgid "Deprecated tiles are still present in the level." @@ -4280,11 +4281,11 @@ msgstr "Spieler entfernen" #: src/supertux/menu/multiplayer_player_menu.cpp:82 msgid "Respawn Player" -msgstr "" +msgstr "Spieler respawnen" #: src/supertux/menu/multiplayer_player_menu.cpp:108 msgid "Spawn Player" -msgstr "" +msgstr "Spieler spawnen" #: src/supertux/menu/multiplayer_player_menu.cpp:136 msgid "Controllers" @@ -4400,7 +4401,7 @@ msgstr "Bei Berührung verändern" #: src/worldmap/special_tile.hpp:36 msgid "Special Tile" -msgstr "" +msgstr "Spezielle Kacheln" #: src/worldmap/level_tile.hpp:36 src/worldmap/level_tile.cpp:161 msgid "Level" @@ -4446,7 +4447,7 @@ msgstr "Teleporter" msgid "" "This object's current functionality is deprecated.\n" "Updating to get its latest functionality is recommended." -msgstr "" +msgstr "Die aktuelle Funktionalität dieses Objekts ist veraltet.\nEs wird empfohlen, es zu aktualisieren, um seine neuesten Funktionen zu erhalten." #: src/editor/node_marker.cpp:122 msgid "Path Node" @@ -4507,19 +4508,19 @@ msgstr "ungültig" #: src/editor/object_option.cpp:665 msgid "Scale X" -msgstr "" +msgstr "X Skalierung" #: src/editor/object_option.cpp:666 msgid "Scale Y" -msgstr "" +msgstr "Y Versatz" #: src/editor/object_option.cpp:667 msgid "Offset X" -msgstr "" +msgstr "X Versatz" #: src/editor/object_option.cpp:668 msgid "Offset Y" -msgstr "" +msgstr "Y Versatz" #: src/editor/object_option.cpp:672 src/editor/object_menu.cpp:67 msgid "Remove" @@ -4619,7 +4620,7 @@ msgstr "Außerhalb-des-Bildschirm-Modus" #: src/editor/particle_editor.cpp:229 msgid "Clear" -msgstr "" +msgstr "Leeren" #: src/editor/particle_editor.cpp:245 msgid "<- General settings" @@ -4627,7 +4628,7 @@ msgstr "<- Allgemeine Einstellungen" #: src/editor/particle_editor.cpp:255 msgid "Likeliness" -msgstr "" +msgstr "Ähnlichkeit" #: src/editor/particle_editor.cpp:266 msgid "Color (RGBA)" @@ -4635,15 +4636,15 @@ msgstr "Farbe (RGBA)" #: src/editor/particle_editor.cpp:311 msgid "Scale (x, y)" -msgstr "" +msgstr "Skalierung (x, y)" #: src/editor/particle_editor.cpp:332 msgid "Hitbox scale (x, y)" -msgstr "" +msgstr "Hitbox Skalierung (x, y)" #: src/editor/particle_editor.cpp:353 msgid "Hitbox offset relative to scale" -msgstr "" +msgstr "Hitbox-Versatz relativ zur Skalierung" #: src/editor/particle_editor.cpp:372 msgid "Change texture..." @@ -4664,11 +4665,11 @@ msgid "" "This level contains deprecated tiles.\n" "It is strongly recommended to replace all deprecated tiles\n" "to avoid loss of compatibility in future versions." -msgstr "" +msgstr "Dieses Level enthält veraltete Kacheln.\nEs wird dringend empfohlen, alle veralteten Kacheln zu ersetzen, um Kompatibilitätsverluste in zukünftigen Versionen zu vermeiden." #: src/editor/editor.cpp:579 msgid "Tip: Turn on \"Show Deprecated Tiles\" from the level editor menu." -msgstr "" +msgstr "Tipp: Aktiviere die Option \"Veraltete Kacheln anzeigen\" im Menü des Leveleditors." #: src/editor/editor.cpp:626 msgid "" @@ -4684,7 +4685,7 @@ msgstr "Dieser Level enthält nicht gespeicherte Änderungen, möchtest du speic #: src/editor/editor.cpp:662 msgid "This level may contain unsaved changes, do you want to save?" -msgstr "" +msgstr "Dieses Level enthält möglicherweise ungespeicherte Änderungen. Möchtest du das Level speichern?" #: src/editor/editor.cpp:797 msgid "" @@ -4722,7 +4723,7 @@ msgstr "Konnte den »main«-Spawnpoint nicht finden.\nBitte ändere den Namen de #: src/editor/object_menu.cpp:60 msgid "Patch Notes" -msgstr "" +msgstr "Änderungsnotizen" #: src/editor/object_menu.cpp:84 msgid "" @@ -4731,7 +4732,7 @@ msgid "" "\n" "Keep in mind this is very likely to break the proper behaviour of the object.\n" "Make sure to re-check any behaviour, related to the object." -msgstr "" +msgstr "Dadurch wird das Objekt auf die neuesten Funktionen aktualisiert.\nIn den Änderungsnotizen finden Sie weitere Informationen.\n\nDenke daran, dass dies sehr wahrscheinlich das korrekte Verhalten des Objekts beeinträchtigt.\nStelle sicher, dass Sie das Verhalten des Objekts erneut überprüfen." #: src/editor/object_menu.cpp:98 #, c++-format @@ -5166,16 +5167,16 @@ msgstr "Dunklerer Wald" #: data//images/converters/data.stcd:3 msgid "Nightly Tiles" -msgstr "" +msgstr "Nächtliche Kacheln" #: data//images/converters/data.stcd:5 msgid "For levels, created in previous Nightly builds." -msgstr "" +msgstr "Für Level, die in früheren Nightly-Builds erstellt wurden." #: data//images/converters/data.stcd:8 msgid "Pre-0.6.3 Crystal Tiles" -msgstr "" +msgstr "Vor-0.6.3 Kristallkacheln" #: data//images/converters/data.stcd:10 msgid "For levels, created in pre-0.6.3 versions, which use crystal tiles." -msgstr "" +msgstr "Für Levels, die in Versionen vor pre-0.6.3 erstellt wurden, die Kristallkacheln verwenden." diff --git a/data/locale/pt_BR.po b/data/locale/pt_BR.po index f3a02e44603..ac9c59b04f6 100644 --- a/data/locale/pt_BR.po +++ b/data/locale/pt_BR.po @@ -24,7 +24,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-05-30 16:19+0200\n" "PO-Revision-Date: 2013-08-10 22:56+0000\n" -"Last-Translator: Jesusaves , 2021,2024\n" +"Last-Translator: Fúlvio Alves , 2020-2021,2023-2024\n" "Language-Team: Portuguese (Brazil) (http://app.transifex.com/arctic-games/supertux/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -47,7 +47,7 @@ msgstr "Nome" #: src/trigger/secretarea_trigger.cpp:56 msgid "Fade tilemap" -msgstr "Esmaecer mapa de telas" +msgstr "Esmaecer mapa de blocos" #: src/trigger/secretarea_trigger.cpp:57 src/trigger/climbable.cpp:59 #: src/object/infoblock.cpp:76 src/worldmap/teleporter.cpp:49 @@ -162,7 +162,7 @@ msgstr "Novo ponto de partida do mapa mundi" #: src/trigger/sequence_trigger.cpp:54 msgid "Worldmap fade tilemap" -msgstr "Esmaecer mapa de telas do mapa-múndi" +msgstr "Esmaecer mapa de blocos do mapa-múndi" #: src/trigger/sequence_trigger.cpp:55 #: src/object/custom_particle_system.cpp:430 @@ -283,7 +283,7 @@ msgstr "Gradiente" #: src/object/tilemap.hpp:58 msgid "Tilemap" -msgstr "Mapa de Pisos" +msgstr "Mapa de Blocos" #: src/object/sound_object.cpp:69 src/object/ambient_sound.cpp:85 #: src/object/sound_object.hpp:42 src/supertux/menu/options_menu.cpp:128 @@ -1441,7 +1441,7 @@ msgstr "Matiz" #: src/object/tilemap.cpp:296 src/supertux/menu/editor_tilegroup_menu.cpp:26 #: src/editor/toolbox_widget.cpp:98 msgid "Tiles" -msgstr "Pisos" +msgstr "Blocos" #: src/object/gradient.cpp:98 msgid "Primary Colour" @@ -1830,7 +1830,7 @@ msgstr "Velocidade de Perseguição" #: src/badguy/root_sapling.hpp:41 msgid "Root Sapling" -msgstr "" +msgstr "Muda de raiz" #: src/badguy/haywire.hpp:46 msgid "Haywire" @@ -1854,11 +1854,11 @@ msgstr "Abóbora" #: src/badguy/bouncing_snowball.cpp:82 msgid "Fatbat" -msgstr "" +msgstr "Morcego gordo" #: src/badguy/dive_mine.hpp:50 msgid "Dive Mine" -msgstr "" +msgstr "Mina de mergulho" #: src/badguy/granito_big.hpp:33 msgid "Big Granito" @@ -1910,7 +1910,7 @@ msgstr "Raio de Despertar" #: src/badguy/scrystallo.cpp:59 msgid "Roof-attached" -msgstr "" +msgstr "Fixado no teto" #: src/badguy/jumpy.hpp:40 msgid "Jumpy" @@ -2042,11 +2042,11 @@ msgstr "Gelo (grande)" #: src/badguy/crusher.cpp:77 msgid "Rock (normal)" -msgstr "" +msgstr "Pedra (normal)" #: src/badguy/crusher.cpp:78 msgid "Rock (big)" -msgstr "" +msgstr "Pedra (grande)" #: src/badguy/crusher.cpp:79 msgid "Corrupted (normal)" @@ -2070,7 +2070,7 @@ msgstr "Folha-Bala" #: src/badguy/fish_swimming.hpp:40 msgid "Swimming Fish" -msgstr "" +msgstr "Peixes nadando" #: src/badguy/flame.hpp:47 msgid "Flame" @@ -2082,7 +2082,7 @@ msgstr "Cristal Adormecido" #: src/badguy/jumpy.cpp:45 msgid "Wooden" -msgstr "" +msgstr "De madeira" #: src/badguy/jumpy.cpp:47 msgid "Metal" @@ -2090,7 +2090,7 @@ msgstr "Metal" #: src/badguy/jumpy.cpp:48 msgid "Bag" -msgstr "" +msgstr "Bolsa" #: src/badguy/willowisp.hpp:57 msgid "Will o' Wisp" @@ -2098,7 +2098,7 @@ msgstr "Chama Perseguidora" #: src/badguy/fish_jumping.hpp:41 msgid "Jumping Fish" -msgstr "" +msgstr "Peixe saltador" #: src/badguy/badguy.hpp:61 msgid "Badguy" @@ -2114,7 +2114,7 @@ msgstr "Espinhoso" #: src/badguy/walkingleaf.hpp:33 msgid "Walking Leaf" -msgstr "" +msgstr "Folha ambulante" #: src/badguy/root.hpp:39 msgid "Root" @@ -2138,7 +2138,7 @@ msgstr "Yeti" #: src/badguy/snowball.cpp:41 msgid "Bumpkin" -msgstr "" +msgstr "Caipira" #: src/badguy/snowball.cpp:42 msgid "BSOD" @@ -2166,7 +2166,7 @@ msgstr "Pedra Irritada" #: src/badguy/tarantula.cpp:354 msgid "Spidermite" -msgstr "" +msgstr "Ácaro-aranha" #: src/badguy/tarantula.cpp:374 msgid "Static" @@ -2186,7 +2186,7 @@ msgstr "Homem neve" #: src/badguy/viciousivy.hpp:33 msgid "Vicious Ivy" -msgstr "" +msgstr "Hera Viciosa" #: src/badguy/stalactite.cpp:156 msgid "ice" @@ -2194,11 +2194,11 @@ msgstr "gelo" #: src/badguy/stalactite.cpp:157 msgid "rock" -msgstr "" +msgstr "pedra" #: src/badguy/fish_chasing.hpp:33 msgid "Chasing Fish" -msgstr "" +msgstr "Peixe perseguidor" #: src/badguy/stumpy.hpp:38 msgid "Stumpy" @@ -2232,7 +2232,7 @@ msgstr "Máximo de badguys simultâneos" #: src/badguy/dispenser.cpp:435 msgid "Dropper" -msgstr "" +msgstr "Conta-gotas" #: src/badguy/dispenser.cpp:436 msgid "Cannon" @@ -2260,7 +2260,7 @@ msgstr "Padrão" #: src/badguy/granito_big.cpp:53 src/badguy/granito.cpp:264 msgid "Standing" -msgstr "" +msgstr "Em pé" #: src/badguy/granito_big.cpp:54 src/badguy/granito.cpp:265 msgid "Walking" @@ -2523,7 +2523,7 @@ msgstr "Não compartilhar o nome dos níveis enquanto edita" msgid "" "Enable this if you want to work on secret levels and don't want the names to" " be spoiled" -msgstr "" +msgstr "Ative isso se quiser trabalhar em níveis secretos e não quiser que os nomes sejam entregues" #: src/supertux/menu/integrations_menu.cpp:54 msgid "Enable Discord integration" @@ -2533,7 +2533,7 @@ msgstr "Ativar integração com o Discord" msgid "" "Sends information to your Discord application about what you're doing in the" " game." -msgstr "" +msgstr "Envia informações para seu aplicativo Discord sobre o que você está fazendo no jogo." #: src/supertux/menu/integrations_menu.cpp:57 msgid "Discord (disabled; not compiled)" @@ -2542,11 +2542,11 @@ msgstr "Discord (desativado; não compilado)" #: src/supertux/menu/editor_converters_menu.cpp:61 #: src/supertux/menu/editor_menu.cpp:85 msgid "Convert Tiles" -msgstr "" +msgstr "Converter blocos" #: src/supertux/menu/editor_converters_menu.cpp:64 msgid "Select Tile Conversion File" -msgstr "" +msgstr "Selecione o arquivo de conversão de bloco" #: src/supertux/menu/editor_converters_menu.cpp:72 #, c++-format @@ -2555,15 +2555,15 @@ msgstr "Por: {}" #: src/supertux/menu/editor_converters_menu.cpp:75 msgid "Convert Tiles By File" -msgstr "" +msgstr "Converter blocos por arquivo" #: src/supertux/menu/editor_converters_menu.cpp:76 msgid "Convert all tiles in the current level by a file, specified above." -msgstr "" +msgstr "Converter todos os blocos no nível atual por um arquivo, especificado acima." #: src/supertux/menu/editor_converters_menu.cpp:89 msgid "No tile conversion file selected." -msgstr "" +msgstr "Nenhum arquivo de conversão de bloco selecionado." #: src/supertux/menu/editor_converters_menu.cpp:93 msgid "" @@ -2571,7 +2571,7 @@ msgid "" "\n" "Note: This should not be ran more than once on a level.\n" "Creating a separate copy of the level is highly recommended." -msgstr "" +msgstr "Isso converterá todos os blocos no nível. Continuar?\n\nNota: Isso não deve ser executado mais de uma vez em um nível.\nÉ altamente recomendado criar uma cópia separada do nível." #: src/supertux/menu/video_system_menu.cpp:36 msgid "Select Video System" @@ -2679,11 +2679,11 @@ msgstr "Salvar" #: src/supertux/menu/multiplayer_menu.cpp:27 #: src/supertux/menu/multiplayer_players_menu.cpp:34 msgid "Multiplayer" -msgstr "" +msgstr "Multijogador" #: src/supertux/menu/multiplayer_menu.cpp:30 msgid "Auto-manage Players" -msgstr "" +msgstr "Gerenciar jogadores automaticamente" #: src/supertux/menu/multiplayer_menu.cpp:31 msgid "" @@ -4074,7 +4074,7 @@ msgstr "Nota do Nível" #: src/supertux/menu/editor_level_menu.cpp:38 msgid "Tileset" -msgstr "Blocos" +msgstr "Conjunto de blocos" #: src/supertux/menu/editor_level_menu.cpp:41 msgid "Target Time" @@ -4146,7 +4146,7 @@ msgstr "Editar Outro Mundo" #: src/supertux/menu/editor_menu.cpp:86 msgid "Convert all tiles in the level using converters." -msgstr "" +msgstr "Converter todos os blocos do nível usando conversores." #: src/supertux/menu/editor_menu.cpp:90 msgid "Grid Size" @@ -4190,21 +4190,21 @@ msgstr "Frequência de Salvamento Automático" #: src/supertux/menu/editor_menu.cpp:108 msgid "Check for Deprecated Tiles" -msgstr "" +msgstr "Verificar por blocos obsoletos" #: src/supertux/menu/editor_menu.cpp:109 msgid "Check if any deprecated tiles are currently present in the level." -msgstr "" +msgstr "Verificar se há algum bloco obsoleto presente no nível." #: src/supertux/menu/editor_menu.cpp:110 msgid "Show Deprecated Tiles" -msgstr "" +msgstr "Mostrar blocos obsoletos" #: src/supertux/menu/editor_menu.cpp:111 msgid "" "Indicate all deprecated tiles on the active tilemap, without the need of " "hovering over." -msgstr "" +msgstr "Indicar todos os blocos obsoletos no mapa de blocos ativos, sem a necessidade de passar o mouse sobre eles." #: src/supertux/menu/editor_menu.cpp:121 msgid "Exit Level Editor" @@ -4256,15 +4256,15 @@ msgstr "" #: src/supertux/menu/editor_menu.cpp:232 msgid "Deprecated tiles are still present in the level." -msgstr "" +msgstr "Blocos obsoletos ainda estão presentes no nível." #: src/supertux/menu/editor_menu.cpp:239 msgid "Do you want to show all deprecated tiles on active tilemaps?" -msgstr "" +msgstr "Você quer mostrar todos os blocos obsoletos no mapa de blocos ativos?" #: src/supertux/menu/editor_menu.cpp:246 msgid "There are no more deprecated tiles in the level!" -msgstr "" +msgstr "Não há mais blocos obsoletos no nível!" #: src/supertux/menu/multiplayer_player_menu.cpp:40 msgid "Play with the keyboard" @@ -4660,11 +4660,11 @@ msgid "" "This level contains deprecated tiles.\n" "It is strongly recommended to replace all deprecated tiles\n" "to avoid loss of compatibility in future versions." -msgstr "" +msgstr "Este nível contém blocos obsoletos.\nÉ altamente recomendado substituir todos os blocos obsoletos\npara evitar perda de compatibilidade em versões futuras." #: src/editor/editor.cpp:579 msgid "Tip: Turn on \"Show Deprecated Tiles\" from the level editor menu." -msgstr "" +msgstr "Dica: Ative \"Mostrar blocos obsoletos\" no menu do editor de níveis." #: src/editor/editor.cpp:626 msgid "" @@ -4736,7 +4736,7 @@ msgstr "" #: src/editor/overlay_widget.cpp:1062 msgid "Cannot select deprecated tiles" -msgstr "" +msgstr "Não é possível selecionar blocos obsoletos." #: src/editor/overlay_widget.cpp:1567 msgid "Autotile mode is on" @@ -5146,7 +5146,7 @@ msgstr "Miscelânea" #: data//images/tiles.strf:1342 msgid "Retro Tiles" -msgstr "" +msgstr "Blocos retrô" #: data//images/worldmap.strf:24 msgid "Water paths" @@ -5162,7 +5162,7 @@ msgstr "Floresta Escura" #: data//images/converters/data.stcd:3 msgid "Nightly Tiles" -msgstr "" +msgstr "Blocos noturnos" #: data//images/converters/data.stcd:5 msgid "For levels, created in previous Nightly builds." @@ -5170,8 +5170,8 @@ msgstr "" #: data//images/converters/data.stcd:8 msgid "Pre-0.6.3 Crystal Tiles" -msgstr "" +msgstr "Blocos de cristal pré-0.6.3" #: data//images/converters/data.stcd:10 msgid "For levels, created in pre-0.6.3 versions, which use crystal tiles." -msgstr "" +msgstr "Para níveis criados em versões anteriores à 0.6.3, que utilizam blocos de cristal." From 874cec31e7ffe924d63cb09d078addbe655e5ae3 Mon Sep 17 00:00:00 2001 From: SuperTux Bot Date: Tue, 16 Jul 2024 01:39:21 +0000 Subject: [PATCH 17/33] Update translations --- data/locale/pt_BR.po | 254 +++++++++++++++++++++---------------------- 1 file changed, 127 insertions(+), 127 deletions(-) diff --git a/data/locale/pt_BR.po b/data/locale/pt_BR.po index ac9c59b04f6..8d50567dd9b 100644 --- a/data/locale/pt_BR.po +++ b/data/locale/pt_BR.po @@ -1348,7 +1348,7 @@ msgstr "Desvanecer partícula" #: src/object/custom_particle_system.cpp:524 msgid "Delete if off-screen" -msgstr "Removê-la fora de tela" +msgstr "Excluir se estiver fora da tela" #: src/object/custom_particle_system.cpp:525 #: src/editor/particle_editor.cpp:224 @@ -2689,15 +2689,15 @@ msgstr "Gerenciar jogadores automaticamente" msgid "" "Automatically add and remove players when controllers are plugged or " "unplugged" -msgstr "" +msgstr "Adicione e remova jogadores automaticamente quando os controladores estiverem conectados ou desconectados" #: src/supertux/menu/multiplayer_menu.cpp:33 msgid "Allow Multibind" -msgstr "" +msgstr "Permitir Multibind" #: src/supertux/menu/multiplayer_menu.cpp:34 msgid "Allow binding multiple joysticks to a single player" -msgstr "" +msgstr "Permitir vincular vários joysticks a um único jogador" #: src/supertux/menu/multiplayer_menu.cpp:36 msgid "Manage Players" @@ -2725,64 +2725,64 @@ msgstr "Cada nível deve ter pelo menos um setor." #: src/supertux/menu/editor_sectors_menu.cpp:97 msgid "Do you really want to delete this sector?" -msgstr "Você realmente quer deletar este setor?" +msgstr "Você realmente quer excluir este setor?" #: src/supertux/menu/editor_sectors_menu.cpp:100 msgid "Delete sector" -msgstr "Deletar setor" +msgstr "Excluir setor" #: src/supertux/menu/custom_menu_menu.cpp:49 #: src/supertux/menu/options_menu.cpp:191 msgid "Menu Customization" -msgstr "" +msgstr "Personalização do menu" #: src/supertux/menu/custom_menu_menu.cpp:51 msgid "Menu Back Color" -msgstr "" +msgstr "Cor de fundo do menu" #: src/supertux/menu/custom_menu_menu.cpp:52 msgid "Menu Front Color" -msgstr "" +msgstr "Cor da frente do menu" #: src/supertux/menu/custom_menu_menu.cpp:53 msgid "Menu Help Back Color" -msgstr "" +msgstr "Cor de fundo do menu de ajuda" #: src/supertux/menu/custom_menu_menu.cpp:54 msgid "Menu Help Front Color" -msgstr "" +msgstr "Cor da frente do menu de ajuda" #: src/supertux/menu/custom_menu_menu.cpp:55 msgid "Label Text Color" -msgstr "" +msgstr "Cor do texto do rótulo" #: src/supertux/menu/custom_menu_menu.cpp:56 msgid "Active Text Color" -msgstr "" +msgstr "Cor de texto ativo" #: src/supertux/menu/custom_menu_menu.cpp:57 msgid "Divider Line Color" -msgstr "" +msgstr "Cor da linha divisória" #: src/supertux/menu/custom_menu_menu.cpp:58 msgid "Menu Roundness" -msgstr "" +msgstr "Redondeza do menu" #: src/supertux/menu/custom_menu_menu.cpp:60 msgid "Editor Interface Color" -msgstr "" +msgstr "Cor da interface do editor" #: src/supertux/menu/custom_menu_menu.cpp:61 msgid "Editor Hover Color" -msgstr "" +msgstr "Cor do cursor do editor" #: src/supertux/menu/custom_menu_menu.cpp:62 msgid "Editor Grab Color" -msgstr "" +msgstr "Cor de captura do editor" #: src/supertux/menu/custom_menu_menu.cpp:64 msgid "Reset to defaults" -msgstr "" +msgstr "Resetar para os padrões" #: src/supertux/menu/editor_level_select_menu.cpp:72 msgid "Empty World" @@ -2803,7 +2803,7 @@ msgstr "Criar Mapa do Mundo" #: src/supertux/menu/editor_level_select_menu.cpp:95 #: src/supertux/menu/editor_delete_level_menu.cpp:55 msgid "Delete level" -msgstr "Deletar nível" +msgstr "Excluir nível" #: src/supertux/menu/editor_level_select_menu.cpp:97 #: src/supertux/menu/editor_levelset_menu.cpp:50 @@ -2834,14 +2834,14 @@ msgstr "Um arquivo de recuperação automático foi encontrado. Você gostaria d #: src/supertux/menu/editor_level_select_menu.cpp:186 msgid "This will delete the auto-save file. Are you sure?" -msgstr "Isso irá deletar o arquivo de recuperação. Você tem certeza?" +msgstr "Isso irá excluir o arquivo de recuperação. Você tem certeza?" #: src/supertux/menu/worldmap_cheat_apply_menu.cpp:35 #: src/supertux/menu/worldmap_cheat_apply_menu.cpp:52 #: src/supertux/menu/cheat_apply_menu.cpp:33 #: src/supertux/menu/cheat_apply_menu.cpp:51 msgid "Apply cheat to player" -msgstr "" +msgstr "Aplicar truque ao jogador" #: src/supertux/menu/worldmap_cheat_apply_menu.cpp:39 #: src/supertux/menu/worldmap_cheat_apply_menu.cpp:60 @@ -2852,13 +2852,13 @@ msgstr "" #: src/supertux/menu/multiplayer_player_menu.cpp:37 #, c++-format msgid "Player {}" -msgstr "" +msgstr "Jogador {}" #: src/supertux/menu/worldmap_cheat_apply_menu.cpp:57 #: src/supertux/menu/cheat_apply_menu.cpp:36 #: src/supertux/menu/cheat_apply_menu.cpp:56 msgid "All Players" -msgstr "" +msgstr "Todos os jogadores" #: src/supertux/menu/worldmap_cheat_menu.cpp:36 #: src/supertux/menu/cheat_menu.cpp:31 @@ -2951,9 +2951,9 @@ msgstr "Escolher Mundo" #, c++-format msgid "{} level" msgid_plural "{} levels" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "{} nível" +msgstr[1] "{} níveis" +msgstr[2] "{} níveis" #: src/supertux/menu/editor_levelset_select_menu.cpp:112 msgid "Create World" @@ -2962,12 +2962,12 @@ msgstr "Criar Mundo" #: src/supertux/menu/editor_levelset_select_menu.cpp:113 #: src/supertux/menu/editor_delete_levelset_menu.cpp:41 msgid "Delete World" -msgstr "" +msgstr "Excluir mundo" #: src/supertux/menu/options_menu.cpp:72 #: src/supertux/menu/options_select_menu.cpp:35 msgid "Locale" -msgstr "" +msgstr "Local" #: src/supertux/menu/options_menu.cpp:76 msgid "Select Language" @@ -3016,11 +3016,11 @@ msgstr "Ajustar a resolução ao tamanho do seu navegador" #: src/supertux/menu/options_menu.cpp:116 msgid "Change Video System" -msgstr "" +msgstr "Alterar sistema de vídeo" #: src/supertux/menu/options_menu.cpp:117 msgid "Change video system used to render graphics" -msgstr "" +msgstr "Alterar sistema de vídeo usado para renderizar gráficos" #: src/supertux/menu/options_menu.cpp:124 #: src/supertux/menu/options_select_menu.cpp:38 @@ -3050,15 +3050,15 @@ msgstr "Controles" #: src/supertux/menu/options_menu.cpp:151 msgid "Enable Rumbling Controllers" -msgstr "" +msgstr "Habilitar ruído de controladores" #: src/supertux/menu/options_menu.cpp:152 msgid "Enable vibrating the game controllers." -msgstr "" +msgstr "Ativar a vibração dos controles do jogo." #: src/supertux/menu/options_menu.cpp:152 msgid "This feature is currently only used in the multiplayer options menu." -msgstr "" +msgstr "Atualmente, este recurso só é usado no menu de opções de multijogador." #: src/supertux/menu/options_menu.cpp:154 #: src/supertux/menu/keyboard_menu.cpp:34 @@ -3094,11 +3094,11 @@ msgstr "Selecione um perfil para jogar" #: src/supertux/menu/options_menu.cpp:174 msgid "Multiplayer settings" -msgstr "" +msgstr "Configurações de multijogador" #: src/supertux/menu/options_menu.cpp:175 msgid "Configure settings specific to multiplayer" -msgstr "" +msgstr "Definir configurações específicas para multijogador" #: src/supertux/menu/options_menu.cpp:178 msgid "Enable transitions" @@ -3110,11 +3110,11 @@ msgstr "Habilita transições de tela e animação suavizada de menus" #: src/supertux/menu/options_menu.cpp:181 msgid "Custom title screen levels" -msgstr "" +msgstr "Telas de título de níveis personalizados" #: src/supertux/menu/options_menu.cpp:182 msgid "Allow overriding the title screen level, when loading certain worlds" -msgstr "" +msgstr "Permite a substituição da tela de título do nível ao carregar certos mundos" #: src/supertux/menu/options_menu.cpp:185 msgid "Christmas Mode" @@ -3132,7 +3132,7 @@ msgstr "Gerencia se o SuperTux deveria exibir os níveis que você joga nos perf #: src/supertux/menu/options_menu.cpp:192 msgid "Customize the appearance of the menus" -msgstr "" +msgstr "Personalizar a aparência dos menus" #: src/supertux/menu/options_menu.cpp:199 #: src/supertux/menu/options_select_menu.cpp:41 @@ -3175,7 +3175,7 @@ msgstr "Verificar por atualizações" msgid "" "Allows the game to perform checks for new SuperTux releases on startup and " "notify if any found." -msgstr "" +msgstr "Permite que o jogo execute verificações por novos lançamentos do SuperTux ao inicializar e notifique se algum for encontrado." #: src/supertux/menu/options_menu.cpp:245 #: src/supertux/menu/options_menu.cpp:288 src/supertux/direction.cpp:76 @@ -3258,7 +3258,7 @@ msgstr "Ajustar volume de música" #: src/supertux/menu/options_menu.cpp:517 msgid "On-screen controls scale" -msgstr "" +msgstr "Escala de controles na tela" #: src/supertux/menu/options_menu.cpp:638 msgid "" @@ -3269,12 +3269,12 @@ msgstr "O jogo não conseguiu detectar a resolução do seu navegador.\nIsso pro #: src/supertux/menu/editor_delete_levelset_menu.cpp:80 msgid "You cannot delete the world that you are editing" -msgstr "" +msgstr "Você não pode excluir o mundo que está editando" #: src/supertux/menu/editor_delete_levelset_menu.cpp:83 #, c++-format msgid "You are about to delete world \"{}\". Are you sure?" -msgstr "" +msgstr "Você está prestes a excluir o mundo \"{}\". Tem certeza?" #: src/supertux/menu/addon_preview_menu.cpp:82 #, c++-format @@ -3283,15 +3283,15 @@ msgstr "{} \"{}\"" #: src/supertux/menu/addon_preview_menu.cpp:87 msgid "Some information about this add-on is not available." -msgstr "" +msgstr "Algumas informações sobre este complemento não estão disponíveis." #: src/supertux/menu/addon_preview_menu.cpp:88 msgid "Perform a \"Check Online\" to try retrieving it." -msgstr "" +msgstr "Execute uma \"Verificação online\" para tentar recuperá-lo." #: src/supertux/menu/addon_preview_menu.cpp:92 msgid "No author specified." -msgstr "" +msgstr "Nenhum autor especificado." #: src/supertux/menu/addon_preview_menu.cpp:92 #, c++-format @@ -3376,14 +3376,14 @@ msgstr "\nSeu progresso não será perdido." msgid "" "NOTE: The add-on \"{}\" is a dependency of {} other installed {}.\n" "Are you sure you wish to uninstall?" -msgstr "" +msgstr "NOTA: O complemento \"{}\" é uma dependência de {} outros {} instalados.\nTem certeza de que deseja desinstalar?" #: src/supertux/menu/addon_preview_menu.cpp:246 #, c++-format msgid "" "Cannot toggle add-on \"{}\":\n" "{}" -msgstr "" +msgstr "Não é possível alternar o complemento \"{}\":\n{}" #: src/supertux/menu/addon_preview_menu.cpp:279 msgid "Fetching screenshot previews..." @@ -3518,14 +3518,14 @@ msgstr "Resetar tudo" #: src/supertux/menu/profile_menu.cpp:113 #: src/supertux/menu/profile_menu.cpp:115 msgid "Delete all" -msgstr "Deletar tudo" +msgstr "Excluir tudo" #: src/supertux/menu/profile_menu.cpp:148 #, c++-format msgid "" "This will reset all game progress on the profile \"{}\".\n" "Are you sure?" -msgstr "" +msgstr "Isso irá resetar todo o progresso do jogo no perfil \"{}\".\nTem certeza?" #: src/supertux/menu/profile_menu.cpp:157 msgid "This will reset your game progress on all profiles. Are you sure?" @@ -3536,13 +3536,13 @@ msgstr "Isso irá reiniciar o seu progresso no jogo em todos os perfis. Você te msgid "" "This will delete the profile \"{}\",\n" "including all game progress on it. Are you sure?" -msgstr "" +msgstr "Isso excluirá o perfil \"{}\",\nincluindo todo o progresso do jogo nele. Tem certeza?" #: src/supertux/menu/profile_menu.cpp:178 msgid "" "This will delete all profiles, including all game progress on them.\n" "Are you sure?" -msgstr "" +msgstr "Isso excluirá todos os perfis, incluindo todo o progresso no jogo neles.\nTem certeza?" #: src/supertux/menu/editor_levelset_menu.cpp:53 #: src/supertux/menu/editor_new_levelset_menu.cpp:35 @@ -3551,11 +3551,11 @@ msgstr "Descrição" #: src/supertux/menu/editor_levelset_menu.cpp:55 msgid "Title Screen Level" -msgstr "" +msgstr "Tela de título do nível" #: src/supertux/menu/editor_levelset_menu.cpp:56 msgid "A level to be used for the title screen, after exiting the world." -msgstr "" +msgstr "Um nível a ser usado na tela de título, depois de sair do mundo." #: src/supertux/menu/multiplayer_players_menu.cpp:46 msgid "Add Player" @@ -3571,19 +3571,19 @@ msgid "" "remove is currently in-game.\n" "\n" "Do you wish to remove them anyways?" -msgstr "" +msgstr "Aviso: O jogador que você está tentando\nremover está atualmente no jogo.\n\nVocê deseja removê-lo mesmo assim?" #: src/supertux/menu/addon_menu.cpp:68 msgid "Installed Language Packs" -msgstr "" +msgstr "Pacotes de idiomas instalados" #: src/supertux/menu/addon_menu.cpp:68 msgid "Installed Add-ons" -msgstr "" +msgstr "Complementos instalados" #: src/supertux/menu/addon_menu.cpp:76 src/supertux/menu/addon_menu.cpp:117 msgid "No language packs installed" -msgstr "" +msgstr "Nenhum pacote de idioma instalado" #: src/supertux/menu/addon_menu.cpp:76 msgid "No Add-ons installed" @@ -3592,7 +3592,7 @@ msgstr "Não há Complementos instalados" #: src/supertux/menu/addon_menu.cpp:124 #, c++-format msgid "{} {}*UPDATE*" -msgstr "" +msgstr "{} {}*ATUALIZAÇÃO*" #: src/supertux/menu/addon_menu.cpp:130 #, c++-format @@ -3601,7 +3601,7 @@ msgstr "{}{}" #: src/supertux/menu/addon_menu.cpp:140 msgid "No updates available." -msgstr "" +msgstr "Nenhuma atualização disponível." #: src/supertux/menu/addon_menu.cpp:144 #, c++-format @@ -3610,32 +3610,32 @@ msgstr "{} {} disponível" #: src/supertux/menu/addon_menu.cpp:144 msgid "update" -msgstr "" +msgstr "atualização" #: src/supertux/menu/addon_menu.cpp:144 msgid "updates" -msgstr "" +msgstr "atualizações" #: src/supertux/menu/addon_menu.cpp:146 msgid "Check for updates" -msgstr "" +msgstr "Verificar por atualizações" #: src/supertux/menu/addon_menu.cpp:150 msgid "Browse language packs" -msgstr "" +msgstr "Navegar pelos pacotes de idiomas" #: src/supertux/menu/addon_menu.cpp:150 #: src/supertux/menu/addon_browse_menu.cpp:70 msgid "Browse Add-ons" -msgstr "" +msgstr "Navegar pelos Complementos" #: src/supertux/menu/addon_menu.cpp:151 msgid "Install from file" -msgstr "" +msgstr "Instalar do arquivo" #: src/supertux/menu/addon_menu.cpp:208 msgid "Checking for updates..." -msgstr "" +msgstr "Verificando por atualizações..." #: src/supertux/menu/editor_new_levelset_menu.cpp:31 msgid "New World" @@ -3651,7 +3651,7 @@ msgstr "Modo de História" #: src/supertux/menu/addon_browse_menu.cpp:70 msgid "Browse Language Packs" -msgstr "" +msgstr "Navegar pelos pacotes de idiomas" #: src/supertux/menu/addon_browse_menu.cpp:112 #, c++-format @@ -3660,29 +3660,29 @@ msgstr "Página {}/{}" #: src/supertux/menu/addon_browse_menu.cpp:124 msgid "No new language packs available" -msgstr "" +msgstr "Nenhum novo pacote de idiomas disponível" #: src/supertux/menu/addon_browse_menu.cpp:124 msgid "No new Add-ons available" -msgstr "" +msgstr "Nenhum Complemento novo disponível" #: src/supertux/menu/addon_browse_menu.cpp:127 msgid "No language packs available" -msgstr "" +msgstr "Nenhum pacote de idiomas disponível" #: src/supertux/menu/addon_browse_menu.cpp:127 msgid "No Add-ons available" -msgstr "" +msgstr "Nenhum Complemento disponível" #: src/supertux/menu/addon_browse_menu.cpp:135 #: src/supertux/menu/addon_browse_menu.cpp:139 msgid "Previous page" -msgstr "" +msgstr "Página anterior" #: src/supertux/menu/addon_browse_menu.cpp:143 #: src/supertux/menu/addon_browse_menu.cpp:147 msgid "Next page" -msgstr "" +msgstr "Próxima página" #: src/supertux/menu/addon_browse_menu.cpp:154 msgid "Check Online (disabled)" @@ -3694,7 +3694,7 @@ msgstr "Verificar Online" #: src/supertux/menu/addon_browse_menu.cpp:195 msgid "Downloading Add-On Repository Index" -msgstr "Baixando o Índice de Complementos do Repositório" +msgstr "Baixando o índice de complementos do repositório" #: src/supertux/menu/web_asset_menu.cpp:42 msgid "New files location" @@ -3702,11 +3702,11 @@ msgstr "Localização de novos arquivos" #: src/supertux/menu/web_asset_menu.cpp:43 msgid "Add Files" -msgstr "Adicionar Arquivos" +msgstr "Adicionar arquivos" #: src/supertux/menu/web_asset_menu.cpp:44 msgid "Download Files" -msgstr "Baixar Arquivos" +msgstr "Baixar arquivos" #: src/supertux/menu/particle_editor_open.cpp:32 msgid "Load particle file" @@ -3740,15 +3740,15 @@ msgstr "Tem certeza?" #: src/supertux/menu/profile_name_menu.cpp:36 #, c++-format msgid "Rename \"{}\"" -msgstr "" +msgstr "Renomear \"{}\"" #: src/supertux/menu/profile_name_menu.cpp:36 msgid "Add profile" -msgstr "" +msgstr "Adicionar perfil" #: src/supertux/menu/profile_name_menu.cpp:40 msgid "Profile names must have a maximum of 20 characters." -msgstr "" +msgstr "O nome do perfil deve ter no máximo 20 caracteres." #: src/supertux/menu/profile_name_menu.cpp:42 msgid "Create" @@ -3758,11 +3758,11 @@ msgstr "Criar" msgid "" "Profile names must have a maximum of 20 characters.\n" "Please choose a different name." -msgstr "" +msgstr "O nome do perfil deve ter no máximo 20 caracteres.\nPor favor, escolha um nome diferente." #: src/supertux/menu/profile_name_menu.cpp:77 msgid "An error occurred while creating the profile." -msgstr "" +msgstr "Ocorreu um erro ao criar o perfil." #: src/supertux/menu/keyboard_menu.cpp:36 #: src/supertux/menu/joystick_menu.cpp:71 @@ -3965,7 +3965,7 @@ msgstr "Abortar Download" msgid "" "Error:\n" "{}" -msgstr "" +msgstr "Erro:\n{}" #: src/supertux/menu/cheat_menu.cpp:38 msgid "Bonus: Star" @@ -3981,15 +3981,15 @@ msgstr "Matar Tux" #: src/supertux/menu/cheat_menu.cpp:55 msgid "Prevent Death" -msgstr "" +msgstr "Prevenir a morte" #: src/supertux/menu/addon_file_install_menu.cpp:32 msgid "Install Add-on from file" -msgstr "" +msgstr "Instalar Complemento do arquivo" #: src/supertux/menu/addon_file_install_menu.cpp:34 msgid "Drag and drop add-on ZIP archive" -msgstr "" +msgstr "Arraste e solte o arquivo ZIP do complemento" #: src/supertux/menu/particle_editor_menu.cpp:32 msgid "Particle Editor" @@ -4158,7 +4158,7 @@ msgstr "Mostrar Grelha" #: src/supertux/menu/editor_menu.cpp:92 msgid "Grid Snapping" -msgstr "Encaixar na Grelha" +msgstr "Encaixar na grade" #: src/supertux/menu/editor_menu.cpp:93 msgid "Render Background" @@ -4178,11 +4178,11 @@ msgstr "Ativar Ajuda do Piso Automático" #: src/supertux/menu/editor_menu.cpp:97 msgid "Enable Object Undo Tracking" -msgstr "" +msgstr "Ativar rastreamento de desfazer objetos" #: src/supertux/menu/editor_menu.cpp:100 msgid "Undo Stack Size" -msgstr "" +msgstr "Desfazer tamanho da pilha" #: src/supertux/menu/editor_menu.cpp:102 msgid "Autosave Frequency" @@ -4252,7 +4252,7 @@ msgid "" "Ctrl+D = Duplicate line\n" "Ctrl+Z = Undo\n" "Ctrl+Y = Redo" -msgstr "" +msgstr "Atalhos de Teclado:\n---------------------\nEsc = Abrir menu\nCtrl+S = Salvar\nCtrl+T = Testar\nCtrl+Z = Desfazer\nCtrl+Y = Refazer\nF6 = Renderizar luz\nF7 = Encaixar na grade\nF8 = Mostrar grades\nCtrl++ ou Ctrl+Scroll Up = Aumentar o zoom\nCtrl+- ou Ctrl+Scroll Down = Reduzir o zoom\nCtrl+D = Resetar zoom\n\nAtalhos de Script:\n ------------- \nHome = Ir para o início da linha\nEnd = Ir para o fim da linha\nSeta esquerda = Voltar no texto\nSeta direita = Avançar no texto\nBackspace = Excluir na frente do cursor de texto\nDelete = Excluir atrás do cursor de texto\nCtrl+X = Cortar linha inteira\nCtrl+C = Copiar linha inteira\nCtrl+V = Colar\nCtrl+D = Duplicar linha\nCtrl+Z = Desfazer\nCtrl+Y = Refazer" #: src/supertux/menu/editor_menu.cpp:232 msgid "Deprecated tiles are still present in the level." @@ -4268,19 +4268,19 @@ msgstr "Não há mais blocos obsoletos no nível!" #: src/supertux/menu/multiplayer_player_menu.cpp:40 msgid "Play with the keyboard" -msgstr "" +msgstr "Jogar com o teclado" #: src/supertux/menu/multiplayer_player_menu.cpp:58 msgid "Remove Player" -msgstr "" +msgstr "Remover jogador" #: src/supertux/menu/multiplayer_player_menu.cpp:82 msgid "Respawn Player" -msgstr "" +msgstr "Regerar jogador" #: src/supertux/menu/multiplayer_player_menu.cpp:108 msgid "Spawn Player" -msgstr "" +msgstr "Gerar jogador" #: src/supertux/menu/multiplayer_player_menu.cpp:136 msgid "Controllers" @@ -4290,38 +4290,38 @@ msgstr "Controladores" msgid "" "This controller does not support rumbling;\n" "please check the controllers manually." -msgstr "" +msgstr "Este controlador não possui suporte a vibrações;\nverifique os controles manualmente." #: src/supertux/menu/multiplayer_player_menu.cpp:157 msgid "" "This SuperTux build does not support rumbling\n" "controllers; please check the controllers manually." -msgstr "" +msgstr "Esta compilação do SuperTux não suporta controles\ncom vibração; verifique os controles manualmente." #: src/supertux/menu/multiplayer_player_menu.cpp:184 msgid "" "This joystick does not support rumbling;\n" "please check the joysticks manually." -msgstr "" +msgstr "Este joystick não possui suporte a vibrações;\nverifique os joysticks manualmente." #: src/supertux/menu/multiplayer_player_menu.cpp:189 msgid "" "This SuperTux build does not support rumbling\n" "joysticks; please check the joysticks manually." -msgstr "" +msgstr "Esta compilação do SuperTux não suporta joysticks\ncom vibração; verifique os joysticks manualmente." #: src/supertux/menu/editor_delete_level_menu.cpp:59 msgid "No levels available" -msgstr "" +msgstr "Nenhum nível disponível" #: src/supertux/menu/editor_delete_level_menu.cpp:79 msgid "You cannot delete the level that you are editing!" -msgstr "" +msgstr "Você não pode excluir o nível que está editando!" #: src/supertux/menu/editor_delete_level_menu.cpp:82 #, c++-format msgid "You are about to delete level \"{}\". Are you sure?" -msgstr "" +msgstr "Você está prestes a excluir o nível \"{}\". Tem certeza?" #: src/supertux/levelintro.cpp:137 #, c++-format @@ -4359,7 +4359,7 @@ msgstr "Região" #: src/supertux/main.cpp:801 #, c++-format msgid "New release: SuperTux v{}!" -msgstr "" +msgstr "Novo lançamento: SuperTux v{}!" #: src/supertux/main.cpp:804 #, c++-format @@ -4368,11 +4368,11 @@ msgid "" "For more information, you can visit the SuperTux website.\n" "\n" "Do you want to visit the website now?" -msgstr "" +msgstr "Uma nova versão do SuperTux (v{}) está disponível!\nPara mais informações, você pode visitar o site do SuperTux.\n\nVocê quer visitar o site agora?" #: src/supertux/main.cpp:815 msgid "Checking for new releases..." -msgstr "" +msgstr "Verificando por novos lançamentos..." #: src/control/joystick_config.cpp:85 msgid "Joystick Mappings" @@ -4396,7 +4396,7 @@ msgstr "Alterar ao tocar" #: src/worldmap/special_tile.hpp:36 msgid "Special Tile" -msgstr "" +msgstr "Bloco especial" #: src/worldmap/level_tile.hpp:36 src/worldmap/level_tile.cpp:161 msgid "Level" @@ -4442,7 +4442,7 @@ msgstr "Tele-transportador" msgid "" "This object's current functionality is deprecated.\n" "Updating to get its latest functionality is recommended." -msgstr "" +msgstr "A funcionalidade atual deste objeto está obsoleta.\nÉ recomendável atualizar para obter sua funcionalidade mais recente." #: src/editor/node_marker.cpp:122 msgid "Path Node" @@ -4487,15 +4487,15 @@ msgstr "Circular" #: src/editor/layers_widget.cpp:331 #, c++-format msgid "Sector: {}" -msgstr "" +msgstr "Setor: {}" #: src/editor/object_option.cpp:92 msgid "true" -msgstr "sim" +msgstr "verdadeiro" #: src/editor/object_option.cpp:92 msgid "false" -msgstr "não" +msgstr "falso" #: src/editor/object_option.cpp:308 src/editor/object_option.cpp:356 msgid "invalid" @@ -4503,19 +4503,19 @@ msgstr "inválido" #: src/editor/object_option.cpp:665 msgid "Scale X" -msgstr "" +msgstr "Escala X" #: src/editor/object_option.cpp:666 msgid "Scale Y" -msgstr "" +msgstr "Escala Y" #: src/editor/object_option.cpp:667 msgid "Offset X" -msgstr "" +msgstr "Deslocamento X" #: src/editor/object_option.cpp:668 msgid "Offset Y" -msgstr "" +msgstr "Deslocamento Y" #: src/editor/object_option.cpp:672 src/editor/object_menu.cpp:67 msgid "Remove" @@ -4531,11 +4531,11 @@ msgstr "Abrir Editor de Partículas" #: src/editor/particle_editor.cpp:114 msgid "Change texture... ->" -msgstr "" +msgstr "Alterar textura... ->" #: src/editor/particle_editor.cpp:126 msgid "Max amount" -msgstr "Quantia máxima" +msgstr "Quantidade máxima" #: src/editor/particle_editor.cpp:142 msgid "Spawn anywhere" @@ -4619,27 +4619,27 @@ msgstr "Limpar" #: src/editor/particle_editor.cpp:245 msgid "<- General settings" -msgstr "" +msgstr "<- Configurações gerais" #: src/editor/particle_editor.cpp:255 msgid "Likeliness" -msgstr "" +msgstr "Probabilidade" #: src/editor/particle_editor.cpp:266 msgid "Color (RGBA)" -msgstr "" +msgstr "Cor (RGBA)" #: src/editor/particle_editor.cpp:311 msgid "Scale (x, y)" -msgstr "" +msgstr "Escala (x, y)" #: src/editor/particle_editor.cpp:332 msgid "Hitbox scale (x, y)" -msgstr "" +msgstr "Escala de hitbox (x, y)" #: src/editor/particle_editor.cpp:353 msgid "Hitbox offset relative to scale" -msgstr "" +msgstr "Deslocamento da hitbox em relação à escala" #: src/editor/particle_editor.cpp:372 msgid "Change texture..." @@ -4680,7 +4680,7 @@ msgstr "Este nível contém alterações não salvas. Gostaria de salvá-las?" #: src/editor/editor.cpp:662 msgid "This level may contain unsaved changes, do you want to save?" -msgstr "" +msgstr "Este nível pode conter alterações não salvas. Você deseja salvá-las?" #: src/editor/editor.cpp:797 msgid "" @@ -4718,7 +4718,7 @@ msgstr "Não foi possível encontrar um ponto de começo \"principal\".\nPor fav #: src/editor/object_menu.cpp:60 msgid "Patch Notes" -msgstr "" +msgstr "Notas do Patch" #: src/editor/object_menu.cpp:84 msgid "" @@ -4727,12 +4727,12 @@ msgid "" "\n" "Keep in mind this is very likely to break the proper behaviour of the object.\n" "Make sure to re-check any behaviour, related to the object." -msgstr "" +msgstr "Isso atualizará o objeto para sua funcionalidade mais recente.\nVerifique as \"Notas do Patch\" para mais informações.\n\nLembre-se de que é muito provável que isso interrompa o comportamento adequado do objeto.\nCertifique-se de verificar novamente qualquer comportamento relacionado ao objeto." #: src/editor/object_menu.cpp:98 #, c++-format msgid "Patch notes for v{}:" -msgstr "" +msgstr "Notas de patch para v{}:" #: src/editor/overlay_widget.cpp:1062 msgid "Cannot select deprecated tiles" @@ -4832,7 +4832,7 @@ msgstr "Programação, Design de Níveis" #: data//credits.stxt:138 msgid "Graphics, Story" -msgstr "Gráficos, Estória" +msgstr "Gráficos, História" #: data//credits.stxt:144 msgid "Programming, Documentation" @@ -5166,7 +5166,7 @@ msgstr "Blocos noturnos" #: data//images/converters/data.stcd:5 msgid "For levels, created in previous Nightly builds." -msgstr "" +msgstr "Para níveis criados em versões Noturnas anteriores." #: data//images/converters/data.stcd:8 msgid "Pre-0.6.3 Crystal Tiles" From 1599e9fd04a4f8dd48e4d22070ae1522bc34a693 Mon Sep 17 00:00:00 2001 From: Vankata453 <78196474+Vankata453@users.noreply.github.com> Date: Tue, 16 Jul 2024 12:39:53 +0300 Subject: [PATCH 18/33] Add `Menu::add_item(...)` template function Used for initializing and adding a `MenuItem` to the menu. Reduces code duplication with `Menu::add_*` functions. --- src/gui/menu.cpp | 155 ++++++++++++----------------------------------- src/gui/menu.hpp | 8 +++ 2 files changed, 46 insertions(+), 117 deletions(-) diff --git a/src/gui/menu.cpp b/src/gui/menu.cpp index 86aefee9acf..8c235b05dcf 100644 --- a/src/gui/menu.cpp +++ b/src/gui/menu.cpp @@ -145,110 +145,74 @@ Menu::delete_item(int pos_) ItemHorizontalLine& Menu::add_hl() { - auto item = std::make_unique(); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(); } ItemLabel& Menu::add_label(const std::string& text) { - auto item = std::make_unique(text); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text); } ItemControlField& Menu::add_controlfield(int id, const std::string& text, const std::string& mapping) { - auto item = std::make_unique(text, mapping, id); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, mapping, id); } ItemTextField& Menu::add_textfield(const std::string& text, std::string* input, int id) { - auto item = std::make_unique(text, input, id); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, input, id); } ItemScript& Menu::add_script(const std::string& text, std::string* script, int id) { - auto item = std::make_unique(text, script, id); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, script, id); } ItemScriptLine& Menu::add_script_line(std::string* input, int id) { - auto item = std::make_unique(input, id); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(input, id); } ItemIntField& Menu::add_intfield(const std::string& text, int* input, int id, bool positive) { - auto item = std::make_unique(text, input, id, positive); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, input, id, positive); } ItemFloatField& Menu::add_floatfield(const std::string& text, float* input, int id, bool positive) { - auto item = std::make_unique(text, input, id, positive); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, input, id, positive); } ItemAction& Menu::add_entry(int id, const std::string& text) { - auto item = std::make_unique(text, id); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, id); } ItemAction& Menu::add_entry(const std::string& text, const std::function& callback) { - auto item = std::make_unique(text, -1, callback); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, -1, callback); } ItemInactive& Menu::add_inactive(const std::string& text, bool default_color) { - auto item = std::make_unique(text, default_color); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, default_color); } ItemToggle& Menu::add_toggle(int id, const std::string& text, bool* toggled, bool center_text) { - auto item = std::make_unique(text, toggled, id, center_text); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, toggled, id, center_text); } ItemToggle& @@ -257,28 +221,19 @@ Menu::add_toggle(int id, const std::string& text, const std::function& set_func, bool center_text) { - auto item = std::make_unique(text, get_func, set_func, id, center_text); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, get_func, set_func, id, center_text); } ItemStringSelect& Menu::add_string_select(int id, const std::string& text, int* selected, const std::vector& strings) { - auto item = std::make_unique(text, strings, selected, id); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, strings, selected, id); } ItemStringSelect& Menu::add_string_select(int id, const std::string& text, int default_item, const std::vector& strings) { - auto item = std::make_unique(text, strings, default_item, id); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, strings, default_item, id); } ItemAction& @@ -286,118 +241,84 @@ Menu::add_file(const std::string& text, std::string* input, const std::vector& item_processor, int id) { - auto item = std::make_unique(text, id, + return add_item(text, id, [input, extensions, basedir, path_relative_to_basedir, item_processor]() { MenuManager::instance().push_menu(std::make_unique(input, extensions, basedir, path_relative_to_basedir, nullptr, item_processor)); }); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; } ItemBack& Menu::add_back(const std::string& text, int id) { - auto item = std::make_unique(text, id); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, id); } ItemGoTo& Menu::add_submenu(const std::string& text, int submenu, int id) { - auto item = std::make_unique(text, submenu, id); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, submenu, id); } ItemColorChannelRGBA& -Menu::add_color_channel_rgba(float* input, Color channel, int id, bool is_linear) { - auto item = std::make_unique(input, channel, id, is_linear); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; +Menu::add_color_channel_rgba(float* input, Color channel, int id, bool is_linear) +{ + return add_item(input, channel, id, is_linear); } ItemColorChannelOKLab& -Menu::add_color_channel_oklab(Color* color, int channel) { - auto item = std::make_unique(color, channel, this); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; +Menu::add_color_channel_oklab(Color* color, int channel) +{ + return add_item(color, channel, this); } ItemPaths& -Menu::add_path_settings(const std::string& text, PathObject& target, const std::string& path_ref) { - auto item = std::make_unique(text, target, path_ref); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; +Menu::add_path_settings(const std::string& text, PathObject& target, const std::string& path_ref) +{ + return add_item(text, target, path_ref); } ItemColorDisplay& -Menu::add_color_display(Color* color, int id) { - auto item = std::make_unique(color, id); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; +Menu::add_color_display(Color* color, int id) +{ + return add_item(color, id); } ItemColor& -Menu::add_color(const std::string& text, Color* color, int id) { - auto item = std::make_unique(text, color, id); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; +Menu::add_color(const std::string& text, Color* color, int id) +{ + return add_item(text, color, id); } ItemStringArray& Menu::add_string_array(const std::string& text, std::vector& items, int id) { - auto item = std::make_unique(text, items, id); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, items, id); } ItemImages& Menu::add_images(const std::string& image_path, int max_image_width, int max_image_height, int id) { - auto item = std::make_unique(image_path, max_image_width, max_image_height, id); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(image_path, max_image_width, max_image_height, id); } ItemImages& Menu::add_images(const std::vector& image_paths, int max_image_width, int max_image_height, int id) { - auto item = std::make_unique(image_paths, max_image_width, max_image_height, id); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(image_paths, max_image_width, max_image_height, id); } ItemList& Menu::add_list(const std::string& text, const std::vector& items, std::string* value_ptr, int id) { - auto item = std::make_unique(text, items, value_ptr, id); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(text, items, value_ptr, id); } ItemHorizontalMenu& Menu::add_horizontalmenu(int id, float height, float min_item_width) { - auto item = std::make_unique(id, height, min_item_width); - auto item_ptr = item.get(); - add_item(std::move(item)); - return *item_ptr; + return add_item(id, height, min_item_width); } void diff --git a/src/gui/menu.hpp b/src/gui/menu.hpp index 954d8f188d3..0e0a1d05053 100644 --- a/src/gui/menu.hpp +++ b/src/gui/menu.hpp @@ -133,6 +133,14 @@ class Menu protected: MenuItem& add_item(std::unique_ptr menu_item); MenuItem& add_item(std::unique_ptr menu_item, int pos_); + template + T& add_item(Args&&... args) + { + auto item = std::make_unique(std::forward(args)...); + auto item_ptr = item.get(); + add_item(std::move(item)); + return *item_ptr; + } void delete_item(int pos_); /** Recalculates the width for this menu */ From 3598a8410acdb7eb4dbd28c79ff065806dc91722 Mon Sep 17 00:00:00 2001 From: Marty <85036874+MatusGuy@users.noreply.github.com> Date: Thu, 18 Jul 2024 17:29:53 +0100 Subject: [PATCH 19/33] Fix batch file misbehaving when path has spaces (#3023) --- mk/msvc/run_supertux.bat | 2 +- mk/msvc/run_supertux_portable.bat | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mk/msvc/run_supertux.bat b/mk/msvc/run_supertux.bat index d7b3ef52143..76b1744e4fd 100644 --- a/mk/msvc/run_supertux.bat +++ b/mk/msvc/run_supertux.bat @@ -1,2 +1,2 @@ @echo off -start %~dp0\bin\supertux2.exe %* +start "" "%~dp0\bin\supertux2.exe" %* diff --git a/mk/msvc/run_supertux_portable.bat b/mk/msvc/run_supertux_portable.bat index 48ffb48fbad..2e992cb9f3e 100644 --- a/mk/msvc/run_supertux_portable.bat +++ b/mk/msvc/run_supertux_portable.bat @@ -1,3 +1,3 @@ @echo off -set SUPERTUX2_USER_DIR=%~dp0\user\ -start %~dp0\bin\supertux2.exe %* +set "SUPERTUX2_USER_DIR=%~dp0\user\" +start "" "%~dp0\bin\supertux2.exe" %* From d63d4798ea028da004bafe674b21fd5433972c9e Mon Sep 17 00:00:00 2001 From: Tobias Markus Date: Fri, 19 Jul 2024 03:57:03 +0200 Subject: [PATCH 20/33] FileSystemMenu: Pass strings as references in callback function --- src/gui/menu_filesystem.cpp | 2 +- src/gui/menu_filesystem.hpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/menu_filesystem.cpp b/src/gui/menu_filesystem.cpp index a8708989e11..31c1e683a91 100644 --- a/src/gui/menu_filesystem.cpp +++ b/src/gui/menu_filesystem.cpp @@ -29,7 +29,7 @@ #include "util/string_util.hpp" FileSystemMenu::FileSystemMenu(std::string* filename, const std::vector& extensions, - const std::string& basedir, bool path_relative_to_basedir, std::function callback, + const std::string& basedir, bool path_relative_to_basedir, std::function callback, const std::function& item_processor) : m_filename(filename), // when a basedir is given, 'filename' is relative to basedir, so diff --git a/src/gui/menu_filesystem.hpp b/src/gui/menu_filesystem.hpp index f05f6d0794a..5143b9ce29e 100644 --- a/src/gui/menu_filesystem.hpp +++ b/src/gui/menu_filesystem.hpp @@ -23,7 +23,7 @@ class FileSystemMenu final : public Menu { public: FileSystemMenu(std::string* filename, const std::vector& extensions, - const std::string& basedir, bool path_relative_to_basedir, const std::function callback = nullptr, + const std::string& basedir, bool path_relative_to_basedir, const std::function callback = nullptr, const std::function& item_processor = {}); ~FileSystemMenu() override; @@ -41,7 +41,7 @@ class FileSystemMenu final : public Menu std::vector m_directories; std::vector m_files; bool m_path_relative_to_basedir; - std::function m_callback; + std::function m_callback; std::function m_item_processor; private: From b366b97142044ea355d2fe4d07c049e31ce04b3e Mon Sep 17 00:00:00 2001 From: Vankata453 <78196474+Vankata453@users.noreply.github.com> Date: Sat, 20 Jul 2024 16:30:00 +0300 Subject: [PATCH 21/33] Delete markers left when deleting a trigger in editor When deleting a trigger object in the editor, its resize markers were still visible. Clicking on any of them caused a game crash. They are now flushed into the sector before being checked for. --- src/editor/overlay_widget.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/editor/overlay_widget.cpp b/src/editor/overlay_widget.cpp index 7cccb9628ec..6e33179d161 100644 --- a/src/editor/overlay_widget.cpp +++ b/src/editor/overlay_widget.cpp @@ -112,6 +112,7 @@ EditorOverlayWidget::delete_markers() if (m_selected_object && m_selected_object->is_valid()) m_selected_object->editor_deselect(); + sector->flush_game_objects(); // Flush any markers queued to be added for (auto& marker : sector->get_objects_by_type()) { marker.remove_me(); From fdd3ad0c97a29334dc825f85ad36e8bc7bf4f072 Mon Sep 17 00:00:00 2001 From: MatusGuy Date: Wed, 24 Jul 2024 09:27:48 +0100 Subject: [PATCH 22/33] Fix left-facing DartTrap offsetting position when activated --- src/badguy/darttrap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/badguy/darttrap.cpp b/src/badguy/darttrap.cpp index 09a23b63417..a19c756a006 100644 --- a/src/badguy/darttrap.cpp +++ b/src/badguy/darttrap.cpp @@ -49,7 +49,7 @@ DartTrap::DartTrap(const ReaderMapping& reader) : SoundManager::current()->preload("sounds/dartfire.wav"); if (m_start_dir == Direction::AUTO) { log_warning << "Setting a DartTrap's direction to AUTO is no good idea" << std::endl; } m_state = IDLE; - set_colgroup_active(COLGROUP_DISABLED); + set_group(COLGROUP_DISABLED); if (!Editor::is_active()) { if (m_initial_delay == 0) m_initial_delay = 0.1f; From 888f451691dafded70e5dfc51bd558e8a4e12cb8 Mon Sep 17 00:00:00 2001 From: Prune Juice <118036786+tylerandari13@users.noreply.github.com> Date: Thu, 25 Jul 2024 12:34:21 -0500 Subject: [PATCH 23/33] Add "Show Tile Ids In Editor" to debug menu. (#3015) A feature I've wanted for a while, and also useful to people who work on tilesets frequently. --- src/editor/tilebox.cpp | 3 ++- src/supertux/debug.cpp | 1 + src/supertux/debug.hpp | 2 ++ src/supertux/menu/debug_menu.cpp | 1 + 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/editor/tilebox.cpp b/src/editor/tilebox.cpp index a5264872918..fc63e1ba612 100644 --- a/src/editor/tilebox.cpp +++ b/src/editor/tilebox.cpp @@ -22,6 +22,7 @@ #include "editor/tile_selection.hpp" #include "editor/tip.hpp" #include "supertux/colorscheme.hpp" +#include "supertux/debug.hpp" #include "supertux/gameconfig.hpp" #include "supertux/game_object_factory.hpp" #include "supertux/globals.hpp" @@ -108,7 +109,7 @@ EditorTilebox::draw_tilegroup(DrawingContext& context) auto position = get_tile_coords(pos, false); m_editor.get_tileset()->get(tile_ID).draw(context.color(), position, LAYER_GUI - 9); - if (g_config->developer_mode && m_active_tilegroup->developers_group) + if (g_config->developer_mode && (m_active_tilegroup->developers_group || g_debug.show_toolbox_tile_ids) && tile_ID != 0) { // Display tile ID on top of tile: context.color().draw_text(Resources::console_font, std::to_string(tile_ID), diff --git a/src/supertux/debug.cpp b/src/supertux/debug.cpp index 82f33215627..14f41dc11c0 100644 --- a/src/supertux/debug.cpp +++ b/src/supertux/debug.cpp @@ -25,6 +25,7 @@ Debug::Debug() : show_collision_rects(false), show_worldmap_path(false), draw_redundant_frames(false), + show_toolbox_tile_ids(false), m_use_bitmap_fonts(false), m_game_speed_multiplier(1.0f) { diff --git a/src/supertux/debug.hpp b/src/supertux/debug.hpp index 6ef8c46e784..8d49f8a8893 100644 --- a/src/supertux/debug.hpp +++ b/src/supertux/debug.hpp @@ -39,6 +39,8 @@ class Debug // vaguely measure the impact of code changes which should increase the FPS bool draw_redundant_frames; + bool show_toolbox_tile_ids; + private: /** Use old bitmap fonts instead of TTF */ bool m_use_bitmap_fonts; diff --git a/src/supertux/menu/debug_menu.cpp b/src/supertux/menu/debug_menu.cpp index 377732871c1..1461c19bb13 100644 --- a/src/supertux/menu/debug_menu.cpp +++ b/src/supertux/menu/debug_menu.cpp @@ -71,6 +71,7 @@ DebugMenu::DebugMenu() : add_toggle(-1, _("Use Bitmap Fonts"), []{ return g_debug.get_use_bitmap_fonts(); }, [](bool value){ g_debug.set_use_bitmap_fonts(value); }); + add_toggle(-1, _("Show Tile IDs in Editor Toolbox"), &g_debug.show_toolbox_tile_ids); add_entry(_("Dump Texture Cache"), []{ TextureManager::current()->debug_print(get_logging_instance()); }); add_hl(); From d6d8b2288d9378a290a00925364b7a7dbad34dde Mon Sep 17 00:00:00 2001 From: mstoeckl Date: Fri, 26 Jul 2024 19:47:11 -0400 Subject: [PATCH 24/33] Index intermediate classes of GameObjects, try two (#3009) See #2991 for details; in short, this significantly speeds up `GameObjectManager::get_objects_by_type()` and `GameObjectManager::get_object_count()`, by no longer scanning over unrelated object types. However, the first version had an issue with disappearing objects with paths when a level was being tested from the level editor (#3008). I believe it was caused by the PathObject base class not being recorded in `GameObject::get_class_types` implementations. I've updated the code to do this (and also record the other intermediate classes, TriggerBase and CollisionListener, even though those are not currently searched for.) I was able to reproduce #3008 with the old version and no longer see it with the new. --- src/badguy/angrystone.hpp | 1 + src/badguy/badguy.hpp | 1 + src/badguy/bomb.hpp | 1 + src/badguy/boss.hpp | 1 + src/badguy/bouncing_snowball.hpp | 1 + src/badguy/captainsnowball.hpp | 1 + src/badguy/corrupted_granito.hpp | 1 + src/badguy/corrupted_granito_big.hpp | 1 + src/badguy/crusher.hpp | 2 + src/badguy/crystallo.hpp | 1 + src/badguy/dart.hpp | 1 + src/badguy/darttrap.hpp | 1 + src/badguy/dispenser.hpp | 1 + src/badguy/dive_mine.hpp | 1 + src/badguy/fish_chasing.hpp | 1 + src/badguy/fish_harmless.hpp | 1 + src/badguy/fish_jumping.hpp | 1 + src/badguy/fish_swimming.hpp | 1 + src/badguy/flame.hpp | 1 + src/badguy/flyingsnowball.hpp | 1 + src/badguy/ghosttree.hpp | 1 + src/badguy/ghoul.hpp | 1 + src/badguy/goldbomb.hpp | 1 + src/badguy/granito.hpp | 1 + src/badguy/granito_big.hpp | 1 + src/badguy/granito_giant.hpp | 1 + src/badguy/haywire.hpp | 1 + src/badguy/igel.hpp | 1 + src/badguy/jumpy.hpp | 1 + src/badguy/kamikazesnowball.hpp | 2 + src/badguy/kugelblitz.hpp | 1 + src/badguy/livefire.hpp | 3 ++ src/badguy/mole.hpp | 1 + src/badguy/mole_rock.hpp | 1 + src/badguy/mrbomb.hpp | 1 + src/badguy/mriceblock.hpp | 1 + src/badguy/mrtree.hpp | 1 + src/badguy/owl.hpp | 1 + src/badguy/plant.hpp | 1 + src/badguy/rcrystallo.hpp | 1 + src/badguy/root.hpp | 1 + src/badguy/root_sapling.hpp | 1 + src/badguy/scrystallo.hpp | 1 + src/badguy/short_fuse.hpp | 1 + src/badguy/skydive.hpp | 1 + src/badguy/smartball.hpp | 1 + src/badguy/smartblock.hpp | 1 + src/badguy/snail.hpp | 1 + src/badguy/snowball.hpp | 1 + src/badguy/snowman.hpp | 1 + src/badguy/spiky.hpp | 1 + src/badguy/sspiky.hpp | 1 + src/badguy/stalactite.hpp | 1 + src/badguy/stumpy.hpp | 1 + src/badguy/tarantula.hpp | 1 + src/badguy/toad.hpp | 1 + src/badguy/totem.hpp | 1 + src/badguy/treewillowisp.hpp | 1 + src/badguy/viciousivy.hpp | 1 + src/badguy/walking_badguy.hpp | 1 + src/badguy/walking_candle.hpp | 1 + src/badguy/walkingleaf.hpp | 1 + src/badguy/willowisp.hpp | 1 + src/badguy/yeti.hpp | 2 + src/badguy/yeti_stalactite.hpp | 1 + src/badguy/zeekling.hpp | 1 + src/editor/bezier_marker.hpp | 1 + src/editor/marker_object.hpp | 1 + src/editor/node_marker.hpp | 1 + src/editor/resize_marker.hpp | 1 + src/object/ambient_light.hpp | 1 + src/object/ambient_sound.hpp | 1 + src/object/background.hpp | 1 + src/object/bicycle_platform.hpp | 2 + src/object/bigsnowball.hpp | 1 + src/object/block.hpp | 2 + src/object/bonus_block.hpp | 1 + src/object/bouncy_coin.hpp | 1 + src/object/brick.hpp | 2 + src/object/bullet.hpp | 2 + src/object/bumper.hpp | 1 + src/object/camera.hpp | 1 + src/object/candle.hpp | 1 + src/object/circleplatform.hpp | 1 + src/object/cloud_particle_system.hpp | 1 + src/object/coin.hpp | 2 + src/object/coin_explode.hpp | 1 + src/object/coin_rain.hpp | 1 + src/object/conveyor_belt.hpp | 1 + src/object/custom_particle_system.hpp | 1 + src/object/custom_particle_system_file.hpp | 1 + src/object/decal.hpp | 1 + src/object/display_effect.hpp | 1 + src/object/electrifier.hpp | 1 + src/object/endsequence.hpp | 1 + src/object/endsequence_fireworks.hpp | 1 + src/object/endsequence_walk.hpp | 1 + src/object/explosion.hpp | 1 + src/object/fallblock.hpp | 1 + src/object/falling_coin.hpp | 1 + src/object/firefly.hpp | 1 + src/object/fireworks.hpp | 1 + src/object/floating_image.hpp | 1 + src/object/floating_text.hpp | 2 + src/object/flower.hpp | 1 + src/object/ghost_particle_system.hpp | 1 + src/object/gradient.hpp | 1 + src/object/growup.hpp | 1 + src/object/hurting_platform.hpp | 1 + src/object/infoblock.hpp | 1 + src/object/invisible_block.hpp | 1 + src/object/invisible_wall.hpp | 1 + src/object/ispy.hpp | 1 + src/object/key.hpp | 1 + src/object/lantern.hpp | 1 + src/object/level_time.hpp | 1 + src/object/light.hpp | 2 + src/object/lit_object.hpp | 1 + src/object/magicblock.hpp | 1 + src/object/moving_sprite.hpp | 1 + src/object/music_object.hpp | 1 + src/object/oneup.hpp | 1 + src/object/particle_zone.hpp | 1 + src/object/particles.hpp | 1 + src/object/particlesystem.hpp | 1 + src/object/particlesystem_interactive.hpp | 1 + src/object/path_gameobject.hpp | 1 + src/object/platform.hpp | 1 + src/object/player.hpp | 1 + src/object/pneumatic_platform.hpp | 2 + src/object/powerup.hpp | 1 + src/object/pulsing_light.hpp | 1 + src/object/pushbutton.hpp | 1 + src/object/rain_particle_system.hpp | 1 + src/object/rainsplash.hpp | 1 + src/object/rock.hpp | 1 + src/object/rublight.hpp | 1 + src/object/rusty_trampoline.hpp | 1 + src/object/scripted_object.hpp | 1 + src/object/shard.hpp | 1 + src/object/smoke_cloud.hpp | 1 + src/object/snow_particle_system.hpp | 1 + src/object/sound_object.hpp | 1 + src/object/spawnpoint.hpp | 1 + src/object/specialriser.hpp | 1 + src/object/spotlight.hpp | 1 + src/object/sprite_particle.hpp | 1 + src/object/star.hpp | 1 + src/object/sticky_object.hpp | 2 + src/object/text_array_object.hpp | 1 + src/object/text_object.hpp | 1 + src/object/textscroller.hpp | 1 + src/object/thunderstorm.hpp | 1 + src/object/tilemap.hpp | 1 + src/object/torch.hpp | 1 + src/object/trampoline.hpp | 1 + src/object/unstable_tile.hpp | 1 + src/object/vertical_stripes.hpp | 2 + src/object/water_drop.hpp | 2 + src/object/weak_block.hpp | 1 + src/object/wind.hpp | 1 + src/supertux/game_object.cpp | 9 +++++ src/supertux/game_object.hpp | 22 +++++++++++ src/supertux/game_object_iterator.hpp | 44 ++++++++-------------- src/supertux/game_object_manager.cpp | 16 +++++--- src/supertux/game_object_manager.hpp | 4 +- src/supertux/moving_object.hpp | 1 + src/supertux/player_status_hud.hpp | 1 + src/trigger/climbable.hpp | 1 + src/trigger/door.hpp | 1 + src/trigger/scripttrigger.hpp | 1 + src/trigger/secretarea_trigger.hpp | 1 + src/trigger/sequence_trigger.hpp | 1 + src/trigger/switch.hpp | 1 + src/trigger/text_area.hpp | 1 + src/trigger/trigger_base.hpp | 3 ++ src/worldmap/level_tile.hpp | 1 + src/worldmap/spawn_point.hpp | 1 + src/worldmap/special_tile.hpp | 1 + src/worldmap/sprite_change.hpp | 1 + src/worldmap/teleporter.hpp | 1 + src/worldmap/tux.hpp | 1 + src/worldmap/worldmap_object.hpp | 1 + 183 files changed, 256 insertions(+), 35 deletions(-) diff --git a/src/badguy/angrystone.hpp b/src/badguy/angrystone.hpp index f5470e0aab1..fec61367164 100644 --- a/src/badguy/angrystone.hpp +++ b/src/badguy/angrystone.hpp @@ -38,6 +38,7 @@ class AngryStone final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Angry Stone"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(AngryStone)); } protected: virtual std::vector get_allowed_directions() const override; diff --git a/src/badguy/badguy.hpp b/src/badguy/badguy.hpp index 438a22ee07c..9973086c8be 100644 --- a/src/badguy/badguy.hpp +++ b/src/badguy/badguy.hpp @@ -68,6 +68,7 @@ class BadGuy : public MovingSprite, virtual std::string get_exposed_class_name() const override { return "BadGuy"; } static std::string display_name() { return _("Badguy"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Portable)).add(typeid(BadGuy)); } virtual std::string get_overlay_size() const { return "1x1"; } diff --git a/src/badguy/bomb.hpp b/src/badguy/bomb.hpp index 5b4b9e24e91..642914d57f7 100644 --- a/src/badguy/bomb.hpp +++ b/src/badguy/bomb.hpp @@ -25,6 +25,7 @@ class Bomb final : public BadGuy { public: Bomb(const Vector& pos, Direction dir, const std::string& custom_sprite = "images/creatures/mr_bomb/bomb.sprite" ); + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Bomb)); } virtual bool is_saveable() const override { return false; } diff --git a/src/badguy/boss.hpp b/src/badguy/boss.hpp index 7fa942174b8..2a891de106f 100644 --- a/src/badguy/boss.hpp +++ b/src/badguy/boss.hpp @@ -30,6 +30,7 @@ class Boss : public BadGuy virtual void draw(DrawingContext& context) override; void draw_hit_points(DrawingContext& context); virtual ObjectSettings get_settings() override; + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Boss)); } virtual bool is_flammable() const override { return false; } virtual bool is_freezable() const override { return false; } diff --git a/src/badguy/bouncing_snowball.hpp b/src/badguy/bouncing_snowball.hpp index e5cd1b9d641..fa7d44eaeac 100644 --- a/src/badguy/bouncing_snowball.hpp +++ b/src/badguy/bouncing_snowball.hpp @@ -39,6 +39,7 @@ class BouncingSnowball final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Bouncing Snowball"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(BouncingSnowball)); } virtual GameObjectTypes get_types() const override; virtual std::string get_default_sprite_name() const override; diff --git a/src/badguy/captainsnowball.hpp b/src/badguy/captainsnowball.hpp index 9a295ef56aa..70cde6961e5 100644 --- a/src/badguy/captainsnowball.hpp +++ b/src/badguy/captainsnowball.hpp @@ -31,6 +31,7 @@ class CaptainSnowball final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Captain Snowball"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(CaptainSnowball)); } virtual bool is_snipable() const override { return true; } bool might_climb(int width, int height) const; diff --git a/src/badguy/corrupted_granito.hpp b/src/badguy/corrupted_granito.hpp index fcd266f901b..977caa7848a 100644 --- a/src/badguy/corrupted_granito.hpp +++ b/src/badguy/corrupted_granito.hpp @@ -43,6 +43,7 @@ class CorruptedGranito final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Corrupted Granito"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(CorruptedGranito)); } virtual bool is_snipable() const override { return true; } virtual bool is_flammable() const override { return m_type != GRANITO; } diff --git a/src/badguy/corrupted_granito_big.hpp b/src/badguy/corrupted_granito_big.hpp index e007e35d8a4..c1723a54fd4 100644 --- a/src/badguy/corrupted_granito_big.hpp +++ b/src/badguy/corrupted_granito_big.hpp @@ -34,6 +34,7 @@ class CorruptedGranitoBig final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Corrupted Big Granito"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(CorruptedGranitoBig)); } virtual bool is_snipable() const override { return false; } virtual bool is_freezable() const override { return false; } diff --git a/src/badguy/crusher.hpp b/src/badguy/crusher.hpp index ad186509d29..a0dd52a3c91 100644 --- a/src/badguy/crusher.hpp +++ b/src/badguy/crusher.hpp @@ -70,6 +70,7 @@ class Crusher final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Crusher"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Crusher)); } virtual ObjectSettings get_settings() override; GameObjectTypes get_types() const override; @@ -115,6 +116,7 @@ class CrusherRoot : public MovingSprite { public: CrusherRoot(Vector position, Crusher::Direction direction, float delay, int layer); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(CrusherRoot)); } virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; virtual void update(float dt_sec) override; diff --git a/src/badguy/crystallo.hpp b/src/badguy/crystallo.hpp index 7389f646060..00913e7362e 100644 --- a/src/badguy/crystallo.hpp +++ b/src/badguy/crystallo.hpp @@ -32,6 +32,7 @@ class Crystallo final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Crystallo"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Crystallo)); } virtual void active_update(float dt_sec) override; virtual bool is_flammable() const override; diff --git a/src/badguy/dart.hpp b/src/badguy/dart.hpp index ae3ba35d909..e5cfc99bb58 100644 --- a/src/badguy/dart.hpp +++ b/src/badguy/dart.hpp @@ -43,6 +43,7 @@ class Dart final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Dart"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Dart)); } virtual bool is_flammable() const override; diff --git a/src/badguy/darttrap.hpp b/src/badguy/darttrap.hpp index 42bab088aa4..69ffb1aaca9 100644 --- a/src/badguy/darttrap.hpp +++ b/src/badguy/darttrap.hpp @@ -34,6 +34,7 @@ class DartTrap final : public StickyBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Dart Trap"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return StickyBadguy::get_class_types().add(typeid(DartTrap)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override; diff --git a/src/badguy/dispenser.hpp b/src/badguy/dispenser.hpp index f057484e863..b5d6dedb4ca 100644 --- a/src/badguy/dispenser.hpp +++ b/src/badguy/dispenser.hpp @@ -67,6 +67,7 @@ class Dispenser final : public BadGuy virtual std::string get_exposed_class_name() const override { return "Dispenser"; } static std::string display_name() { return _("Dispenser"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Dispenser)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override; diff --git a/src/badguy/dive_mine.hpp b/src/badguy/dive_mine.hpp index 7e71dec6cb1..bb4c122d583 100644 --- a/src/badguy/dive_mine.hpp +++ b/src/badguy/dive_mine.hpp @@ -49,6 +49,7 @@ class DiveMine final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Dive Mine"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(DiveMine)); } protected: virtual std::vector get_allowed_directions() const override; diff --git a/src/badguy/fish_chasing.hpp b/src/badguy/fish_chasing.hpp index a7ce8661e9c..0dcfbe7d310 100644 --- a/src/badguy/fish_chasing.hpp +++ b/src/badguy/fish_chasing.hpp @@ -33,6 +33,7 @@ class FishChasing final : public FishSwimming static std::string display_name() { return _("Chasing Fish"); } virtual std::string get_display_name() const override { return display_name(); } virtual std::string get_overlay_size() const override { return "2x2"; } + virtual GameObjectClasses get_class_types() const override { return FishSwimming::get_class_types().add(typeid(FishChasing)); } virtual ObjectSettings get_settings() override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/fish_harmless.hpp b/src/badguy/fish_harmless.hpp index 58895c3954e..fd1f777cede 100644 --- a/src/badguy/fish_harmless.hpp +++ b/src/badguy/fish_harmless.hpp @@ -29,6 +29,7 @@ class FishHarmless final : public FishSwimming virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Harmless Fish"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return FishSwimming::get_class_types().add(typeid(FishHarmless)); } virtual std::string get_overlay_size() const override { return "1x1"; } GameObjectTypes get_types() const override { return {}; } diff --git a/src/badguy/fish_jumping.hpp b/src/badguy/fish_jumping.hpp index ed97fe28182..99cf62ea851 100644 --- a/src/badguy/fish_jumping.hpp +++ b/src/badguy/fish_jumping.hpp @@ -40,6 +40,7 @@ class FishJumping final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Jumping Fish"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(FishJumping)); } protected: virtual std::vector get_allowed_directions() const override; diff --git a/src/badguy/fish_swimming.hpp b/src/badguy/fish_swimming.hpp index 5b9efe76c41..cecce233060 100644 --- a/src/badguy/fish_swimming.hpp +++ b/src/badguy/fish_swimming.hpp @@ -40,6 +40,7 @@ class FishSwimming : public BadGuy static std::string display_name() { return _("Swimming Fish"); } virtual std::string get_display_name() const override { return display_name(); } virtual std::string get_overlay_size() const override { return "2x1"; } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(FishSwimming)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override; diff --git a/src/badguy/flame.hpp b/src/badguy/flame.hpp index f1dcce809c0..0b4f10aab0e 100644 --- a/src/badguy/flame.hpp +++ b/src/badguy/flame.hpp @@ -46,6 +46,7 @@ class Flame final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Flame"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Flame)); } virtual void stop_looping_sounds() override; virtual void play_looping_sounds() override; diff --git a/src/badguy/flyingsnowball.hpp b/src/badguy/flyingsnowball.hpp index 6665ce29ab6..206b9084f73 100644 --- a/src/badguy/flyingsnowball.hpp +++ b/src/badguy/flyingsnowball.hpp @@ -32,6 +32,7 @@ class FlyingSnowBall final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Flying Snowball"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(FlyingSnowBall)); } virtual bool is_snipable() const override { return true; } protected: diff --git a/src/badguy/ghosttree.hpp b/src/badguy/ghosttree.hpp index 19fac6ddf62..cd900f1de69 100644 --- a/src/badguy/ghosttree.hpp +++ b/src/badguy/ghosttree.hpp @@ -40,6 +40,7 @@ class GhostTree final : public Boss virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Ghost Tree"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Boss::get_class_types().add(typeid(GhostTree)); } virtual void on_flip(float height) override; diff --git a/src/badguy/ghoul.hpp b/src/badguy/ghoul.hpp index 4227a902d57..65d01c1af9a 100644 --- a/src/badguy/ghoul.hpp +++ b/src/badguy/ghoul.hpp @@ -30,6 +30,7 @@ class Ghoul final : public BadGuy, static std::string display_name() { return _("Ghoul"); } std::string get_class_name() const override { return class_name(); } std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(PathObject)).add(typeid(Ghoul)); } bool is_freezable() const override; bool is_flammable() const override; virtual bool is_snipable() const override { return true; } diff --git a/src/badguy/goldbomb.hpp b/src/badguy/goldbomb.hpp index c9e56f0d2a2..f33ef1bfa29 100644 --- a/src/badguy/goldbomb.hpp +++ b/src/badguy/goldbomb.hpp @@ -49,6 +49,7 @@ class GoldBomb final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Gold Bomb"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(GoldBomb)); } virtual bool is_snipable() const override { return true; } virtual void stop_looping_sounds() override; diff --git a/src/badguy/granito.hpp b/src/badguy/granito.hpp index ae4b360249b..a009a959ad8 100644 --- a/src/badguy/granito.hpp +++ b/src/badguy/granito.hpp @@ -51,6 +51,7 @@ class Granito : public WalkingBadguy virtual std::string get_exposed_class_name() const override { return "Granito"; } static std::string display_name() { return _("Granito"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Granito)); } virtual bool is_snipable() const override { return false; } virtual bool is_freezable() const override { return false; } diff --git a/src/badguy/granito_big.hpp b/src/badguy/granito_big.hpp index 44e8749b86a..7d6f6467e16 100644 --- a/src/badguy/granito_big.hpp +++ b/src/badguy/granito_big.hpp @@ -43,6 +43,7 @@ class GranitoBig final : public Granito virtual std::string get_exposed_class_name() const override { return "GranitoBig"; } static std::string display_name() { return _("Big Granito"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Granito::get_class_types().add(typeid(GranitoBig)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override; diff --git a/src/badguy/granito_giant.hpp b/src/badguy/granito_giant.hpp index a3df651eab2..aebe7c34658 100644 --- a/src/badguy/granito_giant.hpp +++ b/src/badguy/granito_giant.hpp @@ -31,6 +31,7 @@ class GranitoGiant final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Giant Granito"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(GranitoGiant)); } virtual void kill_fall() override; diff --git a/src/badguy/haywire.hpp b/src/badguy/haywire.hpp index bca973206a4..e0280b8db7a 100644 --- a/src/badguy/haywire.hpp +++ b/src/badguy/haywire.hpp @@ -45,6 +45,7 @@ class Haywire final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Haywire"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Haywire)); } virtual bool is_snipable() const override { return true; } inline bool is_exploding() const { return m_is_exploding; } diff --git a/src/badguy/igel.hpp b/src/badguy/igel.hpp index 0aef788a590..70039c4f4d8 100644 --- a/src/badguy/igel.hpp +++ b/src/badguy/igel.hpp @@ -38,6 +38,7 @@ class Igel final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Igel"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Igel)); } virtual bool is_freezable() const override { return true; } virtual void unfreeze(bool melt = true) override; diff --git a/src/badguy/jumpy.hpp b/src/badguy/jumpy.hpp index 07bf84a9771..f8378833679 100644 --- a/src/badguy/jumpy.hpp +++ b/src/badguy/jumpy.hpp @@ -39,6 +39,7 @@ class Jumpy final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Jumpy"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Jumpy)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/kamikazesnowball.hpp b/src/badguy/kamikazesnowball.hpp index fdcb5da4149..1c279813740 100644 --- a/src/badguy/kamikazesnowball.hpp +++ b/src/badguy/kamikazesnowball.hpp @@ -33,6 +33,7 @@ class KamikazeSnowball : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Kamikaze Snowball"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(KamikazeSnowball)); } virtual bool is_snipable() const override { return true; } protected: @@ -63,6 +64,7 @@ class LeafShot final : public KamikazeSnowball virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Leafshot"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return KamikazeSnowball::get_class_types().add(typeid(LeafShot)); } virtual bool is_snipable() const override { return true; } diff --git a/src/badguy/kugelblitz.hpp b/src/badguy/kugelblitz.hpp index a3fee55dc97..6dea704955d 100644 --- a/src/badguy/kugelblitz.hpp +++ b/src/badguy/kugelblitz.hpp @@ -39,6 +39,7 @@ class Kugelblitz final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Kugelblitz"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Kugelblitz)); } void explode(); diff --git a/src/badguy/livefire.hpp b/src/badguy/livefire.hpp index 3eae46303c5..29331628c1f 100644 --- a/src/badguy/livefire.hpp +++ b/src/badguy/livefire.hpp @@ -37,6 +37,7 @@ class LiveFire : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Walking Flame"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(LiveFire)); } private: std::string death_sound; @@ -70,6 +71,7 @@ class LiveFireAsleep final : public LiveFire virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Sleeping Flame"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return LiveFire::get_class_types().add(typeid(LiveFireAsleep)); } private: LiveFireAsleep(const LiveFireAsleep&) = delete; @@ -88,6 +90,7 @@ class LiveFireDormant final : public LiveFire virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Dormant Flame"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return LiveFire::get_class_types().add(typeid(LiveFireDormant)); } private: LiveFireDormant(const LiveFireDormant&) = delete; diff --git a/src/badguy/mole.hpp b/src/badguy/mole.hpp index 30a8de7c5d8..07d808cf692 100644 --- a/src/badguy/mole.hpp +++ b/src/badguy/mole.hpp @@ -37,6 +37,7 @@ class Mole final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mole"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Mole)); } virtual bool is_snipable() const override { return true; } diff --git a/src/badguy/mole_rock.hpp b/src/badguy/mole_rock.hpp index b472e05bd4e..e9c378aa700 100644 --- a/src/badguy/mole_rock.hpp +++ b/src/badguy/mole_rock.hpp @@ -43,6 +43,7 @@ class MoleRock final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mole's rock"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(MoleRock)); } protected: const BadGuy* parent; /**< collisions with this BadGuy will be ignored */ diff --git a/src/badguy/mrbomb.hpp b/src/badguy/mrbomb.hpp index b4f6c221cdd..914251e92f9 100644 --- a/src/badguy/mrbomb.hpp +++ b/src/badguy/mrbomb.hpp @@ -39,6 +39,7 @@ class MrBomb final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mr. Bomb"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(MrBomb)); } virtual bool is_snipable() const override { return true; } GameObjectTypes get_types() const override; diff --git a/src/badguy/mriceblock.hpp b/src/badguy/mriceblock.hpp index b8f5ce8ee43..7b84e4ba1b5 100644 --- a/src/badguy/mriceblock.hpp +++ b/src/badguy/mriceblock.hpp @@ -48,6 +48,7 @@ class MrIceBlock : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mr. Iceblock"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(MrIceBlock)); } virtual bool is_snipable() const override { return ice_state != ICESTATE_KICKED; } virtual bool is_freezable() const override; diff --git a/src/badguy/mrtree.hpp b/src/badguy/mrtree.hpp index 24250aa09fc..21856013658 100644 --- a/src/badguy/mrtree.hpp +++ b/src/badguy/mrtree.hpp @@ -31,6 +31,7 @@ class MrTree final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mr. Tree"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(MrTree)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/owl.hpp b/src/badguy/owl.hpp index 3571d6248fd..4ec6e31584e 100644 --- a/src/badguy/owl.hpp +++ b/src/badguy/owl.hpp @@ -44,6 +44,7 @@ class Owl final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Owl"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Owl)); } virtual ObjectSettings get_settings() override; virtual bool is_snipable() const override { return true; } diff --git a/src/badguy/plant.hpp b/src/badguy/plant.hpp index 8f8136d474d..2478a12b30b 100644 --- a/src/badguy/plant.hpp +++ b/src/badguy/plant.hpp @@ -33,6 +33,7 @@ class Plant final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Plant"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Plant)); } protected: enum PlantState { diff --git a/src/badguy/rcrystallo.hpp b/src/badguy/rcrystallo.hpp index 0c6f2faedc8..b47ea645463 100644 --- a/src/badguy/rcrystallo.hpp +++ b/src/badguy/rcrystallo.hpp @@ -32,6 +32,7 @@ class RCrystallo final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Roof Crystallo"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(RCrystallo)); } virtual void active_update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/badguy/root.hpp b/src/badguy/root.hpp index c2a8903480a..ec727246773 100644 --- a/src/badguy/root.hpp +++ b/src/badguy/root.hpp @@ -38,6 +38,7 @@ class Root final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Root"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Root)); } virtual bool is_flammable() const override { return false; } virtual bool is_freezable() const override { return false; } diff --git a/src/badguy/root_sapling.hpp b/src/badguy/root_sapling.hpp index 6d30bea8c66..2de801170f8 100644 --- a/src/badguy/root_sapling.hpp +++ b/src/badguy/root_sapling.hpp @@ -40,6 +40,7 @@ class RootSapling final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Root Sapling"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(RootSapling)); } virtual void on_flip(float height) override; diff --git a/src/badguy/scrystallo.hpp b/src/badguy/scrystallo.hpp index 5761bc35667..2ac8a59cc95 100644 --- a/src/badguy/scrystallo.hpp +++ b/src/badguy/scrystallo.hpp @@ -30,6 +30,7 @@ class SCrystallo final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Sleeping Crystallo"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(SCrystallo)); } virtual void collision_solid(const CollisionHit& hit) override; virtual HitResponse collision_badguy(BadGuy& badguy, const CollisionHit& hit) override; diff --git a/src/badguy/short_fuse.hpp b/src/badguy/short_fuse.hpp index 74c80754eac..bac740e5b1c 100644 --- a/src/badguy/short_fuse.hpp +++ b/src/badguy/short_fuse.hpp @@ -29,6 +29,7 @@ class ShortFuse final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Short Fuse"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(ShortFuse)); } protected: virtual HitResponse collision_player (Player& player, const CollisionHit& hit) override; diff --git a/src/badguy/skydive.hpp b/src/badguy/skydive.hpp index dfb2b37efb9..88b1c1f441a 100644 --- a/src/badguy/skydive.hpp +++ b/src/badguy/skydive.hpp @@ -42,6 +42,7 @@ class SkyDive final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Skydive"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(SkyDive)); } virtual bool is_snipable() const override { return true; } protected: diff --git a/src/badguy/smartball.hpp b/src/badguy/smartball.hpp index 044b8564eb6..a4b5ed8ecef 100644 --- a/src/badguy/smartball.hpp +++ b/src/badguy/smartball.hpp @@ -31,6 +31,7 @@ class SmartBall final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mrs. Snowball"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(SmartBall)); } virtual bool is_snipable() const override { return true; } virtual bool is_freezable() const override; diff --git a/src/badguy/smartblock.hpp b/src/badguy/smartblock.hpp index 0b060b27e5b..6564227c8aa 100644 --- a/src/badguy/smartblock.hpp +++ b/src/badguy/smartblock.hpp @@ -29,6 +29,7 @@ class SmartBlock final : public MrIceBlock virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mrs. Iceblock"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MrIceBlock::get_class_types().add(typeid(SmartBlock)); } GameObjectTypes get_types() const override { return {}; } diff --git a/src/badguy/snail.hpp b/src/badguy/snail.hpp index a08a6040103..e77b41b2d31 100644 --- a/src/badguy/snail.hpp +++ b/src/badguy/snail.hpp @@ -42,6 +42,7 @@ class Snail final : virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Snail"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Snail)); } virtual GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/snowball.hpp b/src/badguy/snowball.hpp index 65e1a06dc29..ed0fe2433c3 100644 --- a/src/badguy/snowball.hpp +++ b/src/badguy/snowball.hpp @@ -29,6 +29,7 @@ class SnowBall final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Mr. Snowball"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(SnowBall)); } virtual bool is_snipable() const override { return true; } virtual bool is_freezable() const override; diff --git a/src/badguy/snowman.hpp b/src/badguy/snowman.hpp index 82b8b2060e9..f241643f23c 100644 --- a/src/badguy/snowman.hpp +++ b/src/badguy/snowman.hpp @@ -28,6 +28,7 @@ class Snowman final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Snowman"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Snowman)); } protected: void loose_head(); diff --git a/src/badguy/spiky.hpp b/src/badguy/spiky.hpp index 8a48a26209e..c3f95eb9e27 100644 --- a/src/badguy/spiky.hpp +++ b/src/badguy/spiky.hpp @@ -30,6 +30,7 @@ class Spiky final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Spiky"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Spiky)); } private: Spiky(const Spiky&) = delete; diff --git a/src/badguy/sspiky.hpp b/src/badguy/sspiky.hpp index 551e1b12fd8..c09f713941c 100644 --- a/src/badguy/sspiky.hpp +++ b/src/badguy/sspiky.hpp @@ -36,6 +36,7 @@ class SSpiky final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Sleeping Spiky"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(SSpiky)); } virtual void after_editor_set() override; protected: diff --git a/src/badguy/stalactite.hpp b/src/badguy/stalactite.hpp index 10f928325ed..39ad7ebb60c 100644 --- a/src/badguy/stalactite.hpp +++ b/src/badguy/stalactite.hpp @@ -41,6 +41,7 @@ class Stalactite : public StickyBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Stalactite"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return StickyBadguy::get_class_types().add(typeid(Stalactite)); } virtual ObjectSettings get_settings() override; diff --git a/src/badguy/stumpy.hpp b/src/badguy/stumpy.hpp index bfee886a51b..a46c7ff4eb2 100644 --- a/src/badguy/stumpy.hpp +++ b/src/badguy/stumpy.hpp @@ -37,6 +37,7 @@ class Stumpy final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Stumpy"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(Stumpy)); } protected: enum MyState { diff --git a/src/badguy/tarantula.hpp b/src/badguy/tarantula.hpp index 5c454ab5862..52b25d40af7 100644 --- a/src/badguy/tarantula.hpp +++ b/src/badguy/tarantula.hpp @@ -38,6 +38,7 @@ class Tarantula final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Tarantula"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Tarantula)); } virtual bool is_snipable() const override; virtual GameObjectTypes get_types() const override; diff --git a/src/badguy/toad.hpp b/src/badguy/toad.hpp index e2ff16d447d..330b2c6d1b1 100644 --- a/src/badguy/toad.hpp +++ b/src/badguy/toad.hpp @@ -37,6 +37,7 @@ class Toad final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Toad"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Toad)); } virtual bool is_snipable() const override { return true; } protected: diff --git a/src/badguy/totem.hpp b/src/badguy/totem.hpp index a4fb02769cc..d7188fba479 100644 --- a/src/badguy/totem.hpp +++ b/src/badguy/totem.hpp @@ -36,6 +36,7 @@ class Totem final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Totem"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Totem)); } virtual bool is_snipable() const override { return true; } protected: diff --git a/src/badguy/treewillowisp.hpp b/src/badguy/treewillowisp.hpp index c69ab63c705..a03c9a8dc93 100644 --- a/src/badguy/treewillowisp.hpp +++ b/src/badguy/treewillowisp.hpp @@ -27,6 +27,7 @@ class TreeWillOWisp final : public BadGuy public: TreeWillOWisp(GhostTree* tree, const Vector& pos, float radius, float speed); ~TreeWillOWisp() override; + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(TreeWillOWisp)); } virtual void activate() override; virtual void active_update(float dt_sec) override; diff --git a/src/badguy/viciousivy.hpp b/src/badguy/viciousivy.hpp index 99d566eb770..b9fa837d434 100644 --- a/src/badguy/viciousivy.hpp +++ b/src/badguy/viciousivy.hpp @@ -32,6 +32,7 @@ class ViciousIvy final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Vicious Ivy"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(ViciousIvy)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/walking_badguy.hpp b/src/badguy/walking_badguy.hpp index b65537f2e0a..4e43ed62235 100644 --- a/src/badguy/walking_badguy.hpp +++ b/src/badguy/walking_badguy.hpp @@ -52,6 +52,7 @@ class WalkingBadguy : public BadGuy const std::string& walk_right_action, int layer = LAYER_OBJECTS, const std::string& light_sprite_name = "images/objects/lightmap_light/lightmap_light-medium.sprite"); + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(WalkingBadguy)); } virtual void initialize() override; virtual void active_update(float dt_sec) override; diff --git a/src/badguy/walking_candle.hpp b/src/badguy/walking_candle.hpp index d621c46b833..3dd92d626ed 100644 --- a/src/badguy/walking_candle.hpp +++ b/src/badguy/walking_candle.hpp @@ -40,6 +40,7 @@ class WalkingCandle final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Walking Candle"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(WalkingCandle)); } private: Color lightcolor; diff --git a/src/badguy/walkingleaf.hpp b/src/badguy/walkingleaf.hpp index d2204841f00..7b4cdb15958 100644 --- a/src/badguy/walkingleaf.hpp +++ b/src/badguy/walkingleaf.hpp @@ -32,6 +32,7 @@ class WalkingLeaf final : public WalkingBadguy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Walking Leaf"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WalkingBadguy::get_class_types().add(typeid(WalkingLeaf)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/badguy/willowisp.hpp b/src/badguy/willowisp.hpp index cac9ae4e368..91436301b3a 100644 --- a/src/badguy/willowisp.hpp +++ b/src/badguy/willowisp.hpp @@ -68,6 +68,7 @@ class WillOWisp final : public BadGuy, virtual std::string get_exposed_class_name() const override { return "WillOWisp"; } static std::string display_name() { return _("Will o' Wisp"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(PathObject)).add(typeid(WillOWisp)); } virtual ObjectSettings get_settings() override; virtual void move_to(const Vector& pos) override; diff --git a/src/badguy/yeti.hpp b/src/badguy/yeti.hpp index 8b98b2e9132..a3b1211ad1c 100644 --- a/src/badguy/yeti.hpp +++ b/src/badguy/yeti.hpp @@ -37,6 +37,7 @@ class Yeti final : public Boss virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Yeti"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Boss::get_class_types().add(typeid(Yeti)); } virtual ObjectSettings get_settings() override; @@ -93,6 +94,7 @@ class Yeti final : public Boss { public: SnowExplosionParticle(const Vector& pos, const Vector& velocity); + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Yeti::SnowExplosionParticle)); } }; private: diff --git a/src/badguy/yeti_stalactite.hpp b/src/badguy/yeti_stalactite.hpp index 70a4bd01460..01904f07b39 100644 --- a/src/badguy/yeti_stalactite.hpp +++ b/src/badguy/yeti_stalactite.hpp @@ -33,6 +33,7 @@ class YetiStalactite final : public Stalactite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Yeti's Stalactite"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Stalactite::get_class_types().add(typeid(YetiStalactite)); } void start_shaking(); bool is_hanging() const; diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index 73577595821..28efb11f88d 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -38,6 +38,7 @@ class Zeekling final : public BadGuy virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Zeekling"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(Zeekling)); } virtual bool is_snipable() const override { return true; } private: diff --git a/src/editor/bezier_marker.hpp b/src/editor/bezier_marker.hpp index 383416bba6e..daf2e038a57 100644 --- a/src/editor/bezier_marker.hpp +++ b/src/editor/bezier_marker.hpp @@ -26,6 +26,7 @@ class BezierMarker final : public MarkerObject { public: BezierMarker(Path::Node* node, Vector* bezier_pos); + virtual GameObjectClasses get_class_types() const override { return MarkerObject::get_class_types().add(typeid(BezierMarker)); } virtual void move_to(const Vector& pos) override; virtual Vector get_point_vector() const override; diff --git a/src/editor/marker_object.hpp b/src/editor/marker_object.hpp index 03cb561d128..8341d182b79 100644 --- a/src/editor/marker_object.hpp +++ b/src/editor/marker_object.hpp @@ -28,6 +28,7 @@ class MarkerObject : public MovingObject public: MarkerObject(const Vector& pos); MarkerObject(); + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(MarkerObject)); } virtual void update(float dt_sec) override {} virtual void draw(DrawingContext& context) override; diff --git a/src/editor/node_marker.hpp b/src/editor/node_marker.hpp index 1a0f1e964bf..1014a960d35 100644 --- a/src/editor/node_marker.hpp +++ b/src/editor/node_marker.hpp @@ -25,6 +25,7 @@ class NodeMarker final : public MarkerObject { public: NodeMarker(std::vector::iterator node_iterator, size_t id_, UID before, UID after); + virtual GameObjectClasses get_class_types() const override { return MarkerObject::get_class_types().add(typeid(NodeMarker)); } virtual void move_to(const Vector& pos) override; virtual void editor_delete() override; diff --git a/src/editor/resize_marker.hpp b/src/editor/resize_marker.hpp index 5a832ae6269..ba0f16d623b 100644 --- a/src/editor/resize_marker.hpp +++ b/src/editor/resize_marker.hpp @@ -32,6 +32,7 @@ class ResizeMarker final : public MarkerObject public: ResizeMarker(MovingObject* obj, Side vert, Side horz); + virtual GameObjectClasses get_class_types() const override { return MarkerObject::get_class_types().add(typeid(ResizeMarker)); } void move_to(const Vector& pos) override; Vector get_point_vector() const override; diff --git a/src/object/ambient_light.hpp b/src/object/ambient_light.hpp index 34c4cead95e..43311a21ac2 100644 --- a/src/object/ambient_light.hpp +++ b/src/object/ambient_light.hpp @@ -37,6 +37,7 @@ class AmbientLight : public GameObject static std::string display_name() { return _("Ambient Light"); } virtual std::string get_display_name() const override { return display_name(); } virtual const std::string get_icon_path() const override { return "images/engine/editor/ambient_light.png"; } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(AmbientLight)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/ambient_sound.hpp b/src/object/ambient_sound.hpp index 43a868cf6ba..e37403f7f68 100644 --- a/src/object/ambient_sound.hpp +++ b/src/object/ambient_sound.hpp @@ -50,6 +50,7 @@ class AmbientSound final : public MovingObject static std::string display_name() { return _("Ambient Sound"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(AmbientSound)); } virtual void draw(DrawingContext& context) override; diff --git a/src/object/background.hpp b/src/object/background.hpp index d5f15247901..94bbbee5784 100644 --- a/src/object/background.hpp +++ b/src/object/background.hpp @@ -50,6 +50,7 @@ class Background final : public GameObject virtual std::string get_exposed_class_name() const override { return "Background"; } static std::string display_name() { return _("Background"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Background)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/background.png"; diff --git a/src/object/bicycle_platform.hpp b/src/object/bicycle_platform.hpp index 9df28d6c09f..fcec2c931a9 100644 --- a/src/object/bicycle_platform.hpp +++ b/src/object/bicycle_platform.hpp @@ -28,6 +28,7 @@ class BicyclePlatformChild : public MovingSprite public: BicyclePlatformChild(const ReaderMapping& reader, float angle_offset, BicyclePlatform& parent); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(BicyclePlatformChild)); } virtual void update(float dt_sec) override; virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; @@ -66,6 +67,7 @@ class BicyclePlatform final : public GameObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Bicycle Platform"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(BicyclePlatform)); } virtual ObjectSettings get_settings() override; virtual void editor_delete() override; diff --git a/src/object/bigsnowball.hpp b/src/object/bigsnowball.hpp index f22c2e5dcfe..757056f45f1 100644 --- a/src/object/bigsnowball.hpp +++ b/src/object/bigsnowball.hpp @@ -38,6 +38,7 @@ class BigSnowball final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Big Snowball"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(BigSnowball)); } private: void spawn_particles(); diff --git a/src/object/block.hpp b/src/object/block.hpp index 8e647bf4852..50345044f89 100644 --- a/src/object/block.hpp +++ b/src/object/block.hpp @@ -30,6 +30,8 @@ class Block : public MovingSprite Block(const Vector& pos, const std::string& sprite_file); Block(const ReaderMapping& mapping, const std::string& sprite_file); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Block)); } + virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/bonus_block.hpp b/src/object/bonus_block.hpp index 9b7ec20239d..924f59bc0ad 100644 --- a/src/object/bonus_block.hpp +++ b/src/object/bonus_block.hpp @@ -61,6 +61,7 @@ class BonusBlock final : public Block virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Bonus Block"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Block::get_class_types().add(typeid(BonusBlock)); } virtual ObjectSettings get_settings() override; GameObjectTypes get_types() const override; diff --git a/src/object/bouncy_coin.hpp b/src/object/bouncy_coin.hpp index 79c8099a65d..67f2a8de3c6 100644 --- a/src/object/bouncy_coin.hpp +++ b/src/object/bouncy_coin.hpp @@ -27,6 +27,7 @@ class BouncyCoin final : public GameObject public: BouncyCoin(const Vector& pos, bool emerge = false, const std::string& sprite_path = "images/objects/coin/coin.sprite"); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(BouncyCoin)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; virtual bool is_saveable() const override { diff --git a/src/object/brick.hpp b/src/object/brick.hpp index ffe8f0432c1..21803d4de37 100644 --- a/src/object/brick.hpp +++ b/src/object/brick.hpp @@ -33,6 +33,7 @@ class Brick : public Block virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Brick"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Block::get_class_types().add(typeid(Brick)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; @@ -69,6 +70,7 @@ class HeavyBrick : public Brick virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Heavy Brick"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Brick::get_class_types().add(typeid(HeavyBrick)); } GameObjectTypes get_types() const override { return {}; } diff --git a/src/object/bullet.hpp b/src/object/bullet.hpp index aefdbbbf8c4..601c35b1d0a 100644 --- a/src/object/bullet.hpp +++ b/src/object/bullet.hpp @@ -31,6 +31,8 @@ class Bullet final : public MovingObject public: Bullet(const Vector& pos, const Vector& xm, Direction dir, BonusType type, Player& player); + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Bullet)); } + virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; virtual void collision_solid(const CollisionHit& hit) override; diff --git a/src/object/bumper.hpp b/src/object/bumper.hpp index d4b6a3aab3a..536427122ac 100644 --- a/src/object/bumper.hpp +++ b/src/object/bumper.hpp @@ -37,6 +37,7 @@ class Bumper final : public StickyObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Bumper"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return StickyObject::get_class_types().add(typeid(Bumper)); } virtual void after_editor_set() override; virtual void on_flip(float height) override; diff --git a/src/object/camera.hpp b/src/object/camera.hpp index 912f40e4126..f91a9d34b32 100644 --- a/src/object/camera.hpp +++ b/src/object/camera.hpp @@ -67,6 +67,7 @@ class Camera final : public GameObject, virtual std::string get_exposed_class_name() const override { return "Camera"; } static std::string display_name() { return _("Camera"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(PathObject)).add(typeid(Camera)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/candle.hpp b/src/object/candle.hpp index 34be1323caa..cc3a4e0a833 100644 --- a/src/object/candle.hpp +++ b/src/object/candle.hpp @@ -42,6 +42,7 @@ class Candle final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "Candle"; } static std::string display_name() { return _("Candle"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Candle)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/circleplatform.hpp b/src/object/circleplatform.hpp index 11892f4b274..4da7c150726 100644 --- a/src/object/circleplatform.hpp +++ b/src/object/circleplatform.hpp @@ -34,6 +34,7 @@ class CirclePlatform : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Circular Platform"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(CirclePlatform)); } private: virtual void initialize(); diff --git a/src/object/cloud_particle_system.hpp b/src/object/cloud_particle_system.hpp index 20c1cee322d..81b49cc6c46 100644 --- a/src/object/cloud_particle_system.hpp +++ b/src/object/cloud_particle_system.hpp @@ -49,6 +49,7 @@ class CloudParticleSystem final : public ParticleSystem virtual std::string get_exposed_class_name() const override { return "CloudParticleSystem"; } static std::string display_name() { return _("Cloud Particles"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return ParticleSystem::get_class_types().add(typeid(CloudParticleSystem)); } virtual ObjectSettings get_settings() override; virtual const std::string get_icon_path() const override { diff --git a/src/object/coin.hpp b/src/object/coin.hpp index 194be61b99b..8b8bdc22967 100644 --- a/src/object/coin.hpp +++ b/src/object/coin.hpp @@ -43,6 +43,7 @@ class Coin : public MovingSprite, virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Coin"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(PathObject)).add(typeid(Coin)); } virtual ObjectSettings get_settings() override; GameObjectTypes get_types() const override; @@ -96,6 +97,7 @@ class HeavyCoin final : public Coin virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Heavy Coin"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Coin::get_class_types().add(typeid(HeavyCoin)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/coin_explode.hpp b/src/object/coin_explode.hpp index b8ec2233e8d..e7a316d4e77 100644 --- a/src/object/coin_explode.hpp +++ b/src/object/coin_explode.hpp @@ -25,6 +25,7 @@ class CoinExplode final : public GameObject public: CoinExplode(const Vector& pos, bool count_stats = true, const std::string& sprite_path = "images/objects/coin/coin.sprite"); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(CoinExplode)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; virtual bool is_saveable() const override { diff --git a/src/object/coin_rain.hpp b/src/object/coin_rain.hpp index 55a8ce5b222..df5c8ea3e5e 100644 --- a/src/object/coin_rain.hpp +++ b/src/object/coin_rain.hpp @@ -27,6 +27,7 @@ class CoinRain final : public GameObject public: CoinRain(const Vector& pos, bool emerge=false, bool count_stats = true, const std::string& sprite_path = "images/objects/coin/coin.sprite"); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(CoinRain)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; virtual bool is_saveable() const override { diff --git a/src/object/conveyor_belt.hpp b/src/object/conveyor_belt.hpp index 80eff3dec91..eb45c47e656 100644 --- a/src/object/conveyor_belt.hpp +++ b/src/object/conveyor_belt.hpp @@ -46,6 +46,7 @@ class ConveyorBelt final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "ConveyorBelt"; } static std::string display_name() { return _("Conveyor Belt"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(ConveyorBelt)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/custom_particle_system.hpp b/src/object/custom_particle_system.hpp index 427970374a6..2076a0b1716 100644 --- a/src/object/custom_particle_system.hpp +++ b/src/object/custom_particle_system.hpp @@ -53,6 +53,7 @@ class CustomParticleSystem : public ParticleSystem_Interactive virtual std::string get_exposed_class_name() const override { return "CustomParticleSystem"; } static std::string display_name() { return _("Custom Particles"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return ParticleSystem_Interactive::get_class_types().add(typeid(CustomParticleSystem)); } virtual void save(Writer& writer) override; virtual ObjectSettings get_settings() override; diff --git a/src/object/custom_particle_system_file.hpp b/src/object/custom_particle_system_file.hpp index b37a4c4cded..728852e5443 100644 --- a/src/object/custom_particle_system_file.hpp +++ b/src/object/custom_particle_system_file.hpp @@ -38,6 +38,7 @@ class CustomParticleSystemFile final : public CustomParticleSystem virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Custom Particles from file"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return CustomParticleSystem::get_class_types().add(typeid(CustomParticleSystemFile)); } virtual ObjectSettings get_settings() override; virtual const std::string get_icon_path() const override { diff --git a/src/object/decal.hpp b/src/object/decal.hpp index c8913305bad..edff1bd404a 100644 --- a/src/object/decal.hpp +++ b/src/object/decal.hpp @@ -48,6 +48,7 @@ class Decal final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "Decal"; } static std::string display_name() { return _("Decal"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Decal)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/display_effect.hpp b/src/object/display_effect.hpp index 33ef9533565..3822438cf94 100644 --- a/src/object/display_effect.hpp +++ b/src/object/display_effect.hpp @@ -34,6 +34,7 @@ class DisplayEffect final : public GameObject public: DisplayEffect(const std::string& name = ""); ~DisplayEffect() override; + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(DisplayEffect)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/electrifier.hpp b/src/object/electrifier.hpp index 9bf3dd26f2f..574e253a70f 100644 --- a/src/object/electrifier.hpp +++ b/src/object/electrifier.hpp @@ -35,6 +35,7 @@ class Electrifier final : public GameObject public: Electrifier(TileChangeMap replacements, float seconds); Electrifier(uint32_t oldtile, uint32_t newtile, float seconds); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Electrifier)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/endsequence.hpp b/src/object/endsequence.hpp index 5ccb154d6c4..2ccfbd99ba4 100644 --- a/src/object/endsequence.hpp +++ b/src/object/endsequence.hpp @@ -27,6 +27,7 @@ class EndSequence : public GameObject public: EndSequence(); ~EndSequence() override; + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(EndSequence)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/endsequence_fireworks.hpp b/src/object/endsequence_fireworks.hpp index c459e791738..7e052277b3e 100644 --- a/src/object/endsequence_fireworks.hpp +++ b/src/object/endsequence_fireworks.hpp @@ -25,6 +25,7 @@ class EndSequenceFireworks final : public EndSequence public: EndSequenceFireworks(); ~EndSequenceFireworks() override; + virtual GameObjectClasses get_class_types() const override { return EndSequence::get_class_types().add(typeid(EndSequenceFireworks)); } virtual void draw(DrawingContext& context) override; protected: diff --git a/src/object/endsequence_walk.hpp b/src/object/endsequence_walk.hpp index 8f4836cbaff..ef22d244e5b 100644 --- a/src/object/endsequence_walk.hpp +++ b/src/object/endsequence_walk.hpp @@ -25,6 +25,7 @@ class EndSequenceWalk final : public EndSequence public: EndSequenceWalk(); ~EndSequenceWalk() override; + virtual GameObjectClasses get_class_types() const override { return EndSequence::get_class_types().add(typeid(EndSequenceWalk)); } virtual void draw(DrawingContext& context) override; protected: diff --git a/src/object/explosion.hpp b/src/object/explosion.hpp index 0b7146fef81..070d3b654c2 100644 --- a/src/object/explosion.hpp +++ b/src/object/explosion.hpp @@ -34,6 +34,7 @@ class Explosion final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Explosion"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Explosion)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/fallblock.hpp b/src/object/fallblock.hpp index e6f627f2c34..202b56e5d1e 100644 --- a/src/object/fallblock.hpp +++ b/src/object/fallblock.hpp @@ -40,6 +40,7 @@ class FallBlock : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Falling Platform"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(FallBlock)); } virtual void on_flip(float height) override; diff --git a/src/object/falling_coin.hpp b/src/object/falling_coin.hpp index 5f942a33ee4..55ef3b3d3b8 100644 --- a/src/object/falling_coin.hpp +++ b/src/object/falling_coin.hpp @@ -26,6 +26,7 @@ class FallingCoin final : public GameObject { public: FallingCoin(const Vector& start_position, float x_vel); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(FallingCoin)); } virtual void draw(DrawingContext& context) override; virtual void update(float dt_sec) override; diff --git a/src/object/firefly.hpp b/src/object/firefly.hpp index 147cdb68195..55c820d6a1e 100644 --- a/src/object/firefly.hpp +++ b/src/object/firefly.hpp @@ -37,6 +37,7 @@ class Firefly final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Checkpoint"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Firefly)); } virtual ObjectSettings get_settings() override; virtual void on_flip(float height) override; diff --git a/src/object/fireworks.hpp b/src/object/fireworks.hpp index 23f45bf4263..e54bacb3ccf 100644 --- a/src/object/fireworks.hpp +++ b/src/object/fireworks.hpp @@ -26,6 +26,7 @@ class Fireworks final : public GameObject { public: Fireworks(); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Fireworks)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/floating_image.hpp b/src/object/floating_image.hpp index 59774cdc45d..a4fbec4a997 100644 --- a/src/object/floating_image.hpp +++ b/src/object/floating_image.hpp @@ -39,6 +39,7 @@ class FloatingImage final : public GameObject ~FloatingImage() override; virtual bool is_saveable() const override { return false; } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(FloatingImage)); } virtual std::string get_exposed_class_name() const override { return "FloatingImage"; } virtual void update(float dt_sec) override; diff --git a/src/object/floating_text.hpp b/src/object/floating_text.hpp index ca3c671a427..7b7d3214b13 100644 --- a/src/object/floating_text.hpp +++ b/src/object/floating_text.hpp @@ -28,6 +28,8 @@ class FloatingText final : public GameObject public: FloatingText(const Vector& pos, const std::string& text_); FloatingText(const Vector& pos, int s); // use this for score, for instance + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(FloatingText)); } + virtual bool is_saveable() const override { return false; } diff --git a/src/object/flower.hpp b/src/object/flower.hpp index 173a8d0c1e8..11427005be7 100644 --- a/src/object/flower.hpp +++ b/src/object/flower.hpp @@ -30,6 +30,7 @@ class Flower final : public MovingObject public: Flower(BonusType type, const std::string& custom_sprite = ""); + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Flower)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/ghost_particle_system.hpp b/src/object/ghost_particle_system.hpp index 8610b5b8e1f..2bedbf2d2ec 100644 --- a/src/object/ghost_particle_system.hpp +++ b/src/object/ghost_particle_system.hpp @@ -36,6 +36,7 @@ class GhostParticleSystem final : public ParticleSystem virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Ghost Particles"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return ParticleSystem::get_class_types().add(typeid(GhostParticleSystem)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/ghostparticles.png"; diff --git a/src/object/gradient.hpp b/src/object/gradient.hpp index 0c57c2a5e95..7259b25ae88 100644 --- a/src/object/gradient.hpp +++ b/src/object/gradient.hpp @@ -48,6 +48,7 @@ class Gradient final : public GameObject virtual std::string get_exposed_class_name() const override { return "Gradient"; } static std::string display_name() { return _("Gradient"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Gradient)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/gradient.png"; diff --git a/src/object/growup.hpp b/src/object/growup.hpp index 8c743cd1cd4..d779a01132f 100644 --- a/src/object/growup.hpp +++ b/src/object/growup.hpp @@ -25,6 +25,7 @@ class GrowUp final : public MovingSprite { public: GrowUp(const Vector& pos, Direction direction = Direction::RIGHT, const std::string& custom_sprite = ""); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(GrowUp)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/hurting_platform.hpp b/src/object/hurting_platform.hpp index db034f4bb66..d1fc19b8db9 100644 --- a/src/object/hurting_platform.hpp +++ b/src/object/hurting_platform.hpp @@ -30,6 +30,7 @@ class HurtingPlatform final : public Platform virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Hurting Platform"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Platform::get_class_types().add(typeid(HurtingPlatform)); } private: HurtingPlatform(const HurtingPlatform&) = delete; diff --git a/src/object/infoblock.hpp b/src/object/infoblock.hpp index a5351bfba72..9df49d85751 100644 --- a/src/object/infoblock.hpp +++ b/src/object/infoblock.hpp @@ -36,6 +36,7 @@ class InfoBlock final : public Block virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Info Block"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Block::get_class_types().add(typeid(InfoBlock)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/invisible_block.hpp b/src/object/invisible_block.hpp index ad2b63a169f..3d3ccb6c8bc 100644 --- a/src/object/invisible_block.hpp +++ b/src/object/invisible_block.hpp @@ -29,6 +29,7 @@ class InvisibleBlock final : public Block virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Invisible Block"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Block::get_class_types().add(typeid(InvisibleBlock)); } virtual void draw(DrawingContext& context) override; virtual bool collides(GameObject& other, const CollisionHit& hit) const override; diff --git a/src/object/invisible_wall.hpp b/src/object/invisible_wall.hpp index 02bddb90440..3b5ba67cec8 100644 --- a/src/object/invisible_wall.hpp +++ b/src/object/invisible_wall.hpp @@ -36,6 +36,7 @@ class InvisibleWall final : public MovingObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Invisible Wall"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(InvisibleWall)); } virtual bool has_variable_size() const override { return true; } diff --git a/src/object/ispy.hpp b/src/object/ispy.hpp index 681b005a14e..dea8674b2ce 100644 --- a/src/object/ispy.hpp +++ b/src/object/ispy.hpp @@ -34,6 +34,7 @@ class Ispy final : public StickyObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Ispy"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return StickyObject::get_class_types().add(typeid(Ispy)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/key.hpp b/src/object/key.hpp index d709020384b..81097fe9999 100644 --- a/src/object/key.hpp +++ b/src/object/key.hpp @@ -37,6 +37,7 @@ class Key final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Key"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Key)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/lantern.hpp b/src/object/lantern.hpp index 68d053cc5d4..435a1feaa02 100644 --- a/src/object/lantern.hpp +++ b/src/object/lantern.hpp @@ -37,6 +37,7 @@ class Lantern final : public Rock virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Lantern"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Rock::get_class_types().add(typeid(Lantern)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override { return {}; } diff --git a/src/object/level_time.hpp b/src/object/level_time.hpp index ee752a1a8a6..f592bdea360 100644 --- a/src/object/level_time.hpp +++ b/src/object/level_time.hpp @@ -74,6 +74,7 @@ class LevelTime final : public GameObject virtual std::string get_exposed_class_name() const override { return "LevelTime"; } static std::string display_name() { return _("Time Limit"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(LevelTime)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/light.hpp b/src/object/light.hpp index ce03309b56a..88ee82425f5 100644 --- a/src/object/light.hpp +++ b/src/object/light.hpp @@ -31,6 +31,8 @@ class Light : public GameObject return false; } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Light)); } + virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/lit_object.hpp b/src/object/lit_object.hpp index 4c326d38d9c..adddfe9d2c3 100644 --- a/src/object/lit_object.hpp +++ b/src/object/lit_object.hpp @@ -45,6 +45,7 @@ class LitObject final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "LitObject"; } static std::string display_name() { return _("Lit object"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(LitObject)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/magicblock.hpp b/src/object/magicblock.hpp index 21b1ef87d8c..91261eec774 100644 --- a/src/object/magicblock.hpp +++ b/src/object/magicblock.hpp @@ -41,6 +41,7 @@ class MagicBlock final: public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Magic Tile"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(MagicBlock)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/moving_sprite.hpp b/src/object/moving_sprite.hpp index 1f1c26323e9..b251e127587 100644 --- a/src/object/moving_sprite.hpp +++ b/src/object/moving_sprite.hpp @@ -57,6 +57,7 @@ class MovingSprite : public MovingObject static std::string class_name() { return "moving-sprite"; } virtual std::string get_class_name() const override { return class_name(); } virtual std::string get_exposed_class_name() const override { return "MovingSprite"; } + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(MovingSprite)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/music_object.hpp b/src/object/music_object.hpp index aecd6ee4305..b9c6e4c0448 100644 --- a/src/object/music_object.hpp +++ b/src/object/music_object.hpp @@ -41,6 +41,7 @@ class MusicObject : public GameObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Music"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(MusicObject)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/music.png"; } virtual ObjectSettings get_settings() override; diff --git a/src/object/oneup.hpp b/src/object/oneup.hpp index 373168fc49c..51efe40a3cc 100644 --- a/src/object/oneup.hpp +++ b/src/object/oneup.hpp @@ -25,6 +25,7 @@ class OneUp final : public MovingSprite { public: OneUp(const Vector& pos, Direction direction = Direction::RIGHT); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(OneUp)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/particle_zone.hpp b/src/object/particle_zone.hpp index dd59e6858e0..7504f30bd1c 100644 --- a/src/object/particle_zone.hpp +++ b/src/object/particle_zone.hpp @@ -37,6 +37,7 @@ class ParticleZone final : public MovingObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Particle zone"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(ParticleZone)); } virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; virtual ObjectSettings get_settings() override; diff --git a/src/object/particles.hpp b/src/object/particles.hpp index c92a2996326..1b090e82ff9 100644 --- a/src/object/particles.hpp +++ b/src/object/particles.hpp @@ -35,6 +35,7 @@ class Particles final : public GameObject const float min_initial_velocity, const float max_initial_velocity, const Vector& acceleration, int number, Color color, int size, float life_time, int drawing_layer); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Particles)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/particlesystem.hpp b/src/object/particlesystem.hpp index 239dd519d69..7f61f42c575 100644 --- a/src/object/particlesystem.hpp +++ b/src/object/particlesystem.hpp @@ -63,6 +63,7 @@ class ParticleSystem : public GameObject virtual std::string get_exposed_class_name() const override { return "ParticleSystem"; } static std::string display_name() { return _("Particle system"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(ParticleSystem)); } virtual ObjectSettings get_settings() override; /** diff --git a/src/object/particlesystem_interactive.hpp b/src/object/particlesystem_interactive.hpp index abf37cfb843..c0233f796cf 100644 --- a/src/object/particlesystem_interactive.hpp +++ b/src/object/particlesystem_interactive.hpp @@ -47,6 +47,7 @@ class ParticleSystem_Interactive : public ParticleSystem virtual std::string get_display_name() const override { return _("Interactive particle system"); } + virtual GameObjectClasses get_class_types() const override { return ParticleSystem::get_class_types().add(typeid(ParticleSystem_Interactive)); } protected: virtual int collision(Particle* particle, const Vector& movement); diff --git a/src/object/path_gameobject.hpp b/src/object/path_gameobject.hpp index 732c6f0d933..cbb7c7984cb 100644 --- a/src/object/path_gameobject.hpp +++ b/src/object/path_gameobject.hpp @@ -44,6 +44,7 @@ class PathGameObject : public GameObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Path"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(PathGameObject)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/path.png"; diff --git a/src/object/platform.hpp b/src/object/platform.hpp index 8308de5c763..7c852bc2008 100644 --- a/src/object/platform.hpp +++ b/src/object/platform.hpp @@ -53,6 +53,7 @@ class Platform : public MovingSprite, virtual std::string get_exposed_class_name() const override { return "Platform"; } static std::string display_name() { return _("Platform"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(PathObject)).add(typeid(Platform)); } virtual void editor_update() override; diff --git a/src/object/player.hpp b/src/object/player.hpp index 984dbaa5c4d..a0d901dd454 100644 --- a/src/object/player.hpp +++ b/src/object/player.hpp @@ -89,6 +89,7 @@ class Player final : public MovingObject virtual bool has_object_manager_priority() const override { return true; } virtual std::string get_exposed_class_name() const override { return "Player"; } virtual void remove_me() override; + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Player)); } int get_id() const { return m_id; } void set_id(int id); diff --git a/src/object/pneumatic_platform.hpp b/src/object/pneumatic_platform.hpp index e5859ec53e1..6af88c99d83 100644 --- a/src/object/pneumatic_platform.hpp +++ b/src/object/pneumatic_platform.hpp @@ -28,6 +28,7 @@ class PneumaticPlatformChild final : public MovingSprite public: PneumaticPlatformChild(const ReaderMapping& reader, bool left, PneumaticPlatform& parent); ~PneumaticPlatformChild() override; + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(PneumaticPlatformChild)); } virtual HitResponse collision(GameObject& other, const CollisionHit& hit) override; virtual void update(float dt_sec) override; @@ -64,6 +65,7 @@ class PneumaticPlatform final : public GameObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Pneumatic Platform"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(PneumaticPlatform)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/powerup.hpp b/src/object/powerup.hpp index b0b9b5f8f12..b9ad6d2fd58 100644 --- a/src/object/powerup.hpp +++ b/src/object/powerup.hpp @@ -39,6 +39,7 @@ class PowerUp final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Powerup"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(PowerUp)); } std::vector get_patches() const override; virtual ObjectSettings get_settings() override; diff --git a/src/object/pulsing_light.hpp b/src/object/pulsing_light.hpp index 8e9d60cf3e3..f453aa94313 100644 --- a/src/object/pulsing_light.hpp +++ b/src/object/pulsing_light.hpp @@ -27,6 +27,7 @@ class PulsingLight final : public Light public: PulsingLight(const Vector& center, float cycle_len = 5.0, float min_alpha = 0.0, float max_alpha = 1.0, const Color& color = Color(1.0, 1.0, 1.0, 1.0)); ~PulsingLight() override; + virtual GameObjectClasses get_class_types() const override { return Light::get_class_types().add(typeid(PulsingLight)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/pushbutton.hpp b/src/object/pushbutton.hpp index dfc49e3d640..253a44a58e5 100644 --- a/src/object/pushbutton.hpp +++ b/src/object/pushbutton.hpp @@ -31,6 +31,7 @@ class PushButton final : public StickyObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Button"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return StickyObject::get_class_types().add(typeid(PushButton)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/rain_particle_system.hpp b/src/object/rain_particle_system.hpp index 5b2acd9cae4..4a6b263858c 100644 --- a/src/object/rain_particle_system.hpp +++ b/src/object/rain_particle_system.hpp @@ -48,6 +48,7 @@ class RainParticleSystem final : public ParticleSystem_Interactive virtual std::string get_exposed_class_name() const override { return "RainParticleSystem"; } static std::string display_name() { return _("Rain Particles"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return ParticleSystem_Interactive::get_class_types().add(typeid(RainParticleSystem)); } virtual ObjectSettings get_settings() override; /** diff --git a/src/object/rainsplash.hpp b/src/object/rainsplash.hpp index 86ca688d3dd..3b06bf4db6a 100644 --- a/src/object/rainsplash.hpp +++ b/src/object/rainsplash.hpp @@ -28,6 +28,7 @@ class RainSplash final : public GameObject public: RainSplash(const Vector& pos, bool vertical); ~RainSplash() override; + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(RainSplash)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/rock.hpp b/src/object/rock.hpp index c50f8ff45fb..f38b9cd7c90 100644 --- a/src/object/rock.hpp +++ b/src/object/rock.hpp @@ -39,6 +39,7 @@ class Rock : public MovingSprite, virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Rock"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Portable)).add(typeid(Rock)); } virtual ObjectSettings get_settings() override; virtual GameObjectTypes get_types() const override; diff --git a/src/object/rublight.hpp b/src/object/rublight.hpp index 0a218585745..9772dd2eda2 100644 --- a/src/object/rublight.hpp +++ b/src/object/rublight.hpp @@ -33,6 +33,7 @@ class RubLight final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Rublight"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(RubLight)); } virtual ObjectSettings get_settings() override; virtual void on_flip(float height) override; diff --git a/src/object/rusty_trampoline.hpp b/src/object/rusty_trampoline.hpp index 86e4ac4b074..590fc0d6a09 100644 --- a/src/object/rusty_trampoline.hpp +++ b/src/object/rusty_trampoline.hpp @@ -39,6 +39,7 @@ class RustyTrampoline final : public Rock virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Rusty Trampoline"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Rock::get_class_types().add(typeid(RustyTrampoline)); } virtual ObjectSettings get_settings() override; GameObjectTypes get_types() const override { return {}; } diff --git a/src/object/scripted_object.hpp b/src/object/scripted_object.hpp index 5465f78d210..920a09d9874 100644 --- a/src/object/scripted_object.hpp +++ b/src/object/scripted_object.hpp @@ -45,6 +45,7 @@ class ScriptedObject final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "ScriptedObject"; } static std::string display_name() { return _("Scripted Object"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(ScriptedObject)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/shard.hpp b/src/object/shard.hpp index 7d3c89579ff..57c461ae7a5 100644 --- a/src/object/shard.hpp +++ b/src/object/shard.hpp @@ -34,6 +34,7 @@ class Shard final : public StickyObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Shard"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return StickyObject::get_class_types().add(typeid(Shard)); } protected: Physic m_physic; diff --git a/src/object/smoke_cloud.hpp b/src/object/smoke_cloud.hpp index 6c3b1ef47ea..4eedf2a7955 100644 --- a/src/object/smoke_cloud.hpp +++ b/src/object/smoke_cloud.hpp @@ -26,6 +26,7 @@ class SmokeCloud final : public GameObject { public: SmokeCloud(const Vector& pos); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(SmokeCloud)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/snow_particle_system.hpp b/src/object/snow_particle_system.hpp index 6b608ab27fe..854962b8fd2 100644 --- a/src/object/snow_particle_system.hpp +++ b/src/object/snow_particle_system.hpp @@ -36,6 +36,7 @@ class SnowParticleSystem final : public ParticleSystem virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Snow Particles"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return ParticleSystem::get_class_types().add(typeid(SnowParticleSystem)); } virtual ObjectSettings get_settings() override; virtual const std::string get_icon_path() const override diff --git a/src/object/sound_object.hpp b/src/object/sound_object.hpp index c2ef56791ee..b636843a03a 100644 --- a/src/object/sound_object.hpp +++ b/src/object/sound_object.hpp @@ -40,6 +40,7 @@ class SoundObject final : public GameObject virtual std::string get_exposed_class_name() const override { return "SoundObject"; } static std::string display_name() { return _("Sound"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(SoundObject)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/sound.png"; } virtual ObjectSettings get_settings() override; diff --git a/src/object/spawnpoint.hpp b/src/object/spawnpoint.hpp index 6a6c22185d3..a2e12ba57a0 100644 --- a/src/object/spawnpoint.hpp +++ b/src/object/spawnpoint.hpp @@ -47,6 +47,7 @@ class SpawnPointMarker final : public MovingObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Spawnpoint"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(SpawnPointMarker)); } virtual ObjectSettings get_settings() override; virtual int get_layer() const override { return LAYER_FOREGROUND1; } diff --git a/src/object/specialriser.hpp b/src/object/specialriser.hpp index 2e4248708f7..7eb546f66b7 100644 --- a/src/object/specialriser.hpp +++ b/src/object/specialriser.hpp @@ -27,6 +27,7 @@ class SpecialRiser final : public MovingObject { public: SpecialRiser(const Vector& pos, std::unique_ptr child, bool is_solid = false); + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(SpecialRiser)); } virtual bool is_saveable() const override { return false; } diff --git a/src/object/spotlight.hpp b/src/object/spotlight.hpp index 1f2c9422542..c214080c4b5 100644 --- a/src/object/spotlight.hpp +++ b/src/object/spotlight.hpp @@ -58,6 +58,7 @@ class Spotlight final : public MovingObject virtual std::string get_exposed_class_name() const override { return "Spotlight"; } static std::string display_name() { return _("Spotlight"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Spotlight)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/sprite_particle.hpp b/src/object/sprite_particle.hpp index 44bd77c841b..ae5dad30dfc 100644 --- a/src/object/sprite_particle.hpp +++ b/src/object/sprite_particle.hpp @@ -37,6 +37,7 @@ class SpriteParticle final : public GameObject const Vector& position, AnchorPoint anchor, const Vector& velocity, const Vector& acceleration, int drawing_layer = LAYER_OBJECTS-1, bool notimeout = false, Color color = Color::WHITE); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(SpriteParticle)); } ~SpriteParticle() override; protected: diff --git a/src/object/star.hpp b/src/object/star.hpp index 808ddf8052a..f019757707b 100644 --- a/src/object/star.hpp +++ b/src/object/star.hpp @@ -26,6 +26,7 @@ class Star final : public MovingSprite { public: Star(const Vector& pos, Direction direction = Direction::RIGHT, const std::string& custom_sprite = ""); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Star)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/object/sticky_object.hpp b/src/object/sticky_object.hpp index b276dfa5a36..13c7ed61316 100644 --- a/src/object/sticky_object.hpp +++ b/src/object/sticky_object.hpp @@ -31,6 +31,7 @@ class StickyObject : public MovingSprite int layer = LAYER_OBJECTS, CollisionGroup collision_group = COLGROUP_MOVING); StickyObject(const ReaderMapping& reader, const std::string& sprite_name, int layer = LAYER_OBJECTS, CollisionGroup collision_group = COLGROUP_MOVING); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(StickyObject)); } virtual void update(float dt_sec) override; @@ -80,6 +81,7 @@ class StickyBadguy : public BadGuy int layer = LAYER_OBJECTS, CollisionGroup collision_group = COLGROUP_MOVING); StickyBadguy(const ReaderMapping& reader, const std::string& sprite_name, int layer = LAYER_OBJECTS, CollisionGroup collision_group = COLGROUP_MOVING); + virtual GameObjectClasses get_class_types() const override { return BadGuy::get_class_types().add(typeid(StickyBadguy)); } virtual void sticky_update(float dt_sec); diff --git a/src/object/text_array_object.hpp b/src/object/text_array_object.hpp index bfbd8320ea6..81f49a68750 100644 --- a/src/object/text_array_object.hpp +++ b/src/object/text_array_object.hpp @@ -56,6 +56,7 @@ class TextArrayObject final : public GameObject virtual std::string get_exposed_class_name() const override { return "TextArrayObject"; } static std::string display_name() { return _("Text array"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(TextArrayObject)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/textarray.png"; diff --git a/src/object/text_object.hpp b/src/object/text_object.hpp index 33396c4cc33..70184ea3a56 100644 --- a/src/object/text_object.hpp +++ b/src/object/text_object.hpp @@ -51,6 +51,7 @@ class TextObject final : public GameObject virtual std::string get_exposed_class_name() const override { return "TextObject"; } static std::string display_name() { return _("Text"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(TextObject)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/textarray.png"; } diff --git a/src/object/textscroller.hpp b/src/object/textscroller.hpp index 1a15e5ae30c..d484c4fe78b 100644 --- a/src/object/textscroller.hpp +++ b/src/object/textscroller.hpp @@ -44,6 +44,7 @@ class TextScroller : public GameObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Text Scroller"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(TextScroller)); } virtual const std::string get_icon_path() const override { return "images/engine/editor/textscroller.png"; } void set_default_speed(float default_speed); diff --git a/src/object/thunderstorm.hpp b/src/object/thunderstorm.hpp index 0c888df48e1..50b71184a71 100644 --- a/src/object/thunderstorm.hpp +++ b/src/object/thunderstorm.hpp @@ -51,6 +51,7 @@ class Thunderstorm final : public GameObject virtual std::string get_exposed_class_name() const override { return "Thunderstorm"; } static std::string display_name() { return _("Thunderstorm"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Thunderstorm)); } virtual ObjectSettings get_settings() override; diff --git a/src/object/tilemap.hpp b/src/object/tilemap.hpp index 332b52c3ec2..29e000c3b14 100644 --- a/src/object/tilemap.hpp +++ b/src/object/tilemap.hpp @@ -65,6 +65,7 @@ class TileMap final : public GameObject, virtual const std::string get_icon_path() const override { return "images/engine/editor/tilemap.png"; } static std::string display_name() { return _("Tilemap"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(PathObject)).add(typeid(TileMap)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/torch.hpp b/src/object/torch.hpp index ea24ad4ac41..377f5ae6d38 100644 --- a/src/object/torch.hpp +++ b/src/object/torch.hpp @@ -46,6 +46,7 @@ class Torch final : public MovingSprite virtual std::string get_exposed_class_name() const override { return "Torch"; } static std::string display_name() { return _("Torch"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(Torch)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/object/trampoline.hpp b/src/object/trampoline.hpp index 910fa118258..29b6cfebfb5 100644 --- a/src/object/trampoline.hpp +++ b/src/object/trampoline.hpp @@ -36,6 +36,7 @@ class Trampoline final : public Rock virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Trampoline"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return Rock::get_class_types().add(typeid(Trampoline)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/object/unstable_tile.hpp b/src/object/unstable_tile.hpp index b5af23dd308..313a226ece1 100644 --- a/src/object/unstable_tile.hpp +++ b/src/object/unstable_tile.hpp @@ -41,6 +41,7 @@ class UnstableTile final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Unstable Tile"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(UnstableTile)); } GameObjectTypes get_types() const override; std::string get_default_sprite_name() const override; diff --git a/src/object/vertical_stripes.hpp b/src/object/vertical_stripes.hpp index 79535fda9ac..b789d754af3 100644 --- a/src/object/vertical_stripes.hpp +++ b/src/object/vertical_stripes.hpp @@ -28,6 +28,8 @@ class VerticalStripes final : public GameObject VerticalStripes(); ~VerticalStripes() override; + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(VerticalStripes)); } + virtual bool is_singleton() const override { return true; } virtual bool is_saveable() const override { return false; } virtual void update(float dt_sec) override; diff --git a/src/object/water_drop.hpp b/src/object/water_drop.hpp index 5f7cd70eedd..0949b7f83fd 100644 --- a/src/object/water_drop.hpp +++ b/src/object/water_drop.hpp @@ -27,6 +27,8 @@ class WaterDrop final : public MovingSprite public: WaterDrop(const Vector& pos, const std::string& sprite_path_, const Vector& velocity); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(WaterDrop)); } + virtual void update(float dt_sec) override; virtual void collision_solid(const CollisionHit& hit) override; virtual HitResponse collision(GameObject& other, const CollisionHit& ) override; diff --git a/src/object/weak_block.hpp b/src/object/weak_block.hpp index 865c97e9a99..8c9f5724f54 100644 --- a/src/object/weak_block.hpp +++ b/src/object/weak_block.hpp @@ -35,6 +35,7 @@ class WeakBlock final : public MovingSprite virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Weak Tile"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(WeakBlock)); } std::vector get_patches() const override; void update_version() override; diff --git a/src/object/wind.hpp b/src/object/wind.hpp index cfc7fe53220..787850a70cb 100644 --- a/src/object/wind.hpp +++ b/src/object/wind.hpp @@ -42,6 +42,7 @@ class Wind final : public MovingObject virtual std::string get_exposed_class_name() const override { return "Wind"; } static std::string display_name() { return _("Wind"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(Wind)); } virtual ObjectSettings get_settings() override; diff --git a/src/supertux/game_object.cpp b/src/supertux/game_object.cpp index 187ba06b4d2..6b5761a87e9 100644 --- a/src/supertux/game_object.cpp +++ b/src/supertux/game_object.cpp @@ -109,6 +109,15 @@ GameObject::save() return save_stream.str(); } +GameObjectClasses +GameObject::get_class_types() const +{ + GameObjectClasses g; + // All class types except GameObject, since everything implements GameObject + // g.add(typeid(GameObject)); + return g; +} + ObjectSettings GameObject::get_settings() { diff --git a/src/supertux/game_object.hpp b/src/supertux/game_object.hpp index c8202d6f1a8..ff0434129f7 100644 --- a/src/supertux/game_object.hpp +++ b/src/supertux/game_object.hpp @@ -22,6 +22,7 @@ #include #include #include +#include #include "editor/object_settings.hpp" #include "supertux/game_object_component.hpp" @@ -47,6 +48,24 @@ struct GameObjectType }; typedef std::vector GameObjectTypes; +/** + A helper structure to list all the type_indexes of the classes in the + type hierarchy of a given class. This makes it easier to register e.g. + a MrIceblock in lists for MrIceBlock, WalkingBadguy, Badguy, Portable, + MovingSprite, MovingObject, and GameObject. +*/ +struct GameObjectClasses +{ + std::vector types; + + GameObjectClasses& add(const std::type_info& info) + { + std::type_index idx(info); + types.push_back(idx); + return *this; + } +}; + /** This class is responsible for: * Updating and drawing the object. This should happen in the update() and @@ -102,6 +121,9 @@ class GameObject : public ExposableClass * @description Returns the display name of the object, translated to the user's locale. */ virtual std::string get_display_name() const { return _("Unknown object"); } + /** List notable classes in inheritance hierarchy of class. This makes it possible + to efficiently look up all objects deriving from a particular intermediate class */ + virtual GameObjectClasses get_class_types() const; /** Version checking/updating, patch information */ virtual std::vector get_patches() const; diff --git a/src/supertux/game_object_iterator.hpp b/src/supertux/game_object_iterator.hpp index d16757434f0..1bef5e52390 100644 --- a/src/supertux/game_object_iterator.hpp +++ b/src/supertux/game_object_iterator.hpp @@ -25,7 +25,7 @@ template class GameObjectIterator { public: - typedef std::vector >::const_iterator Iterator; + typedef std::vector::const_iterator Iterator; public: GameObjectIterator(Iterator it, Iterator end) : @@ -35,24 +35,28 @@ class GameObjectIterator { if (m_it != m_end) { - m_object = dynamic_cast(m_it->get()); - if (!m_object) - { - skip_to_next(); - } + // A dynamic_cast is needed to perform sidecasts (a.k.a. crosscasts) + // T may be one of multiple base classes of the object and need not inherit GameObject + m_object = dynamic_cast(*m_it); + assert(m_object); } } GameObjectIterator& operator++() { - skip_to_next(); + ++m_it; + if (m_it != m_end) + { + m_object = dynamic_cast(*m_it); + assert(m_object); + } return *this; } GameObjectIterator operator++(int) { GameObjectIterator tmp(*this); - skip_to_next(); + operator++(); return tmp; } @@ -82,24 +86,6 @@ class GameObjectIterator return !(*this == other); } -private: - void skip_to_next() - { - do - { - ++m_it; - if (m_it == m_end) - { - break; - } - else - { - m_object = dynamic_cast(m_it->get()); - } - } - while (!m_object); - } - private: Iterator m_it; Iterator m_end; @@ -115,11 +101,13 @@ class GameObjectRange {} GameObjectIterator begin() const { - return GameObjectIterator(m_manager.get_objects().begin(), m_manager.get_objects().end()); + auto& objects = m_manager.get_objects_by_type_index(typeid(T)); + return GameObjectIterator(objects.begin(), objects.end()); } GameObjectIterator end() const { - return GameObjectIterator(m_manager.get_objects().end(), m_manager.get_objects().end()); + auto& objects = m_manager.get_objects_by_type_index(typeid(T)); + return GameObjectIterator(objects.end(), objects.end()); } private: diff --git a/src/supertux/game_object_manager.cpp b/src/supertux/game_object_manager.cpp index f272a9f75a7..52d33a26af7 100644 --- a/src/supertux/game_object_manager.cpp +++ b/src/supertux/game_object_manager.cpp @@ -483,7 +483,10 @@ GameObjectManager::this_before_object_add(GameObject& object) } { // By type index: - m_objects_by_type_index[std::type_index(typeid(object))].push_back(&object); + for (const std::type_index& type : object.get_class_types().types) + { + m_objects_by_type_index[type].push_back(&object); + } } save_object_change(object, true); @@ -507,10 +510,13 @@ GameObjectManager::this_before_object_remove(GameObject& object) } { // By type index: - auto& vec = m_objects_by_type_index[std::type_index(typeid(object))]; - auto it = std::find(vec.begin(), vec.end(), &object); - assert(it != vec.end()); - vec.erase(it); + for (const std::type_index& type : object.get_class_types().types) + { + auto& vec = m_objects_by_type_index[type]; + auto it = std::find(vec.begin(), vec.end(), &object); + assert(it != vec.end()); + vec.erase(it); + } } } diff --git a/src/supertux/game_object_manager.hpp b/src/supertux/game_object_manager.hpp index 601918b85fc..07a79f77dba 100644 --- a/src/supertux/game_object_manager.hpp +++ b/src/supertux/game_object_manager.hpp @@ -243,8 +243,8 @@ class GameObjectManager : public ExposableClass int get_object_count(std::function predicate = nullptr) const { int total = 0; - for (const auto& obj : m_gameobjects) { - auto object = dynamic_cast(obj.get()); + for (const auto& obj : get_objects_by_type_index(typeid(T))) { + auto object = static_cast(obj); if (object && (predicate == nullptr || predicate(*object))) { total += 1; diff --git a/src/supertux/moving_object.hpp b/src/supertux/moving_object.hpp index bc5e8a1cbe5..873533a5644 100644 --- a/src/supertux/moving_object.hpp +++ b/src/supertux/moving_object.hpp @@ -46,6 +46,7 @@ class MovingObject : public GameObject, MovingObject(); MovingObject(const ReaderMapping& reader); ~MovingObject() override; + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(CollisionListener)).add(typeid(MovingObject)); } virtual void collision_solid(const CollisionHit& /*hit*/) override { diff --git a/src/supertux/player_status_hud.hpp b/src/supertux/player_status_hud.hpp index 0315f532001..3bcc649eef0 100644 --- a/src/supertux/player_status_hud.hpp +++ b/src/supertux/player_status_hud.hpp @@ -34,6 +34,7 @@ class PlayerStatusHUD : public GameObject public: PlayerStatusHUD(PlayerStatus& player_status); + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(PlayerStatusHUD)); } virtual void update(float dt_sec) override; virtual void draw(DrawingContext& context) override; diff --git a/src/trigger/climbable.hpp b/src/trigger/climbable.hpp index c3214b61d4f..6ef3bffcaa9 100644 --- a/src/trigger/climbable.hpp +++ b/src/trigger/climbable.hpp @@ -46,6 +46,7 @@ class Climbable final : public Trigger static std::string display_name() { return _("Climbable"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } + virtual GameObjectClasses get_class_types() const override { return Trigger::get_class_types().add(typeid(Climbable)); } virtual ObjectSettings get_settings() override; diff --git a/src/trigger/door.hpp b/src/trigger/door.hpp index fe363954944..7b095c33157 100644 --- a/src/trigger/door.hpp +++ b/src/trigger/door.hpp @@ -30,6 +30,7 @@ class Door final : public SpritedTrigger virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Door"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return SpritedTrigger::get_class_types().add(typeid(Door)); } virtual ObjectSettings get_settings() override; virtual void after_editor_set() override; diff --git a/src/trigger/scripttrigger.hpp b/src/trigger/scripttrigger.hpp index 538990e8752..6b3276346b7 100644 --- a/src/trigger/scripttrigger.hpp +++ b/src/trigger/scripttrigger.hpp @@ -29,6 +29,7 @@ class ScriptTrigger final : public Trigger static std::string display_name() { return _("Script Trigger"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } + virtual GameObjectClasses get_class_types() const override { return Trigger::get_class_types().add(typeid(ScriptTrigger)); } virtual ObjectSettings get_settings() override; diff --git a/src/trigger/secretarea_trigger.hpp b/src/trigger/secretarea_trigger.hpp index a32a237b5bb..8473b06da0f 100644 --- a/src/trigger/secretarea_trigger.hpp +++ b/src/trigger/secretarea_trigger.hpp @@ -36,6 +36,7 @@ class SecretAreaTrigger final : public Trigger static std::string display_name() { return _("Secret Area"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } + virtual GameObjectClasses get_class_types() const override { return Trigger::get_class_types().add(typeid(SecretAreaTrigger)); } virtual ObjectSettings get_settings() override; diff --git a/src/trigger/sequence_trigger.hpp b/src/trigger/sequence_trigger.hpp index 4de2fcb446b..fdbd44cb04b 100644 --- a/src/trigger/sequence_trigger.hpp +++ b/src/trigger/sequence_trigger.hpp @@ -31,6 +31,7 @@ class SequenceTrigger final : public Trigger static std::string display_name() { return _("Sequence Trigger"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } + virtual GameObjectClasses get_class_types() const override { return Trigger::get_class_types().add(typeid(SequenceTrigger)); } virtual ObjectSettings get_settings() override; diff --git a/src/trigger/switch.hpp b/src/trigger/switch.hpp index 0a09d06eb73..a83e267d799 100644 --- a/src/trigger/switch.hpp +++ b/src/trigger/switch.hpp @@ -29,6 +29,7 @@ class Switch final : public StickyTrigger virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Switch"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return StickyTrigger::get_class_types().add(typeid(Switch)); } virtual ObjectSettings get_settings() override; diff --git a/src/trigger/text_area.hpp b/src/trigger/text_area.hpp index 0c0b3d9df31..e652afd2bc8 100644 --- a/src/trigger/text_area.hpp +++ b/src/trigger/text_area.hpp @@ -47,6 +47,7 @@ class TextArea final : public Trigger static std::string display_name() { return _("Text Area"); } virtual std::string get_display_name() const override { return display_name(); } virtual bool has_variable_size() const override { return true; } + virtual GameObjectClasses get_class_types() const override { return Trigger::get_class_types().add(typeid(TextArea)); } private: bool m_once; diff --git a/src/trigger/trigger_base.hpp b/src/trigger/trigger_base.hpp index 211df6fdc28..f532d1a4cae 100644 --- a/src/trigger/trigger_base.hpp +++ b/src/trigger/trigger_base.hpp @@ -68,6 +68,7 @@ class Trigger : public MovingObject, { public: Trigger(const ReaderMapping& reader); + virtual GameObjectClasses get_class_types() const override { return MovingObject::get_class_types().add(typeid(TriggerBase)).add(typeid(Trigger)); } virtual void update(float) override { @@ -91,6 +92,7 @@ class SpritedTrigger : public MovingSprite, { public: SpritedTrigger(const ReaderMapping& reader, const std::string& sprite_name); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(TriggerBase)).add(typeid(SpritedTrigger)); } virtual void update(float) override { @@ -112,6 +114,7 @@ class StickyTrigger : public StickyObject, { public: StickyTrigger(const ReaderMapping& reader, const std::string& sprite_name); + virtual GameObjectClasses get_class_types() const override { return StickyObject::get_class_types().add(typeid(TriggerBase)).add(typeid(StickyTrigger)); } virtual void update(float dt_sec) override { diff --git a/src/worldmap/level_tile.hpp b/src/worldmap/level_tile.hpp index 66e20c1337f..59cc80a7539 100644 --- a/src/worldmap/level_tile.hpp +++ b/src/worldmap/level_tile.hpp @@ -35,6 +35,7 @@ class LevelTile final : public WorldMapObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Level"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WorldMapObject::get_class_types().add(typeid(LevelTile)); } virtual ObjectSettings get_settings() override; diff --git a/src/worldmap/spawn_point.hpp b/src/worldmap/spawn_point.hpp index 3a664a1a48a..108eaa915d7 100644 --- a/src/worldmap/spawn_point.hpp +++ b/src/worldmap/spawn_point.hpp @@ -57,6 +57,7 @@ class SpawnPointObject final : public WorldMapObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Spawn point"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WorldMapObject::get_class_types().add(typeid(SpawnPointObject)); } virtual ObjectSettings get_settings() override; diff --git a/src/worldmap/special_tile.hpp b/src/worldmap/special_tile.hpp index fab8de59fca..902d37c835c 100644 --- a/src/worldmap/special_tile.hpp +++ b/src/worldmap/special_tile.hpp @@ -35,6 +35,7 @@ class SpecialTile final : public WorldMapObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Special Tile"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WorldMapObject::get_class_types().add(typeid(SpecialTile)); } virtual void draw_worldmap(DrawingContext& context) override; diff --git a/src/worldmap/sprite_change.hpp b/src/worldmap/sprite_change.hpp index e889b681066..4fa4fda3292 100644 --- a/src/worldmap/sprite_change.hpp +++ b/src/worldmap/sprite_change.hpp @@ -34,6 +34,7 @@ class SpriteChange final : public WorldMapObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Sprite Change"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WorldMapObject::get_class_types().add(typeid(SpriteChange)); } virtual void draw_worldmap(DrawingContext& context) override; diff --git a/src/worldmap/teleporter.hpp b/src/worldmap/teleporter.hpp index b35b43e6aa4..39c7ec8253e 100644 --- a/src/worldmap/teleporter.hpp +++ b/src/worldmap/teleporter.hpp @@ -33,6 +33,7 @@ class Teleporter final : public WorldMapObject virtual std::string get_class_name() const override { return class_name(); } static std::string display_name() { return _("Teleporter"); } virtual std::string get_display_name() const override { return display_name(); } + virtual GameObjectClasses get_class_types() const override { return WorldMapObject::get_class_types().add(typeid(Teleporter)); } virtual ObjectSettings get_settings() override; diff --git a/src/worldmap/tux.hpp b/src/worldmap/tux.hpp index 60031875974..4347fd3d1ac 100644 --- a/src/worldmap/tux.hpp +++ b/src/worldmap/tux.hpp @@ -39,6 +39,7 @@ class Tux final : public GameObject virtual void draw(DrawingContext& context) override; virtual void update(float dt_sec) override; virtual bool is_singleton() const override { return true; } + virtual GameObjectClasses get_class_types() const override { return GameObject::get_class_types().add(typeid(Tux)); } void setup(); /**< called prior to first update */ diff --git a/src/worldmap/worldmap_object.hpp b/src/worldmap/worldmap_object.hpp index 7d60963f188..9803e576d0a 100644 --- a/src/worldmap/worldmap_object.hpp +++ b/src/worldmap/worldmap_object.hpp @@ -36,6 +36,7 @@ class WorldMapObject : public MovingSprite WorldMapObject(const ReaderMapping& mapping, const std::string& default_sprite); WorldMapObject(const ReaderMapping& mapping); WorldMapObject(const Vector& pos, const std::string& default_sprite); + virtual GameObjectClasses get_class_types() const override { return MovingSprite::get_class_types().add(typeid(WorldMapObject)); } static std::string class_name() { return "worldmap-object"; } virtual std::string get_class_name() const override { return class_name(); } From 00d6f67b9a09a044c1ac4351128487e1cde5c6c2 Mon Sep 17 00:00:00 2001 From: SuperTux Bot Date: Sat, 27 Jul 2024 01:36:29 +0000 Subject: [PATCH 25/33] Update translations --- data/levels/community2016/es.po | 11 +++--- data/locale/es.po | 65 +++++++++++++++++---------------- 2 files changed, 39 insertions(+), 37 deletions(-) diff --git a/data/levels/community2016/es.po b/data/levels/community2016/es.po index f37f9312d09..07fe28b7277 100644 --- a/data/levels/community2016/es.po +++ b/data/levels/community2016/es.po @@ -5,6 +5,7 @@ # # Translators: # Diego Enmanuel Rosales Santander, 2024 +# Unknown, 2024 # #, fuzzy msgid "" @@ -13,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2019-11-24 01:44+0100\n" "PO-Revision-Date: 2019-11-24 00:59+0000\n" -"Last-Translator: Diego Enmanuel Rosales Santander, 2024\n" +"Last-Translator: Unknown, 2024\n" "Language-Team: Spanish (https://app.transifex.com/arctic-games/teams/95/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -31,11 +32,11 @@ msgstr "Problemas Dobles" #: data/levels/community2016/Double_Problems (herobrine).stl:82 msgid "-Concentrate! Tux! It's not Mario!" -msgstr "" +msgstr "-¡Concentráte! Tux! ¡No es Mario!" #: data/levels/community2016/Double_Problems (herobrine).stl:142 msgid "You found a secret area!" -msgstr "" +msgstr "¡Has encontrado un área secreta!" #: data/levels/community2016/Entrance_To_Cave (gelada).stl:3 msgid "The Entrance To The Cave" @@ -51,7 +52,7 @@ msgstr "¡Bola de Nieve HMS a la Vista!" #: data/levels/community2016/Into_The_Palace (ThomyW).stl:3 msgid "Into The Palace" -msgstr "" +msgstr "En el palacio" #: data/levels/community2016/Is_The_Biggest_Fish (cookie monster).stl:3 msgid "Is The Biggest Fish" @@ -87,4 +88,4 @@ msgstr "" #: data/levels/community2016/worldmap.stwm:3 msgid "Community Island 2016" -msgstr "" +msgstr "Isla de comunidad 2016" diff --git a/data/locale/es.po b/data/locale/es.po index 8875f8dea17..4388a4601de 100644 --- a/data/locale/es.po +++ b/data/locale/es.po @@ -20,6 +20,7 @@ # Swyter , 2018,2021-2022,2024 # Tam Ezquerra , 2019 # Tam Ezquerra , 2019 +# Unknown, 2024 # William Beltrán , 2016 # William Beltrán , 2015-2016 msgid "" @@ -28,7 +29,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://github.com/SuperTux/supertux/issues\n" "POT-Creation-Date: 2024-05-30 16:19+0200\n" "PO-Revision-Date: 2013-08-10 22:56+0000\n" -"Last-Translator: Swyter , 2018,2021-2022,2024\n" +"Last-Translator: Unknown, 2024\n" "Language-Team: Spanish (http://app.transifex.com/arctic-games/supertux/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -97,11 +98,11 @@ msgstr "Anclado" #: src/trigger/text_area.cpp:148 msgid "Anchor offset X" -msgstr "" +msgstr "Desplazarse de anclaje X" #: src/trigger/text_area.cpp:149 msgid "Anchor offset Y" -msgstr "" +msgstr "Desplazarse de anclaje Y" #: src/trigger/text_area.cpp:150 msgid "Texts" @@ -122,7 +123,7 @@ msgstr "¿Bloqueado?" #: src/trigger/door.cpp:83 msgid "Lock Color" -msgstr "" +msgstr "Bloquear Color" #: src/trigger/switch.cpp:62 src/object/ispy.cpp:54 src/object/bumper.cpp:53 #: src/object/spotlight.cpp:106 src/object/pushbutton.cpp:61 @@ -189,7 +190,7 @@ msgstr "Se puede escalar" #: src/trigger/text_area.hpp:47 msgid "Text Area" -msgstr "" +msgstr "Àrea de texto" #: src/trigger/door.hpp:31 msgid "Door" @@ -334,7 +335,7 @@ msgstr "Normal" #: src/object/brick.cpp:60 src/object/bonus_block.cpp:175 #: src/object/coin.cpp:70 src/object/invisible_block.cpp:38 msgid "Retro" -msgstr "" +msgstr "Retro" #: src/object/brick.cpp:166 msgid "Breakable" @@ -418,7 +419,7 @@ msgstr "" #: src/object/bonus_block.cpp:172 msgid "Blue" -msgstr "" +msgstr "Azul" #: src/object/bonus_block.cpp:173 msgid "Orange" @@ -792,23 +793,23 @@ msgstr "Huevo" #: src/object/powerup.cpp:62 msgid "Fire Flower" -msgstr "" +msgstr "Flor de Fuego" #: src/object/powerup.cpp:63 msgid "Ice Flower" -msgstr "" +msgstr "Flor de Hielo" #: src/object/powerup.cpp:64 msgid "Air Flower" -msgstr "" +msgstr "Flor de Aire" #: src/object/powerup.cpp:65 msgid "Earth Flower" -msgstr "" +msgstr "Flor de Tierra" #: src/object/powerup.cpp:67 msgid "Tux Doll" -msgstr "" +msgstr "Muñeco de Tux" #: src/object/powerup.cpp:68 msgid "Flip Potion" @@ -816,7 +817,7 @@ msgstr "" #: src/object/powerup.cpp:69 msgid "Mints" -msgstr "" +msgstr "Mentas" #: src/object/powerup.cpp:70 msgid "Coffee" @@ -1810,7 +1811,7 @@ msgstr "Cristalio" #: src/badguy/kamikazesnowball.cpp:118 src/badguy/walkingleaf.cpp:36 #: src/badguy/jumpy.cpp:46 src/badguy/igel.cpp:189 src/badguy/mrtree.cpp:51 msgid "Corrupted" -msgstr "" +msgstr "Corrupto" #: src/badguy/totem.hpp:37 msgid "Totem" @@ -1870,7 +1871,7 @@ msgstr "" #: src/badguy/mriceblock.hpp:49 msgid "Mr. Iceblock" -msgstr "" +msgstr "Sr. Cubo de Hielo" #: src/badguy/granito.hpp:39 src/badguy/darttrap.cpp:163 #: src/badguy/corrupted_granito.cpp:175 src/badguy/dispenser.cpp:438 @@ -1894,7 +1895,7 @@ msgstr "" #: src/badguy/flame.cpp:84 msgid "Fire" -msgstr "" +msgstr "Fuego" #: src/badguy/flame.cpp:85 msgid "Ghost" @@ -1902,7 +1903,7 @@ msgstr "" #: src/badguy/corrupted_granito_big.hpp:35 msgid "Corrupted Big Granito" -msgstr "" +msgstr "Corrupto Granito Grande" #: src/badguy/scrystallo.cpp:57 msgid "Walk Radius" @@ -2006,7 +2007,7 @@ msgstr "" #: src/badguy/snowball.hpp:30 msgid "Mr. Snowball" -msgstr "" +msgstr "Bola de Nieve" #: src/badguy/smartblock.hpp:30 msgid "Mrs. Iceblock" @@ -2030,7 +2031,7 @@ msgstr "" #: src/badguy/mrbomb.cpp:48 msgid "Classic" -msgstr "" +msgstr "Clasico" #: src/badguy/flyingsnowball.hpp:33 msgid "Flying Snowball" @@ -2038,23 +2039,23 @@ msgstr "Bola de nieve voladora" #: src/badguy/crusher.cpp:75 msgid "Ice (normal)" -msgstr "" +msgstr "Hielo (normal)" #: src/badguy/crusher.cpp:76 msgid "Ice (big)" -msgstr "" +msgstr "Hielo (grande)" #: src/badguy/crusher.cpp:77 msgid "Rock (normal)" -msgstr "" +msgstr "Roca (normal)" #: src/badguy/crusher.cpp:78 msgid "Rock (big)" -msgstr "" +msgstr "Roca (grande)" #: src/badguy/crusher.cpp:79 msgid "Corrupted (normal)" -msgstr "" +msgstr "Corrupto (normal)" #: src/badguy/crusher.cpp:80 msgid "Corrupted (big)" @@ -2066,7 +2067,7 @@ msgstr "De lado" #: src/badguy/kamikazesnowball.hpp:34 msgid "Kamikaze Snowball" -msgstr "" +msgstr "Bola de nieve kamikaze" #: src/badguy/kamikazesnowball.hpp:64 msgid "Leafshot" @@ -2194,7 +2195,7 @@ msgstr "" #: src/badguy/stalactite.cpp:156 msgid "ice" -msgstr "" +msgstr "hielo" #: src/badguy/stalactite.cpp:157 msgid "rock" @@ -2268,7 +2269,7 @@ msgstr "" #: src/badguy/granito_big.cpp:54 src/badguy/granito.cpp:265 msgid "Walking" -msgstr "" +msgstr "Caminando" #: src/badguy/mriceblock.cpp:63 msgid "Laptop" @@ -2598,17 +2599,17 @@ msgstr "Niveles aportados" #: src/supertux/menu/contrib_menu.cpp:98 #: src/supertux/menu/contrib_menu.cpp:112 msgid "Official Contrib Levels" -msgstr "" +msgstr "Niveles oficiales de contribución" #: src/supertux/menu/contrib_menu.cpp:99 #: src/supertux/menu/contrib_menu.cpp:118 msgid "Community Contrib Levels" -msgstr "" +msgstr "Niveles de contribución por la Comunidad" #: src/supertux/menu/contrib_menu.cpp:100 #: src/supertux/menu/contrib_menu.cpp:124 msgid "User Contrib Levels" -msgstr "" +msgstr "Niveles de contribución por Usuarios" #: src/supertux/menu/contrib_menu.cpp:113 msgid "How is this possible? There are no Official Contrib Levels!" @@ -3291,7 +3292,7 @@ msgstr "A este mod le falta información." #: src/supertux/menu/addon_preview_menu.cpp:88 msgid "Perform a \"Check Online\" to try retrieving it." -msgstr "" +msgstr "Realice una \"Verificar en línea\" para intentar recuperarlo." #: src/supertux/menu/addon_preview_menu.cpp:92 msgid "No author specified." @@ -4272,7 +4273,7 @@ msgstr "" #: src/supertux/menu/multiplayer_player_menu.cpp:40 msgid "Play with the keyboard" -msgstr "" +msgstr "Jugar con el teclado" #: src/supertux/menu/multiplayer_player_menu.cpp:58 msgid "Remove Player" From d70028891752b2eba4093425c6a0fcb9a1d9eaa0 Mon Sep 17 00:00:00 2001 From: Tobias Markus Date: Sat, 27 Jul 2024 13:42:44 +0200 Subject: [PATCH 26/33] Make GameObject::get_name() return value `const std::string&` --- src/supertux/game_object.cpp | 2 +- src/supertux/game_object.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/supertux/game_object.cpp b/src/supertux/game_object.cpp index 6b5761a87e9..d52bb6d5e20 100644 --- a/src/supertux/game_object.cpp +++ b/src/supertux/game_object.cpp @@ -144,7 +144,7 @@ GameObject::get_settings() return result; } -std::string +const std::string& GameObject::get_name() const { return m_name; diff --git a/src/supertux/game_object.hpp b/src/supertux/game_object.hpp index ff0434129f7..e576d653c2d 100644 --- a/src/supertux/game_object.hpp +++ b/src/supertux/game_object.hpp @@ -200,7 +200,7 @@ class GameObject : public ExposableClass * @scripting * @description Returns the name of the object. */ - std::string get_name() const; + const std::string& get_name() const; virtual const std::string get_icon_path() const { return "images/tiles/auxiliary/notile.png"; From 5a5057859a145dc78fdeae6d934654dbcda20daf Mon Sep 17 00:00:00 2001 From: Hume2 Date: Sat, 27 Jul 2024 21:22:30 +0200 Subject: [PATCH 27/33] Scale parallax layers perspectively-correctly (#2954) I implemented it for both tilemaps and backgrounds. DEMO: https://www.youtube.com/watch?v=GnFArTYBL4E Scaling now works so that it imitates a perspective camera. The layers scale differently based on their scrolling speed. Also note that the z-position based on which the scaling is calculated, does not depend on the "z-pos" value at all, so it is nicely compatible with the old levels. It also fixes the bug which allows players to see around paralax layers when the viewport is scaled down. If the layer is large enough to cover the level in the default scale, it now works in all scales. --- src/object/background.cpp | 31 ++++++++++++++++++------------- src/object/tilemap.cpp | 13 ++++++++++--- src/video/drawing_context.cpp | 23 +++++++++++++++++++++++ src/video/drawing_context.hpp | 3 +++ 4 files changed, 54 insertions(+), 16 deletions(-) diff --git a/src/object/background.cpp b/src/object/background.cpp index 1808274671d..7008e00cb4d 100644 --- a/src/object/background.cpp +++ b/src/object/background.cpp @@ -316,8 +316,7 @@ void Background::draw_image(DrawingContext& context, const Vector& pos_) { const Sizef level(d_gameobject_manager->get_width(), d_gameobject_manager->get_height()); - const Sizef screen(context.get_width(), - context.get_height()); + const Sizef screen = context.get_viewport().get_size(); const Sizef parallax_image_size((1.0f - m_parallax_speed.x) * screen.width + level.width * m_parallax_speed.x, (1.0f - m_parallax_speed.y) * screen.height + level.height * m_parallax_speed.y); @@ -334,7 +333,6 @@ Background::draw_image(DrawingContext& context, const Vector& pos_) const int end_y = static_cast(ceilf((cliprect.get_bottom() - (pos_.y + img_h/2.0f)) / img_h)) + 1; Canvas& canvas = context.get_canvas(m_target); - context.set_flip(context.get_flip() ^ m_flip); if (m_fill) { @@ -407,7 +405,6 @@ Background::draw_image(DrawingContext& context, const Vector& pos_) break; } } - context.set_flip(context.get_flip() ^ m_flip); } void @@ -418,19 +415,27 @@ Background::draw(DrawingContext& context) if (!m_image) return; + + context.push_transform(); + if (!context.perspective_scale(m_parallax_speed.x, m_parallax_speed.y)) { + //The background is placed behind the camera. + context.pop_transform(); + return; + } + context.set_flip(context.get_flip() ^ m_flip); - Sizef level_size(d_gameobject_manager->get_width(), + const Sizef level_size(d_gameobject_manager->get_width(), d_gameobject_manager->get_height()); - Sizef screen(context.get_width(), - context.get_height()); - Sizef translation_range = level_size - screen; - Vector center_offset(context.get_translation().x - translation_range.width / 2.0f, - context.get_translation().y - translation_range.height / 2.0f); - - Vector pos(level_size.width / 2, - level_size.height / 2); + const Sizef screen = context.get_viewport().get_size(); + const Sizef translation_range = level_size - screen; + const Vector center_offset(context.get_translation().x - translation_range.width / 2.0f, + context.get_translation().y - translation_range.height / 2.0f); + + const Vector pos(level_size.width / 2, + level_size.height / 2); draw_image(context, pos + m_scroll_offset + Vector(center_offset.x * (1.0f - m_parallax_speed.x), center_offset.y * (1.0f - m_parallax_speed.y))); + context.pop_transform(); } namespace { diff --git a/src/object/tilemap.cpp b/src/object/tilemap.cpp index 422474fc05e..1c457abc4f0 100644 --- a/src/object/tilemap.cpp +++ b/src/object/tilemap.cpp @@ -442,6 +442,15 @@ TileMap::draw(DrawingContext& context) context.push_transform(); + const bool normal_speed = m_editor_active && Editor::is_active(); + const float speed_x = normal_speed ? 1.0f : m_speed_x; + const float speed_y = normal_speed ? 1.0f : m_speed_y; + if (!context.perspective_scale(speed_x, speed_y)) { + //The tilemap is placed behind the camera. + context.pop_transform(); + return; + } + if (m_flip != NO_FLIP) context.set_flip(m_flip); if (m_editor_active) { @@ -454,9 +463,7 @@ TileMap::draw(DrawingContext& context) const float trans_x = context.get_translation().x; const float trans_y = context.get_translation().y; - const bool normal_speed = m_editor_active && Editor::is_active(); - context.set_translation(Vector(trans_x * (normal_speed ? 1.0f : m_speed_x), - trans_y * (normal_speed ? 1.0f : m_speed_y))); + context.set_translation(Vector(trans_x * speed_x, trans_y * speed_y)); Rectf draw_rect = context.get_cliprect(); Rect t_draw_rect = get_tiles_overlapping(draw_rect); diff --git a/src/video/drawing_context.cpp b/src/video/drawing_context.cpp index c33a6d6570f..66bbd62b9fc 100644 --- a/src/video/drawing_context.cpp +++ b/src/video/drawing_context.cpp @@ -133,4 +133,27 @@ DrawingContext::get_size() const return Vector(get_width(), get_height()) * transform().scale; } +bool +DrawingContext::perspective_scale(float speed_x, float speed_y) +{ + DrawingTransform& tfm = transform(); + if (tfm.scale == 1 || speed_x < 0 || speed_y < 0) { + //Trivial or unreal situation: Do not apply perspective. + return true; + } + const float speed = sqrt(speed_x * speed_y); + if (speed == 0) { + //Special case: The object appears to be infinitely far. + tfm.scale = 1.0; + return true; + } + const float t = tfm.scale * (1 / speed - 1) + 1; + if (t <= 0) { + //The object will appear behind the camera, therefore we shall not see it. + return false; + } + tfm.scale /= speed * t; + return true; +} + /* EOF */ diff --git a/src/video/drawing_context.hpp b/src/video/drawing_context.hpp index ad250db5756..737e7b8d16d 100644 --- a/src/video/drawing_context.hpp +++ b/src/video/drawing_context.hpp @@ -77,6 +77,9 @@ class DrawingContext final float get_scale() const { return transform().scale; } void scale(float scale) { transform().scale *= scale; } + + /** Recalculates the scaling factor for parallax layers.*/ + bool perspective_scale(float speed_x, float speed_y); /** Apply that flip in the next draws (flips are listed on surface.h). */ void set_flip(Flip flip); From 0e542a3ddf3b59f4a73208e33e11b22cad3aae1a Mon Sep 17 00:00:00 2001 From: Vankata453 <78196474+Vankata453@users.noreply.github.com> Date: Wed, 31 Jul 2024 03:04:59 +0300 Subject: [PATCH 28/33] Add scripting documentation for `WorldMapSector` --- src/worldmap/worldmap_sector.hpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/worldmap/worldmap_sector.hpp b/src/worldmap/worldmap_sector.hpp index 69134751877..55fdf6db752 100644 --- a/src/worldmap/worldmap_sector.hpp +++ b/src/worldmap/worldmap_sector.hpp @@ -31,6 +31,11 @@ class WorldMap; /** Represents one of (potentially) multiple, separate parts of a WorldMap. WorldMap variant of Sector, utilizing only its base features. */ +/** + * @scripting + * @summary This class provides additional controlling functions for a worldmap sector, other than the ones listed at ${SRG_REF_GameObjectManager}. + * @instances An instance under ""worldmap.settings"" is available from scripts and the console. + */ class WorldMapSector final : public Base::Sector { friend class WorldMapSectorParser; @@ -104,20 +109,24 @@ class WorldMapSector final : public Base::Sector bool in_worldmap() const override { return true; } /** + * @scripting * Returns Tux's X position on the worldmap. */ float get_tux_x() const; /** + * @scripting * Returns Tux's Y position on the worldmap. */ float get_tux_y() const; /** + * @scripting * Changes the current sector of the worldmap to a specified new sector. * @param string $sector */ void set_sector(const std::string& sector); /** + * @scripting * Changes the current sector of the worldmap to a specified new sector, moving Tux to the specified spawnpoint. * @param string $sector @@ -125,6 +134,7 @@ class WorldMapSector final : public Base::Sector */ void spawn(const std::string& sector, const std::string& spawnpoint); /** + * @scripting * Moves Tux to the specified spawnpoint. * @param string $spawnpoint */ @@ -132,10 +142,12 @@ class WorldMapSector final : public Base::Sector void move_to_spawnpoint(const std::string& spawnpoint, bool pan); /** + * @scripting * Gets the path to the worldmap file. Useful for saving worldmap-specific data. */ std::string get_filename() const; /** + * @scripting * Overrides the "Title Screen Level" property for the world with ""filename"". The newly set level will be used for the title screen, after exiting the world. * @param string $filename From 0f8af762a81259d0f8e555f40082d428dcc5607e Mon Sep 17 00:00:00 2001 From: Vankata453 <78196474+Vankata453@users.noreply.github.com> Date: Wed, 31 Jul 2024 03:07:35 +0300 Subject: [PATCH 29/33] Attempt to fix Scripting workflow not triggering --- .github/workflows/scripting.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/scripting.yml b/.github/workflows/scripting.yml index 64c796115c8..8ee3816dfab 100644 --- a/.github/workflows/scripting.yml +++ b/.github/workflows/scripting.yml @@ -20,8 +20,8 @@ on: push: branches: [ "master" ] paths: - - src/* - - tools/scripting_docs_gen/* + - src/** + - tools/scripting_docs_gen/** workflow_dispatch: jobs: From c8a80f95ffaa6b16c739710230ab123c201cc8ed Mon Sep 17 00:00:00 2001 From: Vankata453 <78196474+Vankata453@users.noreply.github.com> Date: Wed, 31 Jul 2024 03:24:11 +0300 Subject: [PATCH 30/33] Add descriptions to functions in `WorldMapSector` scripting docs [ci skip] --- src/worldmap/worldmap_sector.hpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/worldmap/worldmap_sector.hpp b/src/worldmap/worldmap_sector.hpp index 55fdf6db752..862580b5f72 100644 --- a/src/worldmap/worldmap_sector.hpp +++ b/src/worldmap/worldmap_sector.hpp @@ -110,32 +110,32 @@ class WorldMapSector final : public Base::Sector /** * @scripting - * Returns Tux's X position on the worldmap. + * @description Returns Tux's X position on the worldmap. */ float get_tux_x() const; /** * @scripting - * Returns Tux's Y position on the worldmap. + * @description Returns Tux's Y position on the worldmap. */ float get_tux_y() const; /** * @scripting - * Changes the current sector of the worldmap to a specified new sector. + * @description Changes the current sector of the worldmap to a specified new sector. * @param string $sector */ void set_sector(const std::string& sector); /** * @scripting - * Changes the current sector of the worldmap to a specified new sector, - moving Tux to the specified spawnpoint. + * @description Changes the current sector of the worldmap to a specified new sector, + moving Tux to the specified spawnpoint. * @param string $sector * @param string $spawnpoint */ void spawn(const std::string& sector, const std::string& spawnpoint); /** * @scripting - * Moves Tux to the specified spawnpoint. + * @description Moves Tux to the specified spawnpoint. * @param string $spawnpoint */ void move_to_spawnpoint(const std::string& spawnpoint); @@ -143,13 +143,13 @@ class WorldMapSector final : public Base::Sector /** * @scripting - * Gets the path to the worldmap file. Useful for saving worldmap-specific data. + * @description Gets the path to the worldmap file. Useful for saving worldmap-specific data. */ std::string get_filename() const; /** * @scripting - * Overrides the "Title Screen Level" property for the world with ""filename"". - The newly set level will be used for the title screen, after exiting the world. + * @description Overrides the "Title Screen Level" property for the world with ""filename"". + The newly set level will be used for the title screen, after exiting the world. * @param string $filename */ void set_title_level(const std::string& filename); From 7fa107267404e5971b140461af1ee19f65682737 Mon Sep 17 00:00:00 2001 From: Marty <85036874+MatusGuy@users.noreply.github.com> Date: Wed, 31 Jul 2024 12:32:19 +0100 Subject: [PATCH 31/33] Do not show debug box for solid tiles in non-solid tilemaps (#3027) When enabling the "show collision rects" feature, non-solid tilemaps would show the collision rectangles for solid tiles, even though the tilemap is non solid. --- src/object/tilemap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/object/tilemap.cpp b/src/object/tilemap.cpp index 1c457abc4f0..e9db4660d8a 100644 --- a/src/object/tilemap.cpp +++ b/src/object/tilemap.cpp @@ -485,7 +485,7 @@ TileMap::draw(DrawingContext& context) if (m_tiles[index] == 0) continue; const Tile& tile = m_tileset->get(m_tiles[index]); - if (g_debug.show_collision_rects) { + if (g_debug.show_collision_rects && m_real_solid) { tile.draw_debug(context.color(), pos, LAYER_FOREGROUND1); } From 1fbfd10978f54622f3a1706cd234db49df7ccb62 Mon Sep 17 00:00:00 2001 From: Vankata453 <78196474+Vankata453@users.noreply.github.com> Date: Wed, 31 Jul 2024 22:43:30 +0300 Subject: [PATCH 32/33] Background ".sprite" support (#2748) Backgrounds can now load ".sprite" files for top, middle and bottom images. The current action for any or all of those images can be set via scripting. Backgrounds are not animated in the editor to prevent inconvenience. Closes #1089. --- src/object/background.cpp | 239 +++++++++++++++++++++++--------------- src/object/background.hpp | 31 +++-- src/sprite/sprite.cpp | 28 +++-- src/sprite/sprite.hpp | 3 +- 4 files changed, 190 insertions(+), 111 deletions(-) diff --git a/src/object/background.cpp b/src/object/background.cpp index 7008e00cb4d..4a94a075127 100644 --- a/src/object/background.cpp +++ b/src/object/background.cpp @@ -23,6 +23,8 @@ #include #include "editor/editor.hpp" +#include "sprite/sprite.hpp" +#include "sprite/sprite_manager.hpp" #include "supertux/d_scope.hpp" #include "supertux/flip_level_transformer.hpp" #include "supertux/gameconfig.hpp" @@ -31,7 +33,105 @@ #include "util/reader_mapping.hpp" #include "util/writer.hpp" #include "video/drawing_context.hpp" -#include "video/surface.hpp" + +static const std::unordered_map fallback_paths = { + {"arctis2.png", "antarctic/arctis2.png"}, + {"misty_snowhills_small.png", "antarctic/misty_snowhills_small.png"}, + {"semi_arctic.jpg", "antarctic/semi_arctic.jpg"}, + {"bridgecloud-dark.png", "arctic_bridge/bridgecloud-dark.png"}, + {"bridgecloud-light.png", "arctic_bridge/bridgecloud-light.png"}, + {"bridgeocean-fade.png", "arctic_bridge/bridgeocean-fade.png"}, + {"bridgeocean-nofade.png", "arctic_bridge/bridgeocean-nofade.png"}, + {"bridgeocean-original.png", "arctic_bridge/bridgeocean-original.png"}, + {"arcticskies1.png", "arcticskies/arcticskies1.png"}, + {"arcticskies2.png", "arcticskies/arcticskies2.png"}, + {"arcticskies3.png", "arcticskies/arcticskies3.png"}, + {"arcticskies35.png", "arcticskies/arcticskies35.png"}, + {"arcticskies4.png", "arcticskies/arcticskies4.png"}, + {"block-snow-background.png", "block_snow/block-snow-background.png"}, + {"block-snow-midground.png", "block_snow/block-snow-midground.png"}, + {"block-snow-top.png", "block_snow/block-snow-top.png"}, + {"bluemountain-bottom.png", "bluemountain/bluemountain-bottom.png"}, + {"bluemountain-middle.png", "bluemountain/bluemountain-middle.png"}, + {"bluemountain-top.png", "bluemountain/bluemountain-top.png"}, + {"bluemountain2.png", "bluemountain/bluemountain2.png"}, + {"castle_foreground.png", "castle/castle_foreground.png"}, + {"snowcastle.png", "castle/snowcastle.png"}, + {"cloud-mountains-background.png", "cloud_mountains/cloud-mountains-background.png"}, + {"cloud-mountains-bottom.png", "cloud_mountains/cloud-mountains-bottom.png"}, + {"cloud-mountains-forground.png", "cloud_mountains/cloud-mountains-forground.png"}, + {"cloud-mountains-midground.png", "cloud_mountains/cloud-mountains-midground.png"}, + {"dawn_hill_para_blur.png", "forest/dawn_hill_para_blur.png"}, + {"forest2_para.png", "forest/forest2_para.png"}, + {"forest_para2.png", "forest/forest_para2.png"}, + {"forest_para3.png", "forest/forest_para3.png"}, + {"forest_para3_bottom.png", "forest/forest_para3_bottom.png"}, + {"nighthills.png", "forest/nighthills.png"}, + {"ghostforest.jpg", "ghostforest/ghostforest.jpg"}, + {"ghostforest_grave.png", "ghostforest/ghostforest_grave.png"}, + {"ghostforest_para.png", "ghostforest/ghostforest_para.png"}, + {"cave2.jpg", "ice_cave/cave2.jpg"}, + {"darkcave-background.png", "ice_cave/darkcave-background.png"}, + {"darkcave-middle.png", "ice_cave/darkcave-middle.png"}, + {"darkcave-preview.png", "ice_cave/darkcave-preview.png"}, + {"darkcave-top_and_bottom.png", "ice_cave/darkcave-top_and_bottom.png"}, + {"darkcavemidground-middle.png", "ice_cave/darkcavemidground-middle.png"}, + {"darkcavemidground-top_and_bottom.png", "ice_cave/darkcavemidground-top_and_bottom.png"}, + {"black_800px.png", "misc/black_800px.png"}, + {"fog.png", "misc/fog.png"}, + {"grid.png", "misc/grid.png"}, + {"grid.surface", "misc/grid.surface"}, + {"heatshimmer-displacement.png", "misc/heatshimmer-displacement.png"}, + {"heatshimmer.png", "misc/heatshimmer.png"}, + {"heatshimmer.surface", "misc/heatshimmer.surface"}, + {"leaves.png", "misc/leaves.png"}, + {"oiltux.jpg", "misc/oiltux.jpg"}, + {"transparent_up.png", "misc/transparent_up.png"}, + {"nightsky.png", "nightsky/nightsky.png"}, + {"nightsky_bottom.png", "nightsky/nightsky_bottom.png"}, + {"nightsky_middle.png", "nightsky/nightsky_middle.png"}, + {"nightsky_para.png", "nightsky/nightsky_para.png"}, + {"nightsky_top.png", "nightsky/nightsky_top.png"}, +}; + +static SpritePtr load_background_sprite(const std::string& image_path) +{ + if (image_path.empty()) + return nullptr; + + if (PHYSFS_exists(image_path.c_str())) + // No need to search fallback paths. + return SpriteManager::current()->create(image_path); + + // Search for a fallback image in fallback_paths. + static const std::string default_dir = "images/background/"; + static const std::string default_dir2 = "/images/background/"; + std::string new_path = image_path; + if (image_path.substr(0, default_dir.length()) == default_dir) + new_path.erase(0, default_dir.length()); + else if (image_path.substr(0, default_dir2.length()) == default_dir2) + new_path.erase(0, default_dir2.length()); + + auto it = fallback_paths.find(new_path); + if (it == fallback_paths.end()) + // Unknown image, try checking for a ".deprecated" version, or use the dummy texture. + return SpriteManager::current()->create(image_path); + + new_path = default_dir + it->second; + return SpriteManager::current()->create(new_path); +} + +static SpritePtr load_background(const std::string& image_path) +{ + SpritePtr sprite = load_background_sprite(image_path); + if (!sprite) return nullptr; + + if (Editor::is_active()) + sprite->pause_animation(); + + return sprite; +} + Background::Background() : m_alignment(NO_ALIGNMENT), @@ -193,9 +293,9 @@ Background::get_settings() result.add_float(_("Scroll speed y"), &m_scroll_speed.y, "scroll-speed-y", 0.0f); result.add_float(_("Parallax Speed x"), &m_parallax_speed.x, "speed", std::nullopt); result.add_float(_("Parallax Speed y"), &m_parallax_speed.y, "speed-y", m_parallax_speed.x); - result.add_surface(_("Top image"), &m_imagefile_top, "image-top", ""); - result.add_surface(_("Image"), &m_imagefile, "image"); - result.add_surface(_("Bottom image"), &m_imagefile_bottom, "image-bottom", ""); + result.add_sprite(_("Top image"), &m_imagefile_top, "image-top", ""); + result.add_sprite(_("Image"), &m_imagefile, "image"); + result.add_sprite(_("Bottom image"), &m_imagefile_bottom, "image-bottom", ""); result.add_rgba(_("Colour"), &m_color, "color"); result.add_enum(_("Draw target"), reinterpret_cast(&m_target), {_("Normal"), _("Lightmap")}, @@ -334,13 +434,16 @@ Background::draw_image(DrawingContext& context, const Vector& pos_) Canvas& canvas = context.get_canvas(m_target); + m_image->set_color(m_color); + m_image->set_blend(m_blend); + if (m_fill) { Rectf dstrect(Vector(pos_.x - context.get_width() / 2.0f, pos_.y - context.get_height() / 2.0f), Sizef(context.get_width(), context.get_height())); - canvas.draw_surface_scaled(m_image, dstrect, m_layer); + m_image->draw_scaled(canvas, dstrect, m_layer); } else { @@ -351,7 +454,7 @@ Background::draw_image(DrawingContext& context, const Vector& pos_) { Vector p(pos_.x - parallax_image_size.width / 2.0f, pos_.y + static_cast(y) * img_h - img_h_2); - canvas.draw_surface(m_image, p, 0.f, m_color, m_blend, m_layer); + m_image->draw(canvas, p, m_layer); } break; @@ -360,7 +463,7 @@ Background::draw_image(DrawingContext& context, const Vector& pos_) { Vector p(pos_.x + parallax_image_size.width / 2.0f - img_w, pos_.y + static_cast(y) * img_h - img_h_2); - canvas.draw_surface(m_image, p, 0.f, m_color, m_blend, m_layer); + m_image->draw(canvas, p, m_layer); } break; @@ -369,7 +472,7 @@ Background::draw_image(DrawingContext& context, const Vector& pos_) { Vector p(pos_.x + static_cast(x) * img_w - img_w_2, pos_.y - parallax_image_size.height / 2.0f); - canvas.draw_surface(m_image, p, 0.f, m_color, m_blend, m_layer); + m_image->draw(canvas, p, m_layer); } break; @@ -378,7 +481,7 @@ Background::draw_image(DrawingContext& context, const Vector& pos_) { Vector p(pos_.x + static_cast(x) * img_w - img_w_2, pos_.y - img_h + parallax_image_size.height / 2.0f); - canvas.draw_surface(m_image, p, 0.f, m_color, m_blend, m_layer); + m_image->draw(canvas, p, m_layer); } break; @@ -391,15 +494,21 @@ Background::draw_image(DrawingContext& context, const Vector& pos_) if (m_image_top && (y < 0)) { - canvas.draw_surface(m_image_top, p, 0.f, m_color, m_blend, m_layer); + m_image_top->set_color(m_color); + m_image_top->set_blend(m_blend); + + m_image_top->draw(canvas, p, m_layer); } else if (m_image_bottom && (y > 0)) { - canvas.draw_surface(m_image_bottom, p, 0.f, m_color, m_blend, m_layer); + m_image_bottom->set_color(m_color); + m_image_bottom->set_blend(m_blend); + + m_image_bottom->draw(canvas, p, m_layer); } else { - canvas.draw_surface(m_image, p, 0.f, m_color, m_blend, m_layer); + m_image->draw(canvas, p, m_layer); } } break; @@ -438,94 +547,32 @@ Background::draw(DrawingContext& context) context.pop_transform(); } -namespace { -std::unordered_map fallback_paths = { - {"arctis2.png", "antarctic/arctis2.png"}, - {"misty_snowhills_small.png", "antarctic/misty_snowhills_small.png"}, - {"semi_arctic.jpg", "antarctic/semi_arctic.jpg"}, - {"bridgecloud-dark.png", "arctic_bridge/bridgecloud-dark.png"}, - {"bridgecloud-light.png", "arctic_bridge/bridgecloud-light.png"}, - {"bridgeocean-fade.png", "arctic_bridge/bridgeocean-fade.png"}, - {"bridgeocean-nofade.png", "arctic_bridge/bridgeocean-nofade.png"}, - {"bridgeocean-original.png", "arctic_bridge/bridgeocean-original.png"}, - {"arcticskies1.png", "arcticskies/arcticskies1.png"}, - {"arcticskies2.png", "arcticskies/arcticskies2.png"}, - {"arcticskies3.png", "arcticskies/arcticskies3.png"}, - {"arcticskies35.png", "arcticskies/arcticskies35.png"}, - {"arcticskies4.png", "arcticskies/arcticskies4.png"}, - {"block-snow-background.png", "block_snow/block-snow-background.png"}, - {"block-snow-midground.png", "block_snow/block-snow-midground.png"}, - {"block-snow-top.png", "block_snow/block-snow-top.png"}, - {"bluemountain-bottom.png", "bluemountain/bluemountain-bottom.png"}, - {"bluemountain-middle.png", "bluemountain/bluemountain-middle.png"}, - {"bluemountain-top.png", "bluemountain/bluemountain-top.png"}, - {"bluemountain2.png", "bluemountain/bluemountain2.png"}, - {"castle_foreground.png", "castle/castle_foreground.png"}, - {"snowcastle.png", "castle/snowcastle.png"}, - {"cloud-mountains-background.png", "cloud_mountains/cloud-mountains-background.png"}, - {"cloud-mountains-bottom.png", "cloud_mountains/cloud-mountains-bottom.png"}, - {"cloud-mountains-forground.png", "cloud_mountains/cloud-mountains-forground.png"}, - {"cloud-mountains-midground.png", "cloud_mountains/cloud-mountains-midground.png"}, - {"dawn_hill_para_blur.png", "forest/dawn_hill_para_blur.png"}, - {"forest2_para.png", "forest/forest2_para.png"}, - {"forest_para2.png", "forest/forest_para2.png"}, - {"forest_para3.png", "forest/forest_para3.png"}, - {"forest_para3_bottom.png", "forest/forest_para3_bottom.png"}, - {"nighthills.png", "forest/nighthills.png"}, - {"ghostforest.jpg", "ghostforest/ghostforest.jpg"}, - {"ghostforest_grave.png", "ghostforest/ghostforest_grave.png"}, - {"ghostforest_para.png", "ghostforest/ghostforest_para.png"}, - {"cave2.jpg", "ice_cave/cave2.jpg"}, - {"darkcave-background.png", "ice_cave/darkcave-background.png"}, - {"darkcave-middle.png", "ice_cave/darkcave-middle.png"}, - {"darkcave-preview.png", "ice_cave/darkcave-preview.png"}, - {"darkcave-top_and_bottom.png", "ice_cave/darkcave-top_and_bottom.png"}, - {"darkcavemidground-middle.png", "ice_cave/darkcavemidground-middle.png"}, - {"darkcavemidground-top_and_bottom.png", "ice_cave/darkcavemidground-top_and_bottom.png"}, - {"black_800px.png", "misc/black_800px.png"}, - {"fog.png", "misc/fog.png"}, - {"grid.png", "misc/grid.png"}, - {"grid.surface", "misc/grid.surface"}, - {"heatshimmer-displacement.png", "misc/heatshimmer-displacement.png"}, - {"heatshimmer.png", "misc/heatshimmer.png"}, - {"heatshimmer.surface", "misc/heatshimmer.surface"}, - {"leaves.png", "misc/leaves.png"}, - {"oiltux.jpg", "misc/oiltux.jpg"}, - {"transparent_up.png", "misc/transparent_up.png"}, - {"nightsky.png", "nightsky/nightsky.png"}, - {"nightsky_bottom.png", "nightsky/nightsky_bottom.png"}, - {"nightsky_middle.png", "nightsky/nightsky_middle.png"}, - {"nightsky_para.png", "nightsky/nightsky_para.png"}, - {"nightsky_top.png", "nightsky/nightsky_top.png"}, -}; - -} // namespace - -SurfacePtr -Background::load_background(const std::string& image_path) +void +Background::set_top_image_action(const std::string& action) { - if (image_path.empty()) - return nullptr; + if (m_image_top) + m_image_top->set_action(action); +} - if (PHYSFS_exists(image_path.c_str())) - // No need to search fallback paths. - return Surface::from_file(image_path); +void +Background::set_image_action(const std::string& action) +{ + m_image->set_action(action); +} - // Search for a fallback image in fallback_paths. - const std::string& default_dir = "images/background/"; - const std::string& default_dir2 = "/images/background/"; - std::string new_path = image_path; - if (image_path.substr(0, default_dir.length()) == default_dir) - new_path.erase(0, default_dir.length()); - else if (image_path.substr(0, default_dir2.length()) == default_dir2) - new_path.erase(0, default_dir2.length()); - auto it = fallback_paths.find(new_path); - if (it == fallback_paths.end()) - // Unknown image, let the texture manager select the dummy texture. - return Surface::from_file(image_path); +void +Background::set_bottom_image_action(const std::string& action) +{ + if (m_image_bottom) + m_image_bottom->set_action(action); +} - new_path = default_dir + it->second; - return Surface::from_file(new_path); +void +Background::set_all_image_actions(const std::string& action) +{ + set_top_image_action(action); + set_image_action(action); + set_bottom_image_action(action); } void diff --git a/src/object/background.hpp b/src/object/background.hpp index 94bbbee5784..1f3ce4480c5 100644 --- a/src/object/background.hpp +++ b/src/object/background.hpp @@ -18,12 +18,12 @@ #define HEADER_SUPERTUX_OBJECT_BACKGROUND_HPP #include "math/vector.hpp" +#include "sprite/sprite_ptr.hpp" #include "supertux/game_object.hpp" #include "supertux/timer.hpp" #include "video/blend.hpp" #include "video/drawing_context.hpp" #include "video/flip.hpp" -#include "video/surface_ptr.hpp" class ReaderMapping; @@ -131,6 +131,26 @@ class Background final : public GameObject * @param float $time */ void fade_color(float red, float green, float blue, float alpha, float time); + /** + * Sets the sprite action for the top image. + * @param string $action + */ + void set_top_image_action(const std::string& action); + /** + * Sets the sprite action for the main (middle) image. + * @param string $action + */ + void set_image_action(const std::string& action); + /** + * Sets the sprite action for the bottom image. + * @param string $action + */ + void set_bottom_image_action(const std::string& action); + /** + * Sets the sprite action for all images (top, middle and bottom). + * @param string $action + */ + void set_all_image_actions(const std::string& action); private: enum Alignment { @@ -141,9 +161,6 @@ class Background final : public GameObject BOTTOM_ALIGNMENT }; -private: - SurfacePtr load_background(const std::string& image_path); - private: /** Backgrounds with NO_ALIGNMENT are repeated over the whole screen, backgrounds with left, right, top, bottom alignment are @@ -163,9 +180,9 @@ class Background final : public GameObject Vector m_parallax_speed; Vector m_scroll_speed; Vector m_scroll_offset; - SurfacePtr m_image_top; /**< image to draw above pos */ - SurfacePtr m_image; /**< image to draw, anchored at pos */ - SurfacePtr m_image_bottom; /**< image to draw below pos+screenheight */ + SpritePtr m_image_top; /**< image to draw above pos */ + SpritePtr m_image; /**< image to draw, anchored at pos */ + SpritePtr m_image_bottom; /**< image to draw below pos+screenheight */ Blend m_blend; Color m_color; diff --git a/src/sprite/sprite.cpp b/src/sprite/sprite.cpp index de3098359be..a2cf5ceadc3 100644 --- a/src/sprite/sprite.cpp +++ b/src/sprite/sprite.cpp @@ -98,7 +98,7 @@ Sprite::set_action(const std::string& name, int loops) const SpriteData::Action* newaction = m_data.get_action(name); if (!newaction) { - log_debug << "Action '" << name << "' not found." << std::endl; + log_warning << "Action '" << name << "' not found." << std::endl; return; } @@ -138,10 +138,7 @@ Sprite::update() float frame_inc = m_action->fps * (g_game_time - m_last_ticks); m_last_ticks = g_game_time; - if (m_is_paused) - { - return; - } + if (m_is_paused) return; m_frame += frame_inc; @@ -168,10 +165,9 @@ void Sprite::draw(Canvas& canvas, const Vector& pos, int layer, Flip flip) { - assert(m_action != nullptr); + assert(m_action); update(); - DrawingContext& context = canvas.get_context(); context.push_transform(); @@ -188,6 +184,24 @@ Sprite::draw(Canvas& canvas, const Vector& pos, int layer, context.pop_transform(); } +void +Sprite::draw_scaled(Canvas& canvas, const Rectf& dest_rect, int layer, + Flip flip) +{ + assert(m_action); + update(); + + DrawingContext& context = canvas.get_context(); + context.push_transform(); + + context.set_flip(context.get_flip() ^ flip); + context.set_alpha(context.get_alpha() * m_alpha); + + canvas.draw_surface_scaled(m_action->surfaces[m_frameidx], dest_rect, layer); + + context.pop_transform(); +} + int Sprite::get_width() const { diff --git a/src/sprite/sprite.hpp b/src/sprite/sprite.hpp index 1e6eb95965c..7c9c21b99a7 100644 --- a/src/sprite/sprite.hpp +++ b/src/sprite/sprite.hpp @@ -39,6 +39,8 @@ class Sprite final /** Draw sprite, automatically calculates next frame */ void draw(Canvas& canvas, const Vector& pos, int layer, Flip flip = NO_FLIP); + void draw_scaled(Canvas& canvas, const Rectf& dest_rect, int layer, + Flip flip = NO_FLIP); /** Set action (or state) */ void set_action(const std::string& name, int loops = -1); @@ -69,7 +71,6 @@ class Sprite final void stop_animation() { m_animation_loops = 0; } void pause_animation() { m_is_paused = true; } - void resume_animation() { m_is_paused = false; } /** Check if animation is stopped or not */ From c706defb185d941dc85e553d17cf449e48fd4585 Mon Sep 17 00:00:00 2001 From: Vankata453 <78196474+Vankata453@users.noreply.github.com> Date: Fri, 2 Aug 2024 23:55:40 +0300 Subject: [PATCH 33/33] Scripting docs generator: Display `const std::string&` return type as `string` --- tools/scripting_docs_gen/parser.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/scripting_docs_gen/parser.cpp b/tools/scripting_docs_gen/parser.cpp index 460dbf6183f..bb002c28217 100644 --- a/tools/scripting_docs_gen/parser.cpp +++ b/tools/scripting_docs_gen/parser.cpp @@ -42,7 +42,9 @@ static const std::unordered_map s_simplified_types = { { "unsigned long long", "int" }, { "double", "float" }, { "std::string", "string" }, - { "std::wstring", "string" } + { "std::wstring", "string" }, + { "const std::string &", "string" }, + { "const std::wstring &", "string" } }; static void parse_base_classes(tinyxml2::XMLElement* p_inheritancenode, tinyxml2::XMLElement* p_inheritancegraph, Class::BaseClasses& list)