Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge commit 'dea49b2fc2408ee4f9410c9095d9f360e4c312db' into antispyhax

Conflicts:
	Source/gg2/Constants.xml
	Source/gg2/Objects/InGameElements/Character.events/Begin Step.xml
	Source/gg2/Objects/InGameElements/Character.events/User Event 12.xml
  • Loading branch information...
commit 48510872da95d3b80ba3173a704572db76097518 2 parents 4d14ff0 + dea49b2
@Medo42 authored
Showing with 565 additions and 433 deletions.
  1. BIN  Extensions/Faucet Networking v1.0.gex
  2. BIN  Extensions/Faucet Networking v1.0b2.gex
  3. +90 −53 Readme.txt
  4. +1 −0  Source/.gitignore
  5. +2 −2 Source/gg2/Constants.xml
  6. +1 −1  Source/gg2/Extension Packages.xml
  7. BIN  Source/gg2/Game Information.txt
  8. +7 −6 Source/gg2/Global Game Settings.xml
  9. +1 −1  Source/gg2/Objects/Characters/Soldier.events/Create.xml
  10. +10 −14 Source/gg2/Objects/InGameElements/Character.events/Begin Step.xml
  11. +5 −5 Source/gg2/Objects/InGameElements/Character.events/Create.xml
  12. +1 −1  Source/gg2/Objects/InGameElements/Character.events/Draw.xml
  13. +5 −10 Source/gg2/Objects/InGameElements/Character.events/End Step.xml
  14. +2 −0  Source/gg2/Objects/InGameElements/Character.events/User Event 12.xml
  15. +2 −1  Source/gg2/Objects/InGameElements/Character.events/User Event 13.xml
  16. +1 −1  Source/gg2/Objects/InGameElements/NoticeO.xml
  17. +19 −6 Source/gg2/Objects/InGameElements/Spectator.events/Key numpad add pressed.xml
  18. +20 −7 Source/gg2/Objects/InGameElements/Spectator.events/Key numpad subtract pressed.xml
  19. +1 −1  Source/gg2/Objects/Menus/InGameMenuController.events/User Event 2.xml
  20. +1 −1  Source/gg2/Objects/Menus/LobbyController.events/Step.xml
  21. +3 −10 Source/gg2/Objects/Overlays/DeathCam.events/Create.xml
  22. +3 −3 Source/gg2/Objects/Overlays/HealedHud.events/Draw.xml
  23. +1 −3 Source/gg2/Objects/Overlays/HealingHud.events/Create.xml
  24. +5 −6 Source/gg2/Objects/Overlays/HealingHud.events/Draw.xml
  25. +8 −13 Source/gg2/Objects/Overlays/HealingHud.events/Step.xml
  26. +30 −16 Source/gg2/Objects/Projectiles/Mine.events/User Event 2.xml
  27. +15 −27 Source/gg2/Objects/Projectiles/Rocket.events/User Event 5.xml
  28. +2 −8 Source/gg2/Objects/RoomChangeObserver.events/Room End.xml
  29. +1 −1  Source/gg2/Objects/RoomChangeObserver.events/Room Start.xml
  30. +5 −4 Source/gg2/Objects/Weapons/Blade.events/Create.xml
  31. +1 −1  Source/gg2/Objects/Weapons/Blade.events/User Event 1.xml
  32. +2 −3 Source/gg2/Objects/Weapons/Medigun.events/Alarm 3.xml
  33. +2 −1  Source/gg2/Objects/Weapons/Medigun.events/Begin Step.xml
  34. +2 −2 Source/gg2/Objects/Weapons/Medigun.events/Create.xml
  35. +2 −4 Source/gg2/Objects/Weapons/Medigun.events/Destroy.xml
  36. +22 −20 Source/gg2/Objects/Weapons/Medigun.events/Draw.xml
  37. +10 −2 Source/gg2/Objects/{Overlays/HealingHud.events/Begin Step.xml → Weapons/Medigun.events/Step.xml}
  38. +30 −34 Source/gg2/Objects/Weapons/Medigun.events/User Event 1.xml
  39. +6 −11 Source/gg2/Objects/Weapons/Medigun.events/User Event 12.xml
  40. +10 −13 Source/gg2/Objects/Weapons/Medigun.events/User Event 13.xml
  41. +1 −1  Source/gg2/Objects/Weapons/Medigun.events/User Event 2.xml
  42. +0 −30 Source/gg2/Objects/Weapons/Medigun.events/User Event 3.xml
  43. +5 −2 Source/gg2/Objects/Weapons/Rifle.events/Begin Step.xml
  44. +3 −2 Source/gg2/Objects/Weapons/Rifle.events/Create.xml
  45. +90 −0 Source/gg2/Rooms/Maps/Truefort.xml
  46. +10 −11 Source/gg2/Scripts/Client/ClientBeginStep.gml
  47. +51 −41 Source/gg2/Scripts/Events/doEventPlayerDeath.gml
  48. +4 −4 Source/gg2/Scripts/Events/sendEventPlayerDeath.gml
  49. +30 −31 Source/gg2/Scripts/GameServer/GameServerBeginStep.gml
  50. +1 −1  Source/gg2/Scripts/GameServer/GameServerDefineCommands.gml
  51. +4 −4 Source/gg2/Scripts/GameServer/processClientCommands.gml
  52. +15 −7 Source/gg2/Scripts/calculateMonthAndDay.gml
  53. +7 −0 Source/gg2/Scripts/game_init.gml
  54. +5 −5 Source/gg2/Scripts/recordKillInLog.gml
  55. +8 −0 Source/gg2/Scripts/room_goto_fix.gml
  56. BIN  Source/gg2/Sprites/GameElements/CreditsS.images/image 0.png
  57. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 0.png
  58. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 1.png
  59. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 10.png
  60. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 11.png
  61. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 12.png
  62. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 13.png
  63. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 14.png
  64. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 15.png
  65. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 16.png
  66. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 17.png
  67. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 18.png
  68. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 19.png
  69. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 2.png
  70. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 20.png
  71. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 21.png
  72. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 22.png
  73. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 23.png
  74. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 24.png
  75. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 25.png
  76. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 26.png
  77. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 27.png
  78. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 28.png
  79. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 29.png
  80. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 30.png
  81. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 31.png
  82. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 32.png
  83. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 33.png
  84. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 34.png
  85. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 35.png
  86. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 36.png
  87. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 37.png
  88. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 38.png
  89. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 39.png
  90. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 6.png
  91. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 7.png
  92. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 8.png
  93. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 9.png
  94. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/MedicPortraitAnimationS.images/image 10.png
  95. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/MedicPortraitAnimationS.images/image 11.png
  96. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/MedicPortraitAnimationS.images/image 12.png
  97. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/MedicPortraitAnimationS.images/image 13.png
  98. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/MedicPortraitAnimationS.images/image 14.png
  99. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/MedicPortraitAnimationS.images/image 15.png
  100. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/MedicPortraitAnimationS.images/image 16.png
  101. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/MedicPortraitAnimationS.images/image 17.png
  102. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/MedicPortraitAnimationS.images/image 18.png
  103. BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/MedicPortraitAnimationS.images/image 19.png
  104. BIN  Source/gg2/Sprites/Projectiles/BubbleS.images/image 0.png
  105. +2 −2 Source/gg2/Sprites/Projectiles/BubbleS.xml
