Barebones Map script

From Mod Wiki
Revision as of 17:59, 21 November 2007 by Ducks (talk | contribs) (Batch update)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
An Advanced Map
1. Introduction and goals of the tutorial
2. Necessary map declarations
3. Caulk hull
4. Creating a simple terrain
5. Adding an atmosphere
6. Adding player spawns
7. Adding base structures
8. Adding base vehicles
9. Creating a constructible Bridge
10. Adding an MCP escort objective
11. Adding a Shield Generator hack objective
12. Creating a destructible objective
13. Adding Objective spawns and vehicles
14. Info Objectives
15. Deployzones
16. Playzones
17. Masks
18. Barebones Map script
19. Creating a command map
20. Levelshot
#define OBJECTIVE_ETQWMAP_BUILD_BRIDGE           0
#define OBJECTIVE_ETQWMAP_CAPTURE_OUTPOST        1
#define OBJECTIVE_ETQWMAP_HACK_OBJECTIVE         2
#define OBJECTIVE_ETQWMAP_DESTROY_OBJECTIVE      3

object mapObject_EtqwMap : mapObject_Default {
    void            InitObjectives();

    void            CompleteObjective( float index, entity p );
    handle            GetObjectiveMessage( float index );

    void            OnBridgeBuilt();
    void            OnOutpostCaptured();
    void            OnHackObjective();
    void            OnDeviceDestroyed();

    void            PostBridgeBuiltAudio();
    void            StartShieldObjective();
    void            StartFirstObjective();
    void            OnShieldDestroyedScud( entity trigger );

    vector            GetGDFBasePosition() { return '9800 -10870 2080'; }

    void            OnTimeLimitHit();

    void            OnShieldHacked();

    void            OnShieldDeployed( entity obj, entity trigger );
    void            OnHackComplete( entity obj );
    void            OnMCPSpawned( entity obj );
    void            OnMCPDestroyed( entity obj, vector newLocation, vector newAngles );
    void            OnMCPDelivered( entity obj );

    void            ClearMCPData();

    float            mainObjectiveIndex;

    entity            gdfBaseTerritory;
    entity            bridgeTerritory;
    entity            outpostTerritory;
    entity            stroggBaseTerritory;
    entity            shieldTerritory;

    entity            objective1Marker;
    entity            objective2Marker;
    entity            objective3Marker;
    entity            objective4Marker;

    entity            stroggBridgeSpawn;
    entity            gdfOutpostSpawn;
    entity            stroggOutpostSpawn;
    entity             stroggBaseSpawn;
    entity             stroggShieldSpawn;
    entity             gdfBaseSpawn;
    entity             gdfBridgeSpawn;

    entity             gdfCapturableSpawn1;
    entity             gdfCapturableSpawn2;

    entity            bridgeConstruction;
    entity            device;

    entity            scudTrigger;

    entity            mcpRoute;
    entity            mcpCaller;
    entity            shieldCaller;

    entity            currentMCP;
}

mapObject_Base EtqwMap_MapScript() {
    return new mapObject_EtqwMap;
}

void mapObject_EtqwMap::InitObjectives() {

    sys.print( "*****LOADED ETQW MAP SCRIPT*****\n" );

    gameRules.setWinningTeam( stroggTeam );
    gdfTeam.SetRespawnWait( 20 );
    stroggTeam.SetRespawnWait( 20 );
    CreateRespawnTimeThread( gdfTeam );

    gdfBaseTerritory        = worldspawn.getEntityKey( "script_gdf_base_territory" );
    bridgeTerritory            = worldspawn.getEntityKey( "script_bridge_territory" );
    outpostTerritory        = worldspawn.getEntityKey( "script_outpost_territory" );
    shieldTerritory            = worldspawn.getEntityKey( "script_shield_territory" );
    stroggBaseTerritory        = worldspawn.getEntityKey( "script_strogg_base_territory" );

    objective1Marker        = worldspawn.getEntityKey( "script_obj1_marker" );
    objective2Marker        = worldspawn.getEntityKey( "script_obj2_marker" );
    objective3Marker        = worldspawn.getEntityKey( "script_obj3_marker" );
    objective4Marker        = worldspawn.getEntityKey( "script_obj4_marker" );

    bridgeConstruction        = worldspawn.getEntityKey( "script_bridge_materials" );
    device                    = worldspawn.getEntityKey( "script_strogg_device" );

    stroggBridgeSpawn        = worldspawn.getEntityKey( "script_strogg_bridge_spawn" );
    stroggShieldSpawn        = worldspawn.getEntityKey( "script_strogg_shield_spawn" );
    stroggBaseSpawn            = worldspawn.getEntityKey( "script_strogg_base_spawn" );
    stroggOutpostSpawn        = worldspawn.getEntityKey( "script_strogg_outpost_spawn" );

    gdfBaseSpawn            = worldspawn.getEntityKey( "script_gdf_base_spawn" );
    gdfBridgeSpawn            = worldspawn.getEntityKey( "script_gdf_bridge_spawn" );
    gdfOutpostSpawn            = worldspawn.getEntityKey( "script_gdf_outpost_spawn" );

    gdfCapturableSpawn1        = worldspawn.getEntityKey( "script_capturable_spawn_gdf_1" );
    gdfCapturableSpawn2     = worldspawn.getEntityKey( "script_capturable_spawn_gdf_2" );    

    mcpRoute                = worldspawn.getEntityKey( "script_mcp_route" );
    mcpCaller                = worldspawn.getEntityKey( "script_mcp_caller" );
    shieldCaller            = worldspawn.getEntityKey( "script_shieldgen_caller" );

    gdfBaseSpawn.setGameTeam( gdfTeam );
    stroggBridgeSpawn.setGameTeam( stroggTeam );
    stroggShieldSpawn.setGameTeam( stroggTeam );
    stroggBaseSpawn.setGameTeam( stroggTeam );
    gdfOutpostSpawn.setGameTeam( $null_entity );
    gdfBridgeSpawn.setGameTeam( $null_entity );
    stroggOutpostSpawn.setGameTeam( stroggTeam );

    gdfCapturableSpawn1.vSetActive( false );
    gdfCapturableSpawn2.vSetActive( false );

    objective1Marker.vStartObjective();
    objective2Marker.vFinishObjective();
    objective3Marker.vFinishObjective();
    objective4Marker.vFinishObjective();

    thread StartFirstObjective();

    mainObjectiveIndex = OBJECTIVE_ETQWMAP_BUILD_BRIDGE;
    objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
    objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
}

