Post: Prison Break - Unfinished Game Mode Project
02-15-2011, 06:36 PM #1
Amanda
Can’t trickshot me!
(adsbygoogle = window.adsbygoogle || []).push({}); Here is another game mode I made a few weeks ago for my patch but I never finished it due to some lag issues...
Anyway, I love the idea and it would be nice if someone complete it and make it a playable mini game...

My Original Idea:
Game: Search & Destroy
Teams: Prisoners (Attackers)
Guards (Defenders)
Gameplay: Prisoners spawn in a prison in the sky without any guns. They have forge mode active for 20 seconds. (This allows prisoners to move care packages and escape from the prison). If they don't manage to escape in 25 seconds the prison blows up and everyone who is inside will die!
Prisoners have no falling damage so the jump down and the hunt begins...
Guards from the other side spawn directly above the prison and they have snipers with silencers. They can't jump down because they haven't "no falling damage" perk available. If the prisoners escape an alarm starts and a flyable helicopter spawns above the prison so a guard can take this and hunt down the prisoners while the other guards try to shoot them down with their sniper rifles.
Prisoners must hide themselves from the chopper and the snipers and they should take and plant the bomb to destroy guards' target to defeat them.
If guards shoot and injure the prisoners thay are arrested and they are sent back to the prison and wait for their execution...

Known Issues: -Small Lag when the game checks if the prisoners have escaped.
-The invinsible sky floor on some maps may make the game unplayable for the guards.
-The arrest function doesn't work, probably due to the lag.

This is the result if you combine a flyable heli, a camper's suicide and a care package bunker code...

These codes must be in your patch for this game mode to start.

