Accum Troubles


(LaggingTom) #1

Alright, I’m just taking a tidbit from my script

		accum 1 abort_if_equal 0
		trigger self open
		accum 1 abort_if_equal 1
		trigger self close

In trigger self close accum 1 gets set as 1 and in trigger self open it’s set as 0.

Now, my problem is, it opens then closes. I have no idea what accums to set that if it’s open, when this is triggered, it’ll close, and vis versa. I get the feeling I should’ve paid attention in math class :disgust:


(MadJack) #2

I’m trying to understand and I’m having a hard time…

I’m not sure but I think that you want the, let’s call it a door, to open if it’s closed OR close if it’s opened right?

If that’s the case you’ll have to do something like that.


door
{
	spawn
	{
		accum 1 set 0 // door tagged as down on spawn
		// other stuff to set at spawn
	}

	trigger open_close // check to move the door up/down
	{
		accum 1 trigger_if_equal 0 door up // Door up
		accum 1 trigger_if_equal 1 door down // Door down
	}
	
	trigger up
	{
		// move the stuff up
		accum 1 set 1 // tag it up
		// ^^ tag up AFTER it's done
	}
	
	trigger down // move the door down
	{
		// move that thing down
		accum 1 set 0 // tag it down
		// ^^ tag down AFTER it's done
	}
}

Note that there’s as many ways to do this as there are people scripting :slight_smile: So it all depends on individual tastes. The code above is somehow borrowed on my flak leg moving routines.

HTH

EDIT: Oops! Forgot the spawn thing… and tweakings… damn :stuck_out_tongue:


(LaggingTom) #3

Thanks loads. Never used trigger_if_equal… so that’s probably why I didn’t. :slight_smile:

edit: But of course, there’s an error:

entity 75 already in desired state [1]
entity 76 already in desired state [0]

The new script:

	trigger lever_start
	{
		accum 0 trigger_if_equal 1 lever close
		accum 0 trigger_if_equal 2 lever open
	}

	trigger close
	{
		accum 0 set 2
		setstate plane_norm default
		setstate plane_red invisible
		trigger plane_red_door close
		trigger plane_norm_door close
		trigger lever_mover up
	}

	trigger open
	{
		accum 0 set 1
		setstate plane_norm invisible
		setstate plane_red default
		trigger plane_red_door open
		trigger plane_norm_door open
		trigger lever_mover down
	}

It opens fine, but no closing, even if in the initial routine instead of “trigger self close” to get everything in position, I use “trigger self open”

It’s becoming a real pest. :frowning:


(MadJack) #4

I might be wrong with that but if plane_norm is the parent scriptblock of those, it might play bad tricks when it’s set to invisible.

I’d have to see the whole script to be sure on that.


(Drakir) #5

I dont understand why your script isnt working. But i made another way to do the same thing for ya!

lever
{
   spawn 
   { 
      accum 0 set 2
   } 

   trigger lever_start // Guessing this is being called from a script_trigger ingame
   { 
	trigger lever close
	trigger lever open
   } 

   trigger close 
   { 
	accum 0 abort_if_not_equal 1
     	setstate plane_norm default 
     	setstate plane_red invisible 
     	trigger plane_red_door close 
     	trigger plane_norm_door close 
     	trigger lever_mover up
      	accum 0 set 2
   } 

   trigger open 
   { 
	accum 0 abort_if_not_equal 2
     	setstate plane_norm invisible 
     	setstate plane_red default 
     	trigger plane_red_door open 
     	trigger plane_norm_door open 
     	trigger lever_mover down
	accum 0 set 1
   }
}

(LaggingTom) #6

Sadly, Drakir, that wouldn’t work, because first it would close itself, then it would open. ET waits for each script to be finished its triggering until moving onto the next trigger.

The entire script:

lever
{
	spawn
	{
		wait 200
		trigger self open
	}

	trigger activate
	{
		trigger self lever_start
	}
	
	trigger lever_start
	{
		accum 0 trigger_if_equal 1 lever close
		accum 0 trigger_if_equal 2 lever open
	}

	trigger close
	{
		accum 0 set 2
		setstate plane_norm default
		setstate plane_red invisible
		trigger plane_red_door close
		trigger plane_norm_door close
		trigger lever_mover up
	}

	trigger open
	{
		accum 0 set 1
		setstate plane_norm invisible
		setstate plane_red default
		trigger plane_red_door open
		trigger plane_norm_door open
		trigger lever_mover down
	}
}

lever_mover
{
	spawn
	{
		wait 200
	}

	trigger up
	{
		gotomarker lever_up 20
	}

	trigger down
	{
		gotomarker lever_down 20
	}
}

plane_red_door
{
	spawn
	{
		wait 200
	}

	trigger open
	{
		faceangles 0 0 45 2000
		setstate plane_red_door default
	}
	
	trigger close
	{
		faceangles 0 0 0 2000
		setstate plane_red_door invisible
	}
}

plane_norm_door
{
	spawn
	{
		wait 200
	}

	trigger open
	{
		faceangles 0 0 45 2000
		setstate plane_norm_door invisible
	}
	
	trigger close
	{
		faceangles 0 0 0 2000
		setstate plane_norm_door default
	}
}

(Drakir) #7

Hmm, i found a problem…it would work the first time u open it…but when closing it would open again after closing.

As i set accum 0 to 2 in the spawn it will not run the close procedure when opened as close comes before open in the trigger part
Anyway…mind works faster than the brain…sometimes or something…bla bla…sorry for the misstake.

Here´s a copy of the hatch script from Battery…

hatch
{
	trigger use
	{
		trigger hatch open
		trigger hatch close
	}

	trigger open
	{
		accum 1 abort_if_equal 1
		accum 0 abort_if_equal 1
		accum 1 set 1
		accum 0 set 1

		wait 50
		playsound sound/movers/doors/door5_open.wav
		faceangles 0 0 270 1500

		accum 0 set 0
	}

	trigger close
	{
		accum 1 abort_if_equal 0
		accum 0 abort_if_equal 1
		accum 1 set 0
		accum 0 set 1

		wait 50
		playsound sound/movers/doors/door5_close.wav
		faceangles 0 0 0 1500
		playsound sound/movers/doors/door5_endc.wav

		accum 0 set 0
	}
}

(MadJack) #8

The main problem with using faceangles is that it’ll make visible what you are moving… So it was set invisible but was put visible right after.

I think he got it fixed now.