]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Use proper grammar in the guide
authorotta8634 <k9wolf@pm.me>
Tue, 25 Feb 2025 17:31:23 +0000 (01:31 +0800)
committerotta8634 <k9wolf@pm.me>
Tue, 25 Feb 2025 17:31:23 +0000 (01:31 +0800)
Ended paragraphs with a period, rather than nothing.

106 files changed:
qcsrc/common/gamemodes/gamemode/assault/assault.qc
qcsrc/common/gamemodes/gamemode/clanarena/clanarena.qc
qcsrc/common/gamemodes/gamemode/ctf/ctf.qc
qcsrc/common/gamemodes/gamemode/cts/cts.qc
qcsrc/common/gamemodes/gamemode/deathmatch/deathmatch.qc
qcsrc/common/gamemodes/gamemode/domination/domination.qc
qcsrc/common/gamemodes/gamemode/duel/duel.qc
qcsrc/common/gamemodes/gamemode/freezetag/freezetag.qc
qcsrc/common/gamemodes/gamemode/invasion/invasion.qc
qcsrc/common/gamemodes/gamemode/keepaway/keepaway.qc
qcsrc/common/gamemodes/gamemode/keyhunt/keyhunt.qc
qcsrc/common/gamemodes/gamemode/lms/lms.qc
qcsrc/common/gamemodes/gamemode/mayhem/mayhem.qc
qcsrc/common/gamemodes/gamemode/nexball/nexball.qc
qcsrc/common/gamemodes/gamemode/onslaught/onslaught.qc
qcsrc/common/gamemodes/gamemode/race/race.qc
qcsrc/common/gamemodes/gamemode/survival/survival.qc
qcsrc/common/gamemodes/gamemode/tdm/tdm.qc
qcsrc/common/gamemodes/gamemode/tka/tka.qc
qcsrc/common/gamemodes/gamemode/tmayhem/tmayhem.qc
qcsrc/common/items/item/armor.qc
qcsrc/common/items/item/health.qc
qcsrc/common/items/item/jetpack.qc
qcsrc/common/monsters/monster/golem.qc
qcsrc/common/monsters/monster/mage.qc
qcsrc/common/monsters/monster/spider.qc
qcsrc/common/monsters/monster/wyvern.qc
qcsrc/common/monsters/monster/zombie.qc
qcsrc/common/mutators/mutator/bloodloss/bloodloss.qc
qcsrc/common/mutators/mutator/buffs/buff/ammo.qc
qcsrc/common/mutators/mutator/buffs/buff/bash.qc
qcsrc/common/mutators/mutator/buffs/buff/disability.qc
qcsrc/common/mutators/mutator/buffs/buff/flight.qc
qcsrc/common/mutators/mutator/buffs/buff/inferno.qc
qcsrc/common/mutators/mutator/buffs/buff/jump.qc
qcsrc/common/mutators/mutator/buffs/buff/luck.qc
qcsrc/common/mutators/mutator/buffs/buff/magnet.qc
qcsrc/common/mutators/mutator/buffs/buff/medic.qc
qcsrc/common/mutators/mutator/buffs/buff/resistance.qc
qcsrc/common/mutators/mutator/buffs/buff/swapper.qc
qcsrc/common/mutators/mutator/buffs/buff/vampire.qc
qcsrc/common/mutators/mutator/buffs/buff/vengeance.qc
qcsrc/common/mutators/mutator/cloaked/cloaked.qc
qcsrc/common/mutators/mutator/dodging/dodging.qc
qcsrc/common/mutators/mutator/hook/hook.qc
qcsrc/common/mutators/mutator/instagib/instagib.qc
qcsrc/common/mutators/mutator/nades/nade/ammo.qc
qcsrc/common/mutators/mutator/nades/nade/darkness.qc
qcsrc/common/mutators/mutator/nades/nade/entrap.qc
qcsrc/common/mutators/mutator/nades/nade/heal.qc
qcsrc/common/mutators/mutator/nades/nade/ice.qc
qcsrc/common/mutators/mutator/nades/nade/monster.qc
qcsrc/common/mutators/mutator/nades/nade/napalm.qc
qcsrc/common/mutators/mutator/nades/nade/normal.qc
qcsrc/common/mutators/mutator/nades/nade/spawn.qc
qcsrc/common/mutators/mutator/nades/nade/translocate.qc
qcsrc/common/mutators/mutator/nades/nade/veil.qc
qcsrc/common/mutators/mutator/new_toys/new_toys.qc
qcsrc/common/mutators/mutator/nix/nix.qc
qcsrc/common/mutators/mutator/offhand_blaster/offhand_blaster.qc
qcsrc/common/mutators/mutator/overkill/overkill.qc
qcsrc/common/mutators/mutator/pinata/pinata.qc
qcsrc/common/mutators/mutator/powerups/powerup/invisibility.qc
qcsrc/common/mutators/mutator/powerups/powerup/shield.qc
qcsrc/common/mutators/mutator/powerups/powerup/speed.qc
qcsrc/common/mutators/mutator/powerups/powerup/strength.qc
qcsrc/common/mutators/mutator/rocketflying/rocketflying.qc
qcsrc/common/mutators/mutator/touchexplode/touchexplode.qc
qcsrc/common/mutators/mutator/vampire/vampire.qc
qcsrc/common/mutators/mutator/walljump/walljump.qc
qcsrc/common/turrets/turret/ewheel.qc
qcsrc/common/turrets/turret/flac.qc
qcsrc/common/turrets/turret/fusionreactor.qc
qcsrc/common/turrets/turret/hellion.qc
qcsrc/common/turrets/turret/hk.qc
qcsrc/common/turrets/turret/machinegun.qc
qcsrc/common/turrets/turret/mlrs.qc
qcsrc/common/turrets/turret/phaser.qc
qcsrc/common/turrets/turret/plasma.qc
qcsrc/common/turrets/turret/plasma_dual.qc
qcsrc/common/turrets/turret/tesla.qc
qcsrc/common/turrets/turret/walker.qc
qcsrc/common/vehicles/vehicle/bumblebee.qc
qcsrc/common/vehicles/vehicle/racer.qc
qcsrc/common/vehicles/vehicle/raptor.qc
qcsrc/common/vehicles/vehicle/spiderbot.qc
qcsrc/common/weapons/weapon/arc.qc
qcsrc/common/weapons/weapon/blaster.qc
qcsrc/common/weapons/weapon/crylink.qc
qcsrc/common/weapons/weapon/devastator.qc
qcsrc/common/weapons/weapon/electro.qc
qcsrc/common/weapons/weapon/fireball.qc
qcsrc/common/weapons/weapon/hagar.qc
qcsrc/common/weapons/weapon/hlac.qc
qcsrc/common/weapons/weapon/hook.qc
qcsrc/common/weapons/weapon/machinegun.qc
qcsrc/common/weapons/weapon/minelayer.qc
qcsrc/common/weapons/weapon/mortar.qc
qcsrc/common/weapons/weapon/porto.qc
qcsrc/common/weapons/weapon/rifle.qc
qcsrc/common/weapons/weapon/seeker.qc
qcsrc/common/weapons/weapon/shotgun.qc
qcsrc/common/weapons/weapon/tuba.qc
qcsrc/common/weapons/weapon/vaporizer.qc
qcsrc/common/weapons/weapon/vortex.qc
qcsrc/menu/xonotic/guide/pages.qc

index d5d6545778106f248b94e4222ce0dce1722bbb60..493f60c258dc3857d869ffe46d5198a140eab061 100644 (file)
@@ -4,12 +4,12 @@
 METHOD(Assault, describe, string(Assault this))
 {
     TC(Assault, this);
-    return sprintf(_("%s is a team-based gamemode involving an attacking and a defending team\n\n"
+    return sprintf(_("%s is a team-based gamemode involving an attacking and a defending team.\n\n"
         "The attacking team destroys objects placed on the map, which opens up new doors or pathways to more objects, until a main object (the enemy power core) is reached. "
-        "The attacking team wins the round if they manage to destroy the power core before time runs out, and then teams switch roles in the next round\n\n"
-        "The defending team has to defend the objects, winning the round if they successfully prevent the attacking team from destroying the power core\n\n"
-        "A team will win the match overall once they win at least one round where they attacked and one round where they defended, meaning there can be ties\n\n"
-        "Objects have waypoints which show their health and position, and they're destroyed by shooting them with any weapon"),
+        "The attacking team wins the round if they manage to destroy the power core before time runs out, and then teams switch roles in the next round.\n\n"
+        "The defending team has to defend the objects, winning the round if they successfully prevent the attacking team from destroying the power core.\n\n"
+        "A team will win the match overall once they win at least one round where they attacked and one round where they defended, meaning there can be ties.\n\n"
+        "Objects have waypoints which show their health and position, and they're destroyed by shooting them with any weapon."),
     COLORED_NAME(this));
 }
 #endif
index f85384be651b0423994172e08dfcddc6a893493b..91b3c5f3d9a436ea7c795336a62fc4a7015afdcc 100644 (file)
@@ -5,9 +5,9 @@ METHOD(ClanArena, describe, string(ClanArena this))
 {
     TC(ClanArena, this);
     return sprintf(_("%s is a common round-based gamemode played with teams, where players spawn with all weapons available, have maximum health and armor, but only have one life per round. "
-        "There are no pickups available on the map in %s, making the gameplay fast-paced and focused on combat\n\n"
-        "Rounds start with a ten second grace period where weapons cannot be fired, so it's a good opportunity to group up with your team\n\n"
-        "The match ends once a team reaches a certain number of won rounds, or has a considerable lead over the other team\n\n"
+        "There are no pickups available on the map in %s, making the gameplay fast-paced and focused on combat.\n\n"
+        "Rounds start with a ten second grace period where weapons cannot be fired, so it's a good opportunity to group up with your team.\n\n"
+        "The match ends once a team reaches a certain number of won rounds, or has a considerable lead over the other team.\n\n"
         "Since players only have one life per round, it's important to group up with fellow teammates and pay attention to any callouts from them. "
         "Team coordination is key!"),
     COLORED_NAME(this), COLORED_NAME(this));
index c8f078e21e3e3de68d8754d6b8a2f475475224a3..8ddc59165d76da2393ccc2f79992d39328458577 100644 (file)
@@ -5,14 +5,14 @@ METHOD(CaptureTheFlag, describe, string(CaptureTheFlag this))
 {
     TC(CaptureTheFlag, this);
     return sprintf(_("%s is a common team-based gamemode where the object is to steal an enemy team's flag and bring it back to your own to capture it. "
-        "A flag can only be captured if your own flag is also home in its base, so it's important to collect your flag after it's dropped\n\n"
-        "The game is won once a team reaches a certain number of \"caps\" (captures), or has a considerable lead over the other team\n\n"
+        "A flag can only be captured if your own flag is also home in its base, so it's important to collect your flag after it's dropped.\n\n"
+        "The game is won once a team reaches a certain number of \"caps\" (captures), or has a considerable lead over the other team.\n\n"
         "If a flag is dropped into the void or a death trap it will be immediately returned to its base, or otherwise it will sit idle for a while before automatically returning itself. "
-        "If all flags are held by an enemy, after some time period a \"stalemate\" will initiate and all flag carriers (\"fc\"s) will be exposed on the radar and with waypoints\n\n"
-        "Some %s maps have more than two bases on it, but generally this is a 2-team gamemode\n\n"
+        "If all flags are held by an enemy, after some time period a \"stalemate\" will initiate and all flag carriers (\"fc\"s) will be exposed on the radar and with waypoints.\n\n"
+        "Some %s maps have more than two bases on it, but generally this is a 2-team gamemode.\n\n"
         "This gamemode rewards crafty movement, since the more difficult it is for enemies to attack you, the more likely you are to escape from their base with their flag. "
         "Importantly, it also rewards base defense since if your enemies can't take your flag, they can never capture. "
-        "Lastly, good team communication is important, especially to let them know if you see the enemy flag carrier"),
+        "Lastly, good team communication is important, especially to let them know if you see the enemy flag carrier."),
     COLORED_NAME(this), COLORED_NAME(this));
 }
 #endif
index 838f058d124b7c7d438860b6c88894a27fc77884..82b1c1379eb0acfd500a3cefc92a8d4f9f5383b2 100644 (file)
@@ -7,10 +7,10 @@ METHOD(RaceCTS, describe, string(RaceCTS this))
 {
     TC(RaceCTS, this);
     return sprintf(_("%s is a unique gamemode, focusing on racing against other players on the map, rather than fighting them with weapons. "
-        "Players run through the map from start to finish as fast as possible and try to beat the times set by others\n\n"
-        "%s is similar to %s, except you don't run in laps, and instead run from the start line to the finish line, then start over again\n\n"
+        "Players run through the map from start to finish as fast as possible and try to beat the times set by others.\n\n"
+        "%s is similar to %s, except you don't run in laps, and instead run from the start line to the finish line, then start over again.\n\n"
         "Although this gamemode is quite different from the rest, it is played quite frequently since it's a great way to master movement skills and there are heaps of community-made maps available. "
-        "Also, it only requires one player to play"),
+        "Also, it only requires one player to play."),
     COLORED_NAME(this), COLORED_NAME(this), COLORED_NAME(MAPINFO_TYPE_RACE));
 }
 #endif
index a79bb0a1eff172ab98559c7415be231ba3891bb7..c71fe825ef24d19e41774c1fdb96f137c27f62c4 100644 (file)
@@ -8,9 +8,9 @@ METHOD(Deathmatch, describe, string(Deathmatch this))
 {
     TC(Deathmatch, this);
     return sprintf(_("%s is a simple free-for-all fight to the death, where everyone plays against everyone else, and the winner is the one with the most points. "
-        "When fragged, you respawn with only the starter weapons, so any you collected up will have to be re-picked up\n\n"
-        "Scoring is quite simple, fragging an opponent adds one to your score, and fragging yourself subtracts one\n\n"
-        "Maps often have powerups and items like %s and %s, which are usually highly contested since sometimes they have the power to make or break a game, so making good use of them is important"),
+        "When fragged, you respawn with only the starter weapons, so any you collected up will have to be re-picked up.\n\n"
+        "Scoring is quite simple, fragging an opponent adds one to your score, and fragging yourself subtracts one.\n\n"
+        "Maps often have powerups and items like %s and %s, which are usually highly contested since sometimes they have the power to make or break a game, so making good use of them is important."),
     COLORED_NAME(this), COLORED_NAME(ITEM_HealthMega), COLORED_NAME(ITEM_ArmorMega));
 }
 #endif
index ef21634e28f30912516c073e05ebb7eed005a7ba..01d1f258b94be74e343bb86ac1fffee867ddb755 100644 (file)
@@ -4,11 +4,11 @@
 METHOD(Domination, describe, string(Domination this))
 {
     TC(Domination, this);
-    return sprintf(_("%s is a gamemode where teams compete to dominate the map by capturing and keeping control points\n\n"
+    return sprintf(_("%s is a gamemode where teams compete to dominate the map by capturing and keeping control points.\n\n"
         "Control points are displayed on the radar to make finding them easy, and they are captured by simply walking through them. "
         "However, an enemy can just as easily steal a control point owned by your team by doing the same. "
-        "Control points start neutral (owned by no teams)\n\n"
-        "Scoring is a combination of frags and score automatically generated by any control points held by your team, every few seconds"),
+        "Control points start neutral (owned by no teams).\n\n"
+        "Scoring is a combination of frags and score automatically generated by any control points held by your team, every few seconds."),
     COLORED_NAME(this));
 }
 #endif
index 349d6eda7b6803ca3bb7eab971b081d877edd40c..fc59bf18be05f990d4b22cdf665b7e15f30b584b 100644 (file)
@@ -8,11 +8,11 @@
 METHOD(Duel, describe, string(Duel this))
 {
     TC(Duel, this);
-    return sprintf(_("%s is a 1-vs-1 arena battle to decide the winner, essentially a 2-player version of %s, making it one of the most competitive gamemodes\n\n"
+    return sprintf(_("%s is a 1-vs-1 arena battle to decide the winner, essentially a 2-player version of %s, making it one of the most competitive gamemodes.\n\n"
         "Since players on their own, important items like the %s and %s are heavily contested, "
         "and are often \"timed\" by observing the in-game timer when it is picked up to determine when it'll next spawn. "
-        "The player with the best item control is often the winner\n\n"
-        "Once you kill your opponent, they will spawn with few weapons and limited health, so it is a good opportunity to search the map for them to pick up an easy frag and continue your streak"),
+        "The player with the best item control is often the winner.\n\n"
+        "Once you kill your opponent, they will spawn with few weapons and limited health, so it is a good opportunity to search the map for them to pick up an easy frag and continue your streak."),
     COLORED_NAME(this), COLORED_NAME(MAPINFO_TYPE_DEATHMATCH), COLORED_NAME(ITEM_HealthMega), COLORED_NAME(ITEM_ArmorMega));
 }
 #endif
index 9b54d65695337efa21a7710cf4a1f0cec7844f1f..6c550aa9cac9becbaf4402d8526dd83a0564b163 100644 (file)
@@ -5,12 +5,12 @@ METHOD(FreezeTag, describe, string(FreezeTag this))
 {
     TC(FreezeTag, this);
     return sprintf(_("%s is a round-based teamplay gamemode where killed players are frozen and need to be unfrozen to re-enter the round. "
-        "The round ends when all players from all opposing teams are frozen, scoring the remaining team a point\n\n"
+        "The round ends when all players from all opposing teams are frozen, scoring the remaining team a point.\n\n"
         "Frozen players slowly unfreeze over time, but they unfreeze much faster when \"revived\" by a teammate standing in close proximity. "
-        "Additionally, damaging frozen players on the other team helps unfreeze them, so it is best to try to avoid doing that\n\n"
-        "Like in many other round-based gamemodes, rounds start with a ten second grace period where weapons cannot be fired, meaning it's a good opportunity to grab as many pickups as you can\n\n"
+        "Additionally, damaging frozen players on the other team helps unfreeze them, so it is best to try to avoid doing that.\n\n"
+        "Like in many other round-based gamemodes, rounds start with a ten second grace period where weapons cannot be fired, meaning it's a good opportunity to grab as many pickups as you can.\n\n"
         "Sneakily reviving a teammate will bring them back into the match to help outnumber your opponents, but it should be done with caution since often enemies pay close attention to frozen players to make sure they aren't being revived. "
-        "For this reason it's important to have good team communication especially while frozen, so you can let your teammates know where the enemies are"),
+        "For this reason it's important to have good team communication especially while frozen, so you can let your teammates know where the enemies are."),
     COLORED_NAME(this));
 }
 #endif
index c000db4ae2074240a1d76efa589a9d219635009a..05378e27b849dc2e199cd20ae2321d58b97f6840 100644 (file)
@@ -6,8 +6,8 @@ METHOD(Invasion, describe, string(Invasion this))
     TC(Invasion, this);
     return sprintf(_("%s is a unique gamemode played in rounds where a herd of monsters spawn all around the map and players must try to kill as many as possible. "
         "Since players can't damage each other, they instead fight to steal monster frags from each other. "
-        "The player who frags the most monsters overall wins the match\n\n"
-        "A round ends when either all monsters are fragged, or after a time limit"),
+        "The player who frags the most monsters overall wins the match.\n\n"
+        "A round ends when either all monsters are fragged, or after a time limit."),
     COLORED_NAME(this));
 }
 #endif