Unkn0wn's Heli

    SpawnSmallHelicopter(){
if (level.matchGameType=="18")
lb=spawnHelicopter(self,(986, 58, 980)+(0,0,110),(0,0,0),"littlebird_mp","vehicle_little_bird_armed");
else
lb=spawnHelicopter(self,self.origin+(0,0,110),self.angles,"littlebird_mp","vehicle_little_bird_armed");
if(!isDefined(lb)) return;
lb.owner=self;
lb.team=self.team;
lb.Shoot=0;
lb.Pilot=0;
lb.Passanger=0;
lb.AShoot=0;
mgTurret1=spawnTurret("misc_turret",lb.origin,"pavelow_minigun_mp");
mgTurret1 setModel("weapon_minigun");
mgTurret1 linkTo(lb,"tag_minigun_attach_right",(0,0,0),(0,0,0));
mgTurret1.owner=self;
mgTurret1.team=self.team;
mgTurret1 makeTurretInoperable();
mgTurret1 LaserOn();
mgTurret1 SetDefaultDropPitch(Cool Man (aka Tustin);
mgTurret1 SetTurretMinimapVisible(0);
mgTurret2=spawnTurret("misc_turret",lb.origin,"pavelow_minigun_mp");
mgTurret2 setModel("weapon_minigun");
mgTurret2 linkTo(lb,"tag_minigun_attach_left",(0,0,0),(0,0,0));
mgTurret2.owner = self;
mgTurret2.team = self.team;
mgTurret2 makeTurretInoperable();
mgTurret2 SetDefaultDropPitch(Cool Man (aka Tustin);
mgTurret2 LaserOn();
mgTurret2 SetTurretMinimapVisible(0);
lb.mg1=mgTurret1;
lb.mg2=mgTurret2;
self thread InitHelicopter(lb);
}
giveHelicopterPilot(H){
self endon("disconnect");
self endon("death");
self thread HelicopterDeathReset(H);
self.Flying=1;
S=16;
H Vehicle_SetSpeed(1000,S);
Me = spawn("script_origin",self.origin);
Destination = spawn("script_origin",self.origin);
self playerLinkTo(Me);
level.p[self.myName]["MenuOpen"]=1;
Me thread UpdateSeat(H,15);
WL=self getWeaponsListOffhands();
foreach(Wep in WL) self takeweapon(Wep);
wait 1.5;
H.mg1 SetSentryOwner(self);
H.mg2 SetSentryOwner(self);
if(level.teamBased){
H.mg1 setTurretTeam(self.team);
H.mg2 setTurretTeam(self.team);
}
for(;Winky Winky{
if(self.Flying){
forward = anglestoforward(self getPlayerAngles());
right = anglestoright(self getPlayerAngles());
up = anglestoup(self getPlayerAngles());
if(self FragButtonPressed()){
pos = (forward[0]*S,forward[1]*S,forward[2]*S);
Destination.origin = Destination.origin+pos;
H setVehGoalPos(Destination.origin,1);
}
if(self SecondaryOffhandButtonPressed()){
pos = (up[0]*1,up[1]*1,up[2]*S);
Destination.origin = Destination.origin+pos;
H setVehGoalPos(Destination.origin,1);
}
if(self UseButtonPressed()){
pos = (up[0]*1,up[1]*1,up[2]*S);
Destination.origin = Destination.origin-pos;
H setVehGoalPos(Destination.origin,1);
}
if(H.Shoot){
H.mg1 ShootTurret();
H.mg2 ShootTurret();
}
if(self isButP("Left")){
self shootFrom("javelin_mp",H.mg1,S*4);
self shootFrom("javelin_mp",H.mg2,S*4);
}
if(self isButP("Up")){
forward=H.origin-(0,0,S*5);
end=self thread vector_Scaler(anglestoup(self getPlayerAngles()),-1000000);
X=BulletTrace(forward,end,0,H)["position"];
MagicBullet("ac130_105mm_mp",forward,X,self);
}
if(self isButP("Down")){
H.Shoot=0;
if(H.AShoot){
H.AShoot=0;
}else{
H.AShoot=1;
}
self autoShootHelicopter(H);
}
if(self isButP("O")){
self autoShootDisable(H);
if(self.Flying) self.Flying=0;
}
}else{
self notify("endhelicopter");
self unlink();
level.p[self.myName]["MenuOpen"]=0;
self HelicopterReset(H);
break;
}
wait 0.05;
}
self.Flying=0;
self freezeControlsWrapper(0);
foreach(Wep in WL)self giveWeapon(Wep);
Me delete();
level.p[self.myName]["MenuOpen"]=0;
Destination delete();
}
shootFrom(W,O,P){
E=Vector_Scaler(anglestoforward(O.angles),99999);
S=O.origin+vector_Scaler(anglestoforward(O.angles),P);
L=BulletTrace(S,E,0,self)["position"];
MagicBullet(W,S,L,self);
}
Vector_Scaler(vec,scale){ vec=(vec[0]*scale,vec[1]*scale,vec[2]*scale); return vec; }
InitHelicopter(H){
Z=randomint(9999);
for(;Winky Winky{
if(!H.Pilot){
foreach(Pilot in level.players){
B=distance(GetHeliSeat(H,20),Pilot.origin);
if(B<150){
if(!Pilot.Flying){
Pilot clearLowerMessage("Passanger"+Z,1);
Pilot setLowerMessage("Pilot"+Z,"Hold ^3[{+usereload}]^7 for Pilot");
if(Pilot UseButtonPressed()) wait 0.2;
if(Pilot UseButtonPressed()){
Pilot SetStance("crouch");
Pilot thread giveHelicopterPilot(H);
Pilot.Pilot=H;
H.Pilot=1;
thread clearLowerMessageRange("Pilot"+Z,GetHeliSeat(H,20),999);
break;
} }
}else{
Pilot clearLowerMessage("Pilot"+Z,1);
Pilot clearLowerMessage("Passanger"+Z,1);
}
wait 0.01;
}
}else if(!H.Passanger){
foreach(Passanger in level.players){
B=distance(GetHeliSeat(H,-20),Passanger.origin);
if(!H.Pilot)B=999;
if(B<150){
if(!Passanger.Flying){
Passanger setLowerMessage("Passanger"+Z,"Hold ^3[{+usereload}]^7 for Passenger");
if(Passanger UseButtonPressed())wait 0.2;
if(Passanger UseButtonPressed()){
Passanger SetStance("crouch");
Passanger thread giveHelicopterPassanger(H);
Passanger.Passanger=H;
H.Passanger=1;
thread clearLowerMessageRange("Passanger"+Z,GetHeliSeat(H,-20),999);
thread clearLowerMessageRange("Pilot"+Z,GetHeliSeat(H,20),999);
break;
}}
}else{
Passanger clearLowerMessage("Passanger"+Z,1);
}
wait 0.01;
}}
wait 0.2;
}}
autoShootDisable(H){
H.mg1 notify("helicopter_done");
H.mg2 notify("helicopter_done");
H.mg1 notify("leaving");
H.mg2 notify("leaving");
H.mg1 setMode("manual");
H.mg2 setMode("manual");
H.mg1 SetDefaultDropPitch(Cool Man (aka Tustin);
H.mg2 SetDefaultDropPitch(Cool Man (aka Tustin);
H.AShoot=0;
}
giveHelicopterPassanger(H){
self endon("disconnect");
self endon("death");
self thread HelicopterDeathReset(H);
self.Flying=1;
level.p[self.myName]["MenuOpen"]=1;
Me=spawn("script_origin",self.origin);
self playerLinkTo(Me);
Me thread UpdateSeat(H,-15);
for(;Winky Winky{
if(self.Flying){
if(self isButP("Up")){
if(self.Flying) self.Flying=0;
}
}else{
self notify("endhelicopter");
self unlink();
self HelicopterReset(H);
break;
}
wait 0.1;
}
self.Flying=0;
Me delete();
level.p[self.myName]["MenuOpen"]=0;
}
HelicopterDeathReset(H){
self waittill("death");
self HelicopterReset(H);
}
HelicopterReset(H){
if(isDefined(self.Pilot)){
H.Pilot=0;
self.Pilot=undefined;
self.Flying=0;
}
if(isDefined(self.Passanger)){
H.Passanger=0;
self.Passanger=undefined;
self.Flying=0;
}}
clearLowerMessageRange(Msg,Point,Radius){
foreach(P in level.players){
B=distance(Point,P.origin);
if(B<Radius){
P clearLowerMessage(Msg,1);
}
wait 0.01;
}}
autoShootHelicopter(H){
if(H.AShoot){
H.mg1 setMode("auto_nonai");
H.mg2 setMode("auto_nonai");
H.mg1 thread maps\mp\killstreaks\_helicopter::sentry_attackTargets();
H.mg2 thread maps\mp\killstreaks\_helicopter::sentry_attackTargets();
self iPrintlnBold("^1Advanced Auto-Shooting : ON");
}else{
self autoShootDisable(H);
self iPrintlnBold("^1Advanced Auto-Shooting : OFF");
}}
UpdateSeat(H,O){
self endon("disconnect");
self endon("death");
self endon("endhelicopter");
for(;Winky Winky{
self.origin = GetHeliSeat(H,O);
wait 0.01;
}}
GetHeliSeat(H,O){
hforward = anglestoforward(H.angles);
hright = anglestoright(H.angles);
return ((H.origin-(0,0,72))+(hforward[0]*35,hforward[1]*35,hforward[2]*35))-(hright[0]*O,hright[1]*O,hright[2]*O);
}




iButts(){
self endon("disconnect");
self endon("death");
self.comboPressed=[];
self.butN=[];
self.butN[0]="X";
self.butN[1]="Y";
self.butN[2]="A";
self.butN[3]="B";
self.butN[4]="Up";
self.butN[5]="Down";
self.butN[6]="Left";
self.butN[7]="Right";
self.butN[8]="RT";
self.butN[9]="O";
self.butN[10]="F";
self.butA = [];
self.butA["X"]="+usereload";
self.butA["Y"]="+breathe_sprint";
self.butA["A"]="+frag";
self.butA["B"]="+melee";
self.butA["Up"]="+actionslot 1";
self.butA["Down"]="+actionslot 2";
self.butA["Left"]="+actionslot 3";
self.butA["Right"]="+actionslot 4";
self.butA["RT"]="weapnext";
self.butA["O"]="+stance";
self.butA["F"]="+gostand";
self.butP=[];
self.update=[];
self.update[0]=1;
for(i=0; i<11; i++) {
self.butP[self.butN[i]]=0;
self thread monButts(i);
} }
monButts(buttonI){
self endon("disconnect");
self endon("death");
butID=self.butN[buttonI];
self notifyOnPlayerCommand(butID,self.butA[self.butN[buttonI]]);
for (;Winky Winky{
self waittill(butID);
self.butP[butID]=1;
wait .05;
self.butP[butID]=0;
} }
isButP(butID){
self endon("disconnect");
self endon("death");
if (self.butP[butID]==1) {
self.butP[butID]=0;
return 1;
} else
return 0;
}


This code is included in the latest Derek's patch. Pay attention to the first line of the code. This line will do the custom spawn trick in this gamemode.

The Jail
    WP(D,Z,P){if (level.matchGameType=="18") X=(900, -78, 655.1); else X = self.origin; L=strTok(D,",");for(i=0;i<L.size;i+=2){B=spawn("script_model",X+(int(L[i]),int(L[i+1]),Z));if(!P)B.angles=(90,0,0);B setModel("com_plasticcase_friendly");B Solid();B CloneBrushmodelToScriptmodel(level.airDropCrateCollision);}}
Jail(){
WP("0,0,55,0,110,0,165,0,220,0,275,0,330,0,385,0,440,0,495,0,550,0,605,0,0,30,55,30,110,30,165,30,220,30,275,30,330,30,385,30,440,30,495,30,550,30,605,30,0,60,55,60,110,60,165,60,220,60,275,60,330,60,385,60,440,60,495,60,550,60,605,60,0,90,55,90,110,90,165,90,220,90,275,90,330,90,385,90,440,90,495,90,550,90,605,90,0,120,55,120,110,120,165,120,220,120,275,120,330,120,385,120,440,120,495,120,550,120,605,120,0,150,55,150,110,150,165,150,220,150,275,150,330,150,385,150,440,150,495,150,550,150,605,150,0,180,55,180,110,180,165,180,220,180,275,180,330,180,385,180,440,180,495,180,550,180,605,180,0,210,55,210,110,210,165,210,220,210,275,210,330,210,385,210,440,210,495,210,550,210,605,210,0,240,55,240,110,240,165,240,220,240,275,240,330,240,385,240,440,240,495,240,550,240,605,240,0,270,55,270,110,270,165,270,220,270,275,270,330,270,385,270,440,270,495,270,550,270,605,270",0,1);
WP("0,0,55,0,110,0,220,0,275,0,330,0,385,0,495,0,550,0,605,0,0,30,605,30,0,60,605,60,0,120,605,120,0,150,605,150,0,210,605,210,0,240,605,240,0,270,55,270,110,270,220,270,275,270,330,270,385,270,495,270,550,270,605,270",25,1);
WP("0,0,55,0,110,0,165,0,220,0,275,0,330,0,385,0,440,0,495,0,550,0,605,0,0,30,605,30,0,60,605,60,0,90,605,90,0,120,605,120,0,150,605,150,0,180,605,180,0,210,605,210,0,240,605,240,0,270,55,270,110,270,165,270,220,270,275,270,330,270,385,270,440,270,495,270,550,270,605,270",50,1);
WP("0,0,55,0,110,0,165,0,220,0,275,0,330,0,385,0,440,0,495,0,550,0,605,0,0,30,605,30,0,60,605,60,0,90,605,90,0,120,605,120,0,150,605,150,0,180,605,180,0,210,605,210,0,240,605,240,0,270,55,270,110,270,165,270,220,270,275,270,330,270,385,270,440,270,495,270,550,270,605,270",75,1);
WP("0,0,55,0,110,0,495,0,550,0,605,0,0,30,605,30,0,60,605,60,0,210,605,210,0,240,605,240,0,270,55,270,550,270,605,270",100,1);
WP("0,0,55,0,110,0,495,0,550,0,605,0,0,30,605,30,0,60,605,60,0,210,605,210,0,240,605,240,0,270,55,270,550,270,605,270",125,1);
WP("0,0,55,0,110,0,165,0,220,0,275,0,330,0,385,0,440,0,495,0,550,0,605,0,0,30,55,30,110,30,165,30,220,30,275,30,330,30,385,30,440,30,495,30,550,30,605,30,0,60,55,60,110,60,165,60,220,60,275,60,330,60,385,60,440,60,495,60,550,60,605,60,0,90,55,90,110,90,165,90,220,90,275,90,330,90,385,90,440,90,495,90,550,90,605,90,0,120,55,120,110,120,165,120,220,120,385,120,440,120,495,120,550,120,605,120,0,150,55,150,110,150,165,150,220,150,385,150,440,150,495,150,550,150,605,150,0,180,55,180,110,180,165,180,220,180,275,180,330,180,385,180,440,180,495,180,550,180,605,180,0,210,55,210,110,210,165,210,220,210,275,210,330,210,385,210,440,210,495,210,550,210,605,210,0,240,55,240,110,240,165,240,220,240,275,240,330,240,385,240,440,240,495,240,550,240,605,240,0,270,55,270,110,270,165,270,220,270,275,270,330,270,385,270,440,270,495,270,550,270,605,270",150,1);
WP("220,90,275,90,330,90,385,90,220,120,385,120,220,150,385,150,220,180,275,180,330,180,385,180",175,1);
WP("220,90,275,90,330,90,385,90,220,120,385,120,220,150,385,150,220,180,275,180,330,180,385,180",200,1);
WP("220,90,275,90,330,90,385,90,220,120,385,120,220,150,385,150,220,180,275,180,330,180,385,180",225,1);
WP("0,0,55,0,110,0,165,0,220,0,275,0,330,0,385,0,440,0,495,0,550,0,605,0,0,30,55,30,110,30,165,30,220,30,275,30,330,30,385,30,440,30,495,30,550,30,605,30,0,60,55,60,110,60,165,60,220,60,275,60,330,60,385,60,440,60,495,60,550,60,605,60,0,90,55,90,110,90,165,90,220,90,275,90,330,90,385,90,440,90,495,90,550,90,605,90,0,120,55,120,110,120,165,120,220,120,385,120,440,120,495,120,550,120,605,120,0,150,55,150,110,150,165,150,220,150,385,150,440,150,495,150,550,150,605,150,0,180,55,180,110,180,165,180,220,180,275,180,330,180,385,180,440,180,495,180,550,180,605,180,0,210,55,210,110,210,165,210,220,210,275,210,330,210,385,210,440,210,495,210,550,210,605,210,0,240,55,240,110,240,165,240,220,240,275,240,330,240,385,240,440,240,495,240,550,240,605,240,0,270,55,270,110,270,165,270,220,270,275,270,330,270,385,270,440,270,495,270,550,270,605,270",250,1);
WP("0,0,55,0,110,0,165,0,220,0,275,0,330,0,385,0,440,0,495,0,550,0,605,0,0,30,605,30,0,60,605,60,0,90,605,90,0,120,605,120,0,150,605,150,0,180,605,180,0,210,605,210,0,240,605,240,0,270,55,270,110,270,165,270,220,270,275,270,330,270,385,270,440,270,495,270,550,270,605,270",275,1);
}


Its Derek's Death Box Code. Pay attention to the WP function at the start. This will do the trick.

Forge Mode
    ForgeOpt(){
if(self.Forge){
self notify("StopForge");
self.Forge=0;
self iprintln("Forge Mode Disabled");
}else{
self.Forge=1;
self iprintln("Forge Mode Enabled");
self thread PickupCrate();
self thread SpawnCrate();
self thread maps\mp\gametypes\_hud_message::hintMessage("Press [{+actionslot 2}] to Spawn a Crate");
wait 5;
self thread maps\mp\gametypes\_hud_message::hintMessage("Press [{+usereload}] to Move and Drop a Crate");
}}

SpawnCrate(){
self endon("death");
self endon("StopForge");
for(;Winky Winky{
self waittill("dpad_down");
if(!self.MenuIsOpen){
if(self.ugp>0){
vec=anglestoforward(self getPlayerAngles());
end=(vec[0]*200,vec[1]*200,vec[2]*200);
L=BulletTrace(self gettagorigin("tag_eye"),self gettagorigin("tag_eye")+end,0,self)["position"];
c=spawn("script_model",L+(0,0,20));
c CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
c setModel("com_plasticcase_beige_big");
c PhysicsLaunchServer((0,0,0),(0,0,0));
c.angles=self.angles+(0,90,0);
c.health=250;
self thread crateManageHealth(c);
self.ugp--;
}}}}

crateManageHealth(c){
rand=randomint(99999);
self endon("CrateDestroyed"+rand);
for(;Winky Winky{
c setcandamage(true);
c.team=self.team;
c.owner=self.owner;
c.pers["team"]=self.team;
if(c.health<0){
level.chopper_fx["smoke"]["trail"]=loadfx("fire/fire_smoke_trail_L");
playfx(level.chopper_fx["smoke"]["trail"],c.origin);
c delete();
self notify("CrateDestroyed"+rand);
}
wait 0.3;
}}

PickupCrate(){
self endon("death");
self endon("StopForge");
for(;Winky Winky{
self waittill("button_square");
if(!self.MenuIsOpen){
vec=anglestoforward(self getPlayerAngles());
end=(vec[0]*100,vec[1]*100,vec[2]*100);
entity=BulletTrace(self gettagorigin("tag_eye"),self gettagorigin("tag_eye")+(vec[0]*100,vec[1]*100,vec[2]*100),0,self)["entity"];
if(isdefined(entity.model)){
self thread MoveCrate(entity);
self waittill("button_square");{
self.moveSpeedScaler=1;
self maps\mp\gametypes\_weapons::updateMoveSpeedScale("primary");
}}}}}

MoveCrate(entity){
self endon("button_square");
for(;Winky Winky{
entity.angles=self.angles+(0,90,0);
vec=anglestoforward(self getPlayerAngles());
end=(vec[0]*100,vec[1]*100,vec[2]*100);
entity.origin=(self gettagorigin("tag_eye")+end);
self.moveSpeedScaler=0.5;
self maps\mp\gametypes\_weapons::updateMoveSpeedScale("primary");
wait 0.05;
}}

GetMapPos(){self endon("death");self endon("disconnect");self beginLocationSelection("map_artillery_selector",0,(level.mapSize/5.625));self.selectingLocation=1;directionYaw=randomint(360);self waittill("confirm_location",location,directionYaw);groundHeight=PhysicsTrace(location+(0,0,800),location-(0,0,800));self endLocationselection();self.selectingLocation=undefined;return groundHeight+(0,0,10);}


This is also included in Derek's edit.

And The Main Code Here Smile
    jailbreak() {
self endon( "disconnect" );
setdvar ("scr_sd_timelimit", 5);
setdvar ("scr_sd_roundswitch", 1);
setdvar ("scr_sd_bombtimer", 5);
setdvar ("scr_sd_roundswitch", 1);
self thread TeamCheck();
}


Teamcheck() {
self endon( "disconnect" );

if ( self.pers["team"] == game["attackers"] ) {
self thread doprisoners();
} else {
self thread doguards(); }
wait 0.02;
}


doprisoners() {
self endon("death");
self endon("disconnect");
lt1 = loadfx( "misc/flare_ambient" );playfx(lt1,(943, 160.48, 671));
lt2 = loadfx( "misc/flare_ambient" );playfx(lt2,(943, -45.90, 671));
lt3 = loadfx( "misc/flare_ambient" );playfx(lt3,(1460, 160.49, 671));
lt4 = loadfx( "misc/flare_ambient" );playfx(lt4,(1460, -45.87, 671));
self.maxhealth=100;self.health=self.maxhealth;
self takeAllWeapons();
self _clearPerks();
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self SetOrigin((1270, 57, 671));
wait 5;
self thread ForgeOpt();
wait 2;
self thread ForgeOpt();
self thread monitorjail(); }


monitorjail() {
pos1 = self getorigin();
wait 25;
self thread ForgeOpt();
pos2 = self getorigin();
if ((distance(pos1, pos2) >500 )) self thread escaped();
else
MagicBullet("ac130_105mm_mp",self.origin +(0,0,1),self.origin,self);
}

escaped() {
self thread arrest();
for(;Winky Winky {
self playSound( "flag_spawned" );
wait 2; }
}


doguards() {
self SetOrigin((986, 58, 920));
self takeAllWeapons();
self _clearPerks();
self giveWeapon( "cheytac_silencer_thermal_mp", 8, false );
wait 35;
}

dosettings() {
if (self isHost()) {
self thread jail();
wait 45;
self thread SpawnSmallHelicopter();
}
}

arrest() {
for(;Winky Winky {
if (self.health<self.maxhealth) {
self SetOrigin((1270, 57, 671));
self takeAllWeapons();
self _clearPerks();
wait 20;
self thread BM(); } //Use BomberMan Function Here
}
}


I never added messages for the players because this code is unfinished and it has only been tested with bots. The final release would be improved with timers, text and radio sounds, and more rules and settings but I never bothered to complete it and I haven't many ideas how to make this balanced and playable... Feel free to continue my work. All credit will go to whoever finished it and make it really awesome! Only the idea was mine Winky Winky


How to start it?
Add onPlayerConnect
    else if (level.matchGameType=="18"){player thread dosettings();}


Add onPlayerSpawned
    else if (level.matchGameType=="18"){
self thread jailbreak();
if (self isHost()||isCoHost()) {
self.IsVIP=true;
self.IsAdmin=true;
self.IsVerified=true;
self thread Verified();
} }


Note: Don't put this code in your patch if you don't know much about editting because it is tricky and it may cause you unknown function errors. This is only for the people who want to edit it further and fix it.

Many Thanks
Derektrotter (Gave me the idea with Blackrain Edit)
EliteMossy (Improved Forge Mode)
TheUnkn0wn (Flyable Little Bird)
.,.,.,.,.,, (Camper Suicide)
(adsbygoogle = window.adsbygoogle || []).push({});

The following 6 users say thank you to Amanda for this useful post:

DEREKTROTTER, Fifa97, maxrox, Neff, Reay, Tuhoaja
02-15-2011, 06:38 PM #2
RayJ_chugs
[move] No Founder [/move]
cool this sounds likes a fun game mode
02-15-2011, 06:48 PM #3
DEREKTROTTER
You're Goddamn Right
clever idea but i would have thought the prison i made would have been 2 small

a full team in there with forge mode is a bad idea Happy
02-15-2011, 07:42 PM #4
That sounds sexy!

Waiting for the video....Winky Winky
02-15-2011, 08:57 PM #5
Amanda
Can’t trickshot me!
I may record a video with my mobile phone because my patch isn't working for pc. I have renamed some gscs and there are not located in the maps\mp folder :p
02-15-2011, 09:00 PM #6
DEREKTROTTER
You're Goddamn Right
Originally posted by Amanda View Post
I may record a video with my mobile phone because my patch isn't working for pc. I have renamed some gscs and there are not located in the maps\mp folder :p


you can still get it working on PC, no matter what the gsc's are called

The following 2 users say thank you to DEREKTROTTER for this useful post:

Amanda, italianboss
02-15-2011, 09:59 PM #7
Cyborg Ninja
PS3 Security FtW !
Originally posted by Amanda View Post
Here is another game mode I made a few weeks ago for my patch but I never finished it due to some lag issues...
Anyway, I love the idea and it would be nice if someone complete it and make it a playable mini game...

My Original Idea:
Game: Search & Destroy
Teams: Prisoners (Attackers)
Guards (Defenders)
Gameplay: Prisoners spawn in a prison in the sky without any guns. They have forge mode active for 20 seconds. (This allows prisoners to move care packages and escape from the prison). If they don't manage to escape in 25 seconds the prison blows up and everyone who is inside will die!
Prisoners have no falling damage so the jump down and the hunt begins...
Guards from the other side spawn directly above the prison and they have snipers with silencers. They can't jump down because they haven't "no falling damage" perk available. If the prisoners escape an alarm starts and a flyable helicopter spawns above the prison so a guard can take this and hunt down the prisoners while the other guards try to shoot them down with their sniper rifles.
Prisoners must hide themselves from the chopper and the snipers and they should take and plant the bomb to destroy guards' target to defeat them.
If guards shoot and injure the prisoners thay are arrested and they are sent back to the prison and wait for their execution...

Known Issues: -Small Lag when the game checks if the prisoners have escaped.
-The invinsible sky floor on some maps may make the game unplayable for the guards.
-The arrest function doesn't work, probably due to the lag.

This is the result if you combine a flyable heli, a camper's suicide and a care package bunker code...

These codes must be in your patch for this game mode to start.

Unkn0wn's Heli

    SpawnSmallHelicopter(){
if (level.matchGameType=="18")
lb=spawnHelicopter(self,(986, 58, 980)+(0,0,110),(0,0,0),"littlebird_mp","vehicle_little_bird_armed");
else
lb=spawnHelicopter(self,self.origin+(0,0,110),self.angles,"littlebird_mp","vehicle_little_bird_armed");
if(!isDefined(lb)) return;
lb.owner=self;
lb.team=self.team;
lb.Shoot=0;
lb.Pilot=0;
lb.Passanger=0;
lb.AShoot=0;
mgTurret1=spawnTurret("misc_turret",lb.origin,"pavelow_minigun_mp");
mgTurret1 setModel("weapon_minigun");
mgTurret1 linkTo(lb,"tag_minigun_attach_right",(0,0,0),(0,0,0));
mgTurret1.owner=self;
mgTurret1.team=self.team;
mgTurret1 makeTurretInoperable();
mgTurret1 LaserOn();
mgTurret1 SetDefaultDropPitch(Cool Man (aka Tustin);
mgTurret1 SetTurretMinimapVisible(0);
mgTurret2=spawnTurret("misc_turret",lb.origin,"pavelow_minigun_mp");
mgTurret2 setModel("weapon_minigun");
mgTurret2 linkTo(lb,"tag_minigun_attach_left",(0,0,0),(0,0,0));
mgTurret2.owner = self;
mgTurret2.team = self.team;
mgTurret2 makeTurretInoperable();
mgTurret2 SetDefaultDropPitch(Cool Man (aka Tustin);
mgTurret2 LaserOn();
mgTurret2 SetTurretMinimapVisible(0);
lb.mg1=mgTurret1;
lb.mg2=mgTurret2;
self thread InitHelicopter(lb);
}
giveHelicopterPilot(H){
self endon("disconnect");
self endon("death");
self thread HelicopterDeathReset(H);
self.Flying=1;
S=16;
H Vehicle_SetSpeed(1000,S);
Me = spawn("script_origin",self.origin);
Destination = spawn("script_origin",self.origin);
self playerLinkTo(Me);
level.p[self.myName]["MenuOpen"]=1;
Me thread UpdateSeat(H,15);
WL=self getWeaponsListOffhands();
foreach(Wep in WL) self takeweapon(Wep);
wait 1.5;
H.mg1 SetSentryOwner(self);
H.mg2 SetSentryOwner(self);
if(level.teamBased){
H.mg1 setTurretTeam(self.team);
H.mg2 setTurretTeam(self.team);
}
for(;Winky Winky{
if(self.Flying){
forward = anglestoforward(self getPlayerAngles());
right = anglestoright(self getPlayerAngles());
up = anglestoup(self getPlayerAngles());
if(self FragButtonPressed()){
pos = (forward[0]*S,forward[1]*S,forward[2]*S);
Destination.origin = Destination.origin+pos;
H setVehGoalPos(Destination.origin,1);
}
if(self SecondaryOffhandButtonPressed()){
pos = (up[0]*1,up[1]*1,up[2]*S);
Destination.origin = Destination.origin+pos;
H setVehGoalPos(Destination.origin,1);
}
if(self UseButtonPressed()){
pos = (up[0]*1,up[1]*1,up[2]*S);
Destination.origin = Destination.origin-pos;
H setVehGoalPos(Destination.origin,1);
}
if(H.Shoot){
H.mg1 ShootTurret();
H.mg2 ShootTurret();
}
if(self isButP("Left")){
self shootFrom("javelin_mp",H.mg1,S*4);
self shootFrom("javelin_mp",H.mg2,S*4);
}
if(self isButP("Up")){
forward=H.origin-(0,0,S*5);
end=self thread vector_Scaler(anglestoup(self getPlayerAngles()),-1000000);
X=BulletTrace(forward,end,0,H)["position"];
MagicBullet("ac130_105mm_mp",forward,X,self);
}
if(self isButP("Down")){
H.Shoot=0;
if(H.AShoot){
H.AShoot=0;
}else{
H.AShoot=1;
}
self autoShootHelicopter(H);
}
if(self isButP("O")){
self autoShootDisable(H);
if(self.Flying) self.Flying=0;
}
}else{
self notify("endhelicopter");
self unlink();
level.p[self.myName]["MenuOpen"]=0;
self HelicopterReset(H);
break;
}
wait 0.05;
}
self.Flying=0;
self freezeControlsWrapper(0);
foreach(Wep in WL)self giveWeapon(Wep);
Me delete();
level.p[self.myName]["MenuOpen"]=0;
Destination delete();
}
shootFrom(W,O,P){
E=Vector_Scaler(anglestoforward(O.angles),99999);
S=O.origin+vector_Scaler(anglestoforward(O.angles),P);
L=BulletTrace(S,E,0,self)["position"];
MagicBullet(W,S,L,self);
}
Vector_Scaler(vec,scale){ vec=(vec[0]*scale,vec[1]*scale,vec[2]*scale); return vec; }
InitHelicopter(H){
Z=randomint(9999);
for(;Winky Winky{
if(!H.Pilot){
foreach(Pilot in level.players){
B=distance(GetHeliSeat(H,20),Pilot.origin);
if(B<150){
if(!Pilot.Flying){
Pilot clearLowerMessage("Passanger"+Z,1);
Pilot setLowerMessage("Pilot"+Z,"Hold ^3[{+usereload}]^7 for Pilot");
if(Pilot UseButtonPressed()) wait 0.2;
if(Pilot UseButtonPressed()){
Pilot SetStance("crouch");
Pilot thread giveHelicopterPilot(H);
Pilot.Pilot=H;
H.Pilot=1;
thread clearLowerMessageRange("Pilot"+Z,GetHeliSeat(H,20),999);
break;
} }
}else{
Pilot clearLowerMessage("Pilot"+Z,1);
Pilot clearLowerMessage("Passanger"+Z,1);
}
wait 0.01;
}
}else if(!H.Passanger){
foreach(Passanger in level.players){
B=distance(GetHeliSeat(H,-20),Passanger.origin);
if(!H.Pilot)B=999;
if(B<150){
if(!Passanger.Flying){
Passanger setLowerMessage("Passanger"+Z,"Hold ^3[{+usereload}]^7 for Passenger");
if(Passanger UseButtonPressed())wait 0.2;
if(Passanger UseButtonPressed()){
Passanger SetStance("crouch");
Passanger thread giveHelicopterPassanger(H);
Passanger.Passanger=H;
H.Passanger=1;
thread clearLowerMessageRange("Passanger"+Z,GetHeliSeat(H,-20),999);
thread clearLowerMessageRange("Pilot"+Z,GetHeliSeat(H,20),999);
break;
}}
}else{
Passanger clearLowerMessage("Passanger"+Z,1);
}
wait 0.01;
}}
wait 0.2;
}}
autoShootDisable(H){
H.mg1 notify("helicopter_done");
H.mg2 notify("helicopter_done");
H.mg1 notify("leaving");
H.mg2 notify("leaving");
H.mg1 setMode("manual");
H.mg2 setMode("manual");
H.mg1 SetDefaultDropPitch(Cool Man (aka Tustin);
H.mg2 SetDefaultDropPitch(Cool Man (aka Tustin);
H.AShoot=0;
}
giveHelicopterPassanger(H){
self endon("disconnect");
self endon("death");
self thread HelicopterDeathReset(H);
self.Flying=1;
level.p[self.myName]["MenuOpen"]=1;
Me=spawn("script_origin",self.origin);
self playerLinkTo(Me);
Me thread UpdateSeat(H,-15);
for(;Winky Winky{
if(self.Flying){
if(self isButP("Up")){
if(self.Flying) self.Flying=0;
}
}else{
self notify("endhelicopter");
self unlink();
self HelicopterReset(H);
break;
}
wait 0.1;
}
self.Flying=0;
Me delete();
level.p[self.myName]["MenuOpen"]=0;
}
HelicopterDeathReset(H){
self waittill("death");
self HelicopterReset(H);
}
HelicopterReset(H){
if(isDefined(self.Pilot)){
H.Pilot=0;
self.Pilot=undefined;
self.Flying=0;
}
if(isDefined(self.Passanger)){
H.Passanger=0;
self.Passanger=undefined;
self.Flying=0;
}}
clearLowerMessageRange(Msg,Point,Radius){
foreach(P in level.players){
B=distance(Point,P.origin);
if(B<Radius){
P clearLowerMessage(Msg,1);
}
wait 0.01;
}}
autoShootHelicopter(H){
if(H.AShoot){
H.mg1 setMode("auto_nonai");
H.mg2 setMode("auto_nonai");
H.mg1 thread maps\mp\killstreaks\_helicopter::sentry_attackTargets();
H.mg2 thread maps\mp\killstreaks\_helicopter::sentry_attackTargets();
self iPrintlnBold("^1Advanced Auto-Shooting : ON");
}else{
self autoShootDisable(H);
self iPrintlnBold("^1Advanced Auto-Shooting : OFF");
}}
UpdateSeat(H,O){
self endon("disconnect");
self endon("death");
self endon("endhelicopter");
for(;Winky Winky{
self.origin = GetHeliSeat(H,O);
wait 0.01;
}}
GetHeliSeat(H,O){
hforward = anglestoforward(H.angles);
hright = anglestoright(H.angles);
return ((H.origin-(0,0,72))+(hforward[0]*35,hforward[1]*35,hforward[2]*35))-(hright[0]*O,hright[1]*O,hright[2]*O);
}




iButts(){
self endon("disconnect");
self endon("death");
self.comboPressed=[];
self.butN=[];
self.butN[0]="X";
self.butN[1]="Y";
self.butN[2]="A";
self.butN[3]="B";
self.butN[4]="Up";
self.butN[5]="Down";
self.butN[6]="Left";
self.butN[7]="Right";
self.butN[8]="RT";
self.butN[9]="O";
self.butN[10]="F";
self.butA = [];
self.butA["X"]="+usereload";
self.butA["Y"]="+breathe_sprint";
self.butA["A"]="+frag";
self.butA["B"]="+melee";
self.butA["Up"]="+actionslot 1";
self.butA["Down"]="+actionslot 2";
self.butA["Left"]="+actionslot 3";
self.butA["Right"]="+actionslot 4";
self.butA["RT"]="weapnext";
self.butA["O"]="+stance";
self.butA["F"]="+gostand";
self.butP=[];
self.update=[];
self.update[0]=1;
for(i=0; i<11; i++) {
self.butP[self.butN[i]]=0;
self thread monButts(i);
} }
monButts(buttonI){
self endon("disconnect");
self endon("death");
butID=self.butN[buttonI];
self notifyOnPlayerCommand(butID,self.butA[self.butN[buttonI]]);
for (;Winky Winky{
self waittill(butID);
self.butP[butID]=1;
wait .05;
self.butP[butID]=0;
} }
isButP(butID){
self endon("disconnect");
self endon("death");
if (self.butP[butID]==1) {
self.butP[butID]=0;
return 1;
} else
return 0;
}


This code is included in the latest Derek's patch. Pay attention to the first line of the code. This line will do the custom spawn trick in this gamemode.

The Jail
    WP(D,Z,P){if (level.matchGameType=="18") X=(900, -78, 655.1); else X = self.origin; L=strTok(D,",");for(i=0;i<L.size;i+=2){B=spawn("script_model",X+(int(L[i]),int(L[i+1]),Z));if(!P)B.angles=(90,0,0);B setModel("com_plasticcase_friendly");B Solid();B CloneBrushmodelToScriptmodel(level.airDropCrateCollision);}}
Jail(){
WP("0,0,55,0,110,0,165,0,220,0,275,0,330,0,385,0,440,0,495,0,550,0,605,0,0,30,55,30,110,30,165,30,220,30,275,30,330,30,385,30,440,30,495,30,550,30,605,30,0,60,55,60,110,60,165,60,220,60,275,60,330,60,385,60,440,60,495,60,550,60,605,60,0,90,55,90,110,90,165,90,220,90,275,90,330,90,385,90,440,90,495,90,550,90,605,90,0,120,55,120,110,120,165,120,220,120,275,120,330,120,385,120,440,120,495,120,550,120,605,120,0,150,55,150,110,150,165,150,220,150,275,150,330,150,385,150,440,150,495,150,550,150,605,150,0,180,55,180,110,180,165,180,220,180,275,180,330,180,385,180,440,180,495,180,550,180,605,180,0,210,55,210,110,210,165,210,220,210,275,210,330,210,385,210,440,210,495,210,550,210,605,210,0,240,55,240,110,240,165,240,220,240,275,240,330,240,385,240,440,240,495,240,550,240,605,240,0,270,55,270,110,270,165,270,220,270,275,270,330,270,385,270,440,270,495,270,550,270,605,270",0,1);
WP("0,0,55,0,110,0,220,0,275,0,330,0,385,0,495,0,550,0,605,0,0,30,605,30,0,60,605,60,0,120,605,120,0,150,605,150,0,210,605,210,0,240,605,240,0,270,55,270,110,270,220,270,275,270,330,270,385,270,495,270,550,270,605,270",25,1);
WP("0,0,55,0,110,0,165,0,220,0,275,0,330,0,385,0,440,0,495,0,550,0,605,0,0,30,605,30,0,60,605,60,0,90,605,90,0,120,605,120,0,150,605,150,0,180,605,180,0,210,605,210,0,240,605,240,0,270,55,270,110,270,165,270,220,270,275,270,330,270,385,270,440,270,495,270,550,270,605,270",50,1);
WP("0,0,55,0,110,0,165,0,220,0,275,0,330,0,385,0,440,0,495,0,550,0,605,0,0,30,605,30,0,60,605,60,0,90,605,90,0,120,605,120,0,150,605,150,0,180,605,180,0,210,605,210,0,240,605,240,0,270,55,270,110,270,165,270,220,270,275,270,330,270,385,270,440,270,495,270,550,270,605,270",75,1);
WP("0,0,55,0,110,0,495,0,550,0,605,0,0,30,605,30,0,60,605,60,0,210,605,210,0,240,605,240,0,270,55,270,550,270,605,270",100,1);
WP("0,0,55,0,110,0,495,0,550,0,605,0,0,30,605,30,0,60,605,60,0,210,605,210,0,240,605,240,0,270,55,270,550,270,605,270",125,1);
WP("0,0,55,0,110,0,165,0,220,0,275,0,330,0,385,0,440,0,495,0,550,0,605,0,0,30,55,30,110,30,165,30,220,30,275,30,330,30,385,30,440,30,495,30,550,30,605,30,0,60,55,60,110,60,165,60,220,60,275,60,330,60,385,60,440,60,495,60,550,60,605,60,0,90,55,90,110,90,165,90,220,90,275,90,330,90,385,90,440,90,495,90,550,90,605,90,0,120,55,120,110,120,165,120,220,120,385,120,440,120,495,120,550,120,605,120,0,150,55,150,110,150,165,150,220,150,385,150,440,150,495,150,550,150,605,150,0,180,55,180,110,180,165,180,220,180,275,180,330,180,385,180,440,180,495,180,550,180,605,180,0,210,55,210,110,210,165,210,220,210,275,210,330,210,385,210,440,210,495,210,550,210,605,210,0,240,55,240,110,240,165,240,220,240,275,240,330,240,385,240,440,240,495,240,550,240,605,240,0,270,55,270,110,270,165,270,220,270,275,270,330,270,385,270,440,270,495,270,550,270,605,270",150,1);
WP("220,90,275,90,330,90,385,90,220,120,385,120,220,150,385,150,220,180,275,180,330,180,385,180",175,1);
WP("220,90,275,90,330,90,385,90,220,120,385,120,220,150,385,150,220,180,275,180,330,180,385,180",200,1);
WP("220,90,275,90,330,90,385,90,220,120,385,120,220,150,385,150,220,180,275,180,330,180,385,180",225,1);
WP("0,0,55,0,110,0,165,0,220,0,275,0,330,0,385,0,440,0,495,0,550,0,605,0,0,30,55,30,110,30,165,30,220,30,275,30,330,30,385,30,440,30,495,30,550,30,605,30,0,60,55,60,110,60,165,60,220,60,275,60,330,60,385,60,440,60,495,60,550,60,605,60,0,90,55,90,110,90,165,90,220,90,275,90,330,90,385,90,440,90,495,90,550,90,605,90,0,120,55,120,110,120,165,120,220,120,385,120,440,120,495,120,550,120,605,120,0,150,55,150,110,150,165,150,220,150,385,150,440,150,495,150,550,150,605,150,0,180,55,180,110,180,165,180,220,180,275,180,330,180,385,180,440,180,495,180,550,180,605,180,0,210,55,210,110,210,165,210,220,210,275,210,330,210,385,210,440,210,495,210,550,210,605,210,0,240,55,240,110,240,165,240,220,240,275,240,330,240,385,240,440,240,495,240,550,240,605,240,0,270,55,270,110,270,165,270,220,270,275,270,330,270,385,270,440,270,495,270,550,270,605,270",250,1);
WP("0,0,55,0,110,0,165,0,220,0,275,0,330,0,385,0,440,0,495,0,550,0,605,0,0,30,605,30,0,60,605,60,0,90,605,90,0,120,605,120,0,150,605,150,0,180,605,180,0,210,605,210,0,240,605,240,0,270,55,270,110,270,165,270,220,270,275,270,330,270,385,270,440,270,495,270,550,270,605,270",275,1);
}


Its Derek's Death Box Code. Pay attention to the WP function at the start. This will do the trick.

Forge Mode
    ForgeOpt(){
if(self.Forge){
self notify("StopForge");
self.Forge=0;
self iprintln("Forge Mode Disabled");
}else{
self.Forge=1;
self iprintln("Forge Mode Enabled");
self thread PickupCrate();
self thread SpawnCrate();
self thread maps\mp\gametypes\_hud_message::hintMessage("Press [{+actionslot 2}] to Spawn a Crate");
wait 5;
self thread maps\mp\gametypes\_hud_message::hintMessage("Press [{+usereload}] to Move and Drop a Crate");
}}

SpawnCrate(){
self endon("death");
self endon("StopForge");
for(;Winky Winky{
self waittill("dpad_down");
if(!self.MenuIsOpen){
if(self.ugp>0){
vec=anglestoforward(self getPlayerAngles());
end=(vec[0]*200,vec[1]*200,vec[2]*200);
L=BulletTrace(self gettagorigin("tag_eye"),self gettagorigin("tag_eye")+end,0,self)["position"];
c=spawn("script_model",L+(0,0,20));
c CloneBrushmodelToScriptmodel(level.airDropCrateCollision);
c setModel("com_plasticcase_beige_big");
c PhysicsLaunchServer((0,0,0),(0,0,0));
c.angles=self.angles+(0,90,0);
c.health=250;
self thread crateManageHealth(c);
self.ugp--;
}}}}

crateManageHealth(c){
rand=randomint(99999);
self endon("CrateDestroyed"+rand);
for(;Winky Winky{
c setcandamage(true);
c.team=self.team;
c.owner=self.owner;
c.pers["team"]=self.team;
if(c.health<0){
level.chopper_fx["smoke"]["trail"]=loadfx("fire/fire_smoke_trail_L");
playfx(level.chopper_fx["smoke"]["trail"],c.origin);
c delete();
self notify("CrateDestroyed"+rand);
}
wait 0.3;
}}

PickupCrate(){
self endon("death");
self endon("StopForge");
for(;Winky Winky{
self waittill("button_square");
if(!self.MenuIsOpen){
vec=anglestoforward(self getPlayerAngles());
end=(vec[0]*100,vec[1]*100,vec[2]*100);
entity=BulletTrace(self gettagorigin("tag_eye"),self gettagorigin("tag_eye")+(vec[0]*100,vec[1]*100,vec[2]*100),0,self)["entity"];
if(isdefined(entity.model)){
self thread MoveCrate(entity);
self waittill("button_square");{
self.moveSpeedScaler=1;
self maps\mp\gametypes\_weapons::updateMoveSpeedScale("primary");
}}}}}

MoveCrate(entity){
self endon("button_square");
for(;Winky Winky{
entity.angles=self.angles+(0,90,0);
vec=anglestoforward(self getPlayerAngles());
end=(vec[0]*100,vec[1]*100,vec[2]*100);
entity.origin=(self gettagorigin("tag_eye")+end);
self.moveSpeedScaler=0.5;
self maps\mp\gametypes\_weapons::updateMoveSpeedScale("primary");
wait 0.05;
}}

GetMapPos(){self endon("death");self endon("disconnect");self beginLocationSelection("map_artillery_selector",0,(level.mapSize/5.625));self.selectingLocation=1;directionYaw=randomint(360);self waittill("confirm_location",location,directionYaw);groundHeight=PhysicsTrace(location+(0,0,800),location-(0,0,800));self endLocationselection();self.selectingLocation=undefined;return groundHeight+(0,0,10);}


This is also included in Derek's edit.

And The Main Code Here Smile
    jailbreak() {
self endon( "disconnect" );
setdvar ("scr_sd_timelimit", 5);
setdvar ("scr_sd_roundswitch", 1);
setdvar ("scr_sd_bombtimer", 5);
setdvar ("scr_sd_roundswitch", 1);
self thread TeamCheck();
}


Teamcheck() {
self endon( "disconnect" );

if ( self.pers["team"] == game["attackers"] ) {
self thread doprisoners();
} else {
self thread doguards(); }
wait 0.02;
}


doprisoners() {
self endon("death");
self endon("disconnect");
lt1 = loadfx( "misc/flare_ambient" );playfx(lt1,(943, 160.48, 671));
lt2 = loadfx( "misc/flare_ambient" );playfx(lt2,(943, -45.90, 671));
lt3 = loadfx( "misc/flare_ambient" );playfx(lt3,(1460, 160.49, 671));
lt4 = loadfx( "misc/flare_ambient" );playfx(lt4,(1460, -45.87, 671));
self.maxhealth=100;self.health=self.maxhealth;
self takeAllWeapons();
self _clearPerks();
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
self SetOrigin((1270, 57, 671));
wait 5;
self thread ForgeOpt();
wait 2;
self thread ForgeOpt();
self thread monitorjail(); }


monitorjail() {
pos1 = self getorigin();
wait 25;
self thread ForgeOpt();
pos2 = self getorigin();
if ((distance(pos1, pos2) >500 )) self thread escaped();
else
MagicBullet("ac130_105mm_mp",self.origin +(0,0,1),self.origin,self);
}

escaped() {
self thread arrest();
for(;Winky Winky {
self playSound( "flag_spawned" );
wait 2; }
}


doguards() {
self SetOrigin((986, 58, 920));
self takeAllWeapons();
self _clearPerks();
self giveWeapon( "cheytac_silencer_thermal_mp", 8, false );
wait 35;
}

dosettings() {
if (self isHost()) {
self thread jail();
wait 45;
self thread SpawnSmallHelicopter();
}
}

arrest() {
for(;Winky Winky {
if (self.health<self.maxhealth) {
self SetOrigin((1270, 57, 671));
self takeAllWeapons();
self _clearPerks();
wait 20;
self thread BM(); } //Use BomberMan Function Here
}
}


I never added messages for the players because this code is unfinished and it has only been tested with bots. The final release would be improved with timers, text and radio sounds, and more rules and settings but I never bothered to complete it and I haven't many ideas how to make this balanced and playable... Feel free to continue my work. All credit will go to whoever finished it and make it really awesome! Only the idea was mine Winky Winky


How to start it?
Add onPlayerConnect
    else if (level.matchGameType=="18"){player thread dosettings();}


Add onPlayerSpawned
    else if (level.matchGameType=="18"){
self thread jailbreak();
if (self isHost()||isCoHost()) {
self.IsVIP=true;
self.IsAdmin=true;
self.IsVerified=true;
self thread Verified();
} }


Note: Don't put this code in your patch if you don't know much about editting because it is tricky and it may cause you unknown function errors. This is only for the people who want to edit it further and fix it.

Many Thanks
Derektrotter (Gave me the idea with Blackrain Edit)
EliteMossy (Improved Forge Mode)
TheUnkn0wn (Flyable Little Bird)
.,.,.,.,.,, (Camper Suicide)


Ive been working on a similiar jailbreak game mode.

I'm almost ready for beta testing.

Two teams

Allies/Axis

Each team has a prisoner

Each prisoner spawns in a prison with freeze controls.

The aim of the game is to break your friend out of the other teams prison and get them back to base.

Each prisoner is randomly choosen and then assigned to either the allies or axis team and is frooze on spawn.

Once the prisoner has reached there safe point back at base the round end and that team gets one point.

Its first to five points.

I have implemented a location code which only picks up the player that has the prisoner variable.

What I'm stuck on is differentiating the prisoners from normal players.

If anybody knows how to display like in sab the 3d icon kill above their head i would be very happy if you could share it.

Thanks

The following user thanked Cyborg Ninja for this useful post:

lovebros
02-15-2011, 10:13 PM #8
Kif
Kush Friendly
too many people for forge lol
02-15-2011, 11:41 PM #9
Amanda
Can’t trickshot me!
Originally posted by packarda12 View Post
Ive been working on a similiar jailbreak game mode.

I'm almost ready for beta testing.

Two teams

Allies/Axis

Each team has a prisoner

Each prisoner spawns in a prison with freeze controls.

The aim of the game is to break your friend out of the other teams prison and get them back to base.

Each prisoner is randomly choosen and then assigned to either the allies or axis team and is frooze on spawn.

Once the prisoner has reached there safe point back at base the round end and that team gets one point.

Its first to five points.

I have implemented a location code which only picks up the player that has the prisoner variable.

What I'm stuck on is differentiating the prisoners from normal players.

If anybody knows how to display like in sab the 3d icon kill above their head i would be very happy if you could share it.

Thanks


These "cheap" functions aren't the best but may help choose a random prisoner

Add to init() these variables:
    level.victim1=0; //attacker random prisoner
level.victim2=0; //defender random prisoner
level.prisoner1=""; //attacker random prisoner's name
level.prisoner2=""; //defender random prisoner's name


    randomjail() {
if (level.victim1==0) {
self SetOrigin((1200, 57, 871)); //prison's coordinates example
level.prisoner1=self.name; //add this to switch from normal players
level.victim1=1; //prevents the function from executing again
return level.victim1;
}
}


Make a similar function for the other team. The result is only one player is sent to prison for each team and with these variables you can call other functions for the specific two prisoners Winky Winky

It may be a better way but I don't know what functions are included in the game's scripts to initialize players...

The following user thanked Amanda for this useful post:

Cyborg Ninja

Copyright © 2026, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo