Bug fix again on Mar. 17th 2019
- A new nav. marker bug was introduced with the previous update. (The white "COLLECT" will remain visible to all players if the same flag carrier drop and re-pick up the flag.) This update should fix it.
Small bug fix on Jan. 17th 2019
- Fixed an issue where flags carried by enemy players being marked with "PROTECT".
- Fixed spawn issue on Torque. (Re-add spawn volume that was deleted.)
I know people have already recreated Stockpile in Halo 5 (the most famous one is probably this built by Max Extra, which works really well. But it seems to me that there are still some improvments that can be made to enhence the whole experience, so I decided to build my own version.
(Also, just to clarify, I did not copy anyone while building the scripts.)
What is Stockpile?
Stockpile is a game type in Halo Reach. Players have to bring flags that randomly spawn on the map to their base, and prevent enemy players from stealing them. The game collects the flags from the base every minutes and give points to the team.
My version, like the one built by Max, also support team switching, JIP....., though it only supports red and blue teams. The biggest difference between the two versions is probably the announcer and idividual player scoring systems.
Read the following before playing...
NOTICE: Any "flag carrier" mentioned below actually refers to the player closest to the flag inside its pick up zone, since the scripts are unable to detect the real carrier.
- Neutral flags are marked with white (COLLECT) nav marker for all players on red and blue teams.
- Flag carriers will only be marked for players on their respective team with red or blue (PROTECT) nav marker.
- No player traits are applied to flag carriers. (There seems to be a rare mini game game type bug where the same traits will be re-apply to players multiple times if the game lags. For example, instead of making carriers move at x0.8 speed, the game sometimes re-applies the movement speed trait a few times to them and cause the players to move at x(0.8)^12 = x0.07 of their normal speed.)
- Flags inside the red base are marked with light red nav marker for both teams (DEFEND/STEAL for red/blue team players), vice versa for flags in blue base.
- Flags change color when being carried or inside the bases.
- Your base is marked as CHECKPOINT. Base nav markers will start blinking 10 seconds before the game collects the flag.
There're 8 possible flag spawn locations. Whenever a flag despawns, a new flag will randomly spawn on the map. There will only be 4 flags on the map at any time.
Additional boundary check scripts are added to some of the maps to despawn flags out of bound.
The announcer will make some of these announcements during the game....
- “Flag captured” when your team scores
- “Enemy team score"
- "Enemy has our flag" when an enemy player removes a flag from your base (teammates removing flags from your base won't trigger this)
- “Gain the lead/lost the lead”The scripts will start playing a countdown alarm sound 10 seconds before colleting the flags.
This part of the whole scripts is really complicated , and is what caused the game to support 2 teams only.
My biggest goal while building this is to give players who drop the flags inside their base the points they deserve, and prevent teammates from stealing points from each other, which happeded in Halo Reach beta.
The general idea of how it works is that a unique number is assigned to every red and blue team players, and each flags have their own "scoring slot". When a flag was dropped into a base, it checks which team its last know "carrier" belongs to. If the carrier is on the same team as the base, the flag then records the carrier's unique number and stores it inside its scoring slot, after which the slot is "locked" (the flag will not update the slot anymore). The only way for the flag to "unlock" the slot is to have an enemy player or the original carrier remove the flag from the base.
Once the flag is collected, point is given to the player with the same number in the slot. This system encourages players to leave the flag inside their base once they drop them, and also prevents points stealing.
It sounds a little complicated, so I've typed down a list of examples at the final part of the description.
!!! The scripts cannot detect players without a "body" on the map (disintegrated by Forerunner weapons, or simply deleted by the game). Players without a body won't get any points when the game collects the flags. !!!
How to set up a game
Play with the game type in the download link. I've only done play testing with other 7 players. The game would probably start lagging if there're too many players, though 10 ~ 12 players should be fine.
==================================================The list (LONG!) mentioned above...(r/b means red/blue team player, RB/BB means red/blue base):
- r1 drops the flag in RB, r2 removes it from RB and drops it back to RB => r1 score
- r1 drops the flag in RB, r2 removes it from RB, r3 puts it back in => r1 score
- r1 drops the flag in RB then removes it from RB. r2 puts it back in => r2 score
- r1 drops the flag in RB, b1 removes it from RB, r2 takes the flag back to RB => r2 score
- r1, standing outside RB's boundary, release the flag. Before the flag land inside RB, it go pass through r2 and lands inside the base boundary => r2 score. since it's the "last known carrier". This is probably one of the biggest problem of the scoring system, but there's no way to fix it. It you really want the points, the best way is to walk inside the base carrying the flag, then drop it.
- r1 drops the flag in RB, r2 removes it from RB, b1 somehow becomes the "carrier", r3 becomes the "carrier" and drops it back to RB => r1 score. There's probalby a way to detect this so that r1 and r3 both get points, but the scripts become too compilacted at this point and really isn't worth the time.
- Any players not on blue team drop the flag in BB => no player scores when the flag is collected, though blue team is still given the point.
- Any players not on blue team drop the flag in BB, b1 remove it from BB and puts it back in => b1 score