index ea7143c1c0fc7d25aaa80725ee80cb69b261d8d8..8cb7bf71980de48bab2ca29ae0c211060be83a62 100644 (file)
@@ -6,13 +6,13 @@
 METHOD(Keepaway, describe, string(Keepaway this))
 {
     TC(Keepaway, this);
-    return sprintf(_("%s is a free-for-all match where a ball spawns randomly on the map and the goal is to hold the ball for as long as possible\n\n"
+    return sprintf(_("%s is a free-for-all match where a ball spawns randomly on the map and the goal is to hold the ball for as long as possible.\n\n"
         "Your score increases when you frag someone while you're holding a ball and when you frag the ball carrier. "
-        "The first player to reach the score limit will win the match\n\n"
+        "The first player to reach the score limit will win the match.\n\n"
         "When the ball carrier is fragged, the ball will drop to the ground and anyone is able to pick it up. "
         "If nobody picks it up after some time it will get bored and teleport itself elsewhere. "
         "Like the flag in %s, the ball in %s can also be thrown, but it's not a great idea since you have no teammates!\n\n"
-        "%s rewards good fragging but also good movement, since the better you can evade attacks, the longer you can keep the ball"),
+        "%s rewards good fragging but also good movement, since the better you can evade attacks, the longer you can keep the ball."),
     COLORED_NAME(this), COLORED_NAME(MAPINFO_TYPE_CTF), COLORED_NAME(this), COLORED_NAME(this));
 }
 #endif
index 4cb1870844853c09ebd51411dc82dafae1ebce11..1cf73750b7285244eed88cdc7881eb4948102e80 100644 (file)
@@ -7,10 +7,10 @@ METHOD(KeyHunt, describe, string(KeyHunt this))
 {
     TC(KeyHunt, this);
     return sprintf(_("%s is a round-based gamemode played with a few teams, where each team starts with 1 key and all keys must be collected to win the round. "
-        "The team member who is given the key at the start of the round is randomly selected after a ten second period, and the location of all keys will be visible in the radar after a few seconds\n\n"
+        "The team member who is given the key at the start of the round is randomly selected after a ten second period, and the location of all keys will be visible in the radar after a few seconds.\n\n"
         "Scoring in %s is quite complicated, involving a mix of gathering all keys, points for collecting a key, killing an enemy key carrier, and killing other enemies. "
-        "If a key is destroyed by being dropped into the void or a death trap, points are allocated accordingly\n\n"
-        "Like in %s the key can be dropped, so you can pass it to your teammates if you're running low on health"),
+        "If a key is destroyed by being dropped into the void or a death trap, points are allocated accordingly.\n\n"
+        "Like in %s the key can be dropped, so you can pass it to your teammates if you're running low on health."),
     COLORED_NAME(this), COLORED_NAME(this), COLORED_NAME(MAPINFO_TYPE_CTF));
 }
 #endif
index b1c00e1728c56d7c55a42f03c62166305c5dbda9..d4f419301d4ff66a5bb65b1bd9db8b0b96d59acb 100644 (file)
@@ -8,8 +8,8 @@ METHOD(LastManStanding, describe, string(LastManStanding this))
     TC(LastManStanding, this);
     return sprintf(_("%s is a free-for-all gamemode where all players start with a certain number of lives, and are eliminated from the match once they lose all lives. "
         "Players spawn in with all available weapons, maximum health, maximum armor, and health and armor do not regenerate, similar to gamemodes like %s. "
-        "Similarly, item pickups don't spawn on the map\n\n"
-        "Hiding is sometimes a viable strategy since if you can't be found you can't lose lives, but often you become a vulnerable target once discovered"),
+        "Similarly, item pickups don't spawn on the map.\n\n"
+        "Hiding is sometimes a viable strategy since if you can't be found you can't lose lives, but often you become a vulnerable target once discovered."),
     COLORED_NAME(this), COLORED_NAME(MAPINFO_TYPE_CA));
 }
 #endif
index 0dc1acf9d33969cdeb8a8db21e3bd0382971b295..a667b8fe506234e809b3798bf9119b5ca695c093 100644 (file)
@@ -7,12 +7,12 @@ METHOD(mayhem, describe, string(mayhem this))
 {
        TC(mayhem, this);
        return sprintf(_("%s is a fast-paced free-for-all deathmatch where players spawn in with all available weapons and maximum health and armor. "
-               "There are no pickups enabled on maps, but buffs are still available\n\n"
+               "There are no pickups enabled on maps, but buffs are still available.\n\n"
                "It shines in its unique handling of scoring, accouting for both frags but also damage dealt. "
                "This means that if you almost frag a player you will still be rewarded with points, but dealing the final blow is always better if possible. "
-               "Points are deducted when you walk into hazards, but not when you do movement tricks like blaster jumping since self damage is disabled\n\n"
-               "Since damage is always rewarded in %s, the more you shoot the better, turning this gamemode into chaotic fun at times\n\n"
-               "This gamemode is often seen as a more newbie-friendly version of %s"),
+               "Points are deducted when you walk into hazards, but not when you do movement tricks like blaster jumping since self damage is disabled.\n\n"
+               "Since damage is always rewarded in %s, the more you shoot the better, turning this gamemode into chaotic fun at times.\n\n"
+               "This gamemode is often seen as a more newbie-friendly version of %s."),
        COLORED_NAME(this), COLORED_NAME(this), COLORED_NAME(MAPINFO_TYPE_DEATHMATCH));
 }
 #endif
index 2ea7269c59c7ad982feec8a8487e8f3aea2ac582..b47ebf9712115be8102aa87ad8e190e7c211d7d1 100644 (file)
@@ -6,8 +6,8 @@
 METHOD(NexBall, describe, string(NexBall this))
 {
     TC(NexBall, this);
-    return sprintf(_("%s is a fun ball sport game where 2 teams compete to score the most goals\n\n"
-        "%s is usually played as either soccer where players walk into the ball to kick it around, or basketball where players have a %s so can pass the ball and intercept passes\n\n"
+    return sprintf(_("%s is a fun ball sport game where 2 teams compete to score the most goals.\n\n"
+        "%s is usually played as either soccer where players walk into the ball to kick it around, or basketball where players have a %s so can pass the ball and intercept passes.\n\n"
         "Keep in mind players can score own goals, so don't embarrass yourself in front of your team!"),
     COLORED_NAME(this), COLORED_NAME(this), COLORED_NAME(WEP_NEXBALL));
 }
index 6d2e472dacc7d7eedfd72de668656ddf5d070428..de2402b0efe5c2f0afbd21f830bb7c57383008a1 100644 (file)
@@ -73,11 +73,11 @@ METHOD(Onslaught, describe, string(Onslaught this))
 {
        TC(Onslaught, this);
        return sprintf(_("%s is a team-based gamemode similar to %s where the final goal is to destroy the enemy team core generator. "
-               "In order to destroy the generator, control points on the map (similar to those in %s) must first be captured\n\n"
-               "Since your team can only capture a control point if it is connected to another control point currently owned by your team, you have to systematically work through the map to reach the enemy generator\n\n"
+               "In order to destroy the generator, control points on the map (similar to those in %s) must first be captured.\n\n"
+               "Since your team can only capture a control point if it is connected to another control point currently owned by your team, you have to systematically work through the map to reach the enemy generator.\n\n"
                "A control point is captured by walking into it then waiting for it to finish constructing. "
-               "Control points of the opposing team are destroyed by attacking the \"info bot\" that hovers above them, converting the control point to neutral once it is destroyed\n\n"
-               "When in overtime, the enemy's generator will start to decay, at a faster rate the more control points your team has"),
+               "Control points of the opposing team are destroyed by attacking the \"info bot\" that hovers above them, converting the control point to neutral once it is destroyed.\n\n"
+               "When in overtime, the enemy's generator will start to decay, at a faster rate the more control points your team has."),
        COLORED_NAME(this), COLORED_NAME(MAPINFO_TYPE_ASSAULT));
 }
 
index 99c1ab88fb64c5a8f1ade6de6f1158fa99ccc0cc..59cfaf63e6798613efe8faf803ca4324f24e58c5 100644 (file)
@@ -6,9 +6,9 @@
 METHOD(Race, describe, string(Race this))
 {
     TC(Race, this);
-    return sprintf(_("%s is a gamemode similar to %s except the start and finish line of the track are identical, so you run laps repeatedly through the track\n\n"
+    return sprintf(_("%s is a gamemode similar to %s except the start and finish line of the track are identical, so you run laps repeatedly through the track.\n\n"
         "Consequently the aim is to keep running constantly to complete as many laps as possible for the shot at the fastest time, rather than resetting runs like in %s to set the individual best time. "
-        "Since you continue straight onto the next lap, having a speedy finish to a lap means that your next lap will start off with high speed, giving you a good shot at beating your personal best"),
+        "Since you continue straight onto the next lap, having a speedy finish to a lap means that your next lap will start off with high speed, giving you a good shot at beating your personal best."),
     COLORED_NAME(this), COLORED_NAME(MAPINFO_TYPE_CTS), COLORED_NAME(MAPINFO_TYPE_CTS));
 }
 #endif
index 41eac7b888337507cfb112308028f9a70d282f6d..e086109b07f9c215a31f405eeb77c2c786129332 100644 (file)
@@ -8,12 +8,12 @@ METHOD(Survival, describe, string(Survival this))
 {
     TC(Survival, this);
     return sprintf(_("%s is a hunter-survivor gamemode involving two teams where the goal of the hunters is to frag all survivors, and the goal of the survivors is to frag all hunters or survive until time runs out. "
-        "The trick lies in the fact that players only know which team they belong to, and not the team membership of any other players\n\n"
-        "Since the goal of both teams is essentially to eliminate all members of the opposite team, it can be tricky for survivors to figure out their fellow teammates\n\n"
+        "The trick lies in the fact that players only know which team they belong to, and not the team membership of any other players.\n\n"
+        "Since the goal of both teams is essentially to eliminate all members of the opposite team, it can be tricky for survivors to figure out their fellow teammates.\n\n"
         "Teams are randomly selected as the round begins, with the hunter team being a bit smaller, "
-        "and then the round starts with a brief warmup grace period in which items can be collected but weapons can't be fired\n\n"
+        "and then the round starts with a brief warmup grace period in which items can be collected but weapons can't be fired.\n\n"
         "Players are rewarded a point for each member of the opposing team they frag, only if they survive the round, and points are deducted for each teammate fragged. "
-        "Extra points are also to survivors who survive until the round timer expires"),
+        "Extra points are also to survivors who survive until the round timer expires."),
     COLORED_NAME(this));
 }
 #endif
index aeceb2b6d0e92e84357e124b4a690a73bfdfd468..0a9c8a810d3913961f8b244ca300ab89ff73b7c3 100644 (file)
@@ -6,9 +6,9 @@
 METHOD(TeamDeathmatch, describe, string(TeamDeathmatch this))
 {
     TC(TeamDeathmatch, this);
-    return sprintf(_("%s is the team version of %s, played with 2 teams\n\n"
-        "Scoring is quite simple, adding a point for every frag, and subtracting a point for fragging yourself or a teammate\n\n"
-        "Careful team coordination and map control is often a key to winning a match, and sometimes players will share weapons with their teammates"),
+    return sprintf(_("%s is the team version of %s, played with 2 teams.\n\n"
+        "Scoring is quite simple, adding a point for every frag, and subtracting a point for fragging yourself or a teammate.\n\n"
+        "Careful team coordination and map control is often a key to winning a match, and sometimes players will share weapons with their teammates."),
     COLORED_NAME(this), COLORED_NAME(MAPINFO_TYPE_DEATHMATCH));
 }
 #endif
index 3b2d7b60b0c56c699bcb7c05e9db8a13b75e4871..8265b2d1af5722d14fe88a8ad05fdf4b6143e8d0 100644 (file)
@@ -6,8 +6,8 @@
 METHOD(TeamKeepaway, describe, string(TeamKeepaway this))
 {
     TC(TeamKeepaway, this);
-    return sprintf(_("%s is the team version of %s, where teams compete to maintain superior control over the ball\n\n"
-        "Scoring is similar to in %s, except that points are awarded for frags for all members of the team of the player holding the ball"),
+    return sprintf(_("%s is the team version of %s, where teams compete to maintain superior control over the ball.\n\n"
+        "Scoring is similar to in %s, except that points are awarded for frags for all members of the team of the player holding the ball."),
     COLORED_NAME(this), COLORED_NAME(MAPINFO_TYPE_KEEPAWAY), COLORED_NAME(MAPINFO_TYPE_KEEPAWAY));
 }
 #endif
index bedc8cf24a05a3b0ca446beaf387433f63c773a5..ea8e8abb7c42f98e4d204741ffd83748402bf5ff 100644 (file)
@@ -8,9 +8,9 @@ METHOD(tmayhem, describe, string(tmayhem this))
 {
        TC(tmayhem, this);
        return sprintf(_("%s is a constant action team-based gamemode based on %s, using the same scoring system. "
-               "It has a lot of similarities to %s, with one of the main differences being that %s is a round-based gamemode, and of course the scoring system differences\n\n"
+               "It has a lot of similarities to %s, with one of the main differences being that %s is a round-based gamemode, and of course the scoring system differences.\n\n"
                "Since it doesn't have rounds, the chaos is nonstop. "
-               "As a consequence of the chaotic nature, team communication is less important in this gamemode than other team-based gamemodes\n\n"),
+               "As a consequence of the chaotic nature, team communication is less important in this gamemode than other team-based gamemodes."),
        COLORED_NAME(this), COLORED_NAME(MAPINFO_TYPE_MAYHEM), COLORED_NAME(MAPINFO_TYPE_CA), COLORED_NAME(MAPINFO_TYPE_CA));
 }
 #endif
index 4695bda9e59c4e4f2445975f136952d7588497fd..737939ee1262db7ba3f96cc788b42441805a325d 100644 (file)
@@ -7,7 +7,7 @@ METHOD(ArmorSmall, describe, string(ArmorSmall this))
 {
     TC(ArmorSmall, this);
     return sprintf(_("The %s provides you a small amount of armor when picked up, "
-        "protecting you from damage by absorbing incoming hits until it is depleted"),
+        "protecting you from damage by absorbing incoming hits until it is depleted."),
     COLORED_NAME(this));
 }
 
@@ -15,7 +15,7 @@ METHOD(ArmorMedium, describe, string(ArmorMedium this))
 {
     TC(ArmorMedium, this);
     return sprintf(_("The %s provides you a medium amount of armor when picked up, "
-        "protecting you from damage by absorbing incoming hits until it is depleted"),
+        "protecting you from damage by absorbing incoming hits until it is depleted."),
     COLORED_NAME(this));
 }
 
@@ -23,7 +23,7 @@ METHOD(ArmorBig, describe, string(ArmorBig this))
 {
     TC(ArmorBig, this);
     return sprintf(_("The %s provides you a large amount of armor when picked up, "
-        "protecting you from damage by absorbing incoming hits until it is depleted"),
+        "protecting you from damage by absorbing incoming hits until it is depleted."),
     COLORED_NAME(this));
 }
 
@@ -31,8 +31,8 @@ METHOD(ArmorMega, describe, string(ArmorMega this))
 {
     TC(ArmorMega, this);
     return sprintf(_("The %s provides you a huge amount of armor when picked up, "
-        "protecting you from damage by absorbing incoming hits until it is depleted\n\n"
-        "It tends to be one of the most highly contested items on a map, particularly in game modes like %s"),
+        "protecting you from damage by absorbing incoming hits until it is depleted.\n\n"
+        "It tends to be one of the most highly contested items on a map, particularly in game modes like %s."),
     COLORED_NAME(this), COLORED_NAME(MAPINFO_TYPE_DUEL));
 }
 #endif
