Frictional Games Forum (read-only)

Full Version: Breaking a wall
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello People!

I want the effect of a wall breaking when you use force on it (Like in Charpter 3 "The Cell" in the Original game)

I've looked at the script for it and to be honest I am not super good at scripting and francly I've done a few triest and I've never gotten it to work. I would like to have some help here. I have the script from the original game here. Is there any way to shorten it to make it less. All I want is the:

Wall breaking.
The hammer and a Nail to break it with.
The Breaking Effect.
The swap from the normal wall to the broken wall (AKA cell_breakable_wall_1 -> cell_breakable_wall_broken_1)


If anyone feels like helping me it would be the best. I know it's abit of work, but I really need it Smile


The original script is:

Spoiler below!


void InteractPrisonDoor(string &in asEntity)
{
SetMessage("Ch03Level25", "InteractLockedCellDoor", -1);

AddQuest("25LockedCellDoor", "25LockedCellDoor");
}

void UseKeyOnCellDoor(string &in asItem, string &in asEntity)
{
SetMessage("Ch03Level25", "UseKeyOnCellDoor", -1);
}

void CollideWriggleBarBreak(string &in asParent, string &in asChild, int alState)
{
AddLocalVarInt("wriggle_bar_break", 1);
if(GetLocalVarInt("wriggle_bar_broken") == 1 ){
SetMessage("BasicPhrases", "UseItemOrCombineItem03", 0);
for(int i=1;i<=4;++i)
RemoveEntityCollideCallback("wriggle_prison_bar_1", "AreaWriggleBarBreak_" + i);
return;
}

if(GetLocalVarInt("wriggle_bar_break")==6)
{
AddLocalVarInt("wriggle_bar_broken", 1);

CreateParticleSystemAtEntity("sparks", "ps_hit_metal.ps", "wriggle_prison_bar_1", false);

PlaySoundAtEntity("breakb", "17_break_wheel.snt", asChild, 0.2f, false);
PlaySoundAtEntity("breakb2", "25_bar_drop.snt", asChild, 0.2f, false);

SetEntityActive("wriggle_prison_bar_1", false);
SetEntityActive("wriggle_prison_bar_item_1", true);

for(int i=1;i<=4;++i)
RemoveEntityCollideCallback("wriggle_prison_bar_1", "AreaWriggleBarBreak_" + i);
}
}

void CollideWriggleBarBreak2(string &in asParent, string &in asChild, int alState)
{
AddLocalVarInt("wriggle_bar_break2", 1);
if(GetLocalVarInt("wriggle_bar_broken") == 1 ){
SetMessage("BasicPhrases", "UseItemOrCombineItem03", 0);
for(int i=5;i<=8;++i)
RemoveEntityCollideCallback("wriggle_prison_bar_2", "AreaWriggleBarBreak_" + i);
return;
}

if(GetLocalVarInt("wriggle_bar_break2")==6)
{
AddLocalVarInt("wriggle_bar_broken", 1);

CreateParticleSystemAtEntity("sparks", "ps_hit_metal.ps", "wriggle_prison_bar_2", false);

PlaySoundAtEntity("breakb", "17_break_wheel.snt", asChild, 0.2f, false);
PlaySoundAtEntity("breakb2", "25_bar_drop.snt", asChild, 0.2f, false);

SetEntityActive("wriggle_prison_bar_2", false);
SetEntityActive("wriggle_prison_bar_item_2", true);

for(int i=5;i<=8;++i)
RemoveEntityCollideCallback("wriggle_prison_bar_2", "AreaWriggleBarBreak_" + i);
}
}


void InteractLooseBricks(string &in asEntity)
{
SetMessage("Ch03Level25", "InteractLooseBricks", -1);

PlayGuiSound("18_touch_rock.snt", 0.8f);

AddTimer(asEntity, 1.0f, "TimerLooseBricks");
}

void TimerLooseBricks(string &in asTimer)
{
SetEntityPlayerInteractCallback(asTimer, "InteractLooseBricks", true);
}


void UseBarOnBricks(string &in asItem, string &in asEntity)
{
SetEntityActive("wriggle_prison_bar_bend_stone_1", true);

FadeLightTo("PointLight_21", 0.9, 0.8, 0.3, 0.8, -1, 1);

CreateParticleSystemAtEntity("dust", "ps_hit_rock.ps", "AreaLooseBricks", false);

SetLocalVarInt("BarInPlace", 1);

PlaySoundAtEntity("attachb", "25_attach_bar.snt", asEntity, 0.0f, false);

RemoveItem(asItem);
SetEntityActive(asEntity, false);
}

