There are few things you want to make lights look flickering. First is the light around it and second is the mat on it.
startup: SetTimer(rand()); return; timer: if(On) { SetThingLight(lights, 1, 0); //light to 1 with no delay SetSurfaceCel(surf, 1); //brighter mat SetTimer(rand()); //in a bit of time (0 <= rand() <= 1) } else { SetThingLight(lights, 0, 0); //darker, no light without a delay SetSurfaceCel(surf, 0); //darker mat SetTimer(rand()); //bright again in a time } On = 1 - On; //alternates bright and not return;
It's kind of hard, but not a problem once you work it out. To rotate anything, use SetThingRotVel, just like the blades in Blades of Death.
You have 3 arms to control. For each of them set a speed for certain time rate. SetThingRotVel(thing, 'Pitch Yaw Roll');
Hour arm - SetThingRotVel(hour, 'x / 3600, 0, 0');
Minute arm - SetThingRotVel(hour, 'x / 60, 0, 0');
Second arm - SetThingRotVel(hour, 'x, 0, 0');
Move the value to yaw or roll according to where your arm 3do is facing to. The "x" is the velocity that makes the arm rotate 360deg in 1 minute. I haven't checked so, check it by inserting various values. And btw the blades of death's value was "400" when moving around. But that's too fast for a clock...
Note : Since SetThingRotVel rotates the thing from the center position of the thing, you want to make your arms 3do the same length to both side from the center and make 1 end transparent, or it rotates wrong.
A few ParseArg can do it. Place an ATST in your level with the following cog attached via template.
activated: player = GetSourceRef(); if(GetThingType(player) != 10) return; // if other than player activates, don't. SetThingModel(player, ATST_Model); //change the look ParseArg(player, "size=0.300000"); //size ParseArg(player, "movesize=0.300000"); //another size ParseArg(player, "puppet=atst.pup"); //pup-key-move ParseArg(player, "maxthrust=0.30"); //move speed ParseArg(player, "maxrotthrust=10.00"); //rotation speed ParseArg(player, "soundclass=atst.snd"); //walking sound etc SetThingFlags(player, 0x4); //mag sealed, was it? SetActorFlags(player, 0x100); //droid... DestroyThing(GetSenderRef()); //get the atst away return;
if you want to get off from it, you might want to use a new hotkey or something.
activated: player = GetSourceRef(); SetThingModel(player, player_Model); //change the look ParseArg(player, "size=0.065000"); //size ParseArg(player, "movesize=0.065000"); //another size ParseArg(player, "puppet=ky.pup"); //pup-key-move ParseArg(player, "maxthrust=2.00"); //move speed ParseArg(player, "maxrotthrust=180.00"); //rotation speed ParseArg(player, "soundclass=ky.snd"); //walking sound etc ClearThingFlags(player, 0x4); //no more mag sealed ClearActorFlags(player, 0x100); //human... CreateThing(atst_tpl, player); //leave atst behind return;
Maybe that was easy enough.