SSFT: added flag training basics, rename init funcs a little

This commit is contained in:
loop 2025-10-23 23:28:24 +01:00
parent dd0729faa9
commit bb8b6bd6c8
6 changed files with 232 additions and 36 deletions

1
.gitignore vendored
View file

@ -8,6 +8,7 @@ lighting/
prefs/ prefs/
gui/ gui/
recordings/ recordings/
fonts/
Classic* Classic*
# scripts folder need to be ignored and then exclusions have to be carved out # scripts folder need to be ignored and then exclusions have to be carved out

View file

@ -13,10 +13,10 @@
//--- OBJECT WRITE BEGIN --- //--- OBJECT WRITE BEGIN ---
new SimGroup(MissionGroup) { new SimGroup(MissionGroup) {
musicTrack = "ice";
Team_Hunters_timeLimit = "25"; Team_Hunters_timeLimit = "25";
powerCount = "0"; musicTrack = "ice";
cdTrack = "5"; cdTrack = "5";
powerCount = "0";
Hunters_timeLimit = "25"; Hunters_timeLimit = "25";
new MissionArea(MissionArea) { new MissionArea(MissionArea) {
@ -53,9 +53,9 @@ new SimGroup(MissionGroup) {
terrainFile = "Scarabrae_nef.ter"; terrainFile = "Scarabrae_nef.ter";
squareSize = "8"; squareSize = "8";
hazeDistance = "250";
position = "-1024 -1024 0"; position = "-1024 -1024 0";
visibleDistance = "1200"; visibleDistance = "1200";
hazeDistance = "250";
locked = "true"; locked = "true";
}; };
new NavigationGraph(NavGraph) { new NavigationGraph(NavGraph) {
@ -65,9 +65,9 @@ new SimGroup(MissionGroup) {
position = "0 0 0 1"; position = "0 0 0 1";
YDimOverSize = "0"; YDimOverSize = "0";
conjoinBowlDev = "20";
GraphFile = "Scarabrae_nef.nav"; GraphFile = "Scarabrae_nef.nav";
rotation = "0 0 0 0"; rotation = "0 0 0 0";
conjoinBowlDev = "20";
coverage = "0"; coverage = "0";
scale = "1 1 1"; scale = "1 1 1";
XDimOverSize = "0"; XDimOverSize = "0";
@ -244,8 +244,8 @@ new SimGroup(MissionGroup) {
lockCount = "0"; lockCount = "0";
homingCount = "0"; homingCount = "0";
team = "0";
Target = "33"; Target = "33";
team = "0";
locked = "false"; locked = "false";
}; };
new InteriorInstance() { new InteriorInstance() {
@ -266,9 +266,9 @@ new SimGroup(MissionGroup) {
lockCount = "0"; lockCount = "0";
homingCount = "0"; homingCount = "0";
team = "0";
Trigger = "11698";
Target = "34"; Target = "34";
team = "0";
Trigger = "20162";
locked = "false"; locked = "false";
}; };
new StaticShape() { new StaticShape() {
@ -279,9 +279,9 @@ new SimGroup(MissionGroup) {
lockCount = "0"; lockCount = "0";
homingCount = "0"; homingCount = "0";
team = "0";
Trigger = "11700";
Target = "35"; Target = "35";
team = "0";
Trigger = "20164";
locked = "false"; locked = "false";
}; };
new InteriorInstance() { new InteriorInstance() {
@ -302,9 +302,9 @@ new SimGroup(MissionGroup) {
lockCount = "0"; lockCount = "0";
homingCount = "0"; homingCount = "0";
team = "0";
Trigger = "11703";
Target = "36"; Target = "36";
team = "0";
Trigger = "20167";
locked = "false"; locked = "false";
}; };
}; };
@ -400,10 +400,10 @@ new SimGroup(MissionGroup) {
lockCount = "0"; lockCount = "0";
homingCount = "0"; homingCount = "0";
notReady = "1";
Trigger = "11714";
Target = "39";
inUse = "Down"; inUse = "Down";
Target = "39";
Trigger = "20178";
notReady = "1";
}; };
new Marker(BankSpawn) { new Marker(BankSpawn) {
position = "-155.307 126.636 243.233"; position = "-155.307 126.636 243.233";
@ -424,10 +424,10 @@ new SimGroup(MissionGroup) {
lockCount = "0"; lockCount = "0";
homingCount = "0"; homingCount = "0";
wrangle = "Aim Trainer teleports";
Target = "40"; Target = "40";
destination = "ATMSpawn"; wrangle = "Aim Trainer teleports";
Desc = "Dynamic Aim Trainer\nShoot moving targets while in the air to score points!\nMove faster to score more points and have fun!"; Desc = "Dynamic Aim Trainer\nShoot moving targets while in the air to score points!\nMove faster to score more points and have fun!";
destination = "ATMSpawn";
}; };
new StaticShape(ATHT) { new StaticShape(ATHT) {
position = "-170.634 150.644 233.142"; position = "-170.634 150.644 233.142";
@ -438,8 +438,8 @@ new SimGroup(MissionGroup) {
homingCount = "0"; homingCount = "0";
Target = "41"; Target = "41";
destination = "ATHSpawn";
Desc = "Aim Trainer\nShoot fast moving targets while in the air to score points!\nMove faster to score more points and have fun!"; Desc = "Aim Trainer\nShoot fast moving targets while in the air to score points!\nMove faster to score more points and have fun!";
destination = "ATHSpawn";
}; };
new StaticShape(ATLT) { new StaticShape(ATLT) {
position = "-176.634 144.844 233.142"; position = "-176.634 144.844 233.142";
@ -450,23 +450,23 @@ new SimGroup(MissionGroup) {
homingCount = "0"; homingCount = "0";
Target = "42"; Target = "42";
destination = "ATLSpawn";
Desc = "Static Aim Trainer\nShoot static targets while in the air to score points!\nMove faster to score more points and have fun!"; Desc = "Static Aim Trainer\nShoot static targets while in the air to score points!\nMove faster to score more points and have fun!";
destination = "ATLSpawn";
}; };
new StaticShape(DuelZone) { new StaticShape(DuelZone) {
position = "-170.634 150.644 233.142"; position = "-140.434 150.844 233.142";
rotation = "1 0 0 0"; rotation = "1 0 0 0";
scale = "1 1 1"; scale = "1 1 1";
dataBlock = "BankTeleporter"; dataBlock = "BankTeleporter";
lockCount = "0"; lockCount = "0";
homingCount = "0"; homingCount = "0";
wrangle = "Duel zone teleports";
Target = "43"; Target = "43";
destination = "undefined"; wrangle = "Duel zone teleports";
Desc = "it\'s time to d-d-d-d-d-d-d-duel"; Desc = "it\'s time to d-d-d-d-d-d-d-duel";
destination = "undefined";
}; };
new StaticShape(FlagPractice) { new StaticShape(FTT) {
position = "-176.634 117.644 233.142"; position = "-176.634 117.644 233.142";
rotation = "1 0 0 0"; rotation = "1 0 0 0";
scale = "1 1 1"; scale = "1 1 1";
@ -474,10 +474,10 @@ new SimGroup(MissionGroup) {
lockCount = "0"; lockCount = "0";
homingCount = "0"; homingCount = "0";
wrangle = "Flag practice teleports";
Target = "44"; Target = "44";
destination = "undefined"; wrangle = "Flag Trainer teleport";
Desc = "it\'s time to d-d-d-d-d-d-d-duel"; Desc = "Flag Training Zone\nCatch flags! Throw flags!\nWe love flags!";
destination = "FTSpawn";
}; };
}; };
new ForceFieldBare(TractorBeamFront) { new ForceFieldBare(TractorBeamFront) {
@ -489,10 +489,10 @@ new SimGroup(MissionGroup) {
homingCount = "0"; homingCount = "0";
gravityMod = "-2.75"; gravityMod = "-2.75";
appliedForce = "0 0 0";
originalscale = "10 40 140"; originalscale = "10 40 140";
Target = "-1"; Target = "-1";
pz = "11723"; appliedForce = "0 0 0";
pz = "20187";
velocityMod = "1.0"; velocityMod = "1.0";
}; };
new Trigger(BankWaypointZone) { new Trigger(BankWaypointZone) {
@ -578,8 +578,8 @@ new SimGroup(MissionGroup) {
homingCount = "0"; homingCount = "0";
Target = "45"; Target = "45";
destination = "BankSpawn";
Desc = "\nWelcome back to the Bank!"; Desc = "\nWelcome back to the Bank!";
destination = "BankSpawn";
}; };
new Marker(ATLSpawn) { new Marker(ATLSpawn) {
position = "-546.054 112.086 223.904"; position = "-546.054 112.086 223.904";
@ -602,15 +602,15 @@ new SimGroup(MissionGroup) {
}; };
new StaticShape(ATMBankTeleport) { new StaticShape(ATMBankTeleport) {
position = "-284.511 664.298 254.306"; position = "-284.511 664.298 254.306";
rotation = "-1 0 0 9.99997"; rotation = "-1 0 0 12";
scale = "1 1 1"; scale = "1 1 1";
dataBlock = "BankTeleporter"; dataBlock = "BankTeleporter";
lockCount = "0"; lockCount = "0";
homingCount = "0"; homingCount = "0";
Target = "46"; Target = "46";
destination = "BankSpawn";
Desc = "\nWelcome back to the Bank!"; Desc = "\nWelcome back to the Bank!";
destination = "BankSpawn";
}; };
new TSStatic(LeftPlaceholder) { new TSStatic(LeftPlaceholder) {
position = "-419.363 775.104 251.039"; position = "-419.363 775.104 251.039";
@ -650,5 +650,59 @@ new SimGroup(MissionGroup) {
powerCount = "0"; powerCount = "0";
}; };
}; };
new SimGroup(FlagTrain) {
powerCount = "0";
new Marker(FTSpawn) {
position = "284.013 -543.625 261.344";
rotation = "0 0 -1 90";
scale = "1 1 1";
seqNum = "0";
msToNext = "1000";
};
new StaticShape(FTBankTeleport) {
position = "272.726 -537.15 254.086";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "BankTeleporter";
lockCount = "0";
homingCount = "0";
Target = "47";
Desc = "\nWelcome back to the Bank!";
destination = "BankSpawn";
};
new StaticShape() {
position = "264.386 -581.653 232.142";
rotation = "-1 0 0 15";
scale = "1 1 1";
dataBlock = "ExteriorFlagStand";
lockCount = "0";
homingCount = "0";
Target = "-1";
};
new StaticShape() {
position = "247.87 -543.343 249.677";
rotation = "0 1 0 15";
scale = "1 1 1";
dataBlock = "ExteriorFlagStand";
lockCount = "0";
homingCount = "0";
Target = "-1";
};
new StaticShape() {
position = "319.348 -598.244 226.873";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "ExteriorFlagStand";
lockCount = "0";
homingCount = "0";
Target = "-1";
};
};
}; };
//--- OBJECT WRITE END --- //--- OBJECT WRITE END ---

View file

@ -85,7 +85,7 @@ function DermDummy::damageObject(%data, %targetObject, %sourceObject, %position,
// echo("wtf is this then: " @ %this @ " tgt " @ %sourceObject); // echo("wtf is this then: " @ %this @ " tgt " @ %sourceObject);
// } // }
function AimTrainerInit() { function InitAimTrainer() {
if (!$DEVMODE) { if (!$DEVMODE) {
findAndReplacePlaceholders(); findAndReplacePlaceholders();
} }

View file

@ -0,0 +1,136 @@
// TODO: flag cannon
// TODO: flag collide with stand, return to stand
// TODO: flag goals
// Time in seconds
$FlagTrainerTossReset = 45;
$FlagTrainerGrabReset = 90;
function Flag::objectiveInit(%data, %flag) {
%flag.originalPosition = %flag.getTransform();
$flagPos[%flag.team] = %flag.originalPosition;
%flag.isHome = true;
%flag.carrier = 0;
%flag.grabber = 0;
}
function initFlagStand(%stand) {
// Give the stand a flag
echo("Found a stand");
%flag = new Item() {
position = %stand.getPosition();
className = FlagObj;
dataBlock = "FLAG";
static = false;
rotate = true;
};
FlagTrain.add(%flag);
%stand.flag = %flag;
%flag.stand = %stand;
if(%flag.stand) {
%flag.stand.getDataBlock().onFlagReturn(%flag.stand);
}
}
function scanGroupForFlagStands(%group) {
for (%i = 0; %i < %group.getCount(); %i++) {
%obj = %group.getObject(%i);
if (%obj.getClassName() $= "SimGroup") {
scanGroupForFlagStands(%obj);
} else if (%obj.getClassName() $= "StaticShape" && %obj.getDatablock().getName() $= "ExteriorFlagStand") {
initFlagStand(%obj);
}
}
}
function SkillSectorGame::InitFlagTrainer() {
if ($DEVMODE) {
// echo("Not putting a flags on stands");
// return;
}
// Find all the flag stands and give them a flag
scanGroupForFlagStands(FlagTrain);
}
function SkillSectorGame::playerTouchFlag(%game, %player, %flag) {
if (isObject(%player.holdingFlag)) {
echo("Already holding a flag");
return;
}
if (isObject(%flag.carrier)) {
echo("Can't pick up a flag that's being carried")
return;
}
%game.playerTouchEnemyFlag(%player, %flag);
// %client = %player.client;
// if ((%flag.carrier $= "") && (%player.getState() !$= "Dead"))
// {
// // z0dd - ZOD, 5/07/04. Cancel the lava return.
// if(isEventPending(%obj.lavaEnterThread))
// cancel(%obj.lavaEnterThread);
// //flag isn't held and has been touched by a live player
// if (%client.team == %flag.team)
// %game.playerTouchOwnFlag(%player, %flag);
// else
// %game.playerTouchEnemyFlag(%player, %flag);
// }
// // toggle visibility of the flag
// setTargetRenderMask(%flag.waypoint.getTarget(), %flag.isHome ? 0 : 1);
}
function SkillSectorGame::playerTouchEnemyFlag(%game, %player, %flag) {
%client = %player.client;
%player.holdingFlag = %flag; //%player has this flag
%flag.carrier = %player; //this %flag is carried by %player
%player.mountImage(FlagImage, $FlagSlot, true, 'dsword');
%flag.hide(true);
%flag.startFade(0, 0, false);
if(%flag.stand)
%flag.stand.getDataBlock().onFlagTaken(%flag.stand);//animate, if exterior stand
returnFlagAfter(%flag, $FlagTrainerGrabReset, 'GrabReset');
}
function SkillSectorGame::dropFlag(%game, %player)
{
%player.throwObject(%player.holdingFlag);
// if(%player.holdingFlag > 0)
// {
// if (!%player.client.outOfBounds)
// %player.throwObject(%player.holdingFlag);
// else
// %game.boundaryLoseFlag(%player);
// }
}
function returnFlag(%flag, %reason) {
if (isObject(%flag.carrier)) {
%flag.carrier.unMountImage($FlagSlot);
%flag.hide(false);
%flag.carrier.holdingFlag = 0; // tell the player they've lost the flag
}
%flag.stand.getDataBlock().onFlagReturn(%flag.stand);
%flag.setTransform(%flag.stand.getTransform());
//messageClient(%flag.carrier.client, 'MsgFlagReturned', '\c0Flag returned (%1)', %reason);
%flag.carrier = 0;
}
function returnFlagAfter(%flag, %after, %reason) {
cancel(%flag.returnSched);
%flag.returnSched = schedule(%after*1000, 0, returnFlag, %flag, %reason);
//messageClient(%flag.carrier.client, 'MsgFlagReturnCountdown', '\c0Flag will be returned to stand in %1 seconds (%2)', %after, %reason);
}
function SkillSectorGame::playerDroppedFlag(%game, %player) {
%client = %player.client;
%flag = %player.holdingFlag;
%player.unMountImage($FlagSlot);
%flag.hide(false);
%flag.setTransform(%flag.getTransform());
returnFlagAfter(%flag, $FlagTrainerTossReset, 'TossReset');
%player.holdingFlag = 0;
%flag.carrier = 0;
}

View file

@ -14,9 +14,13 @@ exec("scripts/SkillSectorTeleporter.cs");
exec("scripts/SkillSectorAimTrainer.cs"); exec("scripts/SkillSectorAimTrainer.cs");
exec("scripts/SkillSectorTractorBeam.cs"); exec("scripts/SkillSectorTractorBeam.cs");
exec("scripts/SkillSectorWaypointWrangler.cs"); exec("scripts/SkillSectorWaypointWrangler.cs");
exec("scripts/SkillSectorFlagTrainer.cs");
// package SkillSector { // package SkillSectorGame {
// function none() {} // function EditorSaveMissionMenu() {
// // Delete all flags, they're spawned at 'boot'
// parent::EditorSaveMissionMenu();
// }
// }; // };
@ -25,8 +29,9 @@ function SkillSectorGame::missionLoadDone(%game) {
echo("Mission loading..."); echo("Mission loading...");
AimTrainerInit(); InitAimTrainer();
WaypointWranglerInit(); InitWaypointWrangler();
%game.InitFlagTrainer();
} }
function SkillSectorGame::initGameVars(%game) { function SkillSectorGame::initGameVars(%game) {

View file

@ -90,7 +90,7 @@ function scanGroupForWWZ(%group) {
} }
} }
function WaypointWranglerInit() { function InitWaypointWrangler() {
// Reset WPZone system // Reset WPZone system
$WPZNextFree = 0; $WPZNextFree = 0;
$WPZones[0] = 0; $WPZones[0] = 0;