void UseHCOnBricks(string &in asItem, string &in asEntity)
{
SetEntityActive("stone_chipper_move_x_1",true);
SetEntityActive("stone_hammer_move_1",true);

PlaySoundAtEntity("cumble1", "15_rock_break", "AreaHammer", 0, false);

SetMoveObjectState("stone_hammer_move_1", 0.25f);
SetMoveObjectState("stone_chipper_move_x_1", 1.0f);

AddTimer("1", 0.2f, "TimerHammer");
AddTimer("2", 0.6f, "TimerHammer");
AddTimer("3", 0.8f, "TimerHammer");
AddTimer("4", 1.2f, "TimerHammer");
AddTimer("5", 1.4f, "TimerHammer");

SetEntityActive(asEntity, false);

if(HasItem("poison_gland")) RemoveItem(asItem);
}

void TimerHammer(string &in asTimer)
{
if(asTimer == "1"){
PlaySoundAtEntity("bang", "impact_rock_high", "Player", 0, false);
PlaySoundAtEntity("hammer", "15_hammer", "Player", 0, false);
SetMoveObjectState("stone_hammer_move_1", 0.0f);
SetMoveObjectState("stone_chipper_move_x_1", 0.0f);
}
if(asTimer == "2"){
SetMoveObjectState("stone_hammer_move_1", 0.25f);
SetMoveObjectState("stone_chipper_move_x_1", 1.0f);
}
if(asTimer == "3"){
SetMoveObjectState("stone_hammer_move_1", 0.0f);
SetMoveObjectState("stone_chipper_move_x_1", 0.0f);
PlaySoundAtEntity("bang", "impact_rock_high", "Player", 0, false);
PlaySoundAtEntity("hammer", "15_hammer", "Player", 0, false);
}
if(asTimer == "4"){
SetMoveObjectState("stone_hammer_move_1", 0.25f);
SetMoveObjectState("stone_chipper_move_x_1", 1.0f);
}
if(asTimer == "5"){
SetEntityActive("stone_chipper_move_x_1",false);
SetEntityActive("stone_hammer_move_1",false);
PlaySoundAtEntity("bang", "impact_rock_high", "Player", 0, false);
PlaySoundAtEntity("hammer", "15_hammer", "Player", 0, false);

FadeLightTo("PointLight_21", 0.9, 0.8, 0.3, 0.8, -1, 1);
CreateParticleSystemAtEntity("dust", "ps_hit_rock.ps", "AreaLooseBricks", false);
SetLocalVarInt("UsedHC", 1);
CollideBarBendDone("", "", 1);
}
}

void UseBarOnWall(string &in asItem, string &in asEntity)
{
SetMessage("Ch03Level25", "UseBarOnWall", -1);
}

void InteractBendBar(string &in asEntity)
{
PlaySoundAtEntity("rockbars", "15_rock_break", asEntity, 0.5f, false);
}

void CollideBarBendDone(string &in asParent, string &in asChild, int alState)
{
FadeLightTo("PointLight_21", 0,0,0,0, -1, 1);

SetEntityActive("wriggle_prison_bar_bend_stone_1", false);

if(GetLocalVarInt("BarInPlace") == 1)
SetEntityActive("wriggle_prison_bar_obj_dyn_1", true);

for(int i=1; i<=3; ++i)
{
SetPropStaticPhysics("cell_breakable_wall_rock"+i, false);

if(GetLocalVarInt("UsedHC") == 1)
AddPropImpulse("cell_breakable_wall_rock"+i, 0,0,-1.5f, "World");
else
AddPropImpulse("cell_breakable_wall_rock"+i, 0,0,1.5f, "World");
}
AddTimer("ExtraBrickPush", 0.4, "TimerExtraBrickPush");

CreateParticleSystemAtEntity("dust", "ps_break_pottery.ps", "AreaLooseBricks", false);

PlayGuiSound("25_break_rock.snt",1.0f);

SetPropStaticPhysics("cell_breakable_wall_support_1", false);
}