index 1b0ab6aef7ddc37831ef5dfb6039a4a387374d7c..8f48e81ef39565092240e1cade7efaa1f2e5ed71 100644 (file)
@@ -7,7 +7,7 @@ METHOD(HealthSmall, describe, string(HealthSmall this))
 {
     TC(HealthSmall, this);
     return sprintf(_("The %s restores a small amount of health when picked up, "
-        "helping you recover from damage taken during combat"),
+        "helping you recover from damage taken during combat."),
     COLORED_NAME(this));
 }
 
@@ -15,7 +15,7 @@ METHOD(HealthMedium, describe, string(HealthMedium this))
 {
     TC(HealthMedium, this);
     return sprintf(_("The %s restores a medium amount of health when picked up, "
-        "helping you recover from damage taken during combat"),
+        "helping you recover from damage taken during combat."),
     COLORED_NAME(this));
 }
 
@@ -23,7 +23,7 @@ METHOD(HealthBig, describe, string(HealthBig this))
 {
     TC(HealthBig, this);
     return sprintf(_("The %s restores a large amount of health when picked up, "
-        "helping you recover from damage taken during combat"),
+        "helping you recover from damage taken during combat."),
     COLORED_NAME(this));
 }
 
@@ -31,8 +31,8 @@ METHOD(HealthMega, describe, string(HealthMega this))
 {
     TC(HealthMega, this);
     return sprintf(_("The %s restores a huge amount of health when picked up, "
-        "helping you recover from damage taken during combat\n\n"
-        "It tends to be one of the most highly contested items on a map, particularly in game modes like %s"),
+        "helping you recover from damage taken during combat.\n\n"
+        "It tends to be one of the most highly contested items on a map, particularly in game modes like %s."),
     COLORED_NAME(this), COLORED_NAME(MAPINFO_TYPE_DUEL));
 }
 #endif
index 75f9f1559d2c4b7e71a874b591296c40fc811026..ffdcc16b7fdc40a2082a1923636f092e731e3eb1 100644 (file)
@@ -21,7 +21,7 @@ METHOD(Jetpack, describe, string(Jetpack this))
 {
        TC(Jetpack, this);
        return sprintf(_("The %s powerup allows you to fly around the map for a short period, "
-               "providing increased mobility, maneuverability, and the ability to reach higher ground\n\n"
+               "providing increased mobility, maneuverability, and the ability to reach higher ground.\n\n"
                "It consumes Fuel ammo while operating, so make sure you don't run out when you're high up!"),
        COLORED_NAME(this));
 }
@@ -37,8 +37,8 @@ METHOD(JetpackRegen, describe, string(JetpackRegen this))
 {
        TC(JetpackRegen, this);
        return sprintf(_("The %s powerup regenerates %s needed for the %s until the powerup expires, "
-               "so you can continue flying around for longer\n\n"
-               "Since it is a powerup, it will drop if you die while holding it"),
+               "so you can continue flying around for longer.\n\n"
+               "Since it is a powerup, it will drop if you die while holding it."),
        COLORED_NAME(this), COLORED_NAME(ITEM_JetpackFuel), COLORED_NAME(ITEM_Jetpack));
 }
 #endif
index d6b8e438080baabafcfb619ad1dfe4e8c8540e36..2a35e9c6c71fd7b285ae0cc5f352d417bb9eaeb5 100644 (file)
@@ -284,9 +284,9 @@ METHOD(Golem, mr_setup, bool(Golem this, entity actor))
 METHOD(Golem, describe, string(Golem this))
 {
     TC(Golem, this);
-    return _("Golems are large powerful brutes capable of taking and dealing a beating. Keeping your distance is advised\n\n"
-             "The Golem's primary melee attack is a series of punches\n"
-             "On occasion the Golem may jump into the air, dealing massive damage in an area as it slams the ground\n\n"
-             "To deal with distant foes, the Golem may throw a chunk of its electrified rocky exterior, zapping nearby targets on impact");
+    return _("Golems are large powerful brutes capable of taking and dealing a beating. Keeping your distance is advised.\n\n"
+             "The Golem's primary melee attack is a series of punches"
+             "On occasion the Golem may jump into the air, dealing massive damage in an area as it slams the ground.\n\n"
+             "To deal with distant foes, the Golem may throw a chunk of its electrified rocky exterior, zapping nearby targets on impact.");
 }
 #endif
index 44d37bfd2e73fca3eb2b4012844506cc54167708..c5ee93e5e3d1b4fcf2e60c6e39626e5dfe0b5b38 100644 (file)
@@ -493,12 +493,12 @@ METHOD(Mage, mr_setup, bool(Mage this, entity actor))
 METHOD(Mage, describe, string(Mage this))
 {
     TC(Mage, this);
-    return _("Wielding nanotechnology as if it were sorcery, the Mage employs a range of unique abilities of its own creation in combat\n\n"
-             "As a primary attack, the Mage throws a homing electric sphere towards the player\n"
-             "This sphere will track its target at high speed, exploding on impact or if it does not reach its target in time\n\n"
-             "When threatened, the Mage may deploy an energy shield to protect itself from damage briefly\n"
+    return _("Wielding nanotechnology as if it were sorcery, the Mage employs a range of unique abilities of its own creation in combat.\n\n"
+             "As a primary attack, the Mage throws a homing electric sphere towards the player"
+             "This sphere will track its target at high speed, exploding on impact or if it does not reach its target in time.\n\n"
+             "When threatened, the Mage may deploy an energy shield to protect itself from damage briefly"
              "Enemies approaching too closely during this time may be pushed away with explosive force!\n\n"
-             "Defensively the Mage is capable of healing itself and nearby allies, with some variants also providing armor and ammunition\n\n"
-             "The Mage may sometimes appear to blink out of existence as it teleports behind its target for a sneak attack");
+             "Defensively the Mage is capable of healing itself and nearby allies, with some variants also providing armor and ammunition.\n\n"
+             "The Mage may sometimes appear to blink out of existence as it teleports behind its target for a sneak attack.");
 }
 #endif
index ed60dcc255c38335f454cfda96ac8b8b0a32a8ae..a87777c3309d7631334406c5339e0a12e58d2950 100644 (file)
@@ -240,8 +240,8 @@ METHOD(Spider, mr_setup, bool(Spider this, entity actor))
 METHOD(Spider, describe, string(Spider this))
 {
     TC(Spider, this);
-    return _("The Spider is a large mechanically enhanced arachnoid adept at hunting speedy enemies\n\n"
-             "To slow down its target, the Spider launches a synthetic web-like substance from its cannons\n"
-             "Approaching its enwebbed prey, the Spider will inflict a series of high damage bites");
+    return _("The Spider is a large mechanically enhanced arachnoid adept at hunting speedy enemies.\n\n"
+             "To slow down its target, the Spider launches a synthetic web-like substance from its cannons"
+             "Approaching its enwebbed prey, the Spider will inflict a series of high damage bites.");
 }
 #endif
index 40fb746d51fe7898d5a730ee946d9890878e7f9a..e2b0c4bca34100b28132bffc233ee04aec206a0a 100644 (file)
@@ -184,7 +184,7 @@ METHOD(Wyvern, mr_setup, bool(Wyvern this, entity actor))
 METHOD(Wyvern, describe, string(Wyvern this))
 {
     TC(Wyvern, this);
-    return _("The Wyvern is a flying reptilian monster that glides around hunting for fresh prey\n\n"
-             "While fragile, the Wyvern is capable of launching deadly fireballs at the player from a distance, inflicting high damage and causing burning");
+    return _("The Wyvern is a flying reptilian monster that glides around hunting for fresh prey.\n\n"
+             "While fragile, the Wyvern is capable of launching deadly fireballs at the player from a distance, inflicting high damage and causing burning.");
 }
 #endif
index 9a0245f3dc6f011ceb777bb4f9634b40cf70819d..1a3af8f1ecd9ef433dbdedf37763485efddc46f8 100644 (file)
@@ -176,11 +176,11 @@ METHOD(Zombie, mr_setup, bool(Zombie this, entity actor))
 METHOD(Zombie, describe, string(Zombie this))
 {
     TC(Zombie, this);
-    return _("Zombies are the undead remains of deceased soldiers, risen with a ravenous hunger and no sense of self-preservation\n\n"
-             "When a Zombie senses a nearby player it will begin to charge its target at high speeds\n"
-             "While charging, a Zombie may leap towards the player, dealing massive damage on contact\n"
-             "If it gets close, the Zombie will punch and bite repeatedly. "
-             "When threatened the Zombie may hold up its hands to block incoming attacks briefly\n\n"
-             "It is no small task to kill that which is already dead. Once a Zombie is defeated, destroy its corpse to prevent it from rising again");
+    return _("Zombies are the undead remains of deceased soldiers, risen with a ravenous hunger and no sense of self-preservation.\n\n"
+             "When a Zombie senses a nearby player it will begin to charge its target at high speeds"
+             "While charging, a Zombie may leap towards the player, dealing massive damage on contact"
+             "If it gets close, the Zombie will punch and bite repeatedly.\n\n"
+             "When threatened the Zombie may hold up its hands to block incoming attacks briefly.\n\n"
+             "It is no small task to kill that which is already dead. Once a Zombie is defeated, destroy its corpse to prevent it from rising again!");
 }
 #endif
