Gametypes scripting language

Hi.

Before we begin, there are 4 ways you can read this:

Novice

Respectable

Everything

TL;DR

Just CTRL+F to your type of person.

==Everything==

Ever since Halo 3 with its custom games I have wanted to see a more powerful gametypes system. Halo 3 just about perfected things towards its twilight with Forge’s glitches and Custom Games with pre-built frameworks for things like instant-respawn. Reach took Forge’s glitches on board and made them features - ghost merging had only been discovered about a year before Reach came out, and is probably the most important thing ever to happen to Forge. Reach improved upon it, with more extensive options, although beyond the team colour highlights, the pieces were rather bland being all grey. However, despite this massive leap in Forge, custom games actually regressed - we lost VIP, for instance. VIP was the gametype every other gametype was built around in custom games - now we have to make do with the Action Sack and similar Bungie-built frameworks.

What interested people more, however, was the innate power of their custom games they could make - chess, anyone? We had nowhere near the toolset to create that, so we could only hope to achieve anything at all deviating from the time old formula of red-kills-blue-kills-red. I have seen some very creative things, but at the same time, favourites like Asset are almost impossible to recreate using Reach’s limited set.

A couple of months after release, Bungie started talking more and more about their scripting engine, Megalo. Many forgers and coders were pining for it to be released to the community, but lo and behold, it was not. There were issues with it being too powerful for us untrustworthy lot to handle - and they were probably right. Bungie had access to some pretty darn powerful stuff.

==Respectable==

My point I’d like to make is that I hope 343 can take this and run with it - offering a (probably cut-down) version of the Megalo scripting family that we can run on computers to make Halo 4 games (more than gametypes) of our own. It’s always fun modifying a Slayer gametype to 50% gravity and hammers only, but there is only so much we can do with that. I’d like to see the community making gametypes with such splendour that they rival the Forge ‘Golden Era’ of Mythic Map Pack 2 - Reach Noble map pack.

I imagine such a script would be easy to make a cut-down version, since the framework already exists in the Reach code. Python-like, CoffeeScript-like or even C-like syntax would work really well, and give us much more power than we had before. An example might be declaring a standard slayer match, with 3 lines of code. I am using underscores to denote spaces or tabs:

> gametype MySlayer from Slayer
> ____MySlayer.weaponset = ‘HumanRifles’
> ____MySlayer.respawntime = (MySlayer.maxScore - winningTeam.score) / 4

This would declare a new Gametype with ‘gametype’, which builds upon the pre-existing gametype we all know and love, ‘Slayer’. We then declare the weaponset to be the equivalent to the Halo 2 rifles set - BR, Covenant/Forerunner equivalent and Sniper, say. Finally, the respawn time starts off really slowly, and eventually peaks at near-instant-respawn when the winning team is about to win, leading to a slow, tactical setup phase before a mad panic towards the end.

I would also like to declare multiple gametypes with it, like so:

> gametype MyOddKing from Oddball, KOTH
> ____MyOddKing.numOddballs = 3
> ____function tick(player):
> ________if player.weapon == Weapon.ODDBALL and player.isInHill:
> ____________player.team.score(3)
>
> ____function killedBy(killer):
> ________killer.team.score(1)
> ____MyOddKing.hilltime = 30
> ____MyOddKing.respawntime = 3

This example declares a gametype from Oddball and KingOfTheHill (KOTH). We first make sure there are 3 balls in play. Then we add a function called ‘tick’ with one parameter, player. We then check to see if player is holding and oddball, and if they are in the hill. If both are true, then they score 3 points. Also, if someone is killed, we award that player 1 point. It has elements of Slayer, Oddball and KOTH, all in 10 lines of (pseudo)code.

Or maybe we could add a two-way Infection mode:

> gametype TugOfWar from Slayer, Infection
> ____function killedBy(killer):
> ________print player.gamertag + ’ stolen by ’ + killer.gamertag
> ________player.team = killer.team

We have a normal game of Slayer, since it is the first ‘uses’ to be declared. But we add Infection for the player switching stuff to avoid making it all over again, since the ‘uses’ tag basically adds all of the code from that gametype into yours. It makes a function so that whenever a player is killed, it says ‘PlayerA stolen by PlayerAThief’ instead of ‘PlayerA killed by PlayerAThief’. We then swap the victim’s teams, so that they are consumed, as in infection mode. However, they can be won back, since it goes two ways like in Slayer.

==Novice==

For one final, more extreme usage of the system, I will show you how one line could make a new gametype in the ideal world:

> gametype BattleTracksEscort uses Race, Slayer, EscortVIP

This adds Race, but with scoring for kills, and bonus points for VIP kills and laps/destinations. Imagine making something that complex with the Custom Games in Reach - it simply can’t be done. It was hard in Halo 3, where we actually had the VIP gametype for Race and Escort games. But Bungie made Megalo with incredible power, and most likely incredible simplicity, akin to what you see above. Imagine typing one line into a keyboard or joypad, uploading it to your fileshare, and playing it with such ease.

==TL;DR==

343, please can you release a Gametype Script/Language like Megalo nearly was so that we can make more powerful gametypes like Infection-Invasion Race of the Hill and (American) Football and Basket-Stockpile-ball and Jousting and Detectives and RPGs and Long Jump and Asset and TF2 and Bumper-cars-CTF and and and and and and?

Thanks if you have read it all the way through. If you TL;DR’d it, I wish armour lock upon thee.

-Tipaa