Facebook Twitter YouTube Frictional Games | Forum | Privacy Policy | Dev Blog | Dev Wiki | Support | Gametee


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Making an enemy 'exit' like in the map Daniel's Room. (Solved!)
laser50 Offline
Member

Posts: 242
Threads: 22
Joined: Apr 2011
Reputation: 0
#6
RE: Making an enemy 'exit' like in the map Daniel's Room. (Help needed,)

I'm not sure if you already checked it for answers, but here is the Scriptfile (Complete one) Of daniels room:

void BreakBottle(string &in asEntity, string &in asType)
{    
    PlayMusic("10_puzzle02.ogg", false, 0.7, 0.1, 10, false);
    GiveSanityBoostSmall();

    CompleteQuest("10HiddenObject", "10HiddenObject");
    
    AddTimer("startlook", 0.2f, "TimerStopLook");
    AddTimer("stoplook", 1.0f, "TimerStopLook");
    
    AddDebugMessage("Break Bottle!", false);
    
    AddDebugMessage("Setting level completion", false);
    AddDebugMessage("CompletedLevel_12: " + GetGlobalVarInt("CompletedLevel_12"), false);
    AddDebugMessage("(Before) CompletedLevel_10_11: " + GetGlobalVarInt("CompletedLevel_10_11"), false);
        
    if(GetGlobalVarInt("CompletedLevel_10_11")==0)
        SetGlobalVarInt("CompletedLevel_10_11", GetGlobalVarInt("CompletedLevel_12")+1);
        
    AddDebugMessage("(After) CompletedLevel_10_11: " + GetGlobalVarInt("CompletedLevel_10_11"), false);
}
void TimerStopLook(string &in asTimer)
{
    if(asTimer == "stoplook")
        StopPlayerLookAt();
    else
        StartPlayerLookAt("key_jar_1_item", 5.0f, 5.0f, "");
}

void InteractClosedDoor(string &in asEntity)
{
    AddTimer("doorm", 0.5f, "TimerDoorMessage");
}
void TimerDoorMessage(string &in asTimer)
{
    SetMessage("Ch01Level10", "DoorLocked", 0);
    AddQuest("10Door", "10Door");
}
////////////////////////////
//BEGIN GRUNT ENTERS LEVEL//
//When grunt about to leave the closet, he gets a new path directly to exit door.
void CollideAreaGruntInCloset(string &in asParent, string &in asChild, int alState)
{
    AddDebugMessage("Grunt is state: " + alState, false);
    
    GiveEnemyExitPath();
    
    SetLocalVarInt("GruntLeftCloset", 1);
}
void GiveEnemyExitPath()
{
    AddDebugMessage("Exit Grunt changes", false);
    
    ClearEnemyPatrolNodes("grunt_normal_1");
    AddEnemyPatrolNode("grunt_normal_1", "PathNodeArea_28", 0, "");
}


void CollideAreaGrunt02(string &in asParent, string &in asChild, int alState)
{
    if(GetLocalVarInt("GruntLeftCloset") == 1) return;
    
    AddDebugMessage("Area 02 Grunt changes", false);
    
    ClearEnemyPatrolNodes("grunt_normal_1");
    AddEnemyPatrolNode("grunt_normal_1", "PathNodeArea_7", 3, "");
    AddEnemyPatrolNode("grunt_normal_1", "PathNodeArea_31", 1, "");
    AddEnemyPatrolNode("grunt_normal_1", "PathNodeArea_27", 0.5f, "");
    AddEnemyPatrolNode("grunt_normal_1", "PathNodeArea_31", 0, "");    //To avoid the opened door, which can make him wanna break it.
    AddEnemyPatrolNode("grunt_normal_1", "PathNodeArea_30", 0, "");
}
void CollideAreaGrunt(string &in asParent, string &in asChild, int alState)
{
    PlayMusic("10_event_coming.ogg", false, 1, 0.1, 10, false);
    
    PlaySoundAtEntity("grunt","grunt/amb_idle.snt", "chest_of_drawers_nice_2", 3, false);
    PlaySoundAtEntity("doorgrunt","10_close_door.snt", "level_wood_1", 1, false);
    
    CheckPoint("check01","PlayerStartArea_2", "CheckPoint01", "Hints", "DeathGrunt_10_Daniels_Room_01");
    
    AddTimer("grunt1", 0.75, "TimerActivateGrunt");    
    AddTimer("grunt2", 1.25f, "TimerActivateGrunt");    
    AddTimer("exiton", 5.0f, "TimerExitGrunt");
}
void TimerActivateGrunt(string &in asTimer)
{
    if(asTimer == "grunt2"){
        GiveHint("hidehint", "Hints", "HideHint", 0);
        return;
    }
    AddEntityCollideCallback("Player", "AreaCheckPlayer", "CollideAreaCheckPlayer", false, 0);
    AddEntityCollideCallback("Player", "AreaCheckPlayer2", "CollideAreaCheckPlayer", false, 0);
    
    PlaySoundAtEntity("scare","react_scare.snt", "Player", 0.5f, false);
    GiveSanityDamage(10.0f, true);
    
    SetEntityActive("grunt_normal_1", true);
    
    SetGlobalVarInt("EnemySeenInBackHallLevel",1);//tells 09 to play other music!
    
    AddDebugMessage("Area 01 Grunt changes", false);
    
    ClearEnemyPatrolNodes("grunt_normal_1");
    AddEnemyPatrolNode("grunt_normal_1", "PathNodeArea_7", 3, "");
    AddEnemyPatrolNode("grunt_normal_1", "PathNodeArea_14", 1, "");
    AddEnemyPatrolNode("grunt_normal_1", "PathNodeArea_16", 0.5f, "");
    AddEnemyPatrolNode("grunt_normal_1", "PathNodeArea_30", 0, "");
    
    AddEntityCollideCallback("Player", "AreaGrunt_2", "CollideAreaGrunt02", true, 1);
}