index cd68ee1946dc6ab2338dd186766a5c2dac935748..0f41cae2ef489f306b2fa4386ddd9b197d719344 100644 (file)
@@ -72,8 +72,8 @@ MUTATOR_HOOKFUNCTION(bloodloss, PlayerJump)
 METHOD(MutatorBloodLoss, describe, string(MutatorBloodLoss this))
 {
        TC(MutatorBloodLoss, this);
-       return sprintf(_("%s is a mutator in which players below a certain health threshold (for example 25) will suffer blood loss\n\n"
-               "Blood loss makes players stunned, severely impairs their movement, and rapidly takes away health points until they either die or gain enough health to go above the health threshold"),
+       return sprintf(_("%s is a mutator in which players below a certain health threshold (for example 25) will suffer blood loss.\n\n"
+               "Blood loss makes players stunned, severely impairs their movement, and rapidly takes away health points until they either die or gain enough health to go above the health threshold."),
        COLORED_NAME(this));
 }
 #endif
index a41ecd1fcfa7d059ef8cc964c94d6226b5d50f9c..82db61679563198fe805ed7944f2275b03b04790 100644 (file)
@@ -64,8 +64,8 @@ METHOD(AmmoBuff, m_tick, void(StatusEffect this, entity actor))
 METHOD(AmmoBuff, describe, string(AmmoBuff this))
 {
        TC(AmmoBuff, this);
-       return sprintf(_("The %s gives you infinite ammo until the buff expires, so you don't need to worry about running out of ammo\n\n"
-               "It also removes the need to reload any weapons that require reloading, like the %s and %s"),
+       return sprintf(_("The %s gives you infinite ammo until the buff expires, so you don't need to worry about running out of ammo.\n\n"
+               "It also removes the need to reload any weapons that require reloading, like the %s and %s."),
        COLORED_NAME_WITH_CONCAT(this, _("Buff")), COLORED_NAME(WEP_RIFLE), COLORED_NAME(WEP_OVERKILL_MACHINEGUN));
 }
 #endif // MENUQC
index c54b27bcf86f575fcd230bbe26e6cbf5e52bcab3..2e8f055d3aa56d651519448cf9e33e83a3e81b0f 100644 (file)
@@ -23,8 +23,8 @@ vector buff_Bash_AttackerCalculateForce(vector frag_force, entity frag_target, e
 METHOD(BashBuff, describe, string(BashBuff this))
 {
        TC(BashBuff, this);
-       return sprintf(_("The %s increases knockback force you deal, and makes you immune to knockback while the buff is active\n\n"
-               "It also slightly increases knockback you deal to yourself"),
+       return sprintf(_("The %s increases knockback force you deal, and makes you immune to knockback while the buff is active.\n\n"
+               "It also slightly increases knockback you deal to yourself."),
        COLORED_NAME_WITH_CONCAT(this, _("Buff")));
 }
 #endif // MENUQC
index 7c1ae9de219ce80c079c6b738323bd0d6ebff7a8..2561c3e0c05801e8e7119e49b77c377072a79acb 100644 (file)
@@ -46,8 +46,8 @@ MUTATOR_HOOKFUNCTION(buffs, WeaponSpeedFactor)
 METHOD(DisabilityBuff, describe, string(DisabilityBuff this))
 {
        TC(DisabilityBuff, this);
-       return sprintf(_("The %s causes your enemies and monsters to slow down for a few seconds when you attack them, while the buff is active\n\n"
-               "This is particularly useful against speedy players, especially in %s"),
+       return sprintf(_("The %s causes your enemies and monsters to slow down for a few seconds when you attack them, while the buff is active.\n\n"
+               "This is particularly useful against speedy players, especially in %s."),
        COLORED_NAME_WITH_CONCAT(this, _("Buff")), COLORED_NAME(MAPINFO_TYPE_CTF));
 }
 #endif // MENUQC
index 864ac4a58b3724666522e300bb5c74ca03eeec51..3718da49cf4ec6a887ef6aa74b13b8c73f403be4 100644 (file)
@@ -27,7 +27,7 @@ METHOD(FlightBuff, m_remove, void(StatusEffect this, entity actor, int removal_t
 METHOD(FlightBuff, describe, string(FlightBuff this))
 {
        TC(FlightBuff, this);
-       return sprintf(_("While you have the %s, you can crouch while midair to switch your gravity, allowing flight"),
+       return sprintf(_("While you have the %s, you can crouch while midair to switch your gravity, allowing flight."),
        COLORED_NAME_WITH_CONCAT(this, _("Buff")));
 }
 #endif
index b9c0a792e44b7e24764c172d611d3ef6521b62d5..d0c7021d5a96886669bb8d21d142ce885cad7f0b 100644 (file)
@@ -19,7 +19,7 @@ float buff_Inferno_CalculateDamage(float frag_damage)
 METHOD(InfernoBuff, describe, string(InfernoBuff this))
 {
        TC(InfernoBuff, this);
-       return sprintf(_("The %s sets any enemies or monsters you attack alight, dealing burn damage to them for several seconds until the buff expires"),
+       return sprintf(_("The %s sets any enemies or monsters you attack alight, dealing burn damage to them for several seconds until the buff expires."),
        COLORED_NAME_WITH_CONCAT(this, _("Buff")));
 }
 #endif // MENUQC
index a82d73366cae670ab76ea30b99ca5b1643352e43..b93a8001a85a3b4037f8afa1268a2f1c08ec2c94 100644 (file)
@@ -21,8 +21,8 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerPhysics)
 METHOD(JumpBuff, describe, string(JumpBuff this))
 {
        TC(JumpBuff, this);
-       return sprintf(_("The %s greatly increases your jump height, while the buff is active\n\n"
-               "It also makes you immune to fall damage"),
+       return sprintf(_("The %s greatly increases your jump height, while the buff is active.\n\n"
+               "It also makes you immune to fall damage."),
        COLORED_NAME_WITH_CONCAT(this, _("Buff")));
 }
 #endif // MENUQC
index 9aeada4af6d642a0b869d987e166bedcf82603df..52ad259e468560a3d9242a821a40bd4c5b47852f 100644 (file)
@@ -13,7 +13,7 @@ float buff_Luck_CalculateDamage(float frag_damage)
 METHOD(LuckBuff, describe, string(LuckBuff this))
 {
        TC(LuckBuff, this);
-       return sprintf(_("While you have the %s, each attack has a chance of being a critical hit with greatly increased damage"),
+       return sprintf(_("While you have the %s, each attack has a chance of being a critical hit with greatly increased damage."),
        COLORED_NAME_WITH_CONCAT(this, _("Buff")));
 }
 #endif // MENUQC
index 36def830ac0ac0247fc50c4d81facfb7dd14f554..29374ac3f4fdcd3cd977cfa51af3c5fed8323595 100644 (file)
@@ -28,7 +28,7 @@ METHOD(MagnetBuff, m_tick, void(StatusEffect this, entity actor))
 METHOD(MagnetBuff, describe, string(MagnetBuff this))
 {
        TC(MagnetBuff, this);
-       return sprintf(_("The %s greatly increases your item pickup range, collecting nearby items for you while the buff is active"),
+       return sprintf(_("The %s greatly increases your item pickup range, collecting nearby items for you while the buff is active."),
        COLORED_NAME_WITH_CONCAT(this, _("Buff")));
 }
 #endif // MENUQC
index 273b941a469007d3051167a889dab7017b80d5fb..ec0cc392c144193c6812fbe9ce7ad082fde3a9a2 100644 (file)
@@ -24,8 +24,8 @@ float buff_Medic_CalculateSurviveDamage(float frag_damage, float health)
 METHOD(MedicBuff, describe, string(MedicBuff this))
 {
        TC(MedicBuff, this);
-       return sprintf(_("The %s increases health regeneration speed, increases the maximum health you can have before health starts to rot, and reduces health rot speed until the buff expires\n\n"
-               "It also gives you a chance to survive a fatal hit, with a small amount of health left over"),
+       return sprintf(_("The %s increases health regeneration speed, increases the maximum health you can have before health starts to rot, and reduces health rot speed until the buff expires.\n\n"
+               "It also gives you a chance to survive a fatal hit, with a small amount of health left over."),
        COLORED_NAME_WITH_CONCAT(this, _("Buff")));
 }
 #endif // MENUQC
index 424770162267b8423153c477e8dcec8975410368..689a308904abe7dd3a2a1a9f60211b7e83d3302c 100644 (file)
@@ -10,8 +10,8 @@ float buff_Resistance_CalculateDamage(float frag_damage)
 METHOD(ResistanceBuff, describe, string(ResistanceBuff this))
 {
        TC(ResistanceBuff, this);
-       return sprintf(_("The %s greatly reduces your damage taken while the buff is active\n\n"
-               "This also impacts the damage you deal to yourself"),
+       return sprintf(_("The %s greatly reduces your damage taken while the buff is active.\n\n"
+               "This also impacts the damage you deal to yourself."),
        COLORED_NAME_WITH_CONCAT(this, _("Buff")));
 }
 #endif // MENUQC
index de4176e27bd3da6e6f2983578f3eaeefef19ab62..4a93ef6ab7adac03acf87bcba3f83c7e0d86a342 100644 (file)
@@ -84,9 +84,9 @@ MUTATOR_HOOKFUNCTION(buffs, ForbidThrowCurrentWeapon)
 METHOD(SwapperBuff, describe, string(SwapperBuff this))
 {
        TC(SwapperBuff, this);
-       return sprintf(_("The %s allows you to press the ^3drop weapon^7 bind to switch places with a nearby enemy once\n\n"
-               "A common usage of this buff is to jump over the map's void, then swap with an enemy, to cause them to fall into the void\n\n"
-               "The range that the buff works over is limited, so sometimes it may do nothing if there are no enemies nearby"),
+       return sprintf(_("The %s allows you to press the ^3drop weapon^7 bind to switch places with a nearby enemy once.\n\n"
+               "A common usage of this buff is to jump over the map's void, then swap with an enemy, to cause them to fall into the void.\n\n"
+               "The range that the buff works over is limited, so sometimes it may do nothing if there are no enemies nearby."),
        COLORED_NAME_WITH_CONCAT(this, _("Buff")));
 }
 #endif // MENUQC
index 9916f7c36f5703117ec62d14c041005529514aba..0ff20f97d8c7ea638d4827a3101788a00ae2dcbe 100644 (file)
@@ -23,8 +23,8 @@ MUTATOR_HOOKFUNCTION(buffs, PlayerDamage_SplitHealthArmor)
 METHOD(VampireBuff, describe, string(VampireBuff this))
 {
        TC(VampireBuff, this);
-       return sprintf(_("The %s converts some of the damage you deal to enemies and monsters into health for yourself, until the buff expires\n\n"
-               "In some sense, this is the opposite of the %s"),
+       return sprintf(_("The %s converts some of the damage you deal to enemies and monsters into health for yourself, until the buff expires.\n\n"
+               "In some sense, this is the opposite of the %s."),
        COLORED_NAME_WITH_CONCAT(this, _("Buff")), COLORED_NAME_WITH_CONCAT(BUFF_VENGEANCE, _("Buff")));
 }
 #endif // MENUQC
index a7c72436fd0867b462d3f023551adb7584197d99..80ae6ff824e3e60bbc2a7b1e5c1591f65ccc4ef9 100644 (file)
@@ -20,8 +20,8 @@ float buff_Vengeance_CalculateDamage(float frag_damage)
 METHOD(VengeanceBuff, describe, string(VengeanceBuff this))
 {
        TC(VengeanceBuff, this);
-       return sprintf(_("The %s reciprocates a portion of the damage enemies deal to you onto them, until the buff expires\n\n"
-               "In some sense, this is the opposite of the %s"),
+       return sprintf(_("The %s reciprocates a portion of the damage enemies deal to you onto them, until the buff expires.\n\n"
+               "In some sense, this is the opposite of the %s."),
        COLORED_NAME_WITH_CONCAT(this, _("Buff")), COLORED_NAME_WITH_CONCAT(BUFF_VAMPIRE, _("Buff")));
 }
 #endif // MENUQC
index f9118925dcd94bfbc16cfc28444b79da6211fd89..476b76a695afcd95752711a16c19b60a41f3005b 100644 (file)
@@ -7,7 +7,7 @@ METHOD(MutatorCloaked, describe, string(MutatorCloaked this))
 {
        TC(MutatorCloaked, this);
        return sprintf(_("The %s mutator makes all players nearly invisible, similar to the %s powerup. "
-               "This adds an extra layer of stealth and strategy to gameplay"),
+               "This adds an extra layer of stealth and strategy to gameplay."),
        COLORED_NAME(this), COLORED_NAME(ITEM_Invisibility));
 }
 #endif
index 77bb7aeec55aed443baf1eff2e21aaba12c44017..b2b853aeab93ed051f54fd186f27fa09366534b2 100644 (file)
@@ -8,8 +8,8 @@ METHOD(MutatorDodging, describe, string(MutatorDodging this))
        TC(MutatorDodging, this);
        return sprintf(_("%s is a mutator that enables dodging maneuvers, making evading attacks in close combat easier. "
                "If enabled, when you're standing on the ground and double tap a movement key, you will leap in that direction. "
-               "This also works while in contact with a wall, allowing quick speed gain if done repeatedly against a long wall\n\n"
-               "Some other mutators like %s enable this by default"),
+               "This also works while in contact with a wall, allowing quick speed gain if done repeatedly against a long wall.\n\n"
+               "Some other mutators like %s enable this by default."),
        COLORED_NAME(this), COLORED_NAME(MUTATOR_ok));
 }
 #endif
index e3f0770b0db56cff337ec1d29ccd8eade2f08407..e3d5109bb9a310616b4bfcdb1bc6a8ee2fb4e5ff 100644 (file)
@@ -8,9 +8,9 @@ METHOD(MutatorGrapplingHook, describe, string(MutatorGrapplingHook this))
 {
        TC(MutatorGrapplingHook, this);
        return sprintf(_("The %s mutator gives all players a %s as their offhand weapon, used with ^3+hook^7. "
-               "It has unlimited ammo, but the ordinary secondary fire can't be used\n\n"
-               "Since it's given as an offhand, players can use it to move around and shoot at their enemies at the same time, opening up more gameplay possibilities than the regular %s\n\n"
-               "Note that it is overridden by the %s mutator"),
+               "It has unlimited ammo, but the ordinary secondary fire can't be used.\n\n"
+               "Since it's given as an offhand, players can use it to move around and shoot at their enemies at the same time, opening up more gameplay possibilities than the regular %s.\n\n"
+               "Note that it is overridden by the %s mutator."),
        COLORED_NAME(this), COLORED_NAME(WEP_HOOK), COLORED_NAME(WEP_HOOK), COLORED_NAME(MUTATOR_offhand_blaster));
 }
 #endif
index 70ac5cf1c803f96454c103cdc29afb39197e3f00..bfc5d67e7d67d10f603538e24f1bcdc6b782eed3 100644 (file)
@@ -12,14 +12,14 @@ METHOD(MutatorInstagib, describe, string(MutatorInstagib this))
 {
        TC(MutatorInstagib, this);
        string s = sprintf(_("%s is a mutator that removes all weapons and weapon pickups and gives all players the %s, "
-               "which immediately frags players in a single shot, hence the name \"InstaGib\"\n\n"
+               "which immediately frags players in a single shot, hence the name \"InstaGib.\"\n\n"
                "Precise aim and ammo conservation are important, since you will suicide after 10 seconds if you run out of ammo. "
-               "Ammo (%s) can be picked up on the map often, or collected from dropped %s guns\n\n"),
+               "Ammo (%s) can be picked up on the map often, or collected from dropped %s guns.\n\n"),
        COLORED_NAME(this), COLORED_NAME(WEP_VAPORIZER), COLORED_NAME(ITEM_Cells), COLORED_NAME(WEP_VAPORIZER));
        s = strcat(s, sprintf(_("Maps often have an %s on them, which will save you from being fragged when picked up (total extra lives is displayed as armor). "
-               "Other powerups often present on maps include %s and %s\n\n"
+               "Other powerups often present on maps include %s and %s.\n\n"
                "It is quite a common mutator present on many servers, mixing well with a lot of gamemodes but particularly %s. "
-               "Sometimes it's enabled alongside other mutators such as %s for added movement possibilities"),
+               "Sometimes it's enabled alongside other mutators such as %s for added movement possibilities."),
        COLORED_NAME(ITEM_ExtraLife), COLORED_NAME(ITEM_Speed), COLORED_NAME(ITEM_Invisibility), COLORED_NAME(MAPINFO_TYPE_DEATHMATCH), COLORED_NAME(MUTATOR_hook)));
        return s;
 }
index ea86b1ad927351aaaba8f7b0e1e3872088fc9532..77f9b10050a2e1b4053ac4840b33cb095869c17c 100644 (file)
@@ -69,8 +69,8 @@ METHOD(AmmoNade, describe, string(AmmoNade this))
 {
        TC(AmmoNade, this);
        return sprintf(_("The %s detonates after a short delay, temporarily creating an orb around the point where it detonated for several seconds. "
-               "If your team members enter the orb they will recover ammo, and if enemies enter the sphere they will lose ammo\n\n"
-               "This does not impact weapon magazines, so it won't reload your weapons for you"),
+               "If your team members enter the orb they will recover ammo, and if enemies enter the sphere they will lose ammo.\n\n"
+               "This does not impact weapon magazines, so it won't reload your weapons for you."),
        COLORED_NAME(this));
 }
 #endif // MENUQC
index d2178d84b13edcb59a5701ac410d1f66f35214d1..87bf759d37b6de781329f811f1104d62147a04fe 100644 (file)
@@ -142,8 +142,8 @@ MUTATOR_HOOKFUNCTION(cl_nades, HUD_Draw_overlay)
 METHOD(DarknessNade, describe, string(DarknessNade this))
 {
        TC(DarknessNade, this);
-       return sprintf(_("The %s detonates after a short delay, creating a dark field which temporarily blinds enemies who enter it\n\n"
-               "This is sort of the opposite of the %s"),
+       return sprintf(_("The %s detonates after a short delay, creating a dark field which temporarily blinds enemies who enter it.\n\n"
+               "This is sort of the opposite of the %s."),
        COLORED_NAME(this), COLORED_NAME(NADE_TYPE_VEIL));
 }
 #endif // MENUQC
index 99ca888be59c795153c31c26af5fa04064cbf182..919477e372b1dbd1ce4b7d61b52367a553adfd55 100644 (file)
@@ -69,7 +69,7 @@ METHOD(EntrapNade, describe, string(EntrapNade this))
 {
        TC(EntrapNade, this);
        return sprintf(_("The %s detonates after a short delay, temporarily creating an orb around the point where it detonated for several seconds. "
-               "Players and projectiles that enter the sphere will be slowed down, including yourself"),
+               "Players and projectiles that enter the sphere will be slowed down, including yourself."),
        COLORED_NAME(this));
 }
 #endif // MENUQC
index 6d36b12225db9d422682c0d6a7f1701d68c80c62..5b6982deb595ae0fc59f412fb1583a43ca48f48f 100644 (file)
@@ -44,7 +44,7 @@ METHOD(HealNade, describe, string(HealNade this))
 {
        TC(HealNade, this);
        return sprintf(_("The %s detonates after a short delay, temporarily creating a healing orb around the point where it detonated for several seconds. "
-               "If your team members enter the orb they will recover health, and if enemies enter the sphere they will be harmed"),
+               "If your team members enter the orb they will recover health, and if enemies enter the sphere they will be harmed."),
        COLORED_NAME(this));
 }
 #endif // MENUQC
index 8f57260af195503e69e677eb656054bf9b8bbf3f..86cc5d3674c34e4e405aab1a01e3a221a283411e 100644 (file)
@@ -119,7 +119,7 @@ METHOD(IceNade, describe, string(IceNade this))
 {
        TC(IceNade, this);
        return sprintf(_("The %s detonates after a short delay, freezing any enemies who walk within the explosion radius for a few seconds after the explosion. "
-               "While frozen, enemies are progressively dealt damage"),
+               "While frozen, enemies are progressively dealt damage."),
        COLORED_NAME(this));
 }
 #endif // MENUQC
index 36ed81b8d3d078fcd83dd2498407e4eeae059dfb..67aa9c3d81f2085da6af741a362d2f1129e472e4 100644 (file)
@@ -23,7 +23,7 @@ void nade_monster_boom(entity this)
 METHOD(MonsterNade, describe, string(MonsterNade this))
 {
        TC(MonsterNade, this);
-       return sprintf(_("The %s explodes after a short delay, spawning one of four monster types"),
+       return sprintf(_("The %s explodes after a short delay, spawning one of four monster types."),
        COLORED_NAME(this));
 }
 #endif // MENUQC
index b5470c67cce1533731c39e00c7a54d2636124a9d..2170d70b239932de4eea9c857d6d45d001c54b6c 100644 (file)
@@ -181,7 +181,7 @@ METHOD(NapalmNade, describe, string(NapalmNade this))
 {
        TC(NapalmNade, this);
        return sprintf(_("The %s explodes after a short delay, spreading fiery napalm globs around in the fountain. "
-               "The napalm fire balls burn for a while, and damage players who get too close"),
+               "The napalm fire balls burn for a while, and damage players who get too close."),
        COLORED_NAME(this));
 }
 #endif // MENUQC
index a764108475824772975677dbd59be91aa1b9d96b..f1dcb57d3f44e9f9e3405afeaf08746817650d78 100644 (file)
@@ -13,7 +13,7 @@ void normal_nade_boom(entity this)
 METHOD(NormalNade, describe, string(NormalNade this))
 {
        TC(NormalNade, this);
-       return sprintf(_("The (normal) %s explodes after a short delay, dealing damage to nearby players\n\n"
+       return sprintf(_("The (normal) %s explodes after a short delay, dealing damage to nearby players.\n\n"
                "Make sure you remember to throw it with ^3drop weapon^7, or else it will blow up in your hands!"),
        COLORED_NAME(this));
 }
index a1959b4d031020524effe169a2729efdcf937406..6e4c8c5c270bc2ad5b4a88a85fcc2d4ba9432631 100644 (file)
@@ -37,7 +37,7 @@ METHOD(SpawnNade, describe, string(SpawnNade this))
 {
        TC(SpawnNade, this);
        return sprintf(_("The %s detonates after a short delay, temporarily setting your spawn point to where it detonated. "
-               "It is useful for cases where you want to go back to some point on the map after you die"),
+               "It is useful for cases where you want to go back to some point on the map after you die."),
        COLORED_NAME(this));
 }
 #endif // MENUQC
index 9ac1db4738892b3f5cc76d93cfbd5a05782d4b04..fe0a5581c88e062a953a2e49b616ed06b108d1f0 100644 (file)
@@ -41,9 +41,9 @@ bool nade_translocate_DestroyDamage(entity this, entity attacker)
 METHOD(TranslocateNade, describe, string(TranslocateNade this))
 {
        TC(TranslocateNade, this);
-       return sprintf(_("The %s detonates after a short delay, teleporting you to where it detonated\n\n"
-               "A common use of this nade is saving yourself from the void in space maps, however mastering this is very tricky\n\n"
-               "If this grenade is destroyed by an attacker, it will deal some damage to them"),
+       return sprintf(_("The %s detonates after a short delay, teleporting you to where it detonated.\n\n"
+               "A common use of this nade is saving yourself from the void in space maps, however mastering this is very tricky.\n\n"
+               "If this grenade is destroyed by an attacker, it will deal some damage to them."),
        COLORED_NAME(this));
 }
 #endif // MENUQC
index c1c65763c53077306be2649f6a19ac6187fbae75..82844fd01ed28a4711843b2ca3c3af29c0b3de8f 100644 (file)
@@ -50,8 +50,8 @@ METHOD(VeilNade, describe, string(VeilNade this))
 {
        TC(VeilNade, this);
        return sprintf(_("The %s detonates after a short delay, temporarily creating an orb around the point where it detonated for several seconds. "
-               "Players inside the orb will be invisible to those outside it\n\n"
-               "This is sort of the opposite of the %s"),
+               "Players inside the orb will be invisible to those outside it.\n\n"
+               "This is sort of the opposite of the %s."),
        COLORED_NAME(this), COLORED_NAME(NADE_TYPE_DARKNESS));
 }
 #endif // MENUQC
index 97b094895b74632bb75cd08f196e78b1c05ca2cd..f0a3f62feabaf2f43dfee0898d5275839aa6655b 100644 (file)
@@ -25,8 +25,8 @@ bool nt_IsNewToy(int w)
 METHOD(MutatorNewToys, describe, string(MutatorNewToys this))
 {
        TC(MutatorNewToys, this);
-       string s = sprintf(_("The %s mutator, enabled by default, allows the spawning of new gimmicky weapons, sometimes replacing a core weapon\n\n"
-               "Since these weapons can't spawn in %s and %s, the %s mutator can't be enabled concurrently\n\n"
+       string s = sprintf(_("The %s mutator, enabled by default, allows the spawning of new gimmicky weapons, sometimes replacing a core weapon.\n\n"
+               "Since these weapons can't spawn in %s and %s, the %s mutator can't be enabled concurrently.\n\n"
                "The current %s weapons are:"), // do it like this so that the string doesn't need to change when the list is updated
        COLORED_NAME(this), COLORED_NAME(MUTATOR_mutator_instagib), COLORED_NAME(MUTATOR_ok), COLORED_NAME(this), COLORED_NAME(this));
     FOREACH(Weapons, nt_IsNewToy(it.m_id), {
index 389535380ccaefc42db15d60f96808f9af658fdc..87b760e87c2237500b93f2dcd9c92595d420f287 100644 (file)
@@ -5,7 +5,7 @@ METHOD(MutatorNIX, describe, string(MutatorNIX this))
 {
        TC(MutatorNIX, this);
        return sprintf(_("%s (\"No Items Xonotic\") is a mutator that removes all weapon and ammo pickups from the map, and gives all players the same randomly selected weapon. "
-               "After some time, the weapon is reselected, and this repeats forever"),
+               "After some time, the weapon is reselected, and this repeats forever."),
        COLORED_NAME(this));
 }
 #endif
index 9d300ef2bae51f92a7c589041923e41112679fa4..3ad310274aca298f29d2c922970814881a61c4c6 100644 (file)
@@ -8,9 +8,9 @@ METHOD(MutatorOffhandBlaster, describe, string(MutatorOffhandBlaster this))
 {
        TC(MutatorOffhandBlaster, this);
        return sprintf(_("The %s mutator gives all players a %s as their offhand weapon, used with ^3+hook^7. "
-               "It can be fired at any time, but the ordinary secondary fire can't be used\n\n"
-               "Since it's given as an offhand, you can fire it at the same time as the ordinary %s while laser jumping to achieve even more height\n\n"
-               "Note that it overrides the %s mutator, since they use the same bind"),
+               "It can be fired at any time, but the ordinary secondary fire can't be used.\n\n"
+               "Since it's given as an offhand, you can fire it at the same time as the ordinary %s while laser jumping to achieve even more height.\n\n"
+               "Note that it overrides the %s mutator, since they use the same bind."),
        COLORED_NAME(this), COLORED_NAME(WEP_BLASTER), COLORED_NAME(WEP_BLASTER), COLORED_NAME(MUTATOR_hook));
 }
 #endif
index 161dd71e5caff78dcc62bcc0c9531113c6ad488f..8394a5e3c47b72f2cc588e23d3bedfb3d2cf85c3 100644 (file)
 METHOD(MutatorOverkill, describe, string(MutatorOverkill this))
 {
        TC(MutatorOverkill, this);
-       string s = sprintf(_("%s is a mutator that heavily modifies the game, giving players fewer but more powerful weapons, nades, and more movement options\n\n"
+       string s = sprintf(_("%s is a mutator that heavily modifies the game, giving players fewer but more powerful weapons, nades, and more movement options.\n\n"
                "In terms of weaponry, players have infinite ammo and spawn in with the %s, %s, and %s, and can pick up the %s and %s superweapons on the map sometimes. "
-               "These weapons are a lot more powerful than the regular weapons, so their time-to-kill is quite low\n\n"
+               "These weapons are a lot more powerful than the regular weapons, so their time-to-kill is quite low.\n\n"
                "The secondary fire of all weapons shoots a laser which does not damage or push enemies, but can be used to push yourself around. "),
        COLORED_NAME(this), COLORED_NAME(WEP_OVERKILL_SHOTGUN), COLORED_NAME(WEP_OVERKILL_MACHINEGUN), COLORED_NAME(WEP_OVERKILL_NEX), COLORED_NAME(WEP_OVERKILL_HMG), COLORED_NAME(WEP_OVERKILL_RPC));
-       s = strcat(s, sprintf(_("Also since the %s mutator is active, all players have offhand nades\n\n"
-               "As for movement tricks, %s is enabled by default in %s, allowing for rapidly changing your movement direction"),
+       s = strcat(s, sprintf(_("Also since the %s mutator is active, all players have offhand nades.\n\n"
+               "As for movement tricks, %s is enabled by default in %s, allowing for rapidly changing your movement direction."),
        COLORED_NAME(MUTATOR_nades), COLORED_NAME(MUTATOR_dodging), COLORED_NAME(this)));
        return s;
 }
index b02c7e50d3e4dad760894f86777d14d66164a069..de20cda2c8b0b70eb7d5162911158b13205c9472 100644 (file)
@@ -5,7 +5,7 @@ METHOD(MutatorPinata, describe, string(MutatorPinata this))
 {
        TC(MutatorPinata, this);
        return sprintf(_("%s is a mutator that makes players drop all their weapons when they die. "
-               "Without this mutator, players normally drop only their equipped weapon"),
+               "Without this mutator, players normally drop only their equipped weapon."),
        COLORED_NAME(this));
 }
 #endif
index f9f3934842e8fbc092303157f00016f5807015a0..b096c58e0e708bba10cdabb222c96620e156a1d4 100644 (file)
@@ -49,8 +49,8 @@ METHOD(InvisibilityItem, describe, string(InvisibilityItem this))
 {
     TC(InvisibilityItem, this);
     return sprintf(_("The %s powerup increases your translucency while the powerup is active, making it more difficult for enemies to see you. "
-        "This powerup is often present in %s\n\n"
-        "Since it is a powerup, it will drop if you die while holding it"),
+        "This powerup is often present in %s.\n\n"
+        "Since it is a powerup, it will drop if you die while holding it."),
     COLORED_NAME(this), COLORED_NAME(MUTATOR_mutator_instagib));
 }
 #endif // MENUQC
index 3ce3670d02c22637283dafc501a88fcde5916a8b..6f1d2cf2fb7cb2b399e07f07e6c143d46b34b9e6 100644 (file)
@@ -53,8 +53,8 @@ METHOD(ShieldItem, describe, string(ShieldItem this))
 {
     TC(ShieldItem, this);
     return sprintf(_("The %s powerup greatly decreases the damage you take until the powerup expires, having a compounding effect with armor. "
-        "It also makes you more resistant to knockback\n\n"
-        "Since it is a powerup, it will drop if you die while holding it"),
+        "It also makes you more resistant to knockback.\n\n"
+        "Since it is a powerup, it will drop if you die while holding it."),
     COLORED_NAME(this));
 }
 #endif // MENUQC
index 736f35a332115ecacd255808a85f6b61ca87dadd..b475a383517e1d7502431577684733732833ad18 100644 (file)
@@ -35,8 +35,8 @@ METHOD(SpeedItem, describe, string(SpeedItem this))
 {
     TC(SpeedItem, this);
     return sprintf(_("The %s powerup increases your movement speed, attack speed, and health regeneration speed while the powerup is active. "
-        "However, it also makes you a bit more vulnerable to incoming attacks\n\n"
-        "Since it is a powerup, it will drop if you die while holding it"),
+        "However, it also makes you a bit more vulnerable to incoming attacks.\n\n"
+        "Since it is a powerup, it will drop if you die while holding it."),
     COLORED_NAME(this));
 }
 #endif // MENUQC
index 45ec36ddff59ba179578f72734d14e1f8a9ace43..a0aa6237f7df257554cdfc4693cba2238e8bc342 100644 (file)
@@ -53,9 +53,9 @@ METHOD(StrengthItem, describe, string(StrengthItem this))
 {
     TC(StrengthItem, this);
     return sprintf(_("The %s powerup greatly increases the damage you deal, until the powerup expires. "
-        "It also increases the knockback that your attacks deal\n\n"
-        "The damage and knockback you deal to yourself also increases but by a smaller amount\n\n"
-        "Since it is a powerup, it will drop if you die while holding it"),
+        "It also increases the knockback that your attacks deal.\n\n"
+        "The damage and knockback you deal to yourself also increases but by a smaller amount.\n\n"
+        "Since it is a powerup, it will drop if you die while holding it."),
     COLORED_NAME(this));
 }
 #endif // MENUQC
index d17f2de58750f2e4b2c1d31900945bf933dcac4e..3c3b3bb22248fa43d617c323ecc0cc7cd299aab5 100644 (file)
@@ -7,7 +7,7 @@ METHOD(MutatorRocketFlying, describe, string(MutatorRocketFlying this))
 {
        TC(MutatorRocketFlying, this);
        return sprintf(_("The %s mutator removes the slight delay when immediately detonating a %s rocket after firing. "
-               "This allows for rockets fired to be detonated much closer to your hitbox, so they can give you a much larger speed boost, also allowing flying around the map"),
+               "This allows for rockets fired to be detonated much closer to your hitbox, so they can give you a much larger speed boost, also allowing flying around the map."),
        COLORED_NAME(this), COLORED_NAME(WEP_DEVASTATOR));
 }
 #endif
index 54c08989edc155efaa8906c8e4d48f9f84bfc7fd..d7425bc1d61743846d740482e83f8743d93d95a3 100644 (file)
@@ -4,8 +4,8 @@
 METHOD(MutatorTouchExplode, describe, string(MutatorTouchExplode this))
 {
        TC(MutatorTouchExplode, this);
-       return sprintf(_("The %s mutator causes an explosion when two players collide if it is enabled\n\n"
-               "This is a nice way to add some silly fun to a server, but it also does allow for the use of new tactics in some gamemodes"),
+       return sprintf(_("The %s mutator causes an explosion when two players collide if it is enabled.\n\n"
+               "This is a nice way to add some silly fun to a server, but it also does allow for the use of new tactics in some gamemodes."),
        COLORED_NAME(this));
 }
 #endif
index 64cd2afe09b5a2578f9de3b42cac4005c98c2eaf..c450bb571068367767c9cebfbe9dd32e30c5b319 100644 (file)
@@ -7,8 +7,8 @@ METHOD(MutatorVampire, describe, string(MutatorVampire this))
 {
        TC(MutatorVampire, this);
        return sprintf(_("The %s mutator gives all players a permanent version of the %s. "
-               "However, unlike the normal %s, when this mutator is enabled players' health can go way above the usual limit of 200\n\n"
-               "Additionally the amount of health players get is equal to the damage they deal, which isn't normaly the case with the %s"),
+               "However, unlike the normal %s, when this mutator is enabled players' health can go way above the usual limit of 200.\n\n"
+               "Additionally the amount of health players get is equal to the damage they deal, which isn't normaly the case with the %s."),
        COLORED_NAME(this), COLORED_NAME_WITH_CONCAT(BUFF_VAMPIRE, _("Buff")), COLORED_NAME_WITH_CONCAT(BUFF_VAMPIRE, _("Buff")), COLORED_NAME_WITH_CONCAT(BUFF_VAMPIRE, _("Buff")));
 }
 #endif
index 7eef1306fcbf86c81e01e2239237579a07b7fb92..ec5bdeb7d03c6b32a328ae1e0df9c537011152e2 100644 (file)
@@ -78,8 +78,8 @@ METHOD(MutatorWallJump, describe, string(MutatorWallJump this))
 {
        TC(MutatorWallJump, this);
        return sprintf(_("%s is a mutator that enables jumping off walls for added mobility. "
-               "To do a wall jump, tap ^3+jump^7 when against a wall\n\n"
-               "This mutator adds a bit of versatility, allowing for more dynamic and unpredictable movement"),
+               "To do a wall jump, tap ^3+jump^7 when against a wall.\n\n"
+               "This mutator adds a bit of versatility, allowing for more dynamic and unpredictable movement."),
        COLORED_NAME(this));
 }
 #endif
index 974af4a7a93a7a94525e37c9dbc8bb325c64d849..f4265bd1ad0549bc80f3bec8d65e824595c1945b 100644 (file)
@@ -247,8 +247,8 @@ METHOD(EWheel, tr_setup, void(EWheel this, entity it))
 METHOD(EWheel, describe, string(EWheel this))
 {
     TC(Ewheel, this);
-    return sprintf(_("The %s is a mobile turret that rolls around, attacking its targets when they enter its line of sight\n\n"
-        "It attacks by shooting laser beams similar to those of the %s, from both of its two cannons"),
+    return sprintf(_("The %s is a mobile turret that rolls around, attacking its targets when they enter its line of sight.\n\n"
+        "It attacks by shooting laser beams similar to those of the %s, from both of its two cannons."),
     COLORED_NAME(this), COLORED_NAME(WEP_BLASTER));
 }
 
index 8deafec9dc59988ce6fbb10db586a829f162214f..3dd16bd4bdbe1906f9b1118cfd004a595c18d9c3 100644 (file)
@@ -21,8 +21,8 @@ METHOD(Flac, tr_setup, void(Flac this, entity it))
 METHOD(Flac, describe, string(Flac this))
 {
     TC(Flac, this);
-    return sprintf(_("The %s is a turret similar to flak cannons, instead firing anti-projectile flak shells to take down projectiles fired by its targets\n\n"
-        "The shells it shoots are against projectiles such as the %s secondary fire grenade, %s secondary fire balls, %s rockets, and other missiles"),
+    return sprintf(_("The %s is a turret similar to flak cannons, instead firing anti-projectile flak shells to take down projectiles fired by its targets.\n\n"
+        "The shells it shoots are against projectiles such as the %s secondary fire grenade, %s secondary fire balls, %s rockets, and other missiles."),
     COLORED_NAME(this), COLORED_NAME(WEP_MORTAR), COLORED_NAME(WEP_ELECTRO), COLORED_NAME(WEP_DEVASTATOR));
 }
 
index 81a531065af422d47836dfa630146bf41525ab6f..90f8915336daa7565e3d3a4a9cb547772384799d 100644 (file)
@@ -58,8 +58,8 @@ METHOD(FusionReactor, describe, string(FusionReactor this))
 {
     TC(FusionReactor, this);
     return sprintf(_("The %s is a bit of a unique turret, instead helping out other turrets rather than directly attacking its targets. "
-        "It has no weapon of its own, and instead works by generating power for nearby turrets, so that they can attack their shared targets more often\n\n"
-        "This is the only turret that doesn't directly attack its targets"),
+        "It has no weapon of its own, and instead works by generating power for nearby turrets, so that they can attack their shared targets more often.\n\n"
+        "This is the only turret that doesn't directly attack its targets."),
     COLORED_NAME(this));
 }
 
index 8452cb024c92bb2b073068ebea9172cf7b4d0e68..913871e1cdf3b59e3ac1eef6bb424415da9e6157 100644 (file)
@@ -27,8 +27,8 @@ METHOD(Hellion, tr_setup, void(Hellion this, entity it))
 METHOD(Hellion, describe, string(Hellion this))
 {
     TC(Hellion, this);
-    return sprintf(_("The %s fires homing missiles similar to those of the %s towards its targets\n\n"
-        "Although the missiles usually deal less damage than a %s rocket, the %s has two cannons so it can dish out quite the punch"),
+    return sprintf(_("The %s fires homing missiles similar to those of the %s towards its targets.\n\n"
+        "Although the missiles usually deal less damage than a %s rocket, the %s has two cannons so it can dish out quite the punch."),
     COLORED_NAME(this), COLORED_NAME(WEP_DEVASTATOR), COLORED_NAME(WEP_DEVASTATOR), COLORED_NAME(this));
 }
 
index 51d3b26b9f9012a41d2218a6e4e404d130ac12e2..2417b2ba68b104dedb0b1d8b510977279309af72 100644 (file)
@@ -52,7 +52,7 @@ METHOD(HunterKiller, describe, string(HunterKiller this))
 {
     TC(HunterKiller, this);
     return sprintf(_("The %s fires a single powerful homing rocket with the ability to evade obstacles to find its target. "
-        "The rocket it fires is similar to that of the %s"),
+        "The rocket it fires is similar to that of the %s."),
     COLORED_NAME(this), COLORED_NAME(WEP_DEVASTATOR));
 }
 
index 73da02f9a7e7a1a7455e095c991d338313c7ffb8..a7ccf3016ec2c337d38cca0801fd8943a9206674 100644 (file)
@@ -20,7 +20,7 @@ METHOD(MachineGunTurret, tr_setup, void(MachineGunTurret this, entity it))
 METHOD(MachineGunTurret, describe, string(MachineGunTurret this))
 {
     TC(MachineGunTurret, this);
-    return sprintf(_("As the name suggests, the %s fires bullets in a burst at its targets, similar to the %s"),
+    return sprintf(_("As the name suggests, the %s fires bullets in a burst at its targets, similar to the %s."),
     COLORED_NAME(this), COLORED_NAME(WEP_MACHINEGUN));
 }
 
index 49d87523e618bf60e4e2686068751bc14f5cbe46..7086ac755180ada078de310f2fc135e099e9ab08 100644 (file)
@@ -31,9 +31,9 @@ METHOD(MLRSTurret, tr_setup, void(MLRSTurret this, entity it))
 METHOD(MLRSTurret, describe, string(MLRSTurret this))
 {
     TC(MLRSTurret, this);
-    return sprintf(_("The %s fires a rapid burst of 6 rockets similar to those of the %s towards its targets\n\n"
+    return sprintf(_("The %s fires a rapid burst of 6 rockets similar to those of the %s towards its targets.\n\n"
         "Getting caught in the line of fire of this turret can be very deadly, "
-        "but thankfully it doesn't shoot if you get too close, so as to not damage itself"),
+        "but thankfully it doesn't shoot if you get too close, so as to not damage itself."),
     COLORED_NAME(this), COLORED_NAME(WEP_DEVASTATOR));
 }
 
index 1706c3ba39e31e3b116ca554f746af5039eeba6a..cc67d0073355131978af5150e8d1fd39823aafd7 100644 (file)
@@ -48,8 +48,8 @@ bool turret_phaser_firecheck(entity this)
 METHOD(PhaserTurret, describe, string(PhaserTurret this))
 {
     TC(PhaserTurret, this);
-    return sprintf(_("The %s is a turret that fires an invisible beam of energy towards its targets\n\n"
-        "Looks are deceiving with the %s, since although the beam of energy can't be seen, it constantly deals damage to and slows down players who intercept its path"),
+    return sprintf(_("The %s is a turret that fires an invisible beam of energy towards its targets.\n\n"
+        "Looks are deceiving with the %s, since although the beam of energy can't be seen, it constantly deals damage to and slows down players who intercept its path."),
     COLORED_NAME(this), COLORED_NAME(this));
 }
 
index 2cebb3bed0d33b90f016dff407b403139b0be91a..ca385f76e3c2250d1b673c68a467b4290f87190a 100644 (file)
@@ -52,8 +52,8 @@ METHOD(PlasmaTurret, tr_setup, void(PlasmaTurret this, entity it))
 METHOD(PlasmaTurret, describe, string(PlasmaTurret this))
 {
     TC(PlasmaTurret, this);
-    return sprintf(_("The %s is a turret that fires electric balls forwards, similar to those of the %s\n\n"
-        "It is a weaker version of the %s, which has two electric ball cannons"),
+    return sprintf(_("The %s is a turret that fires electric balls forwards, similar to those of the %s.\n\n"
+        "It is a weaker version of the %s, which has two electric ball cannons."),
     COLORED_NAME(this), COLORED_NAME(WEP_ELECTRO), COLORED_NAME(TUR_PLASMA_DUAL));
 }
 
index e3e0894416b69d005563e0580fc6f39bbb4b5561..345db54b7c06fdf1e28a397a6e6b1c7334b9f291 100644 (file)
@@ -40,8 +40,8 @@ METHOD(DualPlasmaTurret, tr_think, void(DualPlasmaTurret thistur, entity it))
 METHOD(DualPlasmaTurret, describe, string(DualPlasmaTurret this))
 {
     TC(DualPlasmaTurret, this);
-    return sprintf(_("The %s is a turret that fires electric balls forwards from its two cannons, shooting balls similar to those of the %s\n\n"
-        "It is a stronger version of the %s, which only has one electric ball cannon"),
+    return sprintf(_("The %s is a turret that fires electric balls forwards from its two cannons, shooting balls similar to those of the %s.\n\n"
+        "It is a stronger version of the %s, which only has one electric ball cannon."),
     COLORED_NAME(this), COLORED_NAME(WEP_ELECTRO), COLORED_NAME(TUR_PLASMA));
 }
 
index e3fba0634d911f3f3da0d67a28e9a9ac0e46badd..0f5242ae0e139efb6cfb15f71c98e68e9c759016 100644 (file)
@@ -91,8 +91,8 @@ bool turret_tesla_firecheck(entity this)
 METHOD(TeslaCoil, describe, string(TeslaCoil this))
 {
     TC(TeslaCoil, this);
-    return sprintf(_("The %s is a turret that electrocutes all who dare come near it, sending powerful high-voltage arcs of lightning to strike its targets\n\n"
-        "Since the arcs of lightning can jump between nearby targets, it is best to just stay away from the %s"),
+    return sprintf(_("The %s is a turret that electrocutes all who dare come near it, sending powerful high-voltage arcs of lightning to strike its targets.\n\n"
+        "Since the arcs of lightning can jump between nearby targets, it is best to just stay away from the %s."),
     COLORED_NAME(this), COLORED_NAME(this));
 }
 
index 54ca49f85b79ef89a2da7769c5c4944951733e4e..3d06043528289fd5801f884113fccd8b146a92cd 100644 (file)
@@ -647,9 +647,9 @@ METHOD(WalkerTurret, tr_setup, void(WalkerTurret this, entity it))
 METHOD(WalkerTurret, describe, string(WalkerTurret this))
 {
     TC(WalkerTurret, this);
-    return sprintf(_("The %s is an arachnid-like walking turret that hunts down its targets\n\n"
+    return sprintf(_("The %s is an arachnid-like walking turret that hunts down its targets.\n\n"
         "It has two weapons, both a machinegun like the %s for medium range combat, and a rocket launcher shooting homing missiles like the %s for long range targets. "
-        "It also has the ability to melee close by targets"),
+        "It also has the ability to melee close by targets."),
     COLORED_NAME(this), COLORED_NAME(WEP_MACHINEGUN), COLORED_NAME(WEP_DEVASTATOR));
 }
 
index 96d438e443c97d3728bcf3579ecb9199f195421d..8130c2845c83728cfa16aa1b2d95f7a710bd703e 100644 (file)
@@ -981,11 +981,11 @@ METHOD(Bumblebee, vr_setup, void(Bumblebee thisveh, entity instance))
 METHOD(Bumblebee, describe, string(Bumblebee this))
 {
     TC(Bumblebee, this);
-    return sprintf(_("The %s vehicle seats up to three passengers, who are given different roles based on the order they enter\n\n"
+    return sprintf(_("The %s vehicle seats up to three passengers, who are given different roles based on the order they enter.\n\n"
         "The first player to enter will be the pilot, flying the vehicle up into the skies. "
-        "The first player can also shoot a green healing wave to heal other teammates on the ground\n\n"
-        "The second player to enter is the right gunner and the third player to enter is the left gunner\n\n"
-        "When the pilot exits the vehicle, the players switch roles by moving up in position"),
+        "The first player can also shoot a green healing wave to heal other teammates on the ground.\n\n"
+        "The second player to enter is the right gunner and the third player to enter is the left gunner.\n\n"
+        "When the pilot exits the vehicle, the players switch roles by moving up in position."),
     COLORED_NAME(this));
 }
 
index ffd8c6060dce7e235ca8b5a7fa82abcffd25c2e5..413e3c33984a5998d821900f1ac27c1af84ea47e 100644 (file)
@@ -647,9 +647,9 @@ METHOD(Racer, describe, string(Racer this))
 {
     TC(Racer, this);
     return sprintf(_("The %s vehicle looks like a jet, but does not fly uwpards very well. "
-        "It seats only one passenger, who becomes the pilot\n\n"
-        "It can be accelerated by pressing the ^3+jump^7 bind, which consumes power from the same source as the primary weapon\n\n"
-        "The %s's primary weapon is a laser and the secondary weapon is energy balls that explode on impact"),
+        "It seats only one passenger, who becomes the pilot.\n\n"
+        "It can be accelerated by pressing the ^3+jump^7 bind, which consumes power from the same source as the primary weapon.\n\n"
+        "The %s's primary weapon is a laser and the secondary weapon is energy balls that explode on impact."),
     COLORED_NAME(this), COLORED_NAME(this));
 }
 
index 20b8b1991b339aa5393ba543a4a6bbd74a9c6518..20fab124127bded0ed1b85d95349c684c249cf94 100644 (file)
@@ -846,11 +846,11 @@ METHOD(Raptor, vr_setup, void(Raptor thisveh, entity instance))
 METHOD(Raptor, describe, string(Raptor this))
 {
     TC(Raptor, this);
-    return sprintf(_("The %s vehicle is a flying vehicle that takes only one pilot, who can also opearate two weapons\n\n"
+    return sprintf(_("The %s vehicle is a flying vehicle that takes only one pilot, who can also opearate two weapons.\n\n"
         "The two weapons have different reticles for them similar to the %s. "
         "The primary weapon is laser-based, and is shot toward the white reticle. "
         "The secondary weapon drops bombs to the ground, aiming towards the green reticle. "
-        "The white reticle always points at the head of the vehicle, while the green reticle's location is determined by the momentum of the vehicle"),
+        "The white reticle always points at the head of the vehicle, while the green reticle's location is determined by the momentum of the vehicle."),
     COLORED_NAME(this), COLORED_NAME(VEH_SPIDERBOT));
 }
 
index c0e49db1939c250813fcabd2e77f0095ad07a5de..2170db654dc47511bae9710c1c61bc20bde3929c 100644 (file)
@@ -651,12 +651,12 @@ METHOD(Spiderbot, vr_setup, void(Spiderbot thisveh, entity instance))
 METHOD(Spiderbot, describe, string(Spiderbot this))
 {
     TC(Spiderbot, this);
-    return sprintf(_("The %s vehicle walks and jumps around, and takes only one rider\n\n"
-        "It can jump from very high altitudes while protecting the rider\n\n"
+    return sprintf(_("The %s vehicle walks and jumps around, and takes only one rider.\n\n"
+        "It can jump from very high altitudes while protecting the rider.\n\n"
         "It has two weapons the rider can control, which have different reticles for them similar to the %s. "
         "The primary weapon is a machine gun, and is shot toward the green reticle. "
         "The secondary weapon shoots rockets towards the white reticle. "
-        "The white reticle points to the front of the vehicle, while the green reticle also points to the front, with a bit of delay when the %s rotates"),
+        "The white reticle points to the front of the vehicle, while the green reticle also points to the front, with a bit of delay when the %s rotates."),
     COLORED_NAME(this), COLORED_NAME(VEH_RAPTOR), COLORED_NAME(this));
 }
 
index 2c80880289def6fa789bd240eb2e20cf7a358dad..672a1bdcdcafd62c3cbb19c49350329f523692f3 100644 (file)
@@ -1514,10 +1514,10 @@ NET_HANDLE(ENT_CLIENT_ARC_BEAM, bool isnew)
 METHOD(Arc, describe, string(Arc this))
 {
        TC(Arc, this);
-       return sprintf(_("The %s fires a continuous stream of electricity, steadily dealing damage to any enemies that cross its path\n\n"
-               "The secondary fire rapidly shoots electro balls forward, exploding on impact and dealing some splash damage\n\n"
-               "It consumes %s ammo, steadily churning through your supply to maintain the stream\n\n"
-               "The %s is quite a versatile weapon, however it is more effective at close to medium ranges, since the stream is not instantaneous"),
+       return sprintf(_("The %s fires a continuous stream of electricity, steadily dealing damage to any enemies that cross its path.\n\n"
+               "The secondary fire rapidly shoots electro balls forward, exploding on impact and dealing some splash damage.\n\n"
+               "It consumes %s ammo, steadily churning through your supply to maintain the stream.\n\n"
+               "The %s is quite a versatile weapon, however it is more effective at close to medium ranges, since the stream is not instantaneous."),
        COLORED_NAME(this), COLORED_NAME(ITEM_Cells), COLORED_NAME(this));
 }
 
index 899c5389173edef8df2c558a9660ffba14e0b82f..1ab24eada6ff6ad743707c14e80432bef8c471f7 100644 (file)
@@ -157,12 +157,12 @@ METHOD(Blaster, wr_impacteffect, void(entity thiswep, entity actor))
 METHOD(Blaster, describe, string(Blaster this))
 {
        TC(Blaster, this);
-       return sprintf(_("The %s is one of the two main default weapons, firing a relatively weak high speed laser forwards, dealing some splash damage but importantly a lot of knockback\n\n"
-               "It has no secondary fire, instead switching to the previously selected weapon\n\n"
-               "It doesn't require ammo, meaning it is a great choice if you are running low on ammo and need to preserve some\n\n"
-               "The %s is always available so ends up being used a lot when players spawn in, but it's difficult to master when used over a medium to long range\n\n"
+       return sprintf(_("The %s is one of the two main default weapons, firing a relatively weak high speed laser forwards, dealing some splash damage but importantly a lot of knockback.\n\n"
+               "It has no secondary fire, instead switching to the previously selected weapon.\n\n"
+               "It doesn't require ammo, meaning it is a great choice if you are running low on ammo and need to preserve some.\n\n"
+               "The %s is always available so ends up being used a lot when players spawn in, but it's difficult to master when used over a medium to long range.\n\n"
                "One of the most common uses of the %s is \"laser jumping,\" where you can gain height by aiming down, jumping, then firing to boost yourself up. "
-               "Because it does a lot of knockback, another common usage is alternating between a high damage weapon and the %s to throw the enemy's aim off"),
+               "Because it does a lot of knockback, another common usage is alternating between a high damage weapon and the %s to throw the enemy's aim off."),
        COLORED_NAME(this), COLORED_NAME(this), COLORED_NAME(this), COLORED_NAME(this));
 }
 
index 0e1adfe792005c61097bd773c6f6fa4f702fb2a5..743ab8e1ec16f0f7518416eccade5b20ab473e77 100644 (file)
@@ -636,13 +636,13 @@ METHOD(Crylink, describe, string(Crylink this))
        TC(Crylink, this);
        return sprintf(_("The %s fires bursts of laser-like projectiles, spreading out as they travel away, and deflecting off walls. "
                "If the primary fire is held, when it's released the projectiles will converge before spreading out again, "
-               "which can be utilized to deal more damage to an enemy by making the projectiles converge on them\n\n"
-               "The secondary fire shoots the projectiles together in a tight group, so it is often the better option in situations where the enemy is an easy target to hit\n\n"
-               "It consumes %s ammo for each projectile, which is shared by several weapons\n\n"
-               "Close to medium range is the ideal time to use the %s, although the secondary fire can be useful for long range combat sometimes\n\n"
+               "which can be utilized to deal more damage to an enemy by making the projectiles converge on them.\n\n"
+               "The secondary fire shoots the projectiles together in a tight group, so it is often the better option in situations where the enemy is an easy target to hit.\n\n"
+               "It consumes %s ammo for each projectile, which is shared by several weapons.\n\n"
+               "Close to medium range is the ideal time to use the %s, although the secondary fire can be useful for long range combat sometimes.\n\n"
                "The %s deals knockback in a unique way, pulling the player from their center to the point of impact. "
                "This makes it one of the best weapons to slow someone down if you are chasing them, particularly with the secondary fire. "
-               "Another common use of the %s is \"crylink running,\" where you partially angle down and use the secondary fire to pull yourself forwards, in order to gain speed"),
+               "Another common use of the %s is \"crylink running,\" where you partially angle down and use the secondary fire to pull yourself forwards, in order to gain speed."),
        COLORED_NAME(this), COLORED_NAME(ITEM_Cells), COLORED_NAME(this), COLORED_NAME(this), COLORED_NAME(this));
 }
 
index b7f3f5a63e3a6236918ddb9a33bb0dcd263c4842..6bfb2bde787573512c1a7e7d192e50d1ab504481 100644 (file)
@@ -614,13 +614,13 @@ METHOD(Devastator, describe, string(Devastator this))
 {
        TC(Devastator, this);
        return sprintf(_("The %s launches a remote controlled rocket, dealing significant damage when it explodes on impact. "
-               "If the primary fire is held, the rocket can be guided by the user's aim, allowing steering it towards enemies\n\n"
-               "The secondary fire can be used to immediately detonate the most recently fired rocket, allowing dealing damage to enemies even if the rocket barely missed colliding with them\n\n"
-               "It consumes a bunch of %s ammo for each rocket, which can end up being depleted quickly, so often players alternate with another weapon like %s\n\n"
+               "If the primary fire is held, the rocket can be guided by the user's aim, allowing steering it towards enemies.\n\n"
+               "The secondary fire can be used to immediately detonate the most recently fired rocket, allowing dealing damage to enemies even if the rocket barely missed colliding with them.\n\n"
+               "It consumes a bunch of %s ammo for each rocket, which can end up being depleted quickly, so often players alternate with another weapon like %s.\n\n"
                "Due to its high damage output, the %s is one of the most commonly used weapons. "
                "It can be used in almost any scenario, working best in medium range combat. "
-               "In close range combat, the large splash radius means often rockets can damage yourself as well as the enemy\n\n"
-               "Due to the ability to remotely detonate rockets, a common usage is \"rocket flying,\" where you fire a rocket and immediately detonate it to boost yourself while mid-air"),
+               "In close range combat, the large splash radius means often rockets can damage yourself as well as the enemy.\n\n"
+               "Due to the ability to remotely detonate rockets, a common usage is \"rocket flying,\" where you fire a rocket and immediately detonate it to boost yourself while mid-air."),
        COLORED_NAME(this), COLORED_NAME(ITEM_Rockets), COLORED_NAME(WEP_VORTEX), COLORED_NAME(this));
 }
 
index 04bb7efc92fcfa680fe04a5ac1aea3e8108f1f47..8baa0142a9a8986002ea1fb04000ff58ded23ac6 100644 (file)
@@ -781,13 +781,13 @@ METHOD(Electro, wr_impacteffect, void(entity thiswep, entity actor))
 METHOD(Electro, describe, string(Electro this))
 {
        TC(Electro, this);
-       return sprintf(_("The %s shoots electric balls forwards, dealing some splash damage when they burst on impact\n\n"
+       return sprintf(_("The %s shoots electric balls forwards, dealing some splash damage when they burst on impact.\n\n"
                "The secondary fire launches similar balls that are influenced by gravity, "
                "so they can be laid around the map at high traffic locations (like the flag in Capture The Flag) to damage enemies that walk by. "
-               "The balls burst after some time, and can be forced to burst in a \"combo\" if a primary fire ball bursts near them\n\n"
-               "It consumes some %s ammo for each ball\n\n"
+               "The balls burst after some time, and can be forced to burst in a \"combo\" if a primary fire ball bursts near them.\n\n"
+               "It consumes some %s ammo for each ball.\n\n"
                "The %s is one of the best spam weapons to use in crowded areas, since combos can deal tons of damage, if the enemy is close enough. "
-               "Since the primary fire doesn't travel particularly fast, the %s is not useful in many other situations"),
+               "Since the primary fire doesn't travel particularly fast, the %s is not useful in many other situations."),
        COLORED_NAME(this), COLORED_NAME(ITEM_Cells), COLORED_NAME(this), COLORED_NAME(this));
 }
 
index b1c634e2a72c6fed17a4192fb7aa905e108663bc..ac7539b6de9a7fafcd55646f5a24969dcd7e7527 100644 (file)
@@ -438,12 +438,12 @@ METHOD(Fireball, wr_impacteffect, void(entity thiswep, entity actor))
 METHOD(Fireball, describe, string(Fireball this))
 {
        TC(Fireball, this);
-       return sprintf(_("The %s supercharges then fires a massive fireball in a straight line, dealing heaps of splash damage over a large radius on impact\n\n"
-               "The secondary fire launches flaming balls that set nearby players alight\n\n"
-               "It is a superweapon, so isn't often found in game\n\n"
-               "It doesn't require ammo, but it is destroyed after some time\n\n"
+       return sprintf(_("The %s supercharges then fires a massive fireball in a straight line, dealing heaps of splash damage over a large radius on impact.\n\n"
+               "The secondary fire launches flaming balls that set nearby players alight.\n\n"
+               "It is a superweapon, so isn't often found in game.\n\n"
+               "It doesn't require ammo, but it is destroyed after some time.\n\n"
                "Since the %s takes a moment to charge and the fireball travels slowly, using it effectively may be difficult, "
-               "but if done properly it can deal a ton of damage"),
+               "but if done properly it can deal a ton of damage."),
        COLORED_NAME(this), COLORED_NAME(this));
 }
 
index 8cb824cc44fea31f8d586febabfec7e45afdadf9..97b63dd69cd47782cda1cf902a1a4781e79dda6e 100644 (file)
@@ -495,12 +495,12 @@ METHOD(Hagar, wr_impacteffect, void(entity thiswep, entity actor))
 METHOD(Hagar, describe, string(Hagar this))
 {
        TC(Hagar, this);
-       return sprintf(_("The %s rapidly fires small propelled rockets forwards, dealing some splash damage on impact\n\n"
+       return sprintf(_("The %s rapidly fires small propelled rockets forwards, dealing some splash damage on impact.\n\n"
                "When the secondary fire is held, multiple rockets are loaded up, and they're shot at the same time when released. "
-               "These rockets can't be held forever, so it will fire itself after some time (after a warning beep) if the secondary fire isn't released\n\n"
-               "It consumes %s ammo for each rocket\n\n"
+               "These rockets can't be held forever, so it will fire itself after some time (after a warning beep) if the secondary fire isn't released.\n\n"
+               "It consumes %s ammo for each rocket.\n\n"
                "The %s works best over close to medium ranges, since it's hard to land hits at a long distance. "
-               "A common usage is fully loading the secondary fire before turning a corner, so you can surprise any enemies around the corner with a bunch of rockets to the face"),
+               "A common usage is fully loading the secondary fire before turning a corner, so you can surprise any enemies around the corner with a bunch of rockets to the face."),
        COLORED_NAME(this), COLORED_NAME(ITEM_Rockets), COLORED_NAME(this));
 }
 
index aa707a6120de6b80ab1af94676a77debb75233a5..b6a2ad8e8773e14b3a0d9b6c4eecd1d017ca603d 100644 (file)
@@ -242,13 +242,13 @@ METHOD(HLAC, describe, string(HLAC this))
 {
        TC(HLAC, this);
        return sprintf(_("The %s (or HLAC for short) fires lasers in quick succession. "
-               "The projectiles it fires are similar to those of the %s\n\n"
-               "The secondary fire shoots a randomly scattered burst of multiple lasers at once\n\n"
-               "Unlike the %s, it consumes %s ammo for each laser shot, meaning that it cannot be used infinitely\n\n"
-               "The %s works best in close ranges, but the primary fire is also useful in medium ranges\n\n"
+               "The projectiles it fires are similar to those of the %s.\n\n"
+               "The secondary fire shoots a randomly scattered burst of multiple lasers at once.\n\n"
+               "Unlike the %s, it consumes %s ammo for each laser shot, meaning that it cannot be used infinitely.\n\n"
+               "The %s works best in close ranges, but the primary fire is also useful in medium ranges.\n\n"
                "A unique aspect of the %s is that the longer the primary fire is held, the more that the lasers will start to spread out. "
                "This means releasing primary fire every now and then is important to restore accuracy. "
-               "Also, the %s has less spread when used while crouching"),
+               "Also, the %s has less spread when used while crouching."),
        COLORED_NAME(this), COLORED_NAME(WEP_BLASTER), COLORED_NAME(WEP_BLASTER), COLORED_NAME(ITEM_Cells), COLORED_NAME(this), COLORED_NAME(this), COLORED_NAME(this));
 }
 
index ffc66da26fcacac2005aa5f9f04913748a574d4d..260ac08ee678f52d278e953470f40e3e03fff91d 100644 (file)
@@ -425,12 +425,12 @@ NET_HANDLE(ENT_CLIENT_HOOK, bool bIsNew)
 METHOD(Hook, describe, string(Hook this))
 {
        TC(Hook, this);
-       return sprintf(_("The %s is a unique weapon, firing a chain forwards which pulls you in once it latches onto something\n\n"
-               "The secondary fire usually drops a gravity bomb that affects enemies, also releasing light a smoke like a flashbang\n\n"
-               "It usually requires %s ammo to work, consuming it both when initially firing the hook, and after a couple seconds as it reels you in\n\n"
+       return sprintf(_("The %s is a unique weapon, firing a chain forwards which pulls you in once it latches onto something.\n\n"
+               "The secondary fire usually drops a gravity bomb that affects enemies, also releasing light a smoke like a flashbang.\n\n"
+               "It usually requires %s ammo to work, consuming it both when initially firing the hook, and after a couple seconds as it reels you in.\n\n"
                "The %s allows reaching previously unreachable places on maps and zooming around the map at high speeds, "
-               "making both surprise ambushes and miraculous escapes possible\n\n"
-               "It isn't available very often on maps, unless the Grappling Hook mutator is active, in which all players have it on their offhand, used with the ^3+hook^7 bind"),
+               "making both surprise ambushes and miraculous escapes possible.\n\n"
+               "It isn't available very often on maps, unless the Grappling Hook mutator is active, in which all players have it on their offhand, used with the ^3+hook^7 bind."),
        COLORED_NAME(this), COLORED_NAME(ITEM_JetpackFuel), COLORED_NAME(this));
 }
 
index 1a223f72ee8f8822e5f9af2c9324572e642d6607..ece4efa21e25e1578e9f96ca11971bf8ef882173 100644 (file)
@@ -419,11 +419,11 @@ METHOD(MachineGun, wr_impacteffect, void(entity thiswep, entity actor))
 METHOD(MachineGun, describe, string(MachineGun this))
 {
        TC(MachineGun, this);
-       return sprintf(_("The %s quickly fires bullets with a small degree of spread\n\n"
-               "The secondary fire fires a quick burst of bullets faster than the primary fire and with no spread, but there's a short delay until it can be used again\n\n"
-               "It consumes %s ammo for each bullet shot, until the whole magazine is emptied\n\n"
+       return sprintf(_("The %s quickly fires bullets with a small degree of spread.\n\n"
+               "The secondary fire fires a quick burst of bullets faster than the primary fire and with no spread, but there's a short delay until it can be used again.\n\n"
+               "It consumes %s ammo for each bullet shot, until the whole magazine is emptied.\n\n"
                "The %s can be used in a lot of situations, and it works particularly well at long ranges since the bullets pierce the sky instantaneously. "
-               "Since the secondary fire has no spread, it's the better option when firing over a long range"),
+               "Since the secondary fire has no spread, it's the better option when firing over a long range."),
        COLORED_NAME(this), COLORED_NAME(ITEM_Bullets), COLORED_NAME(this));
 }
 
index ad6408457acdb7b4df6159811eb4d7628382947c..98a1f674fcabfe7735de54ff8384e91e5759706e 100644 (file)
@@ -519,11 +519,11 @@ METHOD(MineLayer, describe, string(MineLayer this))
 {
        TC(MineLayer, this);
        return sprintf(_("The %s places mines on the ground when fired, which detonate and damage enemies if stepped on. "
-               "Only a couple mines can be placed at any time, and after several seconds they will self-detonate\n\n"
-               "The secondary fire instantaneously detonates any mines fired by the primary fire, first waiting until you're far enough away\n\n"
-               "It consumes %s ammo for each mine laid\n\n"
+               "Only a couple mines can be placed at any time, and after several seconds they will self-detonate.\n\n"
+               "The secondary fire instantaneously detonates any mines fired by the primary fire, first waiting until you're far enough away.\n\n"
+               "It consumes %s ammo for each mine laid.\n\n"
                "The mines are not launched very far before they hit the ground, so the %s isn't very effective at medium to long ranges. "
-               "It is often used to protect important areas of the map such as the flag in Capture The Flag, control points in Onslaught, or checkpoints in Assault"),
+               "It is often used to protect important areas of the map such as the flag in Capture The Flag, control points in Onslaught, or checkpoints in Assault."),
        COLORED_NAME(this), COLORED_NAME(ITEM_Rockets), COLORED_NAME(this));
 }
 
index 5497265e21dc0f7ef051ce5699f34dc501d26785..3ff9d799b1a50284ef39c46b98b4a20b9972982f 100644 (file)
@@ -378,11 +378,11 @@ METHOD(Mortar, wr_impacteffect, void(entity thiswep, entity actor))
 METHOD(Mortar, describe, string(Mortar this))
 {
        TC(Mortar, this);
-       return sprintf(_("The %s launches a grenade that explodes immediately on impact, dealing a medium amount of splash damage\n\n"
-               "The secondary fire shoots a similar grenade that explodes shortly after bouncing\n\n"
-               "It consumes %s ammo for every grenade launched\n\n"
+       return sprintf(_("The %s launches a grenade that explodes immediately on impact, dealing a medium amount of splash damage.\n\n"
+               "The secondary fire shoots a similar grenade that explodes shortly after bouncing.\n\n"
+               "It consumes %s ammo for every grenade launched.\n\n"
                "The %s works best at close to medium ranges, but it's quite tricky to hit an enemy if they're airborne. "
-               "Since the secondary fire grenade bounces before exploding, it can be bounced against walls to damage enemies lurking around a corner"),
+               "Since the secondary fire grenade bounces before exploding, it can be bounced against walls to damage enemies lurking around a corner."),
        COLORED_NAME(this), COLORED_NAME(ITEM_Rockets), COLORED_NAME(this));
 }
 
index d9e894e005b029f2caae013a629ab6007a7fd340..afd264e1b6e4c94f88eadd9c904ab9d2f254abed 100644 (file)
@@ -430,11 +430,11 @@ METHOD(PortoLaunch, wr_impacteffect, void(entity this, entity actor)) {
 METHOD(PortoLaunch, describe, string(PortoLaunch this))
 {
        TC(PortoLaunch, this);
-       return sprintf(_("The %s is a unique gun that creates one-way portals between flat surfaces on the map, that immediately teleport players and projectiles\n\n"
-               "The secondary fire is used to shoot the out-portal, while the primary fire shoots the in-portal\n\n"
-               "It doesn't require ammo, but it is destroyed after some time\n\n"
-               "The portals will close either after the player who shot them dies or after some time period"
-               "The %s isn't often placed on maps, but if used well it can make for some interesting gameplay"),
+       return sprintf(_("The %s is a unique gun that creates one-way portals between flat surfaces on the map, that immediately teleport players and projectiles.\n\n"
+               "The secondary fire is used to shoot the out-portal, while the primary fire shoots the in-portal.\n\n"
+               "It doesn't require ammo, but it is destroyed after some time.\n\n"
+               "The portals will close either after the player who shot them dies or after some time period.\n\n"
+               "The %s isn't often placed on maps, but if used well it can make for some interesting gameplay."),
        COLORED_NAME(this), COLORED_NAME(this));
 }
 
index 8ace94a30a70ea7d29d0dec90d8b6eea2d4346ca..760319cd19a3c27469d0a96dfcd848215919aa8c 100644 (file)
@@ -266,12 +266,12 @@ METHOD(Rifle, wr_zoomdir, bool(entity thiswep))
 METHOD(Rifle, describe, string(Rifle this))
 {
        TC(Rifle, this);
-       return sprintf(_("The %s fires bullets that traverse the map instantaneously and deal a significant chunk of damage on impact\n\n"
-               "The secondary fire shoots a few less powerful bullets at once with a bit of scatter\n\n"
-               "It consumes %s ammo for each bullet shot\n\n"
+       return sprintf(_("The %s fires bullets that traverse the map instantaneously and deal a significant chunk of damage on impact.\n\n"
+               "The secondary fire shoots a few less powerful bullets at once with a bit of scatter.\n\n"
+               "It consumes %s ammo for each bullet shot.\n\n"
                "Unlike the %s, the secondary fire doesn't zoom, so the ^3+zoom^7 bind needs to be used manually with the %s. "
-               "Also, it needs to be reloaded after its magazine is emptied\n\n"
-               "Similar to the %s, the %s can be used at any range, but it stands out at long ranges"),
+               "Also, it needs to be reloaded after its magazine is emptied.\n\n"
+               "Similar to the %s, the %s can be used at any range, but it stands out at long ranges."),
        COLORED_NAME(this), COLORED_NAME(ITEM_Bullets), COLORED_NAME(WEP_VORTEX), COLORED_NAME(this), COLORED_NAME(WEP_VORTEX), COLORED_NAME(this));
 }
 
index 76e8f9c1eda043725eb638706aeaa50deab58292..52d5928c1c8b6819e4571538d239ad40ee55d830 100644 (file)
@@ -672,11 +672,11 @@ METHOD(Seeker, describe, string(Seeker this))
 {
        TC(Seeker, this);
        return sprintf(_("The %s is a unique weapon, firing a \"tag\" which then launches a few homing missiles if it collides with a player. "
-               "The homing isn't perfect, so sometimes the missiles can hit an object or a corner\n\n"
-               "The secondary fire launches a rapid barrage of scattered explosives that travel only a short distance\n\n"
-               "It consumes %s ammo, even when the tag doesn't land\n\n"
+               "The homing isn't perfect, so sometimes the missiles can hit an object or a corner.\n\n"
+               "The secondary fire launches a rapid barrage of scattered explosives that travel only a short distance.\n\n"
+               "It consumes %s ammo, even when the tag doesn't land.\n\n"
                "The %s primary fire deals quite a lot of damage when a tag lands, although it requires skill to aim effectively. "
-               "The secondary fire is only useful in close range combat, and sometimes the explosives can damage yourself too"),
+               "The secondary fire is only useful in close range combat, and sometimes the explosives can damage yourself too."),
        COLORED_NAME(this), COLORED_NAME(ITEM_Rockets), COLORED_NAME(this));
 }
 
index 4d183f551908bd8be505f07a9dceec6ebd7872cf..429d47b726d5ab5a0192acc75442ab69cc803e99 100644 (file)
@@ -391,11 +391,11 @@ METHOD(Shotgun, wr_impacteffect, void(entity thiswep, entity actor))
 METHOD(Shotgun, describe, string(Shotgun this))
 {
        TC(Shotgun, this);
-       return sprintf(_("The %s is one of the two main default weapons, firing a single shotgun round which spreads into multiple pellets upon exiting the barrel\n\n"
+       return sprintf(_("The %s is one of the two main default weapons, firing a single shotgun round which spreads into multiple pellets upon exiting the barrel.\n\n"
                "The secondary fire swings the %s, slapping players close enough with the head of the weapon. "
-               "Since the slap takes a moment to land, timing this well is difficult\n\n"
-               "The primary fire consumes %s ammo, although if you spawn in with the %s you will already have some\n\n"
-               "The %s's damage drops off quickly as the range increases, so it is only useful for close combat or sometimes medium range combat"),
+               "Since the slap takes a moment to land, timing this well is difficult.\n\n"
+               "The primary fire consumes %s ammo, although if you spawn in with the %s you will already have some.\n\n"
+               "The %s's damage drops off quickly as the range increases, so it is only useful for close combat or sometimes medium range combat."),
        COLORED_NAME(this), COLORED_NAME(this), COLORED_NAME(ITEM_Shells), COLORED_NAME(this), COLORED_NAME(this));
 }
 
index 98b2d8c2a6332d792b6a3106ae3e810f25e9d87a..8a322c1181a127c4efc9da37614dbb1527961e45 100644 (file)
@@ -598,12 +598,12 @@ PRECACHE(Tuba)
 METHOD(Tuba, describe, string(Tuba this))
 {
        TC(Tuba, this);
-       return sprintf(_("The %s is unique weapon that makes the ears of nearby enemies bleed by playing awful sounds, also slightly knocking them back\n\n"
-               "The secondary fire works the same way, playing a higher pitch\n\n"
-               "The only ammo it needs to operate is the breath from your lungs\n\n"
-               "Since your enemies need to be close by to hear your awful music, the %s is only effective at very close ranges\n\n"
+       return sprintf(_("The %s is unique weapon that makes the ears of nearby enemies bleed by playing awful sounds, also slightly knocking them back.\n\n"
+               "The secondary fire works the same way, playing a higher pitch.\n\n"
+               "The only ammo it needs to operate is the breath from your lungs.\n\n"
+               "Since your enemies need to be close by to hear your awful music, the %s is only effective at very close ranges.\n\n"
                "The pitch the %s plays depends on the movement keys pressed. "
-               "Reloading the weapon switches its model and notes played"),
+               "Reloading the weapon switches its model and notes played."),
        COLORED_NAME(this), COLORED_NAME(this), COLORED_NAME(this));
 }
 
index 351cf13fbc8e4a3084eb9d98924966ed40f7645c..c1f3f8f7bc79e0a6882c43591b64d5c5280a9b9a 100644 (file)
@@ -415,10 +415,10 @@ METHOD(Vaporizer, describe, string(Vaporizer this))
 {
        TC(Vaporizer, this);
        return sprintf(_("The %s is unique weapon, firing a deadly beam of energy dealing a huge amount of damage. "
-               "In InstaGib, the beam has the ability to instantly kill enemies with a single shot, unless they have an %s\n\n"
-               "The secondary fire fires a laser similar to that fired by the %s, with very strong knockback\n\n"
-               "It is a superweapon, so isn't often found in game, except in InstaGib where all players spawn with it\n\n"
-               "It consumes some %s ammo with each shot"),
+               "In InstaGib, the beam has the ability to instantly kill enemies with a single shot, unless they have an %s.\n\n"
+               "The secondary fire fires a laser similar to that fired by the %s, with very strong knockback.\n\n"
+               "It is a superweapon, so isn't often found in game, except in InstaGib where all players spawn with it.\n\n"
+               "It consumes some %s ammo with each shot."),
        COLORED_NAME(this), COLORED_NAME(ITEM_ExtraLife), COLORED_NAME(WEP_BLASTER), COLORED_NAME(ITEM_Cells));
 }
 
index 87b44ad2a728eef65868e71e732d6ed7d1918d8c..dd9d49b827498552f84862696a911df6d1149b5e 100644 (file)
@@ -380,12 +380,12 @@ METHOD(Vortex, wr_zoomdir, bool(entity thiswep))
 METHOD(Vortex, describe, string(Vortex this))
 {
        TC(Vortex, this);
-       return sprintf(_("The %s fires harmful beams of energy that traverse the map instantaneously and deal a significant chunk of damage on impact\n\n"
-               "The secondary fire zooms in when held, allowing for ease of aiming\n\n"
-               "It consumes %s ammo for each bullet shot\n\n"
+       return sprintf(_("The %s fires harmful beams of energy that traverse the map instantaneously and deal a significant chunk of damage on impact.\n\n"
+               "The secondary fire zooms in when held, allowing for ease of aiming.\n\n"
+               "It consumes %s ammo for each bullet shot.\n\n"
                "Unlike the %s, the %s doesn't need to be reloaded manually, although you have to wait a couple seconds between shots. "
-               "Uniquely, it can be fired slightly before it finishes completely reloading, albeit with the tradeoff of dealing slightly less damage\n\n"
-               "Similar to the %s, the %s can be used at any range, but it stands out at long ranges"),
+               "Uniquely, it can be fired slightly before it finishes completely reloading, albeit with the tradeoff of dealing slightly less damage.\n\n"
+               "Similar to the %s, the %s can be used at any range, but it stands out at long ranges."),
        COLORED_NAME(this), COLORED_NAME(ITEM_Cells), COLORED_NAME(WEP_RIFLE), COLORED_NAME(this), COLORED_NAME(WEP_RIFLE), COLORED_NAME(this));
 }
 
index 18c691dd64335e8fc2f5e92856aec65f784a8958..55bfc8a49db20d45cd3f0a4c84c5129b11f17fd0 100644 (file)
@@ -11,40 +11,40 @@ REGISTER_INTRODUCTION_PAGE(0, _("About this guide"), "gametype_dm")
 {
        this.m_description = _("Welcome to Xonotic, the free and fast arena shooter!\n\n"
                "Please note that this guide describes the default game behavior with vanilla settings. "
-               "Xonotic is highly customizable and there are tons of servers out there that run with lightly or highly modified settings\n\n"
-               "You can usually find out which settings are modified by issuing ^3cvar_changes^7 in console after connecting to a server");
+               "Xonotic is highly customizable and there are tons of servers out there that run with lightly or highly modified settings.\n\n"
+               "You can usually find out which settings are modified by issuing ^3cvar_changes^7 in console after connecting to a server.");
 }
 REGISTER_INTRODUCTION_PAGE(1, _("Community"), "gametype_dm")
 {
        this.m_description = strzone(sprintf(_("Xonotic stands out for its friendly, mature, and welcoming player community, and many long-term players argue that this is probably one of the best things about Xonotic. "
-               "If you approach other players friendly and respectfully, this will be recognized, while acting toxic on the other hand will not make your life easier on the servers\n\n"
+               "If you approach other players friendly and respectfully, this will be recognized, while acting toxic on the other hand will not make your life easier on the servers.\n\n"
                "The best way to get in touch with the community is to just start playing online and use the in-game chat. "
-               "However, you can also connect to the official communication channels (^5%s^7 on Matrix, ^5%s^7 on QuakeNet IRC), and of course the official forum"),
+               "However, you can also connect to the official communication channels (^5%s^7 on Matrix, ^5%s^7 on QuakeNet IRC), and of course the official forum."),
        "#main:xonotic.org", "#xonotic"));
 }
 REGISTER_INTRODUCTION_PAGE(2, _("Acquiring Skills"), "gametype_dm")
 {
        this.m_description = _("The skill gap between new and experienced players is often immense. However, this is mostly because experienced players have learned how to make use of the game mechanics. "
                "If you see experienced players doing tricks you don't understand, don't hesitate to ask. "
-               "In most cases, polite questions receive an answer, from anyone on the server if not from the experienced player themselves\n\n"
+               "In most cases, polite questions receive an answer, from anyone on the server if not from the experienced player themselves.\n\n"
                "Another way to learn is to spectate experienced players. "
                "Observe which weapons they combo and the movement techniques they make use of. "
-               "Also look at which weapons they choose depending on the gameplay situation, for example in close combat, mid-range battles, or against groups of opponents\n\n"
-               "The learning curve is very steep. That said, understanding how the game works will enable you to speed around the map and apply effective weapon combos in no time");
+               "Also look at which weapons they choose depending on the gameplay situation, for example in close combat, mid-range battles, or against groups of opponents.\n\n"
+               "The learning curve is very steep. That said, understanding how the game works will enable you to speed around the map and apply effective weapon combos in no time.");
 }
 REGISTER_INTRODUCTION_PAGE(3, _("XonStat"), "gametype_dm")
 {
        this.m_description = strzone(sprintf(_("XonStat is the integrated player statistics application for Xonotic. "
-               "It stores vital stats like your K:D ratio, weapon damage and accuracy, and scoreboards from past games\n\n"
-               "Tracking is completely opt-in, and no login is required\n\n"
-               "Some of the statistics are available in-game on your player profile, while the rest are accessible at ^5%s^7"),
+               "It stores vital stats like your K:D ratio, weapon damage and accuracy, and scoreboards from past games.\n\n"
+               "Tracking is completely opt-in, and no login is required.\n\n"
+               "Some of the statistics are available in-game on your player profile, while the rest are accessible at ^5%s^7."),
        "stats.xonotic.org"));
 }
 
 REGISTER_MOVEMENT_PAGE(0, _("Movement Importance"), "gametype_inv")
 {
        this.m_description = _("Xonotic is a very fast-paced arena shooter. Fast-paced does not only relate to reaction times but also to movement speed. "
-               "That means mastering movement skills is an essential part of Xonotic gameplay and must not be underestimated\n\n"
+               "That means mastering movement skills is an essential part of Xonotic gameplay and must not be underestimated.\n\n"
                "For a new player using default physics, the most important tricks to learn are:"
                "\n  Bunny Hopping"
                "\n  Strafe Turning"
@@ -55,78 +55,78 @@ REGISTER_MOVEMENT_PAGE(0, _("Movement Importance"), "gametype_inv")
 }
 REGISTER_MOVEMENT_PAGE(1, _("Bunny Hopping"), "gametype_inv")
 {
-       this.m_description = _("\"Bunny hopping\" (\"bhopping\") is a technique known also from other arena shooters\n\n"
+       this.m_description = _("\"Bunny hopping\" (\"bhopping\") is a technique known also from other arena shooters.\n\n"
                "Due to air control, you can accelerate while in the air far beyond the maximum ground movement speed. "
                "In order to avoid ground friction you can constantly hop, so that ground contact won't slow you down, by simply keeping the ^3+jump^7 button pressed. "
-               "This allows you to get around the map much faster than if you would just walk\n\n"
-               "Therefore, keeping ^3+jump^7 held while moving quickly is one of the most essential movement strategies, used by all experienced players\n\n"
+               "This allows you to get around the map much faster than if you would just walk.\n\n"
+               "Therefore, keeping ^3+jump^7 held while moving quickly is one of the most essential movement strategies, used by all experienced players.\n\n"
                "In vanilla settings, the speed you can reach by bunny hopping is capped at 900. "
-               "CTS/DeFRaG servers usually run with different CPMA-like physics that remove this capping");
+               "CTS/DeFRaG servers usually run with different CPMA-like physics that remove this capping.");
 }
 REGISTER_MOVEMENT_PAGE(2, _("Strafe Turning"), "gametype_inv")
 {
        this.m_description = strzone(sprintf(_("Bunny hopping around corners requires \"strafe turning\" or you will loose a lot of speed (or simply not be able to make the turn). "
-               "Strafe turning is a method used to quickly change the direction you're traveling while mid-air, without losing speed\n\n"
+               "Strafe turning is a method used to quickly change the direction you're traveling while mid-air, without losing speed.\n\n"
                "While bunny hopping, first release the ^3+forward^7 movement key, then press the strafe key into the turn direction (^3+moveleft^7 or ^3+moveright^7), then start moving the mouse smoothly into the turn direction. "
-               "As always, during the entire strafe turn keep the jump button held\n\n"
-               "Note that if you press the strafe key before releasing the forward key, you will suffer a speed penalty\n\n"
-               "If you do it right, you will even continue to accelerate in strafe turns\n\n"
-               "For an illustration of this technique, see ^5%s^7"),
+               "As always, during the entire strafe turn keep the jump button held.\n\n"
+               "Note that if you press the strafe key before releasing the forward key, you will suffer a speed penalty.\n\n"
+               "If you do it right, you will even continue to accelerate in strafe turns.\n\n"
+               "For an illustration of this technique, see ^5%s^7."),
        "xonotic.org/guide"));
 }
 REGISTER_MOVEMENT_PAGE(3, _("Blaster Jumping"), "gametype_inv")
 {
        this.m_description = strzone(sprintf(_("In most situations, the %s is more a movement tool than a weapon. "
                "That's why many players will often have single digit accuracy for the %s. "
-               "It is instead especially useful to make high jumps\n\n"
+               "It is instead especially useful to make high jumps.\n\n"
                "To do a \"laser jump,\" simply fire the %s at your own feet and jump. "
-               "Experiment a bit with the timing of firing the %s and jumping to get a feeling about which timing will get you how high"),
+               "Experiment a bit with the timing of firing the %s and jumping to get a feeling about which timing will get you how high."),
        COLORED_NAME(WEP_BLASTER), COLORED_NAME(WEP_BLASTER), COLORED_NAME(WEP_BLASTER), COLORED_NAME(WEP_BLASTER)));
 }
 REGISTER_MOVEMENT_PAGE(4, _("Wall Blastering"), "gametype_inv")
 {
        this.m_description = strzone(sprintf(_("If you don't fire the %s at the floor but instead against a wall next to you, you can get significant horizontal speed. "
-               "You can do that to pick up speed off the stand or even when passing a wall while already bunny hopping\n\n"
+               "You can do that to pick up speed off the stand or even when passing a wall while already bunny hopping.\n\n"
                "To use this technique, start a bunny hop. Right after jumping, flick back with your mouse at about 8 o'clock if the wall is to your left (or 4 o'clock if the wall is to your right), aim at the level of your head, and fire the %s. "
-               "Immediately flick back to your movement direction and continue to bunny hop\n\n"
+               "Immediately flick back to your movement direction and continue to bunny hop.\n\n"
                "In order to waste as little speed as possible while flicking back, switch to strafe key for the duration of the flick. "
-               "Use the strafe right key if the wall is to your left, and the strafe left key if the wall is to your right\n\n"
-               "You'll find an illustration of this technique on ^5%s^7"),
+               "Use the strafe right key if the wall is to your left, and the strafe left key if the wall is to your right.\n\n"
+               "You'll find an illustration of this technique on ^5%s^7."),
        COLORED_NAME(WEP_BLASTER), COLORED_NAME(WEP_BLASTER), "xonotic.org/guide"));
 }
 REGISTER_MOVEMENT_PAGE(5, _("Rocket Flying"), "gametype_inv")
 {
        this.m_description = strzone(sprintf(_("The %s can be used just like the %s for movement, however it inflicts way more damage to the player. "
-               "In game modes without self damage however it is a very versatile movement tool\n\n"
-               "You can also fire a rocket underneath yourself and immediately detonate it. The explosion will push you upwards a little bit, and can prolong a jump\n\n"
-               "Note that this strategy only really works if the %s mutator is enabled"),
+               "In game modes without self damage however it is a very versatile movement tool.\n\n"
+               "You can also fire a rocket underneath yourself and immediately detonate it. The explosion will push you upwards a little bit, and can prolong a jump.\n\n"
+               "Note that this strategy only really works if the %s mutator is enabled."),
        COLORED_NAME(WEP_DEVASTATOR), COLORED_NAME(WEP_BLASTER), COLORED_NAME(MUTATOR_rocketflying)));
 }
 REGISTER_MOVEMENT_PAGE(6, _("Crylink Running"), "gametype_inv")
 {
-       this.m_description = strzone(sprintf(_("The drag force of %s secondary fire can not only break other people's movement, but can also give yourself a significant speed boost\n\n"
+       this.m_description = strzone(sprintf(_("The drag force of %s secondary fire can not only break other people's movement, but can also give yourself a significant speed boost.\n\n"
                "To \"crylink run,\" shoot the %s secondary at the floor (or a parallel wall) just in front of you and begin bunny hopping to catapult yourself off the stand into high speed"),
        COLORED_NAME(WEP_CRYLINK), COLORED_NAME(WEP_CRYLINK)));
 }
 REGISTER_MOVEMENT_PAGE(7, _("Crylink Wall Climbing"), "gametype_inv")
 {
        this.m_description = strzone(sprintf(_("By shooting the %s secondary against a wall next to you (just above your head), you can climb up walls quickly. "
-               "This is called \"wall climbing\" with the %s\n\n"
-               "This is also a good way to save yourself from falling off the map, as it reliably stops your downfall"),
+               "This is called \"wall climbing\" with the %s.\n\n"
+               "This is also a good way to save yourself from falling off the map, as it reliably stops your downfall."),
        COLORED_NAME(WEP_CRYLINK), COLORED_NAME(WEP_CRYLINK)));
 }
 REGISTER_MOVEMENT_PAGE(8, _("Ramp Jumping"), "gametype_inv")
 {
-       this.m_description = _("Ramps are an important part of Xonotic map design. Any sloped surface that you hit with the right speed and the right angle will give you a significant upwards boost and enable you to reach places that are otherwise accessible only with laser jumps, which cost health and make noise\n\n"
-               "When doing ramp jumps, it is vital to hit the ramp at a flat angle to receive the upwards boost and not loose too much speed\n\n"
-               "In order to make a ramp jump, approach a sloped surface (\"ramp\"), jump just before the ramp and keep the ^3+jump^7 button pressed so you jump again once you hit the ramp\n\n"
-               "The higher the speed you have when you hit the ramp (at the right angle), the stronger the upwards boost. As always, you can gain speed before the ramp by bunny hopping\n\n"
-               "Note that when trying to make a ramp jump while bunny hopping, it is vital to time your hops carefully so you get the angle right");
+       this.m_description = _("Ramps are an important part of Xonotic map design. Any sloped surface that you hit with the right speed and the right angle will give you a significant upwards boost and enable you to reach places that are otherwise accessible only with laser jumps, which cost health and make noise.\n\n"
+               "When doing ramp jumps, it is vital to hit the ramp at a flat angle to receive the upwards boost and not loose too much speed.\n\n"
+               "In order to make a ramp jump, approach a sloped surface (\"ramp\"), jump just before the ramp and keep the ^3+jump^7 button pressed so you jump again once you hit the ramp.\n\n"
+               "The higher the speed you have when you hit the ramp (at the right angle), the stronger the upwards boost. As always, you can gain speed before the ramp by bunny hopping.\n\n"
+               "Note that when trying to make a ramp jump while bunny hopping, it is vital to time your hops carefully so you get the angle right.");
 }
 REGISTER_MOVEMENT_PAGE(9, _("Advanced Movement"), "gametype_inv")
 {
        this.m_description = strzone(sprintf(_("Advanced techniques like \"strafe jumping\" (\"strafing\") or \"circle jumping\" (\"CJ\") offer only limited benefits in vanilla gameplay, "
-               "but are crucial on CTS/DeFRaG servers that use slightly different physics\n\n"
-               "If you want to master these techniques, be sure to check out ^5%s^7"),
+               "but are crucial on CTS/DeFRaG servers that use slightly different physics.\n\n"
+               "If you want to master these techniques, be sure to check out ^5%s^7."),
        "xdf.gg/guide"));
 }