diff --git a/planet/Objects.ocd/Effects.ocd/Light.ocd/Script.c b/planet/Objects.ocd/Effects.ocd/Light.ocd/Script.c index 969896121..3671271de 100644 --- a/planet/Objects.ocd/Effects.ocd/Light.ocd/Script.c +++ b/planet/Objects.ocd/Effects.ocd/Light.ocd/Script.c @@ -6,17 +6,18 @@ local Name = "$Name$"; // Light types to be used for light_type parameter in CreateLight local LGT_Constant = 0; local LGT_Blast = 1; // light up and remove again after some time +local LGT_Temp = 2; // light up and remove again after some time local range, ltype, t; -global func CreateLight(int x, int y, int range, int light_type, player) +global func CreateLight(int x, int y, int range, int light_type, player, int fadeout, int time) { // create light object. player may be nil var light = CreateObjectAbove(Fx_Light, x, y, player); - if (light) light->Init(range, light_type); + if (light) light->Init(range, light_type, fadeout, time); return light; } -func Init(int lrange, int light_type) +func Init(int lrange, int light_type, int fadeout, int time) { // Init depending on type range = lrange; @@ -30,7 +31,12 @@ func Init(int lrange, int light_type) else if (ltype == LGT_Blast) { SetLightRange(range); - var time = Sqrt(range)+10; + time = Sqrt(range)+10; + ScheduleCall(this, Global.RemoveObject, time, 1); + } + else if (ltype == LGT_Temp) + { + SetLightRange(range, fadeout); ScheduleCall(this, Global.RemoveObject, time, 1); } else diff --git a/planet/Objects.ocd/Structures.ocd/StoneDoor.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/StoneDoor.ocd/Script.c index 5b0775948..160eb18f3 100644 --- a/planet/Objects.ocd/Structures.ocd/StoneDoor.ocd/Script.c +++ b/planet/Objects.ocd/Structures.ocd/StoneDoor.ocd/Script.c @@ -128,6 +128,15 @@ private func DoGraphics() return; } +public func GetFloorOffset() +{ + // Searches downwards from the lowest vertex to the floor + var y_off; + for (y_off=0; !GBackSolid(0, 20+y_off); ++y_off) + if (y_off > 20) break; // max range + return y_off; +} + local ActMap = { Door = { Prototype = Action, diff --git a/planet/Objects.ocd/Structures.ocd/StoneDoor.ocd/SpinWheel.ocd/Script.c b/planet/Objects.ocd/Structures.ocd/StoneDoor.ocd/SpinWheel.ocd/Script.c index 4a2c270ea..8fb70dc75 100644 --- a/planet/Objects.ocd/Structures.ocd/StoneDoor.ocd/SpinWheel.ocd/Script.c +++ b/planet/Objects.ocd/Structures.ocd/StoneDoor.ocd/SpinWheel.ocd/Script.c @@ -1,6 +1,6 @@ /*-- Spin Wheel --*/ -local targetdoor; +local targetdoor, temp_light; public func Initialize() { @@ -17,7 +17,13 @@ public func ControlUp(object clonk) { if (GetAction() == "Still" && targetdoor) { - if (clonk) SetPlrView(clonk->GetController(), targetdoor); + if (clonk) + { + SetPlrView(clonk->GetController(), targetdoor); + if (temp_light) temp_light->RemoveObject(); + var y_off = targetdoor->~GetFloorOffset(); + temp_light = Global->CreateLight(targetdoor->GetX(), targetdoor->GetY() + y_off, 30, Fx_Light.LGT_Temp, clonk->GetController(), 30, 50); + } targetdoor->OpenDoor(); SetAction("SpinLeft"); Sound("Chain"); @@ -28,7 +34,13 @@ public func ControlDown(object clonk) { if (GetAction() == "Still" && targetdoor) { - if (clonk) SetPlrView(clonk->GetController(), targetdoor); + if (clonk) + { + SetPlrView(clonk->GetController(), targetdoor); + if (temp_light) temp_light->RemoveObject(); + var y_off = targetdoor->~GetFloorOffset(); + temp_light = Global->CreateLight(targetdoor->GetX(), targetdoor->GetY() + y_off, 30, Fx_Light.LGT_Temp, clonk->GetController(), 30, 50); + } targetdoor->CloseDoor(); SetAction("SpinRight"); Sound("Chain");