void TimerExitGrunt(string &in asTimer)
{
    AddEntityCollideCallback("grunt_normal_1", "AreaGruntDeactivate", "CollideAreaGruntDeactivate", false, 1);
}

void CollideAreaCheckPlayer(string &in asParent, string &in asChild, int alState)
{
    AddDebugMessage("In Area: "+asChild+" State: "+alState, false);
    
    if(alState == 1) SetLocalVarInt("PlayerInArea", alState);
    else SetLocalVarInt("PlayerInArea", alState);
}
void CollideAreaGruntDeactivate(string &in asParent, string &in asChild, int alState)
{
    if(GetLocalVarInt("PlayerInArea") == 1){
        SetEntityActive("grunt_normal_1", false);
        PlaySoundAtEntity("doorgruntleave","10_open_door.snt", "level_wood_1", 0.5, false);
        
        SetDeathHint("", "");
        
        SetGlobalVarInt("GruntLeftGuestRoom", 1);
    }
    else{
        ClearEnemyPatrolNodes("grunt_normal_1");
        AddEnemyPatrolNode("grunt_normal_1", "PathNodeArea_32", 0, "");
        AddEnemyPatrolNode("grunt_normal_1", "PathNodeArea_28", 0, "");
    }
}
//END GRUNT ENTERS LEVEL//
//////////////////////////


////////////////////
//BEGIN BREAK DOOR//


void UseCrowbarOnDoor(string &in asItem, string &in asEntity)
{
    AddTimer(asEntity, 0.2, "TimerSwitchShovel");    
    PlaySoundAtEntity("pickupcrow","player_crouch.snt", "Player", 0.05, false);
    
    //Remove callback incase player never touched door
    SetEntityPlayerInteractCallback("mansion_1", "", true);
    SetEntityPlayerInteractCallback("AreaUseCrowbar", "", true);
    
    RemoveItem(asItem);
}
void TimerSwitchShovel(string &in asTimer)
{
    PlaySoundAtEntity("attachshovel","puzzle_place_jar.snt", asTimer, 0, false);
    
    SetEntityActive("crowbar_joint_1", true);
}
void CollideAreaBreakDoor(string &in asParent, string &in asChild, int alState)
{
    GiveSanityBoostSmall();
    
    PlayMusic("10_puzzle01.ogg", false, 0.7, 0.1, 10, false);
    
    SetSwingDoorLocked("mansion_1", false, false);
    SetSwingDoorDisableAutoClose("mansion_1", true);
    SetSwingDoorClosed("mansion_1", false,false);
    
    PlaySoundAtEntity("break","break_wood_metal", "AreaBreakEffect", 0, false);
    CreateParticleSystemAtEntity("breakps", "ps_hit_wood", "AreaBreakEffect", false);
    AddPropImpulse("mansion_1", -3, 0, 0, "world");
    
    SetEntityActive("crowbar_joint_1", false);
    SetEntityActive("crowbar_dyn_1", true);
    
    AddTimer("pushdoor", 0.1, "TimerPushDoor");    
    AddTimer("voice2", 1, "TimerDanielVoices");    
    
    CompleteQuest("10Door", "10Door");

    AddDebugMessage("Break door!", false);    
}
void TimerPushDoor(string &in asTimer)
{
    AddPropImpulse("mansion_1", -1, 2, -4, "world");
    AddTimer("doorclose", 1.1, "TimerDoorCanClose");
}