void mapObject_EtqwMap::CompleteObjective( float index, entity p ) {
    if ( index == OBJECTIVE_ETQWMAP_BUILD_BRIDGE ) {
        OnBridgeBuilt();
    } else if ( index == OBJECTIVE_ETQWMAP_CAPTURE_OUTPOST ) {
        OnOutpostCaptured();
    } else if ( index == OBJECTIVE_ETQWMAP_HACK_OBJECTIVE ) {
        OnHackObjective();
    } else if ( index == OBJECTIVE_ETQWMAP_DESTROY_OBJECTIVE ) {
        OnDeviceDestroyed();
    }
}

void mapObject_EtqwMap::OnShieldDeployed( entity obj, entity trigger ) {
    scudTrigger = trigger;
    scudTrigger.vStartObjective();
}

void mapObject_EtqwMap::OnHackComplete( entity obj ) {
    if ( obj == scudTrigger ) {
        OnShieldHacked();
    }
}

void mapObject_EtqwMap::ClearMCPData() {
    if ( currentMCP != $null_entity ) {
        currentMCP.vFreeMission();
        currentMCP = $null_entity;
    }
}

void mapObject_EtqwMap::OnMCPSpawned( entity obj ) {
    ClearMCPData();
}

void mapObject_EtqwMap::OnMCPDestroyed( entity obj, vector newLocation, vector newAngles ) {
    if ( currentMCP != obj ) {
        return;
    }

    ClearMCPData();

    mcpCaller.vCallDrop( newLocation, newAngles );
}

void mapObject_EtqwMap::OnMCPDelivered( entity obj ) {
    ClearMCPData();

    if ( mainObjectiveIndex == OBJECTIVE_ETQWMAP_CAPTURE_OUTPOST ) {
        currentMCP = obj;
        objManager.SetObjectiveEntity( currentMCP, mainObjectiveIndex );
        currentMCP.vSetGoalMarker( objective2Marker );
        currentMCP.vSetPathTargets( mcpCaller.getWorldOrigin(), objective2Marker.getWorldOrigin() );
        currentMCP.setTrackerEntity( mcpRoute );
        CreateInitialTimedMission( currentMCP );
        currentMCP.vCreateMission();
    }
}

handle mapObject_EtqwMap::GetObjectiveMessage( float index ) {
    if ( index == OBJECTIVE_ETQWMAP_BUILD_BRIDGE ) {
        return sys.localizeString( "maps/valley/obj_bridge" );
    }

    if ( index == OBJECTIVE_ETQWMAP_CAPTURE_OUTPOST ) {
        return sys.localizeString( "maps/valley/obj_outpost" );
    }

    if ( index == OBJECTIVE_ETQWMAP_HACK_OBJECTIVE ) {
        return sys.localizeString( "maps/valley/obj_depot" );
    }

    if ( index == OBJECTIVE_ETQWMAP_DESTROY_OBJECTIVE ) {
        return sys.localizeString( "maps/valley/obj_contaminator" );
    }

    return g_locStr_BadObjective;
}

void mapObject_EtqwMap::OnShieldHacked() {
    objManager.SetObjectiveEntity( $null_entity, -1 );
    StopTimedMission();
    scudTrigger.vCompleteMission();
}