View
BIN  Extensions/Faucet Networking v1.0.gex
Binary file not shown
View
BIN  Extensions/Faucet Networking v1.0b2.gex
Binary file not shown
View
143 Readme.txt
@@ -68,7 +68,7 @@ Meet The Runner:
excels in recovering objectives!
He can double jump in mid-air!
Hit Points: 100
- Weapon: Scattergun (8 damage per shot, shoots 6 bullets)
+ Weapon: Scattergun
Special abilities:
Double-Jump - Jump again while in the air!
@@ -77,20 +77,20 @@ Meet The Firebug:
Push enemies and projectiles
away with a burst of air!
Hit Points: 120
- Weapon: Flamethrower (90 damage per second)
+ Weapon: Flamethrower
Special abilities:
Airblast - Right-click to blow away enemies, reflect rockets and mines!
Airblast can also blow afterburn off your teammates!
Afterburn - Even touching your enemy with fire will make him feel the heat!
- Continuous damage over time that's only worse when they move!
- Firebug is immune to afterburn!
+ Continuous damage over time! Firebug is immune to afterburn!
+ Flare - Use your Airblast while shooting to create a fireball!
-Meet The Rocket Man:
+Meet The Rocketman:
Strong yet graceful, he can
launch himself skyward with his
rockets as well as do damage!
Hit Points: 175
- Weapon: Rocket Launcher (55 damage per shot)
+ Weapon: Rocket Launcher
Special abilities:
Rocket-Jump - Fire at your feet when you jump to reach great heights!
@@ -99,68 +99,68 @@ Meet The Overweight:
a heavy weapon that will shred
enemies! He can sure eat, too!
Hit Points: 200
- Weapon: Chaingun (8 damage per shot, 120 damage per second)
+ Weapon: Chaingun
Special abilities:
- Manvich - Right-Click to eat a tasty Manvich to fill your belly and 50 HP!
- You get infinite Manviches so make sure you eat up!
+ Manvich - Right-Click to eat a tasty Manvich to fill your belly and recover HP!
+ You get infinite Manviches so make sure you eat up!
Meet The Detonator:
A master of explosives, the
Detonator can shoot sticky mines
to any surface and set them off!
Hit Points: 120
- Weapon: Minebomb (25-50 damage per mine)
+ Weapon: Minebomb
Special abilities:
- Detonate Mines - Right-click to detonate up to eight mines at once!
+ Detonate Mines - Right-click to detonate all of your mines at once!
Meet The Healer:
His all-purpose healing gun can
both heal a teammate from afar
and rain syringes on foes!
Hit Points: 120
- Weapon: Needlegun (3 damage per shot)
+ Weapon: Needlegun
Special abilities:
Healing - Heal a teammate with a beam by holding the Left Click!
Superburst - Charge your Superburst then Right-Click while holding
- Left-Click to make a team-mate invincible!
+ Left-Click to make a team-mate invincible and get infinite ammo!
Needlegun - Hold right click to shoot a gun of your own!
+ Passive Regeneration - You recover health slowly over time!
Meet The Constructor:
A brilliant inventor, the
Constructor can build autoguns
that shoot anything they see!
Hit Points: 120
- Weapon: Shotgun (6 damage per shot, shoots 4 bullets)
+ Weapon: Shotgun
Special abilities:
- Build/Destroy an Autogun - Right-click to open the Build menu, and
- build/destroy an autogun! Each autogun
- costs 100 Nuts and Bolts to make.
+ Build Tool - Right-click to open the Build menu and build or destroy
+ an autogun! Each autogun costs 100 Nuts and Bolts to make.
+ Passive Regeneration - You recover Nuts and Bolts slowly over time!
+
Meet The Infiltrator:
A master assassin who can slip
into combat unseen and deliver
a fatal strike with his knife!
Hit Points: 100
- Weapon: Revolver (25 damage per shot)
+ Weapon: Revolver
Special abilities:
Cloak - Right-click to become invisible to foes! Right-click again to come
out of cloak!
Stab - Left-click while invisible to stab! A successful stab is guaranteed
to kill!
Passive Invisibility - Even if you aren't cloaked, enemies can't see you
- if they aren't looking directly at you!
+ as long as they aren't looking directly at you!
Meet The Rifleman:
Armed with his trusty rifle
and dead aim, his zoom scope
allows him to attack from afar.
Hit Points: 120
- Weapon: Sniper Rifle (35 unscoped, 35-85 when scoped)
- Special abilities:
- Scope-In - Right-Click to scope in and see more of the battlefield than
- anyone else! Beware, the Rifleman doesn't like moving when
- he's scoped in!
- Charge - The longer you stayed scoped, the more damage you do!
+ Weapon: Sniper Rifle
+ Special abilities:
+ Charge - Use Right-Click to toggle between scoping in and out!
+ While scoped in, damage will increase with time!
Meet The Secret Character:
There is totally no secret
@@ -176,11 +176,12 @@ lobby will show the current map, number of players, and IP of servers running.
Alternatively, you can manually join a server if you know their IP and their
forwarded port.
-There are four gameplay modes:
+There are five gameplay modes:
- Capture the Flag
- Control Point
- Arena
- Generator
+- King of the Hill
Choose a team, RED or BLU, or select AutoSelect and let us choose your team for you.
Press N to change your team, or to Spectate and watch the action! Keep in mind you
@@ -195,7 +196,8 @@ rifleman) have ammunition that replenishes over time. Certain classes will also
have HUDs unique to them. Depending on the game mode, the HUD will display the
locations and status of the intels (Capture the Flag), the status of the Control
Points (Control Point), the number of players left and the status of the Arena
-Point (Arena), or the health of the Generators (Generator).
+Point (Arena), the health of the Generators (Generator), or the team-specific
+countdown timers and the status of the KotH Point (King of the Hill).
The scoreboard shows the current score of every player. It also displays the
name of the current server and map.
@@ -221,6 +223,11 @@ An original mode exclusive to Gang Garrison 2. Both teams have a special generat
are the objectives of the map. A team must keep their generator running and destroy the
enemy generator to win.
+King of the Hill:
+There exists a lone control point in the center of the map. Both teams compete to take
+control to start their countdown. First team to hold onto the point for 3 full minutes
+is victorious.
+
----------------------------------------------------------
IV. The Maps
@@ -288,12 +295,26 @@ by agh
In the first ever generator map for Gang Garrison, RED and BLU must destroy the others'
power generator while keeping their own running!
+12. koth_valley
+by agh
+An abandoned spytech base conveniently concealed within a mountain range becomes a hotspot for
+waging battle. RED and BLU butt heads to take control over the technology left behind.
+
+13. koth_corinth
+by BassieEnAdrian and McGenio
+An arms carrier is leaving a major port, but both RED and BLU have plans to seize the weapons.
+Duke it out on the shipyard to discover who will obtain the goods.
+14. koth_harvest
+by Wherewolf
+A community-made arena map gone official! RED and BLU fight for control of an abandoned farmyard.
+It is unknown what significance this location holds to both factions, but fear keeps invesigators
+from delving any further.
B. Using Custom Maps:
To run a server using custom maps, make a folder called "Maps" in the same
-path as Gang Garrison 2.1.exe and place the compiled map file (it will have
+path as Gang Garrison 2.exe and place the compiled map file (it will have
a ".png" extension) inside. Create a text file with any name, like "maplist.txt", and
open gg2.ini. Next to "MapRotation=" under [Server], type the name of this file.
@@ -355,9 +376,9 @@ Runner:
- Keep some ammo saved up in case you need to fight an infiltrator!
Firebug:
-- Use your airblast to push foes into a bad spot!
-- Always extinguish your teammates with the airblast if they're on fire!
-- Put a foe on fire and let the afterburn take care of the rest!
+- Use your airblast to push your enemies around!
+- Extinguish your teammates with the airblast if they're on fire!
+- Set a foe on fire and let the afterburn take care of the rest!
Rocketman:
- Your rockets can go through teammates!
@@ -379,10 +400,9 @@ Detonator:
to propel yourself like a Rocketman!
Healer:
-- You heal and charge superburst twice as fast on teammates low on health!
-- You slowly regenerate your health!
-- Quickly use your medigun to heal off afterburn!
-- Use your superburst to get past a tight chokepoint!
+- You slowly regenerate your health! Dodge well to maximize it!
+- Use your medigun to rapidly heal off afterburn!
+- Use your superburst to get past tight chokepoints!
Constructor:
- You regenerate Nuts and Bolts slowly, but picking up metal from a
@@ -415,36 +435,51 @@ ganggarrison.com/forums
Gang Garrison 2
-Created By
+Created By the FAUCET Team
+Founders:
mrfredman, MedO, Synnah
-The FAUCET Team
-
-Cube7 aka Chris P. Bacon
-Fishmatt
-Andrew "cspotcode" Bradley
-Vaati
+Programmers:
+MedO, Cube7 aka Chris P. Bacon, Andrew "cspotcode" Bradley, Vaati, Taimat, Findude, Juicebox360, Jebus_Chris,
+Leiche, Xeyk, pach, Austin "Psychopath" Benz, L, technoviking, AJF, Alexander "Wareya" Nadeau, Vindicator,
+NAGN and RebelINS
+
+Artists:
+mrfredman, Fishmatt, BassieEnAdriaan, Timohtep, Elkondo and Waterfall
-Taimat, Findude, Juicebox360, Jebus_Chris, Scoot, Leiche, Xeyk, Psychopath, BassieEnAdriaan, L, pach, and technoviking
+Sound & Music:
+Synnah, Scoot, and Elkondo
-map art by:
-fishmatt, vaati, king metroid, Taters, agh, Faust, and Tarzan
+Map Creators:
+fishmatt, vaati, king metroid, Taters, agh, Faust, Tarzan, BassieEnAdriaan, McGenio, Wherewolf and Shawnachu
With additional art and inspiration provided by the incredible Gang Garrison community!
License:
-You may use this game under the GNU GPL, version 3, which is included and visible
-in the game by pressing F1. Static or dynamic linking with other software (the Game
-Maker runtime and the 39dll extension) without applying the GPL to it is allowed though.
+Copyright (C) 2008-2011 Faucet Software
+http://www.ganggarrison.com
+
+This program is free software;
+you can redistribute it and/or modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 3 of the License, or (at your option)
+any later version.
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+See the GNU General Public License for more details.
+You should have received a copy of the GNU General Public License along with this program; if not,
+see <http://www.gnu.org/licenses>.
+
+Additional permission under GNU GPL version 3 section 7
+If you modify this Program, or any covered work, by linking or combining it with the Game Maker runtime library,
+the 39dll library/extension, Hobbel's Download Manager DLL, or modified versions of these libraries,
+the licensors of this Program grant you additional permission to convey the resulting work.
This is a demake of Team Fortress 2 by Valve Software. All likenesses and similarities
are intended as a respectful homage.
-This game uses the 39dll networking extension for Game Maker. 39dll was created by 39ster
-and wrapped into an extension by the_doominator.
-You can find more information on 39dll at http://gmc.yoyogames.com/index.php?showtopic=90437.
-For information on the 39dll extension, visit http://gmc.yoyogames.com/index.php?showtopic=300449.
+This game uses the Faucet Networking extension by MedO, which is available under the terms of the ISC license.
+You can find more information on Faucet Networking at http://gmc.yoyogames.com/index.php?showtopic=498062.
This game uses the Download Manager DLL, created by Hobbel. It was wrapped into an extension by cspotcode.
You can find more information on the Download Manager DLL at http://www.hobbl.com/gmdlls/downloadmanager
@@ -452,4 +487,6 @@ You can find more information on the Download Manager DLL at http://www.hobbl.co
Readme Changelog
2/7/09 - fishmatt - cleaned everything up for 2.0
5/3/09 - mrfredman - updated things for 2.1
-3/20/01 - technoviking - updated things for 2.2
+3/20/10 - technoviking - updated things for 2.2
+3/16/11 - Psychopath - updated things for 2.3
+3/31/11 - Medo - some more updating
View
1  Source/.gitignore
@@ -4,3 +4,4 @@ gg2.exe
gg2.ini
gg2updater.gmk
gg2updater.gb1
+gg2b
View
4 Source/gg2/Constants.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<constants>
- <constant name="VERSION" value="22400"/>
- <constant name="PROTOCOL_UUID" value="&quot;6288c714-414d-831a-5f54-b9d1a9541fd7&quot;"/>
+ <constant name="VERSION" value="23100"/>
+ <constant name="PROTOCOL_UUID" value="&quot;48def62c-49a5-9ff9-855b-1c2ed542a7e3&quot;"/>
<constant name="HELLO" value="0"/>
<constant name="PLAYER_JOIN" value="1"/>
<constant name="PLAYER_LEAVE" value="2"/>
View
2  Source/gg2/Extension Packages.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<extensionPackages>
- <package>Faucet Networking Extension</package>
+ <package>Faucet Networking</package>
<package>GG2DLL</package>
<package>Hobbl Download Manager Ext Wrapper</package>
</extensionPackages>
View
BIN  Source/gg2/Game Information.txt
Binary file not shown
View
13 Source/gg2/Global Game Settings.xml
@@ -25,7 +25,7 @@
<scaleImage>true</scaleImage>
</progressBar>
<keys>
- <letF1ShowGameInfo>true</letF1ShowGameInfo>
+ <letF1ShowGameInfo>false</letF1ShowGameInfo>
<letF4SwitchFullscreen>false</letF4SwitchFullscreen>
<letF5SaveF6Load>false</letF5SaveF6Load>
<letF9Screenshot>true</letF9Screenshot>
@@ -41,16 +41,17 @@
<gameInfo>
<gameId>907152</gameId>
<author>Faucet Software</author>
- <version>2.2.4</version>
+ <version>2.3.1</version>
<information/>
<versionMajor>2</versionMajor>
- <versionMinor>2</versionMinor>
- <versionRelease>4</versionRelease>
+ <versionMinor>3</versionMinor>
+ <versionRelease>1</versionRelease>
<versionBuild>0</versionBuild>
<company>Faucet Software</company>
- <product/>
- <copyright/>
+ <product>Gang Garrison 2</product>
+ <copyright>Copyright © 2011 Faucet Software</copyright>
<description/>
+ <directPlayGuid>62130cf64e5cf4be1f2e1c44c2427da6</directPlayGuid>
</gameInfo>
<system>
<processPriority>PRIORITY_NORMAL</processPriority>
View
2  Source/gg2/Objects/Characters/Soldier.events/Create.xml
@@ -28,7 +28,7 @@
<arguments>
<argument kind="STRING">{
runPower = .9;
- maxHp = 175;
+ maxHp = 160;
weapons[0] = Rocketlauncher;
tauntsprite = SoldierTauntS;
}
View
24 Source/gg2/Objects/InGameElements/Character.events/Begin Step.xml
@@ -95,21 +95,17 @@ if(!taunting and !omnomnomnom)
}
}
- if(keyState &amp; $10)
+ if((keyState | pressedKeys) &amp; $10)
{
with(currentWeapon) event_user(1);
- if(player.class == CLASS_SPY and cloak) spystab = true;
- }
- else if(releasedKeys &amp; $10)
- with(currentWeapon) event_user(3);
-
-}
-
+ if(player.class == CLASS_SPY and cloak) spystab = true;
+ }
+}
// Right click
-if(keyState &amp; $08 and (!taunting or player.class == CLASS_DEMOMAN) and !omnomnomnom)
+if(((keyState | pressedKeys) &amp; $08) and (!taunting or player.class == CLASS_DEMOMAN) and !omnomnomnom)
with(currentWeapon)
event_user(2);
-
+
// Cloak
if ((pressedKeys &amp; $08) &amp;&amp; canCloak &amp;&amp; ((cloakAlpha &lt;= 0.5 and cloak) || (cloakAlpha == 1 and !cloak)) &amp;&amp; !intel &amp;&amp; taunting==false &amp;&amp; !(keyState &amp; $10))
if(currentWeapon.readyToStab)
@@ -122,12 +118,12 @@ case 1: //If I am rocketing myself
frictionFactor = 1;
break;
case 2: //If I am rocketing an enemy
- controlFactor = 0.3;
+ controlFactor = 0.45;
frictionFactor = 1.05;
rocketjuggled = true;
break;
case 3: //Airblast
- controlFactor = 0.2;
+ controlFactor = 0.3;
frictionFactor = 1;
break;
case 4: //If I am rocketing a teamate/mining someone (more control than 2)
@@ -177,10 +173,10 @@ if(moveStatus == 1 or moveStatus == 2 or moveStatus == 4)
}
if(!taunting &amp;&amp; !omnomnomnom)
{
- if(keyState &amp; $40 and hspeed &gt; -runPower * controlFactor / (baseFriction - 1))
+ if((keyState|pressedKeys) &amp; $40 and hspeed &gt; -runPower * controlFactor / (baseFriction - 1))
hspeed -= runPower*controlFactor;
- if(keyState &amp; $20 and hspeed &lt; runPower * controlFactor / (baseFriction - 1))
+ if((keyState|pressedKeys) &amp; $20 and hspeed &lt; runPower * controlFactor / (baseFriction - 1))
hspeed += runPower*controlFactor;
}
if(abs(hspeed) &gt; abs(1 * baseControl / (baseFriction - 1))*2)// divide friction as normal if going way too fast, based on normal max speed
View
10 Source/gg2/Objects/InGameElements/Character.events/Create.xml
@@ -38,16 +38,16 @@
//afterburn stuff
burnIntensity = 0;
- maxIntensity = 8; //maximum afterburn intensity in DPS
+ maxIntensity = 10; //maximum afterburn intensity in DPS
burnDuration = 0;
- maxDuration = 210; //maximum afterburn length
- decayDelay = 45; //time between burning and intensity lowering
- decayDuration = 170; //time between intensity lowering and zeroing out
+ maxDuration = 300; //maximum afterburn length
+ decayDelay = 30; //time between burning and intensity lowering
+ decayDuration = 225; //time between intensity lowering and zeroing out
durationDecay = 1; //amount that duration lowers per step
intensityDecay = burnIntensity / decayDuration;
burnedBy = -1;
afterburnSource = -1;
- numFlames = 5; //purely cosmetic - the number of flames that someone has with max burnIntensity
+ numFlames = 4 ; //purely cosmetic - the number of flames that someone has with max burnIntensity
for(i = 0; i &lt; numFlames; i += 1)
{
flameArray_x[i] = random_range(-(bbox_right-bbox_left)/2, (bbox_right-bbox_left)/2);
View
2  Source/gg2/Objects/InGameElements/Character.events/Draw.xml
@@ -81,7 +81,7 @@ else if taunting == false {
if (burnDuration &gt; 0 or burnIntensity &gt; 0) {
for(i = 0; i &lt; numFlames * burnIntensity / maxIntensity; i += 1)
{
- draw_sprite_ext(FlameS, alarm[5] + i + random(2), x + flameArray_x[i], y + flameArray_y[i], 1, 1, 0, c_white, burnDuration / maxDuration);
+ draw_sprite_ext(FlameS, alarm[5] + i + random(2), x + flameArray_x[i], y + flameArray_y[i], 1, 1, 0, c_white, burnDuration / maxDuration * 0.71);
}
}
</argument>
View
15 Source/gg2/Objects/InGameElements/Character.events/End Step.xml
@@ -15,17 +15,12 @@
<arguments>
<argument kind="STRING">if(global.isHost &amp;&amp; hp&lt;=0) {
var assistant;
- assistant = -1;
- if (lastDamageDealer != -1) {
- if (lastDamageDealer.object != -1) {
- if (lastDamageDealer.object.healer != -1)
+ assistant = secondToLastDamageDealer;
+ if (lastDamageDealer and instance_exists(lastDamageDealer))
+ if (lastDamageDealer.object)
+ if (lastDamageDealer.object.healer)
assistant = lastDamageDealer.object.healer;
- else
- assistant = secondToLastDamageDealer;
- }
- else
- assistant = secondToLastDamageDealer;
- }
+
sendEventPlayerDeath(player, lastDamageDealer, assistant, lastDamageSource);
doEventPlayerDeath(player, lastDamageDealer, assistant, lastDamageSource);
with(GameServer) {
View
2  Source/gg2/Objects/InGameElements/Character.events/User Event 12.xml
@@ -50,6 +50,8 @@
write_byte(global.serializeBuffer, hspeed*5);
write_byte(global.serializeBuffer, vspeed*5);
write_ubyte(global.serializeBuffer, ceil(hp));
+ write_ubyte(global.serializeBuffer, currentWeapon.ammoCount);
+
temp = 0;
if(cloak) temp |= $01;
if(intel) temp |= $02;
View
3  Source/gg2/Objects/InGameElements/Character.events/User Event 13.xml
@@ -32,7 +32,7 @@
}
var temp, newIntel;
if(global.updateType == QUICK_UPDATE) or (global.updateType == FULL_UPDATE) {
- receiveCompleteMessage(global.serverSocket,8,global.deserializeBuffer);
+ receiveCompleteMessage(global.serverSocket,9,global.deserializeBuffer);
x = read_ushort(global.deserializeBuffer)/5;
y = read_ushort(global.deserializeBuffer)/5;
hspeed = read_byte(global.deserializeBuffer)/5;
@@ -40,6 +40,7 @@
xprevious = x;
yprevious = y;
hp = read_ubyte(global.deserializeBuffer);
+ currentWeapon.ammoCount = read_ubyte(global.deserializeBuffer);
temp = read_ubyte(global.deserializeBuffer);
cloak = (temp &amp; $01 != 0);
View
2  Source/gg2/Objects/InGameElements/NoticeO.xml
@@ -3,7 +3,7 @@
<sprite/>
<solid>false</solid>
<visible>true</visible>
- <depth>-6</depth>
+ <depth>-110001</depth>
<persistent>false</persistent>
<parent/>
<mask/>
View
25 Source/gg2/Objects/InGameElements/Spectator.events/Key numpad add pressed.xml
@@ -13,17 +13,30 @@
<not>false</not>
<appliesTo>.self</appliesTo>
<arguments>
- <argument kind="STRING">{
+ <argument kind="STRING">var finished;
+finished=false
+if instance_exists(Character) {
+{
if tracking == false {
tracking = true;
if !instance_exists(NoticeO) instance_create(0,0,NoticeO);
with NoticeO notice = NOTICE_PLAYERTRACKENABLE;
}
- track_id += 1;
- if track_id &gt; ds_list_size(global.players) -1 {
- track_id = 0;
- }
- player = ds_list_find_value(global.players, track_id);
+ do {
+ track_id += 1;
+ if track_id &gt; ds_list_size(global.players) -1 {
+ track_id = 0;
+ }
+ player = ds_list_find_value(global.players, track_id);
+ with (player) {
+ if (team != TEAM_SPECTATOR) {
+ if (object != -1) {
+ finished=true
+ }
+ }
+ }
+ }until finished=true
+ }
}
</argument>
</arguments>
View
27 Source/gg2/Objects/InGameElements/Spectator.events/Key numpad subtract pressed.xml
@@ -13,17 +13,30 @@
<not>false</not>
<appliesTo>.self</appliesTo>
<arguments>
- <argument kind="STRING">{
+ <argument kind="STRING">var finished;
+finished=false
+if instance_exists(Character) {
+{
if tracking == false {
tracking = true;
if !instance_exists(NoticeO) instance_create(0,0,NoticeO);
- with NoticeO notice = NOTICE_PLAYERTRACKENABLE;
+ with NoticeO notice = NOTICE_PLAYERTRACKENABLE;
}
- track_id -= 1
- if track_id &lt; 0 {
- track_id = ds_list_size(global.players) - 1;
- }
- player = ds_list_find_value(global.players, track_id);
+ do {
+ track_id -= 1;
+ if track_id &lt; 0 {
+ track_id = ds_list_size(global.players) - 1;
+ }
+ player = ds_list_find_value(global.players, track_id);
+ with (player) {
+ if (team != TEAM_SPECTATOR) {
+ if (object != -1) {
+ finished=true
+ }
+ }
+ }
+ }until finished=true
+ }
}
</argument>
</arguments>
View
2  Source/gg2/Objects/Menus/InGameMenuController.events/User Event 2.xml
@@ -16,7 +16,7 @@
<argument kind="STRING">//force dedicated mode to off so you can go to main menu isntead of just restarting server
global.dedicatedMode = 0;
with(all) if id != AudioControl.id instance_destroy();
-room_goto_fix(Menu);
+room_goto_fix(Lobby);
</argument>
</arguments>
</action>
View
2  Source/gg2/Objects/Menus/LobbyController.events/Step.xml
@@ -19,7 +19,7 @@
if(lobbysocket != -1) {
if(socket_has_error(lobbysocket)) {
if(numServers == -1) {
- show_message("Connecting to the lobby server has failed.");
+ show_message("Connecting to the lobby server has failed. Reason:#" + socket_error(lobbysocket));
}
socket_destroy(lobbysocket);
lobbysocket = -1;
View
13 Source/gg2/Objects/Overlays/DeathCam.events/Create.xml
@@ -14,16 +14,9 @@
<appliesTo>.self</appliesTo>
<arguments>
<argument kind="STRING">cursor_sprite = -1;
-alarm[0]=60;
-if(global.Server_Respawntime &gt; 0) {
- if(global.Server_Respawntime &lt;= 150) {
- alarm[2]=global.Server_Respawntime;
- } else {
- alarm[2]=150;
- }
-} else {
- alarm[2]=1;
-}
+alarm[0] = 60;
+alarm[2] = max(1, min(150, global.myself.alarm[5]));
+
zoom=1;
zooming=false;
killmessage = "";
View
6 Source/gg2/Objects/Overlays/HealedHud.events/Draw.xml
@@ -25,9 +25,9 @@
draw_set_alpha(.5);
drawy = yoffset+450;
- if instance_exists(HealingHud) {
- if HealingHud.healed == true drawy = yoffset+490;
- }
+ if(instance_exists(HealingHud))
+ if(instance_exists(HealingHud.target))
+ drawy = yoffset+490;
draw_sprite_stretched_ext(sprite_index, global.myself.team == TEAM_BLUE,
xoffset+mid-(HUDwidth/2), drawy, HUDwidth, 40, c_white, .5);
View
4 Source/gg2/Objects/Overlays/HealingHud.events/Create.xml
@@ -13,9 +13,7 @@
<not>false</not>
<appliesTo>.self</appliesTo>
<arguments>
- <argument kind="STRING">healing = "";
-healed = false;
-target = -1;
+ <argument kind="STRING">target = noone;
</argument>
</arguments>
</action>
View
11 Source/gg2/Objects/Overlays/HealingHud.events/Draw.xml
@@ -13,23 +13,22 @@
<not>false</not>
<appliesTo>.self</appliesTo>
<arguments>
- <argument kind="STRING">
-if (healed) &amp;&amp; target != -1{
+ <argument kind="STRING">if (instance_exists(target))
+{
xsize = view_wview[0];
ysize = view_hview[0];
xoffset = view_xview[0];
yoffset = view_yview[0];
mid = view_wview[0]/2;
- HUDwidth = string_width("Healing: "+healing)+20;
-
+ HUDwidth = string_width("Healing: "+target.name)+20;
draw_set_halign(fa_center);
draw_set_color(c_white);
draw_set_alpha(.5);
- if target.object != -1 {
+ if (target.object != -1) {
draw_sprite_stretched_ext(sprite_index, global.myself.team == TEAM_BLUE,
xoffset+mid-(HUDwidth/2), yoffset+450, HUDwidth, 40, c_white, .5);
- draw_text_color(xoffset+mid, yoffset+462, "Healing: " +healing, c_white, c_white, c_white, c_white, .7);
+ draw_text_color(xoffset+mid, yoffset+462, "Healing: " +target.name, c_white, c_white, c_white, c_white, .7);
draw_healthbar(xoffset+mid-(HUDwidth/2)+10, yoffset+470,xoffset+mid+HUDwidth/2-10, yoffset+478,target.object.hp*100/target.object.maxHp,c_black,c_white,c_white,0,true,true);
}
}
View
21 Source/gg2/Objects/Overlays/HealingHud.events/Step.xml
@@ -13,20 +13,15 @@
<not>false</not>
<appliesTo>.self</appliesTo>
<arguments>
- <argument kind="STRING">healed = false;
-healing = "";
-target = -1;
-//global.HudCheck = false;
+ <argument kind="STRING">if (!global.showHealing or global.myself.object == -1 or global.myself.class != CLASS_MEDIC)
+{
+ instance_destroy();
+ exit;
+}
-if global.myself.object != -1 &amp;&amp; global.myself.class == CLASS_MEDIC {
- if instance_exists(global.myself.object.currentWeapon) {
- if(global.myself.object.currentWeapon.healTarget != -1 &amp;&amp; instance_exists(global.myself.object.currentWeapon.healTarget)){
- target = global.myself.object.currentWeapon.healTarget;
- healed = true;
- healing = target.name;
- //global.HudCheck = true;
- }
- }
+target = noone;
+if (instance_exists(global.myself.object.currentWeapon)) {
+ target = global.myself.object.currentWeapon.healTarget;
}
</argument>
</arguments>
View
46 Source/gg2/Objects/Projectiles/Mine.events/User Event 2.xml
@@ -23,16 +23,23 @@
playsound(x,y,ExplosionSnd);
with (Character) {
- if (distance_to_object(other) &lt; other.blastRadius){
- motion_add(point_direction(other.x,other.y,x,y),10-10*(distance_to_object(other)/other.blastRadius));
- if(other.team != team or id==other.ownerPlayer.object) &amp;&amp; ubered == 0 &amp;&amp; hp &gt; 0 {
+ if (distance_to_object(other) &lt; other.blastRadius and !(team == other.team and id != other.ownerPlayer.object and place_meeting(x, y+1, Obstacle)))
+ {
+ var rdir, vectorfactor;
+ rdir = point_direction(other.x,other.y,x,y);
+ vectorfactor = point_distance(0, 0, power(sin(degtorad(rdir)), 2), power(cos(degtorad(rdir)), 2));
+ motion_add(rdir, min(15, 10-10*(distance_to_object(other)/other.blastRadius)) * vectorfactor);
+ if(other.team != team or id==other.ownerPlayer.object) &amp;&amp; !ubered and hp &gt; 0
+ {
hp -= other.explosionDamage*(1-(distance_to_object(other)/other.blastRadius));
- if id==other.ownerPlayer.object &amp;&amp; lastDamageDealer != -1 &amp;&amp; lastDamageDealer != other.ownerPlayer &amp;&amp; other.reflector == noone{
+ if (id == other.ownerPlayer.object and lastDamageDealer != -1 and lastDamageDealer != other.ownerPlayer and other.reflector == noone)
+ {
lastDamageSource = FINISHED_OFF_GIB;
}
else
{
- if (lastDamageDealer != other.ownerPlayer and lastDamageDealer != player and other.reflector != lastDamageDealer){
+ if (lastDamageDealer != other.ownerPlayer and lastDamageDealer != player and other.reflector != lastDamageDealer)
+ {
secondToLastDamageDealer = lastDamageDealer;
alarm[4] = alarm[3]
}
@@ -40,25 +47,32 @@
alarm[3] = ASSIST_TIME;
lastDamageDealer = other.ownerPlayer;
lastDamageSource = other.weapon;
- if (id==other.ownerPlayer.object and other.reflector != noone) {
+ if (id==other.ownerPlayer.object and other.reflector != noone)
+ {
lastDamageDealer = other.reflector;
lastDamageSource = WEAPON_REFLECTED_STICKY;
}
}
- if(global.gibLevel &gt; 0){
- repeat(3) {
- var blood;
- blood = instance_create(x,y,Blood);
- blood.direction = point_direction(other.x,other.y,x,y)-180;}
+ if(global.gibLevel &gt; 0)
+ {
+ repeat(3)
+ {
+ var blood;
+ blood = instance_create(x,y,Blood);
+ blood.direction = point_direction(other.x,other.y,x,y)-180;
+ }
}
- if id==other.ownerPlayer.object and other.team == team {
+ if (id==other.ownerPlayer.object and other.team == team)
+ {
moveStatus = 1;
vspeed*=0.8;
- } else {
- moveStatus = 4;
- vspeed*=0.8
}
- }
+ else
+ {
+ moveStatus = 4;
+ vspeed*=0.8
+ }
+ }
cloakAlpha = min(cloakAlpha + 0.2, 1);
}
}
View
42 Source/gg2/Objects/Projectiles/Rocket.events/User Event 5.xml
@@ -14,16 +14,15 @@
<appliesTo>.self</appliesTo>
<arguments>
<argument kind="STRING">{
- if(characterHit.id != ownerPlayer.object) {
- if(exploded == true) {
+ if(characterHit.id != ownerPlayer.object)
+ {
+ if(exploded)
exit;
- } else {
+ else
exploded = true;
- }
if(characterHit != -1) {
if(characterHit.team != team || characterHit.id == ownerPlayer.object &amp;&amp; characterHit.ubered == 0 ) {
characterHit.hp -= hitDamage;
-//new stuff
if object_is_ancestor(characterHit.object_index, Character) {
if (characterHit.lastDamageDealer != ownerPlayer &amp;&amp; characterHit.lastDamageDealer != characterHit.player){
characterHit.secondToLastDamageDealer = characterHit.lastDamageDealer;
@@ -31,7 +30,6 @@
}
characterHit.alarm[3] = ASSIST_TIME;
}
-//end new stuff
characterHit.lastDamageDealer = ownerPlayer;
characterHit.lastDamageSource = weapon;
}
@@ -40,14 +38,18 @@
playsound(x,y,ExplosionSnd);
with (Character) {
- if (distance_to_object(other) &lt; other.blastRadius){
- //if(other.team != team or id==other.ownerPlayer.object) {
- motion_add(point_direction(other.x,other.y,x,y),other.knockback-other.knockback*(distance_to_object(other)/other.blastRadius));
- //}
- if( ubered == 0) and (hp &gt; 0){
- if (other.team != team) or (id==other.ownerPlayer.object) {
+ if (distance_to_object(other) &lt; other.blastRadius and !(team == other.team and id != other.ownerPlayer.object and place_meeting(x, y+1, Obstacle))){
+ var rdir, vectorfactor;
+ rdir = point_direction(other.x,other.y,x,y);
+ vectorfactor = point_distance(0, 0, power(sin(degtorad(rdir)), 2), power(cos(degtorad(rdir)), 2));
+ motion_add(rdir, min(15, other.knockback-other.knockback*(distance_to_object(other)/other.blastRadius)) * vectorfactor);
+ if(!ubered and hp &gt; 0)
+ {
+ if (other.team != team) or (id==other.ownerPlayer.object)
+ {
hp -= other.explosionDamage*(1-(distance_to_object(other)/other.blastRadius));
- if id==other.ownerPlayer.object &amp;&amp; lastDamageDealer != -1 &amp;&amp; lastDamageDealer != other.ownerPlayer{
+ if(id == other.ownerPlayer.object and lastDamageDealer != -1 and lastDamageDealer != other.ownerPlayer)
+ {
lastDamageSource = FINISHED_OFF_GIB;
}
else
@@ -63,12 +65,9 @@
}
cloakAlpha = min(cloakAlpha + 0.1, 1);
}
- //lastDamageDealer = other.ownerPlayer;
- //lastDamageSource = other.weapon;
if id==other.ownerPlayer.object and other.team == team {
moveStatus = 1;
speed*=1.06;
- hp+=(other.explosionDamage*(1-(distance_to_object(other)/other.blastRadius)))/3;
}else if other.team == team and (id!=other.ownerPlayer.object){
moveStatus = 4;
if point_direction(x,y+5,other.x,other.y-5)&gt;210 and point_direction(x,y,other.x,other.y)&lt;330 {
@@ -114,17 +113,6 @@
}
}
}
-
- /*with (Rocket) {
- if (distance_to_object(other) &lt; other.blastRadius){
- if(distance_to_object(other) &lt; other.blastRadius*0.66 and (other.team != team or other.ownerPlayer == ownerPlayer)) {
- characterHit = -1;
- event_user(5);
- } else {
- motion_add(point_direction(other.x,other.y,x,y),12-12*(distance_to_object(other)/other.blastRadius));
- }
- }
- }*/
with (DeadGuy) {
if (distance_to_object(other) &lt; other.blastRadius){
View
10 Source/gg2/Objects/RoomChangeObserver.events/Room End.xml
@@ -13,14 +13,8 @@
<not>false</not>
<appliesTo>.self</appliesTo>
<arguments>
- <argument kind="STRING">if(not transitioning and not room_persistent) {
- with(all) {
- if(not persistent) {
- instance_destroy();
- }
- }
-}
-
+ <argument kind="STRING">// Ensure that we notice there's a room change in progress
+// even if room_goto is used directly
transitioning = true;
</argument>
</arguments>
View
2  Source/gg2/Objects/RoomChangeObserver.events/Room Start.xml
@@ -16,7 +16,7 @@
<argument kind="STRING">transitioning = false;
if(nextRoom != noone) {
- room_goto(nextRoom);
+ room_goto_fix(nextRoom);
nextRoom = noone;
}
</argument>
View
9 Source/gg2/Objects/Weapons/Blade.events/Create.xml
@@ -16,20 +16,21 @@
<argument kind="STRING">{
xoffset = 0;
yoffset = -3;
+ bubbleRefireTime = 7;
refireTime = 5;
replenishing = 1;
bubbleCount = 0;
- maxBubbles = 30;
+ maxBubbles = 25;
bladesOut = 0;
bladeLife = 15;
maxBlades = 1;
bladeDamage = 17;
- depletedBladeDamage = 6;
+ depletedBladeDamage = 6.5;
maxAmmo = 90;
replenishingRate = 2;
ammoCount = maxAmmo;
- lowAmmoThreshold = 1/2 * maxAmmo;
- highAmmoThreshold = 3/4 * maxAmmo;
+ lowAmmoThreshold = 1/3 * maxAmmo;
+ highAmmoThreshold = 2/3 * maxAmmo;
reloadTime = 55;
reloadBuffer = 0;
}
View
2  Source/gg2/Objects/Weapons/Blade.events/User Event 1.xml
@@ -32,7 +32,7 @@
}
justShot = true;
readyToShoot = false;
- alarm[0] = refireTime;
+ alarm[0] = bubbleRefireTime;
bubbleCount += 1;
}
}
View
5 Source/gg2/Objects/Weapons/Medigun.events/Alarm 3.xml
@@ -13,9 +13,8 @@
<not>false</not>
<appliesTo>.self</appliesTo>
<arguments>
- <argument kind="STRING">{
- loopsoundstop(MedigunSnd);
-}</argument>
+ <argument kind="STRING">loopsoundstop(MedigunSnd);
+</argument>
</arguments>
</action>
</actions>
View
3  Source/gg2/Objects/Weapons/Medigun.events/Begin Step.xml
@@ -30,7 +30,8 @@ if(ubering) {
uberCharge = 0;
ubering = false;
}
-}</argument>
+}
+</argument>
</arguments>
</action>
</actions>
View
4 Source/gg2/Objects/Weapons/Medigun.events/Create.xml
@@ -17,9 +17,9 @@
xoffset = -7;
yoffset = 0;
refireTime = 3;
- healTarget = -1;
+ healTarget = noone;
+ healedThisStep = false;
healAmmount = 1;
- healing=false;
hphealed = 0;
maxHealDistance = 300;
ubering = false;
View
6 Source/gg2/Objects/Weapons/Medigun.events/Destroy.xml
@@ -14,11 +14,9 @@
<appliesTo>.self</appliesTo>
<arguments>
<argument kind="STRING">loopsoundstop(MedigunSnd);
-if(healTarget != -1 and instance_exists(healTarget)) {
- if(healTarget.object != -1) {
+if(instance_exists(healTarget))
+ if(healTarget.object != -1)
healTarget.object.healer = -1;
- }
-}
</argument>
</arguments>
</action>
View
42 Source/gg2/Objects/Weapons/Medigun.events/Draw.xml
@@ -13,27 +13,29 @@
<not>false</not>
<appliesTo>.self</appliesTo>
<arguments>
- <argument kind="STRING">{
- if owner.taunting==true exit;
- var offset;
- if(healing) {
- if(healTarget!=-1 and instance_exists(healTarget)) {
- if(healTarget.object != -1) {
- draw_set_alpha(0.3);
- if(healTarget.team == TEAM_RED) {
- draw_line_width_color(x+lengthdir_x(25,owner.aimDirection),y+lengthdir_y(24,owner.aimDirection),healTarget.object.x, healTarget.object.y, 5, c_red, c_red);
- } else {
- draw_line_width_color(x+lengthdir_x(25,owner.aimDirection),y+lengthdir_y(24,owner.aimDirection),healTarget.object.x, healTarget.object.y, 5, c_blue, c_blue);
- }
- draw_sprite_ext(sprite_index,owner.team+2,round(x+xoffset*image_xscale),round(y+yoffset),image_xscale,image_yscale,image_angle,c_white,1);
- }
- } else {
- draw_sprite_ext(sprite_index,owner.team,round(x+xoffset*image_xscale),round(y+yoffset),image_xscale,image_yscale,image_angle,c_white,1);
- }
- } else {
- draw_sprite_ext(sprite_index,owner.team,round(x+xoffset*image_xscale),round(y+yoffset),image_xscale,image_yscale,image_angle,c_white,1);
+ <argument kind="STRING">if(owner.taunting)
+ exit;
+
+var offset;
+offset = 0;
+if(instance_exists(healTarget))
+{
+ if(healTarget.object != -1)
+ {
+ var color;
+ if(healTarget.team == TEAM_RED)
+ color = c_red;
+ else
+ color = c_blue;
+
+ draw_set_alpha(0.3);
+ draw_line_width_color(x+lengthdir_x(25,owner.aimDirection),y+lengthdir_y(24,owner.aimDirection),healTarget.object.x, healTarget.object.y, 5, color, color);
+ offset = 2;
}
-}</argument>
+}
+draw_sprite_ext(sprite_index, owner.team+offset, round(x+xoffset*image_xscale), round(y+yoffset), image_xscale, image_yscale, image_angle, c_white, 1);
+
+</argument>
</arguments>
</action>
</actions>
View
12 ...Objects/Overlays/HealingHud.events/Begin Step.xml → Source/gg2/Objects/Weapons/Medigun.events/Step.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<event category="STEP" id="1">
+<event category="STEP" id="0">
<actions>
<action id="603" library="1">
<!--action name: Code-->
@@ -13,7 +13,15 @@
<not>false</not>
<appliesTo>.self</appliesTo>
<arguments>
- <argument kind="STRING">if global.showHealing == 0 || global.myself.object == -1 || global.myself.class != CLASS_MEDIC instance_destroy();
+ <argument kind="STRING">if(!healedThisStep and instance_exists(healTarget))
+{
+ if(healTarget.object != -1)
+ healTarget.object.healer = -1;
+
+ healTarget = noone;
+}
+
+healedThisStep = false;
</argument>
</arguments>
</action>
View
64 Source/gg2/Objects/Weapons/Medigun.events/User Event 1.xml
@@ -14,10 +14,35 @@
<appliesTo>.self</appliesTo>
<arguments>
<argument kind="STRING">{
- if(healTarget != -1 and instance_exists(healTarget)) {
+ if(!instance_exists(healTarget) and readyToShoot) {
+ var bestTarget, bestTargetDist;
+ bestTarget=noone;
+ bestTargetDist=maxHealDistance;
+
+ with(Character) {
+ if(id != other.owner and team == other.owner.team) {
+ if(point_distance(x,y,other.x,other.y)&lt;=bestTargetDist) {
+ if(collision_line(other.x, other.y, other.x+lengthdir_x(other.maxHealDistance, other.owner.aimDirection), other.y+lengthdir_y(other.maxHealDistance, other.owner.aimDirection), id, true, false)) {
+ if(!collision_line(other.x, other.y, x, y, Obstacle, true, true)) {
+ bestTargetDist = point_distance(x,y,other.x,other.y);
+ bestTarget = player;
+ }
+ }
+ }
+ }
+ }
+
+ healTarget = bestTarget;
+ readyToShoot=false;
+ alarm[0]=1;
+ }
+
+ if(instance_exists(healTarget)) {
if(healTarget.object != -1) {
if(point_distance(x,y,healTarget.object.x, healTarget.object.y)&lt;=maxHealDistance) {
if(collision_line(x,y, healTarget.object.x, healTarget.object.y, Obstacle, true, true)&lt;0) {
+ healedThisStep = true;
+
if (healTarget.object.healer == -1)
healTarget.object.healer = ownerPlayer;
if (healTarget.object.burnDuration &gt; 0)
@@ -63,7 +88,7 @@
ownerPlayer.roundStats[POINTS] += 1;
hphealed -= HP_PER_POINT;
}
- healing=true;
+
if(alarm[3]&lt;=0) {
loopsoundstart(x,y,MedigunSnd);
} else {
@@ -72,43 +97,14 @@
alarm[3]=2;
} else {
healTarget.object.healer = -1;
- healTarget = -1;
- healing = false;
+ healTarget = noone;
}
} else {
healTarget.object.healer = -1;
- healTarget = -1;
- healing = false;
+ healTarget = noone;
}
} else {
- healTarget.object.healer = -1;
- healTarget = -1;
- healing = false;
- }
- } else {
- if(readyToShoot) {
- var bestTarget, bestTargetDist;
- bestTarget=-1;
- bestTargetDist=maxHealDistance;
-
- with(Player) {
- if(id != other.ownerPlayer and team == other.owner.team and object != -1) {
- if(collision_line(other.x, other.y, other.x+lengthdir_x(other.maxHealDistance, other.owner.aimDirection), other.y+lengthdir_y(other.maxHealDistance, other.owner.aimDirection), object, true, true)) {
- if(point_distance(object.x,object.y,other.x,other.y)&lt;=bestTargetDist) {
- bestTargetDist = point_distance(object.x,object.y,other.x,other.y);
- bestTarget = id;
- }
- }
- }
- }
-
- if(bestTarget != -1) {
- healTarget = bestTarget;
- } else {
- healing = false;
- }
- readyToShoot=false;
- alarm[0]=1;
+ healTarget = noone;
}
}
}
View
17 Source/gg2/Objects/Weapons/Medigun.events/User Event 12.xml
@@ -13,17 +13,12 @@
<not>false</not>
<appliesTo>.self</appliesTo>
<arguments>
- <argument kind="STRING">{
- write_ubyte(global.serializeBuffer, ammoCount);
- write_ushort(global.serializeBuffer, healing);
- if(healing) {
- if(healTarget != -1 and instance_exists(healTarget)) {
- write_ubyte(global.serializeBuffer, ds_list_find_index(global.players,healTarget));
- } else {
- write_ubyte(global.serializeBuffer, 200);
- }
- }
-}
+ <argument kind="STRING">write_ubyte(global.serializeBuffer, ammoCount);
+
+if(instance_exists(healTarget))
+ write_ubyte(global.serializeBuffer, ds_list_find_index(global.players, healTarget));
+else
+ write_ubyte(global.serializeBuffer, 255);
</argument>
</arguments>
</action>
View
23 Source/gg2/Objects/Weapons/Medigun.events/User Event 13.xml
@@ -13,20 +13,17 @@
<not>false</not>
<appliesTo>.self</appliesTo>
<arguments>
- <argument kind="STRING">{
- receiveCompleteMessage(global.serverSocket, 3, global.deserializeBuffer);
- ammoCount = read_ubyte(global.deserializeBuffer);
- healing = read_ushort(global.deserializeBuffer);
- if(healing) {
- receiveCompleteMessage(global.serverSocket, 1, global.deserializeBuffer);
- healTarget = read_ubyte(global.deserializeBuffer);
- if(healTarget != 200) {
- healTarget = ds_list_find_value(global.players, healTarget);
- } else {
- healTarget = -1;
- }
- }
+ <argument kind="STRING">var healTargetId;
+
+receiveCompleteMessage(global.serverSocket, 2, global.deserializeBuffer);
+ammoCount = read_ubyte(global.deserializeBuffer);
+healTargetId = read_ubyte(global.deserializeBuffer);
+if(healTargetId != 255) {
+ healTarget = ds_list_find_value(global.players, healTargetId);
+} else {
+ healTarget = noone;
}
+
</argument>
</arguments>
</action>
View
2  Source/gg2/Objects/Weapons/Medigun.events/User Event 2.xml
@@ -14,7 +14,7 @@
<appliesTo>.self</appliesTo>
<arguments>
<argument kind="STRING">{
- if (readyToShoot &amp;&amp; !healing &amp;&amp; !ubering &amp;&amp; ammoCount &gt; 0) {
+ if (readyToShoot &amp;&amp; !instance_exists(healTarget) &amp;&amp; !ubering &amp;&amp; ammoCount &gt; 0) {
ammoCount -= 1;
playsound(x,y,MedichaingunSnd);
var shot;
View
30 Source/gg2/Objects/Weapons/Medigun.events/User Event 3.xml
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<event category="OTHER" id="13">
- <actions>
- <action id="603" library="1">
- <!--action name: Code-->
- <kind>CODE</kind>
- <allowRelative>false</allowRelative>
- <question>false</question>
- <canApplyTo>true</canApplyTo>
- <actionType>CODE</actionType>
- <functionName/>
- <relative>false</relative>
- <not>false</not>
- <appliesTo>.self</appliesTo>
- <arguments>
- <argument kind="STRING">{
- //new
- if(healTarget != -1 and instance_exists(healTarget)) {
- if(healTarget.object != -1) {
- healTarget.object.healer = -1;
- }
- }
- healTarget = -1;
- healing = false;
-}
-</argument>
- </arguments>
- </action>
- </actions>
-</event>
View
7 Source/gg2/Objects/Weapons/Rifle.events/Begin Step.xml
@@ -13,15 +13,18 @@
<not>false</not>
<appliesTo>.self</appliesTo>
<arguments>
- <argument kind="STRING">if owner.zoomed &amp;&amp; readyToShoot
+ <argument kind="STRING">if(owner.zoomed and readyToShoot)
{
t += 1;
if t &gt; chargeTime t = chargeTime;
}
else
t = 0;
+if(!owner.zoomed)
+ hitDamage = unscopedDamage
+else
+ hitDamage = baseDamage + owner.zoomed*floor(sqrt(t*(sqr(maxDamage-baseDamage)/chargeTime)));
//hitDamage = 35 + owner.zoomed*floor(sqrt(t*125/6));
-hitDamage = baseDamage + owner.zoomed*floor(sqrt(t*(sqr(maxDamage-baseDamage)/chargeTime)));
</argument>
</arguments>
</action>
View
5 Source/gg2/Objects/Weapons/Rifle.events/Create.xml
@@ -18,8 +18,9 @@
yoffset = -8;
refireTime = 40;
reloadTime = 40;
- baseDamage = 40;
- maxDamage = 70;
+ unscopedDamage = 35;
+ baseDamage = 45;
+ maxDamage = 75;
chargeTime = 105;
hitDamage=baseDamage;
maxAmmo = 0;
View
90 Source/gg2/Rooms/Maps/Truefort.xml
@@ -830,6 +830,96 @@ instance_create(0,0,TruefortO);</creationCode>
<creationCode/>
<locked>false</locked>
</instance>
+ <instance>
+ <object>SpawnRoom</object>
+ <position x="3486" y="390"/>
+ <creationCode/>
+ <locked>false</locked>
+ </instance>
+ <instance>
+ <object>SpawnRoom</object>
+ <position x="3528" y="390"/>
+ <creationCode/>
+ <locked>false</locked>
+ </instance>
+ <instance>
+ <object>SpawnRoom</object>
+ <position x="3570" y="390"/>
+ <creationCode/>
+ <locked>false</locked>
+ </instance>
+ <instance>
+ <object>SpawnRoom</object>
+ <position x="3612" y="390"/>
+ <creationCode/>
+ <locked>false</locked>
+ </instance>
+ <instance>
+ <object>SpawnRoom</object>
+ <position x="3654" y="390"/>
+ <creationCode/>
+ <locked>false</locked>
+ </instance>
+ <instance>
+ <object>SpawnRoom</object>
+ <position x="3678" y="390"/>
+ <creationCode/>
+ <locked>false</locked>
+ </instance>
+ <instance>
+ <object>SpawnRoom</object>
+ <position x="3468" y="426"/>
+ <creationCode/>
+ <locked>false</locked>
+ </instance>
+ <instance>
+ <object>SpawnRoom</object>
+ <position x="1626" y="390"/>
+ <creationCode/>
+ <locked>false</locked>
+ </instance>
+ <instance>
+ <object>SpawnRoom</object>
+ <position x="1668" y="390"/>
+ <creationCode/>
+ <locked>false</locked>
+ </instance>
+ <instance>
+ <object>SpawnRoom</object>
+ <position x="1710" y="390"/>
+ <creationCode/>
+ <locked>false</locked>
+ </instance>
+ <instance>
+ <object>SpawnRoom</object>
+ <position x="1752" y="390"/>
+ <creationCode/>
+ <locked>false</locked>
+ </instance>
+ <instance>
+ <object>SpawnRoom</object>
+ <position x="1794" y="390"/>
+ <creationCode/>
+ <locked>false</locked>
+ </instance>
+ <instance>
+ <object>SpawnRoom</object>
+ <position x="1812" y="390"/>
+ <creationCode/>
+ <locked>false</locked>
+ </instance>
+ <instance>
+ <object>SpawnRoom</object>
+ <position x="1818" y="396"/>
+ <creationCode/>
+ <locked>false</locked>
+ </instance>
+ <instance>
+ <object>SpawnRoom</object>
+ <position x="1602" y="432"/>
+ <creationCode/>
+ <locked>false</locked>
+ </instance>
</instances>
<tiles/>
<editorSettings remember="false"/>
View
21 Source/gg2/Scripts/Client/ClientBeginStep.gml
@@ -89,7 +89,7 @@ do {
break;
case PLAYER_DEATH:
- var causeOfDeath;
+ var causeOfDeath, assistantPlayerID, assistantPlayer;
receiveCompleteMessage(global.serverSocket,4,global.tempBuffer);
playerID = read_ubyte(global.tempBuffer);
otherPlayerID = read_ubyte(global.tempBuffer);
@@ -97,17 +97,16 @@ do {
causeOfDeath = read_ubyte(global.tempBuffer);
player = ds_list_find_value(global.players, playerID);
- if(otherPlayerID == 255) {
- doEventPlayerDeath(player, -1, -1, causeOfDeath);
- } else {
+
+ otherPlayer = noone;
+ if(otherPlayerID != 255)
otherPlayer = ds_list_find_value(global.players, otherPlayerID);
- if (assistantPlayerID == 255) {
- doEventPlayerDeath(player, otherPlayer, -1, causeOfDeath);
- } else {
- assistantPlayer = ds_list_find_value(global.players, assistantPlayerID);
- doEventPlayerDeath(player, otherPlayer, assistantPlayer, causeOfDeath);
- }
- }
+
+ assistantPlayer = noone;
+ if(assistantPlayerID != 255)
+ assistantPlayer = ds_list_find_value(global.players, assistantPlayerID);
+
+ doEventPlayerDeath(player, otherPlayer, assistantPlayer, causeOfDeath);
break;
case BALANCE:
View
92 Source/gg2/Scripts/Events/doEventPlayerDeath.gml
@@ -13,24 +13,36 @@ killer = argument1;
assistant = argument2;
damageSource = argument3;
-if(!instance_exists(killer)) {
- killer = -1;
+if(!(killer and instance_exists(killer))) {
+ killer = noone;
+}
+
+if(!(assistant and instance_exists(assistant))) {
+ assistant = noone;
}
//*************************************
//* Scoring and Kill log
//*************************************
+
+recordKillInLog(victim, killer, assistant, damageSource);
+
victim.stats[DEATHS] += 1;
-if(killer != -1) {
- if(damageSource == WEAPON_KNIFE || damageSource == WEAPON_BACKSTAB) {
+if(killer)
+{
+ if(damageSource == WEAPON_KNIFE || damageSource == WEAPON_BACKSTAB)
+ {
killer.stats[STABS] += 1;
killer.roundStats[STABS] += 1;
killer.stats[POINTS] += 1;
killer.roundStats[POINTS] +=1;
}
- if (victim.object.currentWeapon.object_index == Medigun && victim.class == CLASS_MEDIC) {
- if (victim.object.currentWeapon.uberReady){
+
+ if (victim.object.currentWeapon.object_index == Medigun)
+ {
+ if (victim.object.currentWeapon.uberReady)
+ {
killer.stats[BONUS] += 1;
killer.roundStats[BONUS] += 1;
killer.stats[POINTS] += 1;
@@ -38,51 +50,34 @@ if(killer != -1) {
}
}
- if (killer != victim) {
+ if (killer != victim)
+ {
killer.stats[KILLS] += 1;
killer.roundStats[KILLS] += 1;
killer.stats[POINTS] += 1;
killer.roundStats[POINTS] += 1;
- }
- if (assistant != -1) {
- assistant.stats[ASSISTS] +=1;
- assistant.roundStats[ASSISTS] += 1;
- assistant.stats[POINTS] += .5;
- assistant.roundStats[POINTS] += .5;
+ if(victim.object.intel)
+ {
+ killer.stats[DEFENSES] += 1;
+ killer.roundStats[DEFENSES] += 1;
+ killer.stats[POINTS] += 1;
+ killer.roundStats[POINTS] += 1;
+ recordEventInLog(4, killer.team, killer.name, global.myself == killer);
+ }
}
}
-recordKillInLog(victim, killer, assistant, damageSource);
-if(victim.object.intel) {
- if(killer != -1 && killer != victim) {
- var isMe;
- isMe = (global.myself == killer);
- killer.stats[DEFENSES] += 1;
- killer.roundStats[DEFENSES] += 1;
- killer.stats[POINTS] += 1;
- killer.roundStats[POINTS] += 1;
- recordEventInLog(4, killer.team, killer.name, isMe);
- }
+if (assistant)
+{
+ assistant.stats[ASSISTS] += 1;
+ assistant.roundStats[ASSISTS] += 1;
+ assistant.stats[POINTS] += .5;
+ assistant.roundStats[POINTS] += .5;
}
-
//SPEC
-if victim == global.myself {
- instance_create(victim.object.x,victim.object.y,Spectator);
-}
-
-//*************************************
-//* Deathcam
-//*************************************
-if( global.killCam == 1 && victim == global.myself && killer != -1 && killer != victim && (collision_point(victim.object.x,victim.object.y,SpawnRoom,0,0) < 0) && !(damageSource == KILL_BOX || damageSource == FRAG_BOX || damageSource == FINISHED_OFF || damageSource == FINISHED_OFF_GIB || damageSource == GENERATOR_EXPLOSION)) {
- instance_create(0,0,DeathCam);
- DeathCam.killedby=killer;
- DeathCam.name=killer.name;
- DeathCam.oldxview=view_xview[0];
- DeathCam.oldyview=view_yview[0];
- DeathCam.lastDamageSource=damageSource;
- DeathCam.team = global.myself.team;
-}
+if (victim == global.myself)
+ instance_create(victim.object.x, victim.object.y, Spectator);
//*************************************
//* Gibbing
@@ -439,10 +434,25 @@ with(victim.object) {
}
}
}
+
if global.gg_birthday {
myHat = instance_create(victim.object.x,victim.object.y,PartyHat);
myHat.image_index = victim.team;
}
+
with(victim.object) {
instance_destroy();
}
+
+//*************************************
+//* Deathcam
+//*************************************
+if( global.killCam and victim == global.myself and killer and killer != victim and !(damageSource == KILL_BOX || damageSource == FRAG_BOX || damageSource == FINISHED_OFF || damageSource == FINISHED_OFF_GIB || damageSource == GENERATOR_EXPLOSION)) {
+ instance_create(0,0,DeathCam);
+ DeathCam.killedby=killer;
+ DeathCam.name=killer.name;
+ DeathCam.oldxview=view_xview[0];
+ DeathCam.oldyview=view_yview[0];
+ DeathCam.lastDamageSource=damageSource;
+ DeathCam.team = global.myself.team;
+}
View
8 Source/gg2/Scripts/Events/sendEventPlayerDeath.gml
@@ -2,8 +2,8 @@
* Notify all clients of a "player death" event.
*
* argument0: The player whose character died
- * argument1: The player who inflicted the fatal damage (or -1 for unknown)
- * argument2: The assistant (or -1 for none)
+ * argument1: The player who inflicted the fatal damage (or a false value for unknown)
+ * argument2: The assistant (or a false value for none)
* argument3: The source of the fatal damage
*/
var victim, killer, assistant, damageSource;
@@ -14,12 +14,12 @@ damageSource = argument3;
write_ubyte(global.eventBuffer, PLAYER_DEATH);
write_ubyte(global.eventBuffer, ds_list_find_index(global.players, victim));
-if(killer != -1) {
+if(killer and instance_exists(killer)) {
write_ubyte(global.eventBuffer, ds_list_find_index(global.players, killer));
} else {
write_ubyte(global.eventBuffer, 255);
}
-if(assistant != -1) {
+if(assistant and instance_exists(assistant)) {
write_ubyte(global.eventBuffer, ds_list_find_index(global.players, assistant));
} else {
write_ubyte(global.eventBuffer, 255);
View
61 Source/gg2/Scripts/GameServer/GameServerBeginStep.gml
@@ -153,39 +153,38 @@ if(impendingMapChange == 0) {
ServerChangeMap(global.currentMap, global.currentMapURL, global.currentMapMD5, global.sendBuffer);
impendingMapChange = -1;
- for(i=0; i<ds_list_size(global.players); i+=1) {
- player = ds_list_find_value(global.players, i);
+ with(Player) {
if(global.currentMapArea == 1){
- player.stats[KILLS] = 0;
- player.stats[DEATHS] = 0;
- player.stats[CAPS] = 0;
- player.stats[ASSISTS] = 0;
- player.stats[DESTRUCTION] = 0;
- player.stats[STABS] = 0;
- player.stats[HEALING] = 0;
- player.stats[DEFENSES] = 0;
- player.stats[INVULNS] = 0;
- player.stats[BONUS] = 0;
- player.stats[DOMINATIONS] = 0;
- player.stats[REVENGE] = 0;
- player.stats[POINTS] = 0;
- player.roundStats[KILLS] = 0;
- player.roundStats[DEATHS] = 0;
- player.roundStats[CAPS] = 0;
- player.roundStats[ASSISTS] = 0;
- player.roundStats[DESTRUCTION] = 0;
- player.roundStats[STABS] = 0;
- player.roundStats[HEALING] = 0;
- player.roundStats[DEFENSES] = 0;
- player.roundStats[INVULNS] = 0;
- player.roundStats[BONUS] = 0;
- player.roundStats[DOMINATIONS] = 0;
- player.roundStats[REVENGE] = 0;
- player.roundStats[POINTS] = 0;
- player.team = TEAM_SPECTATOR;
+ stats[KILLS] = 0;
+ stats[DEATHS] = 0;
+ stats[CAPS] = 0;
+ stats[ASSISTS] = 0;
+ stats[DESTRUCTION] = 0;
+ stats[STABS] = 0;
+ stats[HEALING] = 0;
+ stats[DEFENSES] = 0;
+ stats[INVULNS] = 0;
+ stats[BONUS] = 0;
+ stats[DOMINATIONS] = 0;
+ stats[REVENGE] = 0;
+ stats[POINTS] = 0;
+ roundStats[KILLS] = 0;
+ roundStats[DEATHS] = 0;
+ roundStats[CAPS] = 0;
+ roundStats[ASSISTS] = 0;
+ roundStats[DESTRUCTION] = 0;
+ roundStats[STABS] = 0;
+ roundStats[HEALING] = 0;
+ roundStats[DEFENSES] = 0;
+ roundStats[INVULNS] = 0;
+ roundStats[BONUS] = 0;
+ roundStats[DOMINATIONS] = 0;
+ roundStats[REVENGE] = 0;
+ roundStats[POINTS] = 0;
+ team = TEAM_SPECTATOR;
}
- player.timesChangedCapLimit = 0;
- player.alarm[5]=1;
+ timesChangedCapLimit = 0;
+ alarm[5]=1;
}
}
View
2  Source/gg2/Scripts/GameServer/GameServerDefineCommands.gml
@@ -5,7 +5,7 @@ commandBytesPrefixLength1 = -2; // The length of the command is indicated by th
for(i=0; i<256; i+=1) {
// -1 indicates an invalid command byte
- requiredBytes[i] = commandBytesInvalidCommand;
+ commandBytes[i] = commandBytesInvalidCommand;
}
commandBytes[PLAYER_LEAVE] = 0;
View
8 Source/gg2/Scripts/GameServer/processClientCommands.gml
@@ -72,8 +72,8 @@ while(true) {
{
if (lastDamageDealer == -1 || lastDamageDealer == player)
{
- sendEventPlayerDeath(player, player, -1, BID_FAREWELL);
- doEventPlayerDeath(player, player, -1, BID_FAREWELL);
+ sendEventPlayerDeath(player, player, noone, BID_FAREWELL);
+ doEventPlayerDeath(player, player, noone, BID_FAREWELL);
}
else
{
@@ -126,8 +126,8 @@ while(true) {
{
if (lastDamageDealer == -1 || lastDamageDealer == player)
{
- sendEventPlayerDeath(player, player, -1, BID_FAREWELL);
- doEventPlayerDeath(player, player, -1, BID_FAREWELL);
+ sendEventPlayerDeath(player, player, noone, BID_FAREWELL);
+ doEventPlayerDeath(player, player, noone, BID_FAREWELL);
}
else
{
View
22 Source/gg2/Scripts/calculateMonthAndDay.gml
@@ -1,12 +1,20 @@
currentDate = date_current_date();
-if date_get_month(currentDate) == 4 && date_get_day(currentDate) == 1 {
- global.aFirst = true;
- sprite_assign(BubblesS, BubbleFaceS);
+global.aFirst = false;
+global.gg_birthday = false;
+
+if(date_get_month(currentDate) == 4 and date_get_day(currentDate) == 1)
+{
+ if(date_get_year(currentDate) != 2011) // April fools bubble disabled this year because of big release
+ global.aFirst = true;
+ else
+ global.gg_birthday = true;
}
-else global.aFirst = false;
-if date_get_month(currentDate) == 9 && date_get_day(currentDate) == 7 {
+if(date_get_month(currentDate) == 9 && date_get_day(currentDate) == 7)
global.gg_birthday = true;
+
+if(global.aFirst)
+ sprite_assign(BubblesS, BubbleFaceS);
+
+if(global.gg_birthday)
partyTime();
-}
-else global.gg_birthday = false;
View
7 Source/gg2/Scripts/game_init.gml
@@ -9,6 +9,13 @@
global.MenuMusic=sound_add(choose("Music/menumusic1.wav","Music/menumusic2.wav","Music/menumusic3.wav","Music/menumusic4.wav"), 1, true);
global.IngameMusic=sound_add("Music/ingamemusic.wav", 1, true);
global.FaucetMusic=sound_add("Music/faucetmusic.wav", 1, true);
+ if(global.MenuMusic != -1)
+ sound_volume(global.MenuMusic, 0.8);
+ if(global.IngameMusic != -1)
+ sound_volume(global.IngameMusic, 0.8);
+ if(global.FaucetMusic != -1)
+ sound_volume(global.FaucetMusic, 0.8);
+
global.sendBuffer = buffer_create();
global.eventBuffer = buffer_create();
View
10 Source/gg2/Scripts/recordKillInLog.gml
@@ -1,19 +1,19 @@
// Record kill in killlog
// argument0: The killed player
- // argument1: The killer, or -1 for suicides
- // argument2: The assistant, or -1 for no assist
+ // argument1: The killer, or a false value for suicides
+ // argument2: The assistant, or a false value for no assist
// argument3: The source of the damage (e.g. WEAPON_SCATTERGUN)
with (KillLog) {
map = ds_map_create();
- if (argument1==-1 || argument1==argument0) {
+ if (!argument1 || argument1==argument0) {
ds_map_add(map, "name1", "");
ds_map_add(map, "team1", 0);
} else {
var killer;
killer = string_copy(argument1.name, 1, 20);
- if (argument2 != -1)
+ if (argument2)
killer += " + " + string_copy(argument2.name, 1, 20);
ds_map_add(map, "name1", killer);
ds_map_add(map, "team1", argument1.team);
@@ -89,7 +89,7 @@
break;
case KILL_BOX:
case FRAG_BOX:
- if (argument1==-1 || argument1==argument0) {
+ if (!argument1 || argument1==argument0) {
ds_map_add(map, "weapon", DeadKL);
break;
}
View
8 Source/gg2/Scripts/room_goto_fix.gml
@@ -16,5 +16,13 @@ if(not instance_exists(RoomChangeObserver)) {
if(RoomChangeObserver.transitioning) {
RoomChangeObserver.nextRoom = argument0;
} else {
+ if(not room_persistent) {
+ with(all) {
+ if(not persistent) {
+ instance_destroy();
+ }
+ }
+ }
+ RoomChangeObserver.transitioning = true;
room_goto(argument0);
}
View
BIN  Source/gg2/Sprites/GameElements/CreditsS.images/image 0.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 0.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 1.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 10.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 11.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 12.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 13.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 14.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 15.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 16.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 17.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 18.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 19.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 2.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 20.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 21.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 22.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 23.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 24.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 25.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 26.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 27.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 28.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 29.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 30.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 31.png
Diff not rendered
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 32.png
Diff not rendered
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 33.png
Diff not rendered
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 34.png
Diff not rendered
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 35.png
Diff not rendered
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 36.png
Diff not rendered
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 37.png
Diff not rendered
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 38.png
Diff not rendered
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 39.png
Diff not rendered
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 6.png
Diff not rendered
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 7.png
Diff not rendered
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 8.png
Diff not rendered
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/DemomanPortraitAnimationS.images/image 9.png
Diff not rendered
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/MedicPortraitAnimationS.images/image 10.png
Diff not rendered
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/MedicPortraitAnimationS.images/image 11.png
Diff not rendered
View
BIN  Source/gg2/Sprites/HUDs/PortraitAnimations/MedicPortraitAnimationS.images/image 12.png
Diff not rendered