Massassi Forums Logo

This is the static archive of the Massassi Forums. The forums are closed indefinitely. Thanks for all the memories!

You can also download Super Old Archived Message Boards from when Massassi first started.

"View" counts are as of the day the forums were archived, and will no longer increase.

ForumsCog Forum → COG Repetition control structure causes massive slowdown
COG Repetition control structure causes massive slowdown
2003-11-15, 12:43 PM #1
One of the following COGs causes my level to slow down to the point of almost freezing.

Code:
##########################################################################################
# Jedi Knight Cog Script                                                                 #
#                                                                                        #
# electroswitch.cog                                                                      #
#                                                                                        #
#                                                                                        #
# This cog will make a light thing flicker, to put it in your level, creat a thing       #
# where you want the flickering light.                                                   #
#                                                                                        #
# [EL3CTRO - 15/04/2001]  [ Modified by Wolfy - 15/11/2003]                              #
#                                                                                        #
##########################################################################################
flags=0x240

symbols

message     startup
message     timer
message	activated
thing       light
template	electric
template	sparks
surface	switch1
surface	screen1
surface	switch2
surface	screen2
surface	switch3
surface	screen3
sound		beep
sound		elec_sound
int		a=0					local
int		sw1on=0				local
int		sw2on=0				local
int		sw3on=0				local

end

#===========================================================================-

code

startup:

   SetTimer(rand());
   return;

#===========================================================================-

activated:

	if((GetSenderRef()==switch1) && (sw1on==0)) {
	  sw1on=1;
	  a=1;
	  SetWallCel(switch1, 1);
	  SetWallCel(screen1, 1);
	  PlaySoundLocal(beep, 1.0, 0.0, 0x0);
	 }

	if((GetSenderRef()==switch2) && (sw2on==0)) {
	  sw2on=1;
	  SetWallCel(switch1, 2);
	  SetWallCel(screen1, 2);
	  PlaySoundLocal(beep, 1.0, 0.0, 0x0);
	 }

	if((GetSenderRef()==switch3) && (sw3on==0)) {
	  sw3on=1;
	  SetWallCel(switch3, 1);
	  SetWallCel(screen3, 1);
	  PlaySoundLocal(beep, 1.0, 0.0, 0x0);
	 }

return;

#===========================================================================-


   timer:

   if(On)
   {
	if (a==0) {
      SetThingLight(light, 1, 0);
	CreateThing(electric, light);
	CreateThing(sparks, light);
	PlaySoundThing(elec_sound, light, 1.0, -1, -1, 0x0);
      SetTimer(rand());
	}
   }
   else
   {
	if (a==0) {
      SetThingLight(light, 0, 0);
      SetTimer(rand());
	}
   }

   On = 1 - On;

   return;

#===========================================================================-

end


This one generates lightning, sparks, and a flash of light at a specificed point (to simulate sparking wiring and electrical arcs). When you press switch1, it's supposed to set a=1, so that the timer stops.

Code:
# Jedi Knight Cog Script
#
#
# [YB]
#
# (C) 1997 LucasArts Entertainment Co. All Rights Reserved
# 00_sectordamage.cog
#
# Apply constant amount of damage to a player in a sector.
# Sector can heal instead, if a negative number is used for the "damage" variable.
#
# 01/31/97 [CYW]
# 04/14/97 [YB]  Disabled the pulse if the damageSector is not linked in
#                Reduced the damageInterval and increased the damage
# 06/27/97 [DB]  Changed damage type to 0x1


# ========================================================================================

symbols

message	startup
message	pulse
message	activated

sector	damageSector					# the deadly sector.

surface	switch1

flex		damageInterval=1.0				# how often damage is applied in seconds.
flex		damage=4.0						# how much damage is applied

thing		victim				local		# actors and players affected.

int		bugger=0				local
int		type					local
int		sw****=0				local		# Uh, oh!  Naughty word!!!111shiftone

end

# ========================================================================================

code

# ........................................................................................

startup:
	if(damageSector > -1) SetPulse(damageInterval);
	return;

# ........................................................................................

activated:
	if((GetSenderRef()==switch1) && (sw****==0)) {
	  sw****=1;
	  bugger=1;
	  }

# ........................................................................................


pulse:

  if (bugger==0) {
	victim = FirstThingInSector(damageSector);
	while (victim != -1)
	{
		type = GetThingType(victim);
		// If we have an actor (2) or a player (10)
		if ((type==2) || (type==10))
		{
			// Do the damage or healing.
			if (damage > 0)
			{								
				DamageThing(victim, damage, 0x1, victim);
			}
			else
			{
				HealThing(victim, -damage);
			}
		victim = NextThingInSector(victim);
	   }
	}
  }
	return;

# ........................................................................................

end


This COG is supposed to damage the player while bugger=0. Then, when switch1 is activated, bugger=1 and the player can not be damaged while he/she is in the specified sector.

Anyone have any ideas?

------------------
"LC Tusken: the idiot is the person who follows the idiot and your not following me your insulting me your following the path of a idiot so that makes you the idiot"
Jack Chick preaches it
NMGOH
the idiot is the person who follows the idiot and your not following me your insulting me your following the path of a idiot so that makes you the idiot - LC Tusken
2003-11-15, 5:55 PM #2
For the first one, I say kill L3CY.

Code:
int		sw****=0				local		# Uh, oh!  Naughty word!!!111shiftone

That might possibly have something to do with it. [http://forums.massassi.net/html/tongue.gif]

Code:
activated:	if((GetSenderRef()==switch1) && (sw****==0)) {


The parentheses are unnecessary around the sw********* part.

[This message has been edited by Lord_Grismath (edited November 15, 2003).]
Cordially,
Lord Tiberius Grismath
1473 for '1337' posts.
2003-11-15, 7:23 PM #3
Unless COG is even more stupid than I think it already is, that shouldn't matter.

------------------
Bassoon, n. A brazen instrument into which a fool blows out his brains.
Bassoon, n. A brazen instrument into which a fool blows out his brains.
2003-11-16, 7:57 AM #4
I believe its your use of timers. I think at one time sabermaster tried to explain how each timer ID uses a different thread. I think with SetTimer(Rand()); you are actually creating new timers before the old ones expire.

I would try a different approach or switch to pulse: .

------------------
- Wisdom is 99% experience, 1% knowledge. -
- Wisdom is 99% experience, 1% knowledge. -

↑ Up to the top!