void TimerDoorCanClose(string &in asTimer)
{
    SetSwingDoorDisableAutoClose("mansion_1", false);
}

//END BREAK DOOR//
//////////////////

void TimerDanielVoices(string &in asTimer)
{
    if(asTimer == "voice1") SetEntityActive("FlashbackArea_1", true);
    else if(asTimer == "voice2") SetEntityActive("FlashbackArea_2", true);
    else SetEntityActive("FlashbackArea_3", true);
}
void VoiceOver1()
{
    //AddTimer("voice2", 5, "TimerDanielVoices");    
}
void VoiceOver2()
{
    //AddTimer("voice3", 7, "TimerDanielVoices");    
    SetLocalVarInt("VisionOver", 1);
    AddQuest("10HiddenObject", "10HiddenObject");
}

void DiaryCall(string &in asItem, int lDiaryIdx)
{
    PlayMusic("10_paper_daniel0"+lDiaryIdx, false, 1.0f, 0.2f, 10, true);
}

/////////////////////
//BEGIN CHECK POINT//

void CheckPoint01(string &in asName, int alCount)
{
    ResetProp("mansion_1");    
    ResetProp("cabinet_simple_1");
    ResetProp("cabinet_simple_2");
    
    SetEntityActive("AreaGruntDeactivate", false);
    AddTimer("areaonagain", 5.0f, "TimerAreaOnAgain");
    
    if(alCount < 1)
    {    
        SetEntityActive("grunt_normal_1", true);
        
        AddDebugMessage("CP Grunt changes", false);
        
        ClearEnemyPatrolNodes("grunt_normal_1");
        AddEnemyPatrolNode("grunt_normal_1", "PathNodeArea_13", 3, "");
        AddEnemyPatrolNode("grunt_normal_1", "PathNodeArea_14", 2,"");
        AddEnemyPatrolNode("grunt_normal_1", "PathNodeArea_30", 0, "");
        
        CheckPoint("check02","PlayerStartArea_3", "CPCall02", "", "");
        
        AddEntityCollideCallback("grunt_normal_1", "AreaGruntInCloset", "CollideAreaGruntInCloset", true, -1);
    }
    
    
}
void TimerAreaOnAgain(string &in asTimer)
{
    SetEntityActive("AreaGruntDeactivate", true);
}


void CPCall02(string &in asName, int alCount)
{
    StartPlayerLookAt("CheckPointLookAt", 10.0f, 10.0f, "");
    
    AddTimer("stoplook", 1.0f, "TimerStopLookCP");
    
    SetEntityPlayerLookAtCallback("CPParticle", "LookAtCorpse", true);
    
    CreateParticleSystemAtEntity("smoke", "ps_area_fog.ps", "CPParticle", false);
    CreateParticleSystemAtEntity("smoke2", "ps_area_fog.ps", "CPParticle", false);
    
    SetEntityActive("corpse_pile2_1", true);
}
void TimerStopLookCP(string &in asTimer)
{
    StopPlayerLookAt();
}
void LookAtCorpse(string &in asEntity, int alState)
{
    PlaySoundAtEntity("pooff", "03_in_a_bottle.snt", "bonfire_3", 0.0f, false);
    PlaySoundAtEntity("pooff2", "03_rock_move.snt", "bonfire_3", 0.0f, false);
    SetPropActiveAndFade("corpse_pile2_1", false, 3);
    DestroyParticleSystem("smoke");
    DestroyParticleSystem("smoke2");
}
//END CHECK POINT//
/////////////////////

