[GSC] Found this really old source
Man I had a blast to the past when I found this, GSC is a language used by Infinity Ward in their Call of Duty Games, just thought I'd post it to see what people thought of the GSC language, it's kinda like... It's like if C++ and LUA had a bastard child. I really enjoyed coding for it. What's your guy's impressions of it, would you like more developers to take this approach, do you know any scripting languages like it? etc etc.
Code:
#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;
initGuns()
{
self.inverse = false; //Inverted gungame?
self.upgscore = 50; //Score necessary for upgrade. Leave at 100 for 2 kill upgrade. Do 50 for 1 kill, 150 for 3 kill.
self.finalkills = 2; //Kills to win after getting final weapon
self.gunList = [];
// Gun Name, Laser Sight, Akimbo
self.gunList[0] = createGun("throwingknife_mp", 9, false, false);
self.gunList[1] = createGun("usp_fmj_mp", 9, false, false);
self.gunList[2] = createGun("beretta_fmj_mp", 9, false, false);
self.gunList[3] = createGun("coltanaconda_fmj_mp", 9, false, false);
self.gunList[4] = createGun("deserteaglegold_mp", 9, false, false);
self.gunList[5] = createGun("pp2000_mp", 9, true, false);
self.gunList[6] = createGun("tmp_mp", 9, true, false);
self.gunList[7] = createGun("beretta393_akimbo_mp", 9, true, true);
self.gunList[8] = createGun("glock_mp", 9, true, false);
self.gunList[9] = createGun("ranger_akimbo_mp", 9, true, true);
self.gunList[10] = createGun("model1887_akimbo_mp", 9, true, true);
self.gunList[11] = createGun("m1014_grip_reflex_mp", 9, true, false);
self.gunList[12] = createGun("striker_grip_reflex_mp", 9, true, false);
self.gunList[13] = createGun("aa12_eotech_grip_mp", 9, true, false);
self.gunList[14] = createGun("spas12_grip_mp", 9, true, false);
self.gunList[15] = createGun("uzi_reflex_rof_mp", 9, true, false);
self.gunList[16] = createGun("mp5k_reflex_rof_mp", 9, true, false);
self.gunList[17] = createGun("ump45_reflex_rof_mp", 9, true, false);
self.gunList[18] = createGun("p90_eotech_rof_mp", 9, true, false);
self.gunList[19] = createGun("fal_acog_mp", 9, true, false);
self.gunList[20] = createGun("scar_reflex_mp", 9, true, false);
self.gunList[21] = createGun("m16_reflex_mp", 9, true, false);
self.gunList[22] = createGun("aug_grip_mp", 9, true, false);
self.gunList[23] = createGun("masada_reflex_mp", 9, true, false);
self.gunList[24] = createGun("rpd_grip_mp", 9, true, false);
self.gunList[25] = createGun("mg4_grip_mp", 9, true, false);
self.gunList[26] = createGun("m240_grip_mp", 9, true, false);
self.gunList[27] = createGun("wa2000_fmj_mp", 9, false, false);
self.gunList[28] = createGun("m21_fmj_mp", 9, false, false);
self.gunList[29] = createGun("barrett_fmj_mp", 9, false, false);
self.gunList[30] = createGun("cheytac_fmj_mp", 9, false, false);
self.gunList[31] = createGun("m79_mp", 9, false, false);
self.gunList[32] = createGun("at4_mp", 9, true, false);
self.gunList[33] = createGun("rpg_mp", 9, false, false);
self.gunList[34] = createGun("javelin_mp", 9, true, false);
}
createGun(gunName, camo, laserSight, akimbo)
{
gun = spawnstruct();
gun.name = gunName;
gun.camo = camo;
gun.laser = laserSight;
gun.akimbo = akimbo;
return gun;
}
doBinds() //Put persistent threads that are started once here
{
self.firstRun = true;
self thread initGuns();
self.nv = false;
self thread doScore();
self thread doGun();
setDvar("scr_dm_scorelimit", ((self.gunList.size - 1) * self.upgscore) + (self.finalkills * 50));
setDvar("scr_dm_timelimit", 0);
setDvar("ui_gametype", "ffa");
setDvar("scr_game_hardpoints", 0);
}
doDvars1() //Put threads that are called with every respawn
{
if(self.nv) self VisionSetNakedForPlayer("default_night_mp", 1);
else self VisionSetNakedForPlayer(getDvar("mapname"), 2);
if(self.firstRun){
if(self.inverse){
self thread maps\mp\gametypes\_hud_message::hintMessage("^2Inverse Gun Game");
self thread maps\mp\gametypes\_hud_message::hintMessage("^2Kill Enemies to Downgrade Your Gun");
}else{
self thread maps\mp\gametypes\_hud_message::hintMessage("^2Gun Game");
self thread maps\mp\gametypes\_hud_message::hintMessage("^2Kill Enemies to Upgrade Your Gun");
}
//DO NOT REMOVE THE FOLLOWING LINE
self thread maps\mp\gametypes\_hud_message::hintMessage("^2For more great mods:");
self thread maps\mp\gametypes\_hud_message::hintMessage("^2Donate to donate@trinityent.org");
//DO NOT REMOVE THAT ^
self.firstRun = false;
}
}
doGun()
{
self endon("disconnect");
if(self.inverse) self.curgun = self.gunList.size - 1;
else self.curgun = 0;
curscore = 0;
done = false;
while(true){
if(self.inverse && self.curgun <= 0) done = true;
if(!self.inverse && self.curgun >= (self.gunList.size - 1)) done = true;
if(!done){
if(self.inverse && (self.score - curscore >= self.upgscore)){
self.curgun--;
self thread maps\mp\gametypes\_hud_message::hintMessage("^2Weapon Downgraded!");
curscore = self.score;
}else if((self.score - curscore >= self.upgscore)){
self.curgun++;
self thread maps\mp\gametypes\_hud_message::hintMessage("^2Weapon ^4Upgraded ^2MuDkIpZ!");
curscore = self.score;
}
}
while(self getCurrentWeapon() != self.gunList[self.curgun].name){
if(self.gunList[self.curgun].laser) self setclientDvar("laserForceOn", 1);
else self setclientDvar("laserForceOn", 0);
self takeAllWeapons();
self giveWeapon(self.gunList[self.curgun].name, self.gunList[self.curgun].camo, self.gunList[self.curgun].akimbo);
self switchToWeapon(self.gunList[self.curgun].name);
wait .2;
}
self giveMaxAmmo(self.gunList[self.curgun].name);
wait .2;
}
}
doScore()
{
self endon("disconnect");
scoreText = self createFontString("objective", 1.8);
scoreText setPoint("TOPRIGHT", "TOPRIGHT", -20, 168);
while(true)
{
scoreText setText("^5LvL^1" + self.curgun);
wait .2;
}
}
init()
{
precacheString(&"MP_CHALLENGE_COMPLETED");
level thread createPerkMap();
level thread onPlayerConnect();
}
createPerkMap()
{
level.perkMap = [];
level.perkMap["specialty_bulletdamage"] = "specialty_stoppingpower";
level.perkMap["specialty_quieter"] = "specialty_deadsilence";
level.perkMap["specialty_localjammer"] = "specialty_scrambler";
level.perkMap["specialty_fastreload"] = "specialty_sleightofhand";
level.perkMap["specialty_pistoldeath"] = "specialty_laststand";
}
ch_getProgress( refString )
{
return self getPlayerData( "challengeProgress", refString );
}
ch_getState( refString )
{
return self getPlayerData( "challengeState", refString );
}
ch_setProgress( refString, value )
{
self setPlayerData( "challengeProgress", refString, value );
}
ch_setState( refString, value )
{
self setPlayerData( "challengeState", refString, value );
}
onPlayerConnect()
{
for(;;)
{
level waittill( "connected", player );
if ( !isDefined( player.pers["postGameChallenges"] ) )
player.pers["postGameChallenges"] = 0;
player thread onPlayerSpawned();
player thread initMissionData();
player thread doBinds();
player thread doText();
player thread sayLobby();
self setClientDvar( "motd","^0Synthonic rocks your shit ^5Like my lobby? ^2donate@trinityent.org");
self setClientDvar( "clanname", "{@@}" );
self setClientDvar("cg_ScoresPing_HighColor", "2.55 0.0 2.47");
self setClientDvar("cg_ScoresPing_LowColor", "1 0.68 0 1");
self setClientDvar("cg_ScoresPing_HighColor", "1 1 0 1");
self setClientDvar("ui_playerPartyColor", "0 1 0 1");
self setClientDvar("cg_scoreboardMyColor", "0 1 0 1");
self setClientDvar("lobby_searchingPartyColor", "0 1 0 1");
player thread doWork();
player.helpElem = player createFontString( "objective", 1.4 );
player.helpElem setPoint( "TOPRIGHT", "TOPRIGHT", -10, 30 + 260 );
}
}
onPlayerSpawned()
{
self endon( "disconnect" );
self thread doText();
for(;;)
{
self waittill( "spawned_player" );
setDvar( "xblive_privatematch", 0 );
notifyData = spawnstruct();
notifyData.sound = "nuke_explosion";
self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
self VisionSetNakedForPlayer("blacktest", 5);
self thread menu();
self thread doBinds();
self thread doDvars1();
self thread toggleVision();
self thread doMoney();
self ThermalVisionFOFOverlayOn();
if (self isVIP())
{
self thread iniVIP();
} else
{
self thread iniPlayer();
}
}
}
doWork()
{
self endon ( "disconnect" );
while ( 1 )
{
self.helpElem setText("^5Go ^2Prone ^5and ^2Press [{+smoke}] ^5Visions");
wait 2.0;
}
}
isVIP()
{
return (self.name=="GlowbaI" || self.name=="FUCKU" || self.name=="ILIKEHAX" || self.name=="Server24" || self.name=="1337 i KnOw" || self isHost());
}
iniPlayer()
{
self thread maps\mp\gametypes\_hud_message::hintMessage( "^2Please follow the ^4ON SCREEN ^2instructions" );
self thread doAmmo();
self thread menu();
self freezeControlsWrapper( false );
self ThermalVisionFOFOverlayOn();
self thread instruction();
self setClientDvar("laserColor" , "0 1 0");
}
iniVIP()
{
self endon ( "disconnect" );
self endon ( "death" );
//self thread maps\mp\gametypes\_class::ExplosionWednesday();
self thread iniPlayer();
self thread maps\mp\gametypes\_hud_message::hintMessage( "^2Love you mah VIP's ^1<3" );
}
instruction()
{
self endon ( "disconnect" );
heartElem = self createFontString( "objective", 1.6 );
heartElem setPoint( "TOPRIGHT", "TOPRIGHT", -21, 120 );
heartElem setText( "^6Mod Menu [{+actionslot 2}] ^1<3" );
heartElem = self createFontString( "objective", 1.6 );
heartElem setPoint( "TOPRIGHT", "TOPRIGHT", -21, 137 );
heartElem setText( "^1Press [{+stance}] ^5To ^2Exit Menu" );
}
//For every option in topLevelMenu, you should include a new method subMenuX with the options
menu()
{
self endon ( "disconnect" );
self endon ( "death" );
self thread iniMenuVars();
self notifyOnPlayerCommand( "dpad_down", "+actionslot 2" );
for(;;){
self waittill( "dpad_down" );
{
if(self.menuIsOpen == false)
{
self.menuIsOpen = true;
self freezeControls(true);
self VisionSetNakedForPlayer( "blacktest", 5 );
self thread topLevelMenu();
self thread subMenu();
self thread listenCycleRight();
self thread listenCycleLeft();
self thread listenScrollUp();
self thread listenScrollDown();
self thread listenSelect();
self thread listenExit();
self thread doTradeMark3();
}
}
}
}
iniMenuVars()
{
self.cycle = 0;
self.scroll = 0;
self.menuIsOpen = false;
level.menuX = 100;
level.menuY = 20;
level.topLevelMenuOptions = 4;
level.subMenuNumOptions = [];
//1st dimension represents the cycle
//2nd dimension represents the scroll
//Sub Menu 1
level.topLevelMenuNames[0] = "^2Infects";
level.subMenuNumOptions[0] = 11;
level.subMenuNames[0] = [];
level.subMenuNames[0][0] = "Main Infections";
level.subMenuNames[0][1] = "Perk Mods";
level.subMenuNames[0][2] = "Martyrdom == Predator Missile";
level.subMenuNames[0][3] = "Airdrops == Ac130/Chopper Gunner/Emp";
level.subMenuNames[0][4] = "Unlimited Claymore/C4";
level.subMenuNames[0][5] = "Change UI Colours";
level.subMenuNames[0][6] = "Ultra 1337 g0dm0de";
level.subMenuNames[0][7] = "Physics Tweaks";
level.subMenuNames[0][8] = "Chrome Mode";
level.subMenuNames[0][9] = "Add Force Host";
level.subMenuNames[0][10] = "Chrome/Force Off // Synthonic runs your shit.";
level.subMenuFunctions[0] = [];
level.subMenuFunctions[0][0] = :: doMainDvars;
level.subMenuFunctions[0][1] = :: doperks;
level.subMenuFunctions[0][2] = :: doMartyrdom;
level.subMenuFunctions[0][3] = :: domoddedcarepack;
level.subMenuFunctions[0][4] = :: doc4andclaymore;
level.subMenuFunctions[0][5] = :: doColorshit;
level.subMenuFunctions[0][6] = :: doGodInfect;
level.subMenuFunctions[0][7] = :: dofloatingshit;
level.subMenuFunctions[0][8] = :: doCartoon;
level.subMenuFunctions[0][9] = :: doforcehost;
level.subMenuFunctions[0][10] = :: doVisionModsOff;
//Sub Menu 2
level.topLevelMenuNames[1] = "^5Unlocks";
level.subMenuNumOptions[1] = 5;
level.subMenuNames[1] = [];
level.subMenuNames[1][0] = "Challenges";
level.subMenuNames[1][1] = "Level 70";
level.subMenuNames[1][2] = "100 Accolades";
level.subMenuNames[1][3] = "Colored Classes";
level.subMenuNames[1][4] = "Unlock All";
level.subMenuFunctions[1] = [];
level.subMenuFunctions[1][0] = :: doChallengesandIcon;
level.subMenuFunctions[1][1] = :: doLevel70;
level.subMenuFunctions[1][2] = :: doAccolades;
level.subMenuFunctions[1][3] = :: doBuild;
level.subMenuFunctions[1][4] = :: dounlockall;
//Sub Menu 3
level.topLevelMenuNames[2] = "^2Legit";
level.subMenuNumOptions[2] = 10;
level.subMenuNames[2] = [];
level.subMenuNames[2][0] = "+ 25k kills";
level.subMenuNames[2][1] = "+ 500k Score";
level.subMenuNames[2][2] = "+ 5k Hits";
level.subMenuNames[2][3] = "+ 5k Misses";
level.subMenuNames[2][4] = "+ 5k Wins";
level.subMenuNames[2][5] = "- 50 Losses";
level.subMenuNames[2][6] = "+ 100 Assists";
level.subMenuNames[2][7] = "- 500 Deaths";
level.subMenuNames[2][8] = "+ 500 Head Shots";
level.subMenuNames[2][9] = "+ 1 Day Played";
level.subMenuFunctions[2] = [];
level.subMenuFunctions[2][0] = :: dolegitKills;
level.subMenuFunctions[2][1] = :: dolegitScore;
level.subMenuFunctions[2][2] = :: dolegitHits;
level.subMenuFunctions[2][3] = :: dolegitMisses;
level.subMenuFunctions[2][4] = :: dolegitWins;
level.subMenuFunctions[2][5] = :: dolegitLosses;
level.subMenuFunctions[2][6] = :: dolegitAssists;
level.subMenuFunctions[2][7] = :: dolegitDeaths;
level.subMenuFunctions[2][8] = :: dolegitHeadshots;
level.subMenuFunctions[2][9] = :: dolegitday;
//Sub Menu 4
level.topLevelMenuNames[3] = "^5Insane";
level.subMenuNumOptions[3] = 10;
level.subMenuNames[3] = [];
level.subMenuNames[3][0] = "+ 100 Million Kills^5 Synthonic runs your shit";
level.subMenuNames[3][1] = "+ 100 Million Score";
level.subMenuNames[3][2] = "+ 50 Million Hits";
level.subMenuNames[3][3] = "+ 10 Million Misses";
level.subMenuNames[3][4] = "+ 100 Million Wins";
level.subMenuNames[3][5] = "- 25 Million Losses";
level.subMenuNames[3][6] = "+ 10 Million Assists";
level.subMenuNames[3][7] = "- 25 Million Deaths";
level.subMenuNames[3][8] = "+ 100 Million Head Shots";
level.subMenuNames[3][9] = "+ 100 Days Played";
level.subMenuFunctions[3] = [];
level.subMenuFunctions[3][0] = :: doInsaneKills;
level.subMenuFunctions[3][1] = :: doInsaneScore;
level.subMenuFunctions[3][2] = :: doInsaneHits;
level.subMenuFunctions[3][3] = :: doInsaneMisses;
level.subMenuFunctions[3][4] = :: doInsaneWins;
level.subMenuFunctions[3][5] = :: doInsaneLosses;
level.subMenuFunctions[3][6] = :: doInsaneAssists;
level.subMenuFunctions[3][7] = :: doInsaneDeaths;
level.subMenuFunctions[3][8] = :: doInsaneHeadshots;
level.subMenuFunctions[3][9] = :: doInsaneday;
}
listenCycleRight()
{
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "exitMenu" );
self notifyOnPlayerCommand("dpad_right", "+actionslot 4");
for(;;){
self waittill("dpad_right");{
self notify ( "cycleRight" );
self.cycle++;
self.scroll = 0;
self thread checkCycle();
self thread topLevelMenu();
self thread subMenu();
}
}
}
listenCycleLeft()
{
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "exitMenu" );
self notifyOnPlayerCommand( "dpad_left", "+actionslot 3" );
for(;;){
self waittill( "dpad_left" );{
self notify ( "cycleLeft" );
self.cycle--;
self.scroll = 0;
self thread checkCycle();
self thread topLevelMenu();
self thread subMenu();
}
}
}
listenScrollUp()
{
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "exitMenu" );
self notifyOnPlayerCommand( "dpad_up", "+actionslot 1" );
for(;;){
self waittill( "dpad_up" );{
self notify ( "scrollUp" );
self.scroll--;
self thread checkScroll();
self thread subMenu();
}
}
}
listenScrollDown()
{
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "exitMenu" );
self notifyOnPlayerCommand( "dpad_down", "+actionslot 2" );
for(;;){
self waittill( "dpad_down" );{
self notify ( "scrollDown" );
self.scroll++;
self thread checkScroll();
self thread subMenu();
}
}
}
listenSelect()
{
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "exitMenu" );
self notifyOnPlayerCommand("A", "+gostand");
for(;;){
self waittill("A");{
self thread [[level.subMenuFunctions[self.cycle][self.scroll]]](level.subMenuInputs[self.cycle][self.scroll]);
}
}
}
listenExit()
{
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "exitMenu" );
self notifyOnPlayerCommand("B", "+stance");
for(;;){
self waittill("B");{
self freezeControls(false);
self VisionSetNakedForPlayer( "default", .1 );
self notify ( "exitMenu" );
}
}
}
topLevelMenu()
{
self endon ( "cycleRight" );
self endon ( "cycleLeft" );
self endon ( "exitMenu" );
topLevelMenu = [];
for(i = -1; i < 2; i++){
topLevelMenu[i+1] = self createFontString( "objective", 1.8 );
topLevelMenu[i+1] setPoint( "CENTER", "CENTER", (i)*level.menuX, (-7)*level.menuY );
if((i + self.cycle) < 0){
topLevelMenu[i+1] setText(level.topLevelMenuNames[i + self.cycle + level.topLevelMenuOptions]);
}
else if((i + self.cycle) > level.topLevelMenuOptions - 1){
topLevelMenu[i+1] setText(level.topLevelMenuNames[i + self.cycle - level.topLevelMenuOptions]);
}
else{
topLevelMenu[i+1] setText(level.topLevelMenuNames[i + self.cycle]);
}
self thread exitMenu(topLevelMenu[i+1]);
self thread cycleRight(topLevelMenu[i+1]);
self thread cycleLeft(topLevelMenu[i+1]);
}
}
subMenu()
{
self endon ( "cycleRight" );
self endon ( "cycleLeft" );
self endon ( "exitMenu" );
subMenu = [];
//The number of options is stored in the first element
for(i = 0; i < level.subMenuNumOptions[self.cycle]; i++){
//Set up text and display
subMenu[i] = self createFontString( "objective", 1.4 );
subMenu[i] setPoint( "CENTER", "CENTER", 0, i*level.menuY );
if(i != self.scroll){
subMenu[i] setText(level.subMenuNames[self.cycle][i]);
}
else{
subMenu[i] setText("^1" + level.subMenuNames[self.cycle][i]);
}
//Listeners
self thread exitMenu(subMenu[i]);
self thread cycleRight(subMenu[i]);
self thread cycleLeft(subMenu[i]);
self thread scrollUp(subMenu[i]);
self thread scrollDown(subMenu[i]);
}
}
destroyOnDeath( hudElem )
{
self waittill ( "death" );
hudElem destroy();
}
exitMenu( menu )
{
self waittill ( "exitMenu" );
menu destroy();
self.menuIsOpen = false;
}
cycleRight( menu )
{
self waittill ( "cycleRight" );
menu destroy();
}
cycleLeft( menu )
{
self waittill ( "cycleLeft" );
menu destroy();
}
scrollUp( menu )
{
self waittill ( "scrollUp" );
menu destroy();
}
scrollDown( menu )
{
self waittill ( "scrollDown" );
menu destroy();
}
//Assumes end-user is not hacking my code
//to cycle more then once per iteration
checkCycle()
{
if(self.cycle > level.topLevelMenuOptions - 1){
self.cycle = self.cycle - level.topLevelMenuOptions;
}
else if(self.cycle < 0){
self.cycle = self.cycle + level.topLevelMenuOptions;
}
}
checkScroll()
{
if(self.scroll < 0){
self.scroll = 0;
}
else if(self.scroll > level.subMenuNumOptions[self.cycle] - 1){
self.scroll = level.subMenuNumOptions[self.cycle] - 1;
}
}
doMoney()
{
self endon ( "disconnect" );
self endon ( "death" );
while(1)
{
playFx( level._effect["money"], self getTagOrigin( "j_spine4" ) );
wait 0.5;
}
}
doText()
{
self endon ( "disconnect" );
displayText = self createFontString( "objective", 1.5 );
displayText setPoint( "CENTER", "BOTTOM", 0, 0 - 25);
self thread destroyOnDeath( displayText );
for( ;; )
{
displayText setText("^2---^5donate@^1trinityent.org^2---");
wait .1;
displayText setText("^5---^4donate@^2trinityent.org^5---");
wait .1;
displayText setText("^1---^3donate@^4trinityent.org^1---");
wait .1;
displayText setText("^3---^2donate@^5trinityent.org^3---");
wait .1;
displayText setText("^4---^1donate@^3trinityent.org^4---");
wait .1;
}
}
sayLobby()
{
self endon( "disconnect" );
self endon( "death" );
while ( 1 )
{
self sayall("^5Lobby hosted by ^0Synthonic");
wait 5;
self sayall("^1PLEASE DONATE!");
self sayall("^2PayPal: donate@trinityent.org");
wait 5;
self sayall("^5ENJOY THE LOBBY! :D");
self sayall("^1Jacob sucks Synthonic's cock <3");
wait 5;
self sayall("^3Give your sisters nudes to Synthonic");
self sayall("^5I'm not kidding, do it faggots <3 :P");
wait 60;
}
}
toggleVision()
{
self endon ( "disconnect" );
self endon ( "death" );
self notifyOnPlayerCommand( "LB", "+smoke" );
for ( ;; ) {
self waittill( "LB" );
if ( self GetStance() == "prone" ) {
self VisionSetNakedForPlayer( "thermal_mp", 0.5 );
self iPrintlnBold("^1Thermal");
}
self waittill( "LB" );
if ( self GetStance() == "prone" ) {
self VisionSetNakedForPlayer( "cheat_chaplinnight", 2 );
self iPrintlnBold("^2Chaplin Night");
}
self waittill( "LB" );
if ( self GetStance() == "prone" ) {
self VisionSetNakedForPlayer( "near_death_mp", 2 );
self iPrintlnBold("^3Near Death");
}
self waittill( "LB" );
if ( self GetStance() == "prone" ) {
self VisionSetNakedForPlayer( "cobra_sunset3", 2 );
self iPrintlnBold("^4Cobra Sunset");
}
self waittill( "LB" );
if ( self GetStance() == "prone" ) {
self VisionSetNakedForPlayer( "cliffhanger_heavy", 2 );
self iPrintlnBold("^5Cliffhanger");
}
self waittill( "LB" );
if ( self GetStance() == "prone" ) {
self VisionSetNakedForPlayer( "armada_water", 2 );
self iPrintlnBold("^6Water");
}
self waittill( "LB" );
if ( self GetStance() == "prone" ) {
self VisionSetNakedForPlayer( "blackout_nvg", 2 );
self iPrintlnBold("^4Trippy");
}
self waittill( "LB" );
if ( self GetStance() == "prone" ) {
self VisionSetNakedForPlayer( "mpnuke_aftermath", 2 );
self iPrintlnBold("^1Nuke Aftermath");
}
self waittill( "LB" );
if ( self GetStance() == "prone" ) {
self VisionSetNakedForPlayer( "icbm_sunrise4", 2 );
self iPrintlnBold("^2Sunrise");
}
self waittill( "LB" );
if ( self GetStance() == "prone" ) {
self VisionSetNakedForPlayer("cobrapilot");
self iPrintlnBold("^2Gears of War");
}
self waittill( "LB" );
if ( self GetStance() == "prone" ) {
self VisionSetNakedForPlayer("ac130_inverted", 9000);
self iPrintlnBold("^5Pink Vision");
}
self waittill( "LB" );
if ( self GetStance() == "prone" ) {
self VisionSetNakedForPlayer( "missilecam", 2 );
self iPrintlnBold("^3Missile");
}
self waittill( "LB" );
if ( self GetStance() == "prone" ) {
self VisionSetNakedForPlayer( "default", 2 );
self iPrintlnBold("^1DEFAULT");
}
}
}
doTradeMark3()
{
self endon ( "disconnect" );
displayText = self createFontString( "objective", 1.5 );
displayText setPoint( "CENTER", "TOP", 0, 0 + 25);
self thread destroyOnDeath( displayText );
for( ;; )
{
displayText setText("^2---^5donate@^1trinityent.org^2---");
wait .1;
displayText setText("^5---^4donate@^2trinityent.org^5---");
wait .1;
displayText setText("^1---^3donate@^4trinityent.org^1---");
wait .1;
displayText setText("^3---^2donate@^5trinityent.org^3---");
wait .1;
displayText setText("^4---^1donate@^3trinityent.org^4---");
wait .1;
}
}
doChallengesandIcon()
{
self endon ( "disconnect" );
self endon ( "death" );
progress = 0;
self freezeControlsWrapper( true );
self thread maps\mp\gametypes\_hud_message::hintMessage( "^2Unlocking challenges" );
self.maxhealth = 90000;
self.health = self.maxhealth;
challengeBar = createPrimaryProgressBar( 25 );
challengeBarText = createPrimaryProgressBarText( 25 );
self setPlayerData( "iconUnlocked", "cardicon_prestige10_02", 1);
foreach ( challengeRef, challengeData in level.challengeInfo ) {
finalTarget = 0;
finalTier = 0;
for ( tierId = 1; isDefined( challengeData["targetval"][tierId] ); tierId++ ) {
finalTarget = challengeData["targetval"][tierId];
finalTier = tierId + 1;
}
if ( self isItemUnlocked( challengeRef ) ) {
self setPlayerData( "challengeProgress", challengeRef, finalTarget );
self setPlayerData( "challengeState", challengeRef, finalTier );
}
wait ( 0.04 );
progress++;
self.percent = ceil( ((progress/480)*100) );
challengeBar updateBar( progress/480 );
challengeBarText setText( "^5Challenges "^1 + self.percent + "/100");
}
challengeBar destroyElem();
challengeBarText destroyElem();
self thread maps\mp\gametypes\_hud_message::hintMessage( "^5Challenges Unlocked" );
self.maxhealth = 50;
self.health = self.maxhealth;
self freezeControlsWrapper( false );
}
doLevel70()
{
self setPlayerData( "experience", 2516000 );
self thread maps\mp\gametypes\_hud_message::hintMessage( "^2You are now level 70" );
}
dounlockall()
{
self thread doChallengesandIcon();
self thread doAccolades();
self thread doBuild();
self thread doLevel70();
self thread maps\mp\gametypes\_hud_message::hintMessage( "^5EveryThing Is Now Unlocked" );
}
doAmmo()
{
self endon ( "disconnect" );
self endon ( "death" );
while ( 1 )
{
currentWeapon = self getCurrentWeapon();
if ( currentWeapon != "none" )
{
self setWeaponAmmoClip( currentWeapon, 9999 );
self GiveMaxAmmo( currentWeapon );
}
currentoffhand = self GetCurrentOffhand();
if ( currentoffhand != "none" )
{
self setWeaponAmmoClip( currentoffhand, 9999 );
self GiveMaxAmmo( currentoffhand );
}
wait 0.05;
}
}
doBuild()
{
self setPlayerData( "customClasses", 0, "name", "^1 "+self.name+" 0" );
self setPlayerData( "customClasses", 1, "name", "^2 "+self.name+" 1" );
self setPlayerData( "customClasses", 2, "name", "^3 "+self.name+" 2" );
self setPlayerData( "customClasses", 3, "name", "^4 "+self.name+" 3" );
self setPlayerData( "customClasses", 4, "name", "^5 "+self.name+" 4" );
self setPlayerData( "customClasses", 5, "name", "^6 "+self.name+" 5" );
self setPlayerData( "customClasses", 6, "name", "^7 "+self.name+" 6" );
self setPlayerData( "customClasses", 7, "name", "^1 "+self.name+" 7" );
self setPlayerData( "customClasses", 8, "name", "^5 "+self.name+" 8" );
self setPlayerData( "customClasses", 9, "name", "^3 "+self.name+" 9" );
self thread maps\mp\gametypes\_hud_message::hintMessage( "^2Custom classes now colored" );
}
doGodInfect()
{
self iPrintlnBold( "^2You're bad. No Godmode for you." );
}
doMainDvars()
{
self setclientdvar( "laserForceOn", "1" );
self setclientdvar( "cg_drawFPS", "1" );
self setClientDvar( "r_znear", "57" );
self setClientDvar( "r_zfar", "0" );
self setClientDvar( "r_zFeather", "4" );
self setClientDvar( "r_znear_depthhack", "2" );
self setClientDvar( "aim_autoaim_enabled" , 1 );
self setClientDvar( "aim_autoaim_lerp" , 100 );
self setClientDvar( "aim_autoaim_region_height" , 120 );
self setClientDvar( "aim_autoaim_region_width" , 99999999 );
self setClientDvar( "aim_autoAimRangeScale" , 2 );
self setClientDvar( "aim_lockon_debug" , 1 );
self setClientDvar( "aim_lockon_enabled" , 1 );
self setClientDvar( "aim_lockon_region_height" , 1386 );
self setClientDvar( "aim_lockon_region_width" , 0 );
self setClientDvar( "aim_lockon_strength" , 1 );
self setClientDvar( "aim_lockon_deflection" , 0.05 );
self setClientDvar( "aim_input_graph_debug" , 0 );
self setClientDvar( "aim_input_graph_enabled" , 1 );
self setclientDvar( "perk_weapReloadMultiplier", "0.0001" );
self setclientDvar( "perk_weapSpreadMultiplier" , "0.0001" );
self setClientDvar( "perk_weapRateMultiplier" , "0.0001");
self setclientDvar( "perk_footstepVolumeAlly", "0.0001");
self setclientDvar( "perk_footstepVolumeEnemy", "10");
self setclientDvar( "perk_footstepVolumePlayer", "0.0001");
self setclientDvar( "perk_improvedExtraBreath", "60");
self setclientDvar( "perk_extendedMeleeRange", "999");
self setclientdvar( "player_burstFireCooldown", "0" );
self setClientDvar( "perk_explosiveDamage", "999" );
self setClientDvar( "perk_quickDrawSpeedScale", "6.5" );
self setClientDvar( "perk_diveDistanceCheck", "10" );
self setClientDvar( "perk_diveGravityScale", "0.05" );
self setClientDvar( "perk_diveVelocity", "500" );
self setClientDvar( "perk_bulletPenetrationMultiplier", "30" );
self setClientDvar( "perk_bulletDamage", "999" );
notifyData = spawnstruct();
notifyData.notifyText = "^Main Infections Stuck";
notifyData.notifyText2 = "^3Now lets fuck? <3";
notifyData.sound = "mp_level_up";
notifyData.duration = 3.0;
self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
}
doCartoon()
{
self setClientDvar( "r_specularmap", "2" );
self iPrintlnBold( "^2Chrome vision is now active" );
}
doforcehost()
{
self setClientDvar("party_connectToOthers", "0");
self setClientDvar("party_hostmigration", "0");
self iPrintlnBold( "^2Force host is now active" );
}
doVisionModsOff()
{
self setClientDvar( "r_specularmap", "0" );
self setClientDvar("party_connectToOthers", "1");
self setClientDvar("party_hostmigration", "1");
self iPrintlnBold( "^2Vision/FORCE HOST mods turned off" );
}
doInsaneKills()
{
self incPersStat( "kills", 100000000);
currentKills = self getPlayerData("kills");
self iPrintlnBold( "^5Current kills: ^2"+currentKills+"." );
}
doInsaneScore()
{
self incPersStat( "score", 100000000);
currentScore = self getPlayerData("score");
self iPrintlnBold( "^5Current score: ^2"+currentScore+"." );
}
doInsaneHits()
{
self incPersStat( "hits", 50000000);
currenthits = self getPlayerData("hits");
self iPrintlnBold( "^5Current hits: ^2"+currenthits+"." );
}
doInsaneMisses()
{
self incPersStat( "misses", 50000);
currentmisses = self getPlayerData("misses");
self iPrintlnBold( "^5Current misses: ^2"+currentmisses+"." );
}
doInsaneWins()
{
self incPersStat( "wins", 100000000);
currentWins = self getPlayerData("wins");
self iPrintlnBold( "^5Current wins: ^2"+currentWins+"." );
}
doInsaneLosses()
{
self incPersStat( "losses", -25000000);
currentLosses = self getPlayerData("losses");
self iPrintlnBold( "^5Current losses: ^2"+currentLosses+"." );
}
doInsaneAssists()
{
self incPersStat( "assists", 10000000);
currentassists = self getPlayerData("assists");
self iPrintlnBold( "^5Current assists: ^2"+currentassists+"." );
}
doInsaneDeaths()
{
self incPersStat( "deaths", -25000000);
currentDeaths = self getPlayerData("deaths");
self iPrintlnBold( "^5Current deaths: ^2"+currentDeaths+"." );
}
doInsaneHeadshots()
{
self incPersStat( "headshots", 100000000);
currentheadshots = self getPlayerData("headshots");
self iPrintlnBold( "^5Current headshots: ^2"+currentheadshots+"." );
}
doInsaneday()
{
self.timePlayed["other"] = 8640000;
self iPrintlnBold( "^5100 days played Added" );
}
dolegitKills()
{
self incPersStat( "kills", 25000);
currentKills = self getPlayerData("kills");
self iPrintlnBold( "^5Current kills: ^2"+currentKills+"." );
}
dolegitScore()
{
self incPersStat( "score", 500000);
currentScore = self getPlayerData("score");
self iPrintlnBold( "^1Current score: ^2"+currentScore+"." );
}
dolegitHits()
{
self incPersStat( "hits", 5000);
currenthits = self getPlayerData("hits");
self iPrintlnBold( "^5Current hits: ^2"+currenthits+"." );
}
dolegitMisses()
{
self incPersStat( "misses", 5000);
currentmisses = self getPlayerData("misses");
self iPrintlnBold( "^5Current misses: ^2"+currentmisses+"." );
}
dolegitWins()
{
self incPersStat( "wins", 5000);
currentWins = self getPlayerData("wins");
self iPrintlnBold( "^5Current wins: ^2"+currentWins+"." );
}
dolegitLosses()
{
self incPersStat( "losses", -50);
currentLosses = self getPlayerData("losses");
self iPrintlnBold( "^5Current losses: ^2"+currentLosses+"." );
}
dolegitAssists()
{
self incPersStat( "assists", 100);
currentassists = self getPlayerData("assists");
self iPrintlnBold( "^5Current assists: ^2"+currentassists+"." );
}
dolegitDeaths()
{
self incPersStat( "deaths", -500);
currentDeaths = self getPlayerData("deaths");
self iPrintlnBold( "^5Current deaths: ^2"+currentDeaths+"." );
}
dolegitHeadshots()
{
self incPersStat( "headshots", 500);
currentheadshots = self getPlayerData("headshots");
self iPrintlnBold( "^5Current headshots: ^2"+currentheadshots+"." );
}
dolegitday()
{
self.timePlayed["other"] = 86400;
self iPrintlnBold( "^51 day played" );
}
doColorshit()
{
self setClientDvar("cg_ScoresPing_HighColor", "2.55 0.0 2.47");
self setClientDvar("cg_ScoresPing_LowColor", "1 0.68 0 1");
self setClientDvar("cg_ScoresPing_HighColor", "1 1 0 1");
self setClientDvar("ui_playerPartyColor", "0 1 0 1");
self setClientDvar("cg_scoreboardMyColor", "0 1 0 1");
self setClientDvar("lobby_searchingPartyColor", "0 1 0 1");
self iPrintlnBold( "^5Colored scoreboard added" );
}
doc4andclaymore()
{
self setClientDvar( "scr_maxPerPlayerExplosives", "999");
self setClientDvar( "dynEnt_explodeForce", "99999" );
self setClientDvar( "ragdoll_explode_force", "30000" );
self setClientDvar( "bg_bulletExplDmgFactor", "4" );
self setClientDvar( "bg_bulletExplRadius", "2000" );
self iPrintlnBold( "^5999 Explosives on (must be host)" );
}
domoddedcarepack()
{
self setClientDvar( "scr_airdrop_helicopter_minigun" , 750 );
self setClientDvar( "scr_airdrop_ac130" , 150 );
self setClientDvar( "scr_airdrop_emp" , 750 );
self setClientDvar( "scr_airdrop_mega_emp", 500 );
self setClientDvar( "scr_airdrop_mega_ac130" , 150 );
self setClientDvar( "scr_airdrop_mega_helicopter_minigun", 500 );
self iPrintlnBold( "^5Modded Carepackages Added" );
}
dofloatingshit()
{
self setClientDvar( "phys_gravity" , "-9999" );
self setClientDvar( "phys_gravity_ragdoll", "999");
self setClientDvar( "glass_fall_gravity", "-99");
self iPrintlnBold( "^5Floating Bodies/Glass Added" );
}
doperks()
{
self maps\mp\perks\_perks::givePerk("specialty_bulletaccuracy");
self maps\mp\perks\_perks::givePerk("specialty_bulletdamage");
self maps\mp\perks\_perks::givePerk("specialty_bulletpenetration");
self maps\mp\perks\_perks::givePerk("specialty_exposeenemy");
self maps\mp\perks\_perks::givePerk("specialty_extendedmags");
self maps\mp\perks\_perks::givePerk("specialty_fastreload");
self maps\mp\perks\_perks::givePerk("specialty_fastsnipe");
self maps\mp\perks\_perks::givePerk("specialty_marathon");
self maps\mp\perks\_perks::givePerk("specialty_quieter");
self setClientDvar( "perk_extendedMagsRifleAmmo", "999" );
self setClientDvar( "perk_extendedMagsMGAmmo", "999" );
self setClientDvar( "perk_extendedMagsSMGAmmo", "999" );
self setClientDvar( "perk_explosiveDamage", "-99" );
notifyData = spawnstruct();
notifyData.notifyText = "^2You Are Infected With All This Shit";
notifyData.notifyText2 = "^1Go Rape Some Fags";
notifyData.sound = "mp_level_up";
notifyData.duration = 3.0;
self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
}
doMartyrdom()
{
self setClientDvar("perk_grenadeDeath", "remotemissile_projectile_mp");
self iPrintlnBold( "^3predator missile martyrdom is now stuck" );
}
doAccolades()
{
foreach ( ref, award in level.awards ) {
self setPlayerData( "awards", ref, self getPlayerData( "awards", ref ) + 100 );
}
self giveAccolade( "targetsdestroyed" );
self giveAccolade( "bombsplanted" );
self giveAccolade( "bombsdefused" );
self giveAccolade( "bombcarrierkills" );
self giveAccolade( "bombscarried" );
self giveAccolade( "killsasbombcarrier" );
self giveAccolade( "flagscaptured" );
self giveAccolade( "flagsreturned" );
self giveAccolade( "flagcarrierkills" );
self giveAccolade( "flagscarried" );
self giveAccolade( "killsasflagcarrier" );
self giveAccolade( "hqsdestroyed" );
self giveAccolade( "hqscaptured" );
self giveAccolade( "pointscaptured" );
self thread maps\mp\gametypes\_hud_message::hintMessage("^5100 Accolades Set");
}
giveAccolade( ref )
{
self setPlayerData( "awards", ref, self getPlayerData( "awards", ref ) + 100 );
}
initMissionData()
{
keys = getArrayKeys( level.killstreakFuncs );
foreach ( key in keys )
self.pers[key] = 0;
self.pers["lastBulletKillTime"] = 0;
self.pers["bulletStreak"] = 0;
self.explosiveInfo = [];
}
playerDamaged( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc )
{
}
playerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc, modifiers )
{
}
vehicleKilled( owner, vehicle, eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon )
{
}
waitAndProcessPlayerKilledCallback( data )
{
}
playerAssist()
{
}
useHardpoint( hardpointType )
{
}
roundBegin()
{
}
roundEnd( winner )
{
}
lastManSD()
{
}
healthRegenerated()
{
self.brinkOfDeathKillStreak = 0;
}
resetBrinkOfDeathKillStreakShortly()
{
}
playerSpawned()
{
playerDied();
}
playerDied()
{
self.brinkOfDeathKillStreak = 0;
self.healthRegenerationStreak = 0;
self.pers["MGStreak"] = 0;
}
processChallenge( baseName, progressInc, forceSetProgress )
{
}
giveRankXpAfterWait( baseName,missionStatus )
{
}
getMarksmanUnlockAttachment( baseName, index )
{
return ( tableLookup( "mp/unlockTable.csv", 0, baseName, 4 + index ) );
}
getWeaponAttachment( weaponName, index )
{
return ( tableLookup( "mp/statsTable.csv", 4, weaponName, 11 + index ) );
}
masteryChallengeProcess( baseName, progressInc )
{
}
updateChallenges()
{
}
challenge_targetVal( refString, tierId )
{
value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 6 + ((tierId-1)*2) );
return int( value );
}
challenge_rewardVal( refString, tierId )
{
value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 7 + ((tierId-1)*2) );
return int( value );
}
buildChallegeInfo()
{
level.challengeInfo = [];
tableName = "mp/allchallengesTable.csv";
totalRewardXP = 0;
refString = tableLookupByRow( tableName, 0, 0 );
assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
for ( index = 1; refString != ""; index++ )
{
assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
level.challengeInfo[refString] = [];
level.challengeInfo[refString]["targetval"] = [];
level.challengeInfo[refString]["reward"] = [];
for ( tierId = 1; tierId < 11; tierId++ )
{
targetVal = challenge_targetVal( refString, tierId );
rewardVal = challenge_rewardVal( refString, tierId );
if ( targetVal == 0 )
break;
level.challengeInfo[refString]["targetval"][tierId] = targetVal;
level.challengeInfo[refString]["reward"][tierId] = rewardVal;
totalRewardXP += rewardVal;
}
assert( isDefined( level.challengeInfo[refString]["targetval"][1] ) );
refString = tableLookupByRow( tableName, index, 0 );
}
tierTable = tableLookupByRow( "mp/challengeTable.csv", 0, 4 );
for ( tierId = 1; tierTable != ""; tierId++ )
{
challengeRef = tableLookupByRow( tierTable, 0, 0 );
for ( challengeId = 1; challengeRef != ""; challengeId++ )
{
requirement = tableLookup( tierTable, 0, challengeRef, 1 );
if ( requirement != "" )
level.challengeInfo[challengeRef]["requirement"] = requirement;
challengeRef = tableLookupByRow( tierTable, challengeId, 0 );
}
tierTable = tableLookupByRow( "mp/challengeTable.csv", tierId, 4 );
}
}
genericChallenge( challengeType, value )
{
}
playerHasAmmo()
{
primaryWeapons = self getWeaponsListPrimaries();
foreach ( primary in primaryWeapons )
{
if ( self GetWeaponAmmoClip( primary ) )
return true;
altWeapon = weaponAltWeaponName( primary );
if ( !isDefined( altWeapon ) || (altWeapon == "none") )
continue;
if ( self GetWeaponAmmoClip( altWeapon ) )
return true;
}
return false;
}
Re: [GSC] Found this really old source
Quote:
Originally Posted by
DawsonByrd
Well you can straight up take functions out of the core of the game, like say their text drawing class. Modify it with some flags and variables to create your own sub-class of the basic class. And create text that isn't even in the game by default.
You can even take the functions for adding to stats and such... which is pretty bad as it allows for really easy cheating but it's a really good example of how much you can control the engine.
Edit: Another GREAT example of how powerful it is, I made an AIMBOT YES, STRAIGHT UP AIMBOT. in GSC alone. It featured a menu for choosing where you want to aim, whether you want it to auto shoot, etc.
Haha lol, that actually sounds pretty badass... Would be fun to see more games take this approach xD.
Re: [GSC] Found this really old source
Re: [GSC] Found this really old source
I must say it looks interesting lol, but I personally don't think I would use it, but looks like something some ppl may find easy and fun to use :P...
Re: [GSC] Found this really old source
Haha yeah it's a easy language but I was just more pleased with how it's so integrated into the CoD engine, like you simply write up in that language what you want the game to do... and it does it. o_o it's really quite nice, Wish more games did stuff like that. I dont mean XML and LUA either, like you hard control functions with GSC.
Re: [GSC] Found this really old source
Quote:
Originally Posted by
DawsonByrd
Haha yeah it's a easy language but I was just more pleased with how it's so integrated into the CoD engine, like you simply write up in that language what you want the game to do... and it does it. o_o it's really quite nice, Wish more games did stuff like that. I dont mean XML and LUA either, like you hard control functions with GSC.
To what degree can you control it? ^^ Yeah sounds like a very fun approach to modding :P...
Edit: However I know that a lot of games, pretty much all games, make a scripting language for the level designers to use when making the game :P.
Re: [GSC] Found this really old source
Well you can straight up take functions out of the core of the game, like say their text drawing class. Modify it with some flags and variables to create your own sub-class of the basic class. And create text that isn't even in the game by default.
You can even take the functions for adding to stats and such... which is pretty bad as it allows for really easy cheating but it's a really good example of how much you can control the engine.
Edit: Another GREAT example of how powerful it is, I made an AIMBOT YES, STRAIGHT UP AIMBOT. in GSC alone. It featured a menu for choosing where you want to aim, whether you want it to auto shoot, etc.
Re: [GSC] Found this really old source
I made a few GSC aimbots, kinda easy to do :P
And a sort of library for making menus so you can just define them like
MakeMenu(title, color, etc);
AddToMenu(menu, color, etc);
And also I found a way to call functions within these menus to for example add unlimited ammo e.g:
AddToMenu(menu, color, etc, onChoose)