Here are two forcefield cogs that are almost complete but have a few little bugs.
The Dualforcefield cog turns on a two surface forcefield at the activation of a switch. The player that activated the switch is healed and their sheilds are recharged on a pulse untill the feild is turned off after a timer runs out.
The complex forcefield cog turns 24 forcefield surfaces off when a player is in one of six sectors and turns them back on when the player(s) leave the sector.
Both of these cogs work on a server but neither works completely on a guest computer. The dualforcefield cog works except that only the host can be healed when activating the switch. The complex forcefield cog just doesn't turn any of the forcefields off on the guest computer when the host is in one of the trigger sectors.
I am starting to get nervous about not meeting the deadline for the Hub's contest, and my level depends on these two cogs, so it would be great if someone could help me work out these last few bugs so I can get the last few details of my level finished.
The Dualforcefield cog turns on a two surface forcefield at the activation of a switch. The player that activated the switch is healed and their sheilds are recharged on a pulse untill the feild is turned off after a timer runs out.
The complex forcefield cog turns 24 forcefield surfaces off when a player is in one of six sectors and turns them back on when the player(s) leave the sector.
Both of these cogs work on a server but neither works completely on a guest computer. The dualforcefield cog works except that only the host can be healed when activating the switch. The complex forcefield cog just doesn't turn any of the forcefields off on the guest computer when the host is in one of the trigger sectors.
Code:
# complex_forcefield.cog # # Controls 24 forcefield surfaces using 6 sectors as triggers. This cog runs locally without syncing. # The pulse is run on the server and triggers are used to sync effects. # # Created by zagibu@gmx.ch and Centrist #================================================= =============# flags=0x240 #================================================= =============# symbols material animMaterial flex animSpeed=8 local int inside local int active=1 local int i local int j local int id local int numTriggerSectors=0 int numFieldSurfaces=0 sound damageSound=forcefieldhit01.wav local sound humSound=ForceFieldHum01.wav local sector triggerSector0=-1 nolink sector triggerSector1=-1 nolink sector triggerSector2=-1 nolink sector triggerSector3=-1 nolink sector triggerSector4=-1 nolink sector triggerSector5=-1 nolink surface soundSurface=-1 nolink surface fieldSurface00=-1 mask=0x400 surface fieldSurface01=-1 mask=0x400 surface fieldSurface02=-1 mask=0x400 surface fieldSurface03=-1 mask=0x400 surface fieldSurface04=-1 mask=0x400 surface fieldSurface05=-1 mask=0x400 surface fieldSurface06=-1 mask=0x400 surface fieldSurface07=-1 mask=0x400 surface fieldSurface08=-1 mask=0x400 surface fieldSurface09=-1 mask=0x400 surface fieldSurface10=-1 mask=0x400 surface fieldSurface11=-1 mask=0x400 surface fieldSurface12=-1 mask=0x400 surface fieldSurface13=-1 mask=0x400 surface fieldSurface14=-1 mask=0x400 surface fieldSurface15=-1 mask=0x400 surface fieldSurface16=-1 mask=0x400 surface fieldSurface17=-1 mask=0x400 surface fieldSurface18=-1 mask=0x400 surface fieldSurface19=-1 mask=0x400 surface fieldSurface20=-1 mask=0x400 surface fieldSurface21=-1 mask=0x400 surface fieldSurface22=-1 mask=0x400 surface fieldSurface23=-1 mask=0x400 message startup message touched message pulse message trigger end #================================================= =============# code #------------------------------------------------------ startup: // activate the forcefields, start the mat anim, and start pulsing on server. done locally on all comps. call activate_field; MaterialAnim(animMaterial, animSpeed, 0x1); if(IsServer()) SetPulse(0.2); Return; #------------------------------------------------------ touched: // damage the player and play a damage sound. done locally on one comp. // trigger sent so all players will hear the sound. DamageThing(GetSourceRef(), 10, 2, GetSourceRef()); SendTrigger(-1, 1339, GetSourceRef(), 0, 0, 0); Return; #------------------------------------------------------ pulse: // find out if a player is inside a trigger sector. server only. inside = 0; for(i = 0; i < GetNumPlayers() && !inside; i = i + 1) for(j = 0; j < numTriggerSectors && !inside; j = j + 1) if(GetThingSector(GetPlayerThing(i)) == triggerSector0[j]) inside = 1; // activate or deactivate the fields if we need to. if(!inside && !active) SendTrigger(-1, 1337, 0, 0, 0, 0); else if(inside && active) SendTrigger(-1, 1338, 0, 0, 0, 0); Return; #------------------------------------------------------ trigger: // handle triggers. done locally on all comps. if(GetSourceRef() == 1337) call activate_field; else if(GetSourceRef() == 1338) call deactivate_field; else if(GetSourceRef() == 1339) PlaySoundThing(damageSound, GetParam(0), 1, 0, 10, 0x0); Return; #------------------------------------------------------ activate_field: // make the fields visible and play the hum sound. done locally on all comps. active = 1; id = PlaySoundPos(humSound, GetSurfaceCenter(soundSurface), 1.5, 2, 10, 0x1); for(i = 0; i < numFieldSurfaces && fieldSurface00 != -1; i = i + 1) { SetFaceGeoMode(fieldSurface00, 4); ClearAdjoinFlags(fieldSurface00, 2); } Return; #------------------------------------------------------ deactivate_field: // make the fields invisible and stop the hum sound. done locally on all comps. active = 0; StopSound(id, 0); for(i = 0; i < numFieldSurfaces && fieldSurface00 != -1; i = i + 1) { SetFaceGeoMode(fieldSurface00, 0); SetAdjoinFlags(fieldSurface00, 2); } Return; #------------------------------------------------------ end
Code:
# Jedi Knight Cog Script # # 00_DUALFORCEFIELD.COG # # This script handles the dual forcefields in C2 # # This pair of forcefields (four faces) is powered on by a (shootable) switch. # The forcefields remain on for 'time_on' seconds, then are set off. # They cannot be set on again before 'delay' seconds have passed. # # [YB] # # (C) 1997 LucasArts Entertainment Co. All Rights Reserved #================================================= =============# symbols surface switch mask=0x408 surface forcefield0 mask=0x408 surface forcefield1 mask=0x408 surface forcefield2 mask=0x408 surface forcefield3 mask=0x408 int numFields int field_is_on=0 local int ff_sound local int i local thing player local flex time_on=5 flex delay=10 flex healspeed=0.2 flex healammount=1 flex oldtime0=0 local flex oldtime1=0 local flex oldtime2=0 local flex oldtime3=0 local sound on_snd=set_hi2.wav local sound off_snd=lgclick1.wav local sound forcefield_snd=ForceFieldHum01.WAV local sound ffdamage_snd=ForceFieldHit01.WAV local message startup message activated message pulse message touched message timer end #================================================= =============# code #------------------------------------------------------ startup: for(i = 0; i < numFields; i = i + 1) SetFaceGeoMode(forcefield0, 0); SetWallCel(switch, 1); Return; #------------------------------------------------------ activated: if(field_is_on) Return; field_is_on = 1; player = GetSourceRef(); SetPulse(healspeed); // sound played only at field 0. ff_sound = PlaySoundPos(forcefield_snd, SurfaceCenter(forcefield0), 1, -1, -1, 0x1); for(i = 0; i < numFields; i = i + 1) { SetFaceGeoMode(forcefield0, 4); SetFaceLightMode(forcefield0, 0); ClearAdjoinFlags(forcefield0, 2); SetSurfaceFlags(forcefield0, 16384); } SetWallCel(switch, 0); PlaySoundPos(on_snd, SurfaceCenter(switch), 0.8, 5, 10, 0x0); SetTimer(time_on); Return; #------------------------------------------------------ pulse: if(GetThingHealth(player) > 0 && GetThingHealth(player) < 100) HealThing(player, healammount); else if(GetThingHealth(player) == 100 && GetInv(player, 60) < 200) ChangeInv(player, 60, healammount); Return; #------------------------------------------------------ timer: SetPulse(0); for(i = 0; i < numFields; i = i + 1) { SetFaceGeoMode(forcefield0, 0); SetFaceLightMode(forcefield0, 3); SetAdjoinFlags(forcefield0, 2); ClearSurfaceFlags(forcefield0, 16384); } StopSound(ff_sound, 0); Sleep(delay); SetWallCel(switch, 1); PlaySoundPos(off_snd, SurfaceCenter(switch), 0.8, 5, 10, 0x0); field_is_on = 0; Return; #------------------------------------------------------ touched: if(GetSenderRef() == switch || !field_is_on) Return; for(i = 0; i < numFields; i = i + 1) { if(GetSenderRef() == forcefield0 && GetLevelTime() > oldtime0 + 0.5) { oldtime0 = GetLevelTime(); PlaySoundPos(ffdamage_snd, GetSurfaceCenter(forcefield0), 1, -1, -1, 0x0); DamageThing(GetSourceRef(), 10, 0x2, GetSourceRef()); } } Return; #------------------------------------------------------ end
I am starting to get nervous about not meeting the deadline for the Hub's contest, and my level depends on these two cogs, so it would be great if someone could help me work out these last few bugs so I can get the last few details of my level finished.
If curiosity killed the cat then perhaps Curious George killed the cat.
But Cat's do have nine lives so who knows?
But Cat's do have nine lives so who knows?