void mapObject_EtqwMap::OnBridgeBuilt() {

    mainObjectiveIndex = OBJECTIVE_ETQWMAP_CAPTURE_OUTPOST;
    objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
    objManager.setNextObjective( stroggTeam, mainObjectiveIndex );

    objective1Marker.vFinishObjective();
    objective2Marker.vStartObjective();

    bridgeTerritory.setGameTeam( gdfTeam );
    stroggBridgeSpawn.setGameTeam( $null_entity );

    gdfBaseTerritory.setActive( false );
    bridgeTerritory.setActive( true );
    outpostTerritory.setActive( true );

    gdfBridgeSpawn.setGameTeam( gdfTeam );

    gdfCapturableSpawn1.vSetActive( true );

    objManager.SetObjectiveEntity( $null_entity, -1 );

    StopTimedMission();
    bridgeConstruction.vCompleteMission();

    mcpCaller.vOnDeploy();

    thread PostBridgeBuiltAudio();

    gdfTeam.SetRespawnWait( 15 );
    ResetRespawnTimeThread();

}

void mapObject_EtqwMap::OnOutpostCaptured() {
    mainObjectiveIndex = OBJECTIVE_ETQWMAP_HACK_OBJECTIVE;
    objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
    objManager.setNextObjective( stroggTeam, mainObjectiveIndex );

    gdfCapturableSpawn1.vSetActive( false );
    gdfCapturableSpawn1.setGameTeam( gdfTeam );

    gdfOutpostSpawn.setGameTeam( gdfTeam );
    stroggOutpostSpawn.setGameTeam( $null_entity );

    outpostTerritory.setGameTeam( gdfTeam );

    gdfCapturableSpawn2.vSetActive( true );

    objective2Marker.vFinishObjective();
    objective3Marker.vStartObjective();

    objManager.SetObjectiveEntity( $null_entity, -1 );

    if ( currentMCP != $null_entity ) {
        currentMCP.vCompleteMission();
    }
    StopTimedMission();

    shieldCaller.vOnDeploy();

    G_PlayObjectiveCompletedRoll( GDF );
    objManager.PlaySound( worldspawn.getKey( "snd_outpost_captured_strogg" ), stroggTeam );
    objManager.PlaySound( worldspawn.getKey( "snd_outpost_captured_gdf" ), gdfTeam );

    gdfTeam.SetRespawnWait( 20 );
    stroggTeam.SetRespawnWait( 20 );
    ResetRespawnTimeThread();
}

void mapObject_EtqwMap::OnHackObjective() {

    sys.print( "*****SHIELD HACKED*****\n" );

    mainObjectiveIndex = OBJECTIVE_ETQWMAP_DESTROY_OBJECTIVE;
    objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
    objManager.setNextObjective( stroggTeam, mainObjectiveIndex );

    objective3Marker.vFinishObjective();
    objective4Marker.vStartObjective();

    device.vStartObjective();

    gdfCapturableSpawn2.vSetActive( false );
    gdfCapturableSpawn2.setGameTeam( gdfTeam );    

    stroggShieldSpawn.setGameTeam( $null_entity );

    shieldTerritory.setGameTeam( gdfTeam );

    scudTrigger.vFreeMission();

    objManager.SetObjectiveEntity( device, mainObjectiveIndex );
    CreateInitialTimedMission( device );
    device.vCreateMission();

    gdfTeam.SetRespawnWait( 20 );
    stroggTeam.SetRespawnWait( 20 );
    ResetRespawnTimeThread();
}

void mapObject_EtqwMap::OnDeviceDestroyed() {
    objective4Marker.vFinishObjective();

    StopTimedMission();
    device.vFinishObjective();;

    gameRules.setWinningTeam( gdfTeam );
    gameRules.endGame();

    device.vCompleteMission();
}

void mapObject_EtqwMap::PostBridgeBuiltAudio() {
    sys.wait( 10.f );

    objManager.PlaySound( worldspawn.getKey( "snd_mcp_intro_strogg" ), stroggTeam );
    objManager.PlaySound( worldspawn.getKey( "snd_mcp_intro_gdf" ), gdfTeam );
}

void mapObject_EtqwMap::StartShieldObjective() {
    sys.wait( 5.f );

    scudTrigger.vSetActive( true );
    CreateInitialTimedMission( scudTrigger );
    scudTrigger.vCreateMission();
    objManager.SetObjectiveEntity( scudTrigger, mainObjectiveIndex );
}

void mapObject_EtqwMap::OnShieldDestroyedScud( entity trigger ) {
    thread StartShieldObjective();
}

void mapObject_EtqwMap::StartFirstObjective() {
    sys.wait( 5.f );

    objManager.SetObjectiveEntity( bridgeConstruction, mainObjectiveIndex );

    CreateInitialTimedMission( bridgeConstruction );
    bridgeConstruction.vCreateMission();
    bridgeConstruction.vStartObjective();
}

void mapObject_EtqwMap::OnTimeLimitHit() {
    FinishTimedMission();
    objManager.SetObjectiveEntity( $null_entity, -1 );

    objManager.PlaySound( worldspawn.getKey( "snd_gdflose_strogg" ), stroggTeam );
    objManager.PlaySound( worldspawn.getKey( "snd_gdflose_gdf" ), gdfTeam );
}