void TimerExtraBrickPush(string &in asTimer)
{
if(GetLocalVarInt("UsedHC") == 1)
for(int i=1; i<=3; ++i)
AddPropImpulse("cell_breakable_wall_rock"+i, 0,0,-2, "World");
else
for(int i=1; i<=3; ++i)
AddPropImpulse("cell_breakable_wall_rock"+i, 0,0,2, "World");
}

void InteractWoodPillar(string &in asEntity)
{
PlaySoundAtEntity("bendwood", "25_strain_wood", asEntity, 0.1f, false);
}


void CollideCollapseWall(string &in asParent, string &in asChild, int alState)
{

for(int i=1; i<=2; ++i)
SetEntityActive("AreaCollapseWall_"+i,false);

StopGuardianCountDown();

AddPlayerBodyForce(0,0,-5000, false);

FadeLightTo("PointLight_21", 0,0,0,0, -1, 1);

SetPropHealth("cell_breakable_wall_1", 0);
SetPropHealth("cell_breakable_wall_support_1", 0);

StartScreenShake(0.2, 0.3, 1, 1);

PlayMusic("25_puzzle_escape", false, 1.0f, 1.0f, 10, false);

CompleteQuest("25LockedCellDoor", "25LockedCellDoor");
SetEntityPlayerInteractCallback("prison_section_plain_1","", false);

AddTimer("DistantHowl", 8, "TimerDistantHowl");

SetEntityActive("AreaEscaped", false);
}


void TimerDistantHowl(string &in asTimer)
{
PlaySoundAtEntity("howl","25_guardian_distant1", "Player", 0, false);

AddTimer("StopRadialBlur", 4.5f, "TimerStopRadialBlur");
AddTimer("react_scare", 0.5f, "TimerScareReaction");
AddTimer("react_breath", 2.5f, "TimerScareReaction");

StartScreenShake(0.01f, 0.0f, 2.0f, 4.0f);

SetRadialBlurStartDist(0.2f);
FadeRadialBlurTo(0.09, 0.015f);
}

void TimerStopRadialBlur(string &in asTimer)
{
AddDebugMessage("Stopping howl blur.", false);
FadeRadialBlurTo(0, 0.02f);
}

void TimerScareReaction(string &in asTimer)
{
PlayGuiSound(asTimer, 0.7f);

if(asTimer == "react_scare")
GiveSanityDamage(15.0f, true);
}


Well I'll help you. But I want you to try it out for yourself. If you have done any scripting. Try doing this.

Get a item callback to be used on the wall.

Ex: A hammer and just the wall.

When its used, simply set the "cell_breakable_wall_1" to inactive and the broken one to active. Also put a particle effect when it breaks. If you can do that much, you can probally figure out the rest. Smile

But if you can't, tell us whats wrong. And please atleast attempt to script!
Yeah, its all about adding some particals to make it look reasonable. but Rapture has the idea spot on.
Yeah I have a script (Not on this comp) I will post it later Smile You oughta find something wrong in it ^^
I am on the right computer now. I'll send the Wall part only. See if you see any errors.

Spoiler below!


//// Breaking the Wall

void InteractLooseBricks(string &in asEntity)
{
PlayGuiSound("18_touch_rock.snt", 0.8f);
AddTimer(asEntity, 1.0f, "TimerLooseBricks");
}

void TimerLooseBricks(string &in asTimer)
{
SetEntityPlayerInteractCallback(asTimer, "InteractLooseBricks", true);
}


void UseBarOnBricks(string &in asItem, string &in asEntity)
{
SetEntityActive("wriggle_prison_bar_bend_stone_1", true);
CreateParticleSystemAtEntity("dust", "ps_hit_rock.ps", "AreaLooseBricks", false);
}

void UseHCOnBricks(string &in asItem, string &in asEntity)
{
SetEntityActive("stone_chipper_move_x_1",true);
SetEntityActive("stone_hammer_move_1",true);

PlaySoundAtEntity("cumble1", "15_rock_break", "AreaHammer", 0, false);

SetMoveObjectState("stone_hammer_move_1", 0.25f);
SetMoveObjectState("stone_chipper_move_x_1", 1.0f);

AddTimer("1", 0.2f, "TimerHammer");
AddTimer("2", 0.6f, "TimerHammer");
AddTimer("3", 0.8f, "TimerHammer");
AddTimer("4", 1.2f, "TimerHammer");
AddTimer("5", 1.4f, "TimerHammer");

SetEntityActive(asEntity, false);
}