//////////////////////////////
//START LOOK AT PAINTING HINT
void LookAtPainting(string &in asEntity, int alState)
{
    if(GetLocalVarInt("VisionOver") != 1) return;
    
    for(int i=1;i<4;i++)
        CreateParticleSystemAtEntity("dustceiling_"+i, "ps_dust_falling_small_thin.ps", "ScriptArea_"+i, false);
    
    PlaySoundAtEntity("rumble", "10_rock_move", "painting03_dynamic_1", 0.25f, false);
    
    AddTimer("impulse", 0.5f, "TimerShakePainting");
    AddTimer("impulse", 0.9f, "TimerShakePainting");
    AddTimer("impulse", 1.4f, "TimerShakePainting");
    AddTimer("impulse", 1.6f, "TimerShakePainting");
    
    AddTimer("shake", 0.3f, "TimerShakePainting");
    
    SetLocalVarInt("VisionOver", 2);
    
    AddDebugMessage("Spooky painting", false);
}
void TimerShakePainting(string &in asTimer)
{
    if(asTimer == "shake")
        StartScreenShake(0.008f, 0.1f, 0.25f, 0.65f);
    else
        AddPropImpulse("painting03_dynamic_1", 0.5f, 1.0f, 0.5f, "");
}
void CollideMovePainting(string &in asParent, string &in asChild, int alState)
{
    AddTimer("voice3", 0.2, "TimerDanielVoices");    
    
    AddDebugMessage("Painting pulled!", false);
}
//END LOOK AT PAINTING HINT
///////////////////////////


//touch bed for flashback
void InteractAreaBed(string &in asEntity)
{
    SetEntityActive("AreaBed_1", true);
}

//Sound on grunt auto remove
void EntityCallGrunt(string &in asEntity, string &in type)
{
    PlaySoundAtEntity("doorgruntleave","10_open_door.snt", "level_wood_1", 0.5, false);
}

////////////////////////////
// Run first time starting map
void OnStart()
{
    SetMapDisplayNameEntry("DanielsRoom");
    
    //----COLLIDE CALLBACKS----//
    AddEntityCollideCallback("Player", "AreaGrunt", "CollideAreaGrunt", true, 1);
    AddEntityCollideCallback("crowbar_joint_1", "BreakDoor", "CollideAreaBreakDoor", true, 1);
    AddEntityCollideCallback("ScriptArea_4", "painting03_dynamic_1", "CollideMovePainting", true, -1);
    
    AddEntityCollideCallback("grunt_normal_1", "AreaGruntInCloset", "CollideAreaGruntInCloset", true, -1);
    
    AddUseItemCallback("crowbarondoor", "crowbar_1", "mansion_1","UseCrowbarOnDoor", true);
    AddUseItemCallback("crowbaronframe", "crowbar_1", "AreaUseCrowbar", "UseCrowbarOnDoor", true);
    
    
    //----ROOM MESS SETUP----//
    AddBodyImpulse("chest_of_drawers_simple_2_Body_1", 0.25, 0, 0, "world");
    AddBodyImpulse("chest_of_drawers_simple_2_Body_2", 0.75, 0, 0, "world");
    AddBodyImpulse("chest_of_drawers_simple_2_Body_3", 0.5, 0, 0, "world");
    AddBodyImpulse("chest_of_drawers_simple_1_Body_1", -0.5, 0, 0, "world");
    AddBodyImpulse("chest_of_drawers_simple_1_Body_2", -1, 0, 0, "world");
    
    AddBodyImpulse("work_desk_1_Body1", 0, 0, -2, "world");
    AddBodyImpulse("work_desk_1_Body2", 0, 0, -3, "world");
    AddBodyImpulse("work_desk_1_Body3", 0, 0, -1, "world");
    AddBodyImpulse("work_desk_2_Body3", 0, 0, -0.5, "world");
    AddBodyImpulse("work_desk_2_Body1", 0, 0, -0.7, "world");
    
    AddTimer("voice1", 1, "TimerDanielVoices");    
    
    
    if(ScriptDebugOn())
    {
        GiveItemFromFile("lantern", "lantern.ent");
        for(int i=0;i<10;i++) GiveItemFromFile("tinderbox_"+i, "tinderbox.ent");
    }
}


////////////////////////////
// Run when entering map
void OnEnter()
{    
    PlayMusic("10_amb", true, 0.7, 5, 0, true);
    
    PreloadSound("grunt/amb_idle"); PreloadSound("door_level_wood_close"); PreloadSound("react_scare"); PreloadSound("door_level_wood_open");
    PreloadSound("puzzle_place_jar"); PreloadSound("break_wood_metal");
    
    PreloadParticleSystem("ps_hit_wood");    
    
    AutoSave();
}

////////////////////////////
// Run when leaving map
void OnLeave()
{
    SetEntityActive("grunt_normal_1", false);
    
    //////////////////////
    //Load Screen Setup
    SetupLoadScreen("LoadingText", "Ch01_Diary04_", 5, "game_loading_hand.jpg");
}
04-15-2011, 08:04 PM
Find


Messages In This Thread
RE: Making an enemy 'exit' like in the map Daniel's Room. (Help needed,) - by laser50 - 04-15-2011, 08:04 PM



Users browsing this thread: 1 Guest(s)