void TimerHammer(string &in asTimer)
{
if(asTimer == "1"){
PlaySoundAtEntity("bang", "impact_rock_high", "Player", 0, false);
PlaySoundAtEntity("hammer", "15_hammer", "Player", 0, false);
SetMoveObjectState("stone_hammer_move_1", 0.0f);
SetMoveObjectState("stone_chipper_move_x_1", 0.0f);
}
if(asTimer == "2"){
SetMoveObjectState("stone_hammer_move_1", 0.25f);
SetMoveObjectState("stone_chipper_move_x_1", 1.0f);
}
if(asTimer == "3"){
SetMoveObjectState("stone_hammer_move_1", 0.0f);
SetMoveObjectState("stone_chipper_move_x_1", 0.0f);
PlaySoundAtEntity("bang", "impact_rock_high", "Player", 0, false);
PlaySoundAtEntity("hammer", "15_hammer", "Player", 0, false);
}
if(asTimer == "4"){
SetMoveObjectState("stone_hammer_move_1", 0.25f);
SetMoveObjectState("stone_chipper_move_x_1", 1.0f);
}
if(asTimer == "5"){
SetEntityActive("stone_chipper_move_x_1",false);
SetEntityActive("stone_hammer_move_1",false);
PlaySoundAtEntity("bang", "impact_rock_high", "Player", 0, false);
PlaySoundAtEntity("hammer", "15_hammer", "Player", 0, false);

CreateParticleSystemAtEntity("dust", "ps_hit_rock.ps", "AreaLooseBricks", false);
SetLocalVarInt("UsedHC", 1);
CollideBarBendDone("", "", 1);
}
}

void UseBarOnWall(string &in asItem, string &in asEntity)
{
SetMessage("BrokenWall", "UseBarOnWall", -1);
}

void InteractBendBar(string &in asEntity)
{
PlaySoundAtEntity("rockbars", "15_rock_break", asEntity, 0.5f, false);
}

void CollideBarBendDone(string &in asParent, string &in asChild, int alState)
{
FadeLightTo("PointLight_21", 0,0,0,0, -1, 1);

SetEntityActive("wriggle_prison_bar_bend_stone_1", false);

if(GetLocalVarInt("BarInPlace") == 1)
SetEntityActive("wriggle_prison_bar_obj_dyn_1", true);

for(int i=1; i<=3; ++i)
{
SetPropStaticPhysics("cell_breakable_wall_rock"+i, false);

if(GetLocalVarInt("UsedHC") == 1)
AddPropImpulse("cell_breakable_wall_rock"+i, 0,0,-1.5f, "World");
else
AddPropImpulse("cell_breakable_wall_rock"+i, 0,0,1.5f, "World");
}
AddTimer("ExtraBrickPush", 0.4, "TimerExtraBrickPush");

CreateParticleSystemAtEntity("dust", "ps_break_pottery.ps", "AreaLooseBricks", false);

PlayGuiSound("25_break_rock.snt",1.0f);

SetPropStaticPhysics("cell_breakable_wall_support_1", false);
}

void TimerExtraBrickPush(string &in asTimer)
{
if(GetLocalVarInt("UsedHC") == 1)
for(int i=1; i<=3; ++i)
AddPropImpulse("cell_breakable_wall_rock"+i, 0,0,-2, "World");
else
for(int i=1; i<=3; ++i)
AddPropImpulse("cell_breakable_wall_rock"+i, 0,0,2, "World");
}

void InteractWoodPillar(string &in asEntity)
{
PlaySoundAtEntity("bendwood", "25_strain_wood", asEntity, 0.1f, false);
}

void CollideCollapseWall(string &in asParent, string &in asChild, int alState)
{

for(int i=1; i<=2; ++i)
SetEntityActive("AreaCollapseWall_"+i,false);

AddPlayerBodyForce(0,0,-5000, false);

SetPropHealth("cell_breakable_wall_1", 0);
SetPropHealth("cell_breakable_wall_support_1", 0);

StartScreenShake(0.2, 0.3, 1, 1);

PlayMusic("dan_grunt.ogg", false, 1.0f, 1.0f, 10, false);

SetEntityActive("AreaEscaped", false);
}