Duke4.net Forums: EDuke32 Scripting - Duke4.net Forums

Jump to content

  • 93 Pages +
  • « First
  • 91
  • 92
  • 93
  • You cannot start a new topic
  • You cannot reply to this topic

EDuke32 Scripting  "CON coding help"

User is offline   jimbob 

#2761

awesome :D
0

User is offline   jimbob 

#2762

View PostDanukem, on 19 August 2021 - 12:44 PM, said:

When I get some time I will put an example on the wiki (remind me if the weekend goes by and its still not there). Otherwise, if I post some code for you here, it will just be lost in time like so many other code snippets.

EDIT: You could also start the loop with "for spritesofstatus 1" which might be easier for you to get your head around:

https://wiki.eduke32.com/wiki/For

ive gotten it to work for like 80%, the actor moves towards the right point, ignores other points with a 'wrong' hitag value and clearly reaches the destination ( it sets off an explosion ) but then just keeps going in that direction, the loop doesnt seem to restart with the new COUNT +1 :/ the code could be heavily condensed with this method though.

TEMP in this context is the waypoint, and THISACTOR is whoever needs to go to the waypoint.
state navigate // navigate to the waypoint. 
for TEMP sprofstat 1 { getactor[TEMP].hitag MHITAG  ldist xydist THISACTOR TEMP }
ifvarvare MHITAG COUNT  // make sure the waypoint he is going to is the next sequential one, so he doesnt backtrack.
                                             // IE only find nearactor with a hightag the count currently has, one at a time.
	{
       		 getactor[TEMP].x MX
       		 getactor[TEMP].y MY
       		 getactor[THISACTOR].x x
       		 getactor[THISACTOR].y y
       		 subvarvar MX x
       		 subvarvar MY y
       		 getangle ANGVAR MX MY
       		 setactor[THISACTOR].ang ANGVAR
					ifl xydist 512
					ifvarvare MHITAG COUNT  // add 1 to count only if the current waypoint has the same value as the one where the player was moving towards, 
                                        // used to prevent a retrigger causing the count to rise 1 every tick the actor is within the set distance
					{
						addvar COUNT 1
						spawn EXPLOSION2
						break // force restart of the subroutine
					}

	}
ends


maybe it needs an actor side restart? say if the xydist is lower than 512 run the state again in the actors code?

This post has been edited by jimbob: 21 August 2021 - 08:09 AM

0

User is offline   Danukem 

  • Duke Plus Developer

#2763

You should be getting the hitags of the waypoints into a per actor var using eventloadactor, and then checking the var of the waypoint against the COUNT var. Right now you are pulling the actual hitag, and I'm guessing those are all zero. To be clear: you are using getactor[TEMP].hitag when you should be using getav[TEMP].hitag.

That would explain why it keeps going straight -- you increment COUNT but then no sprites in the map actually have the next hitag of 1.

Also, you need to check for the picnum before checking tags, because right now ANY sprite of statnum 1 with the right hitag will be seen as a target.
0

User is offline   jimbob 

#2764

i have my waypoints set up like a path for the recon car, i manually set the hightag for each pathnode with the apropriate hightag starting at 0 then 1 etc.
for now my code works for like 90% again, it sees the waypoint sprite, gets the angle, moves towards it, when he reaches it does an explosion and then again just keeps going straight. i used some setactor flag to change the pal for some steps so i can visually check what the actor is doing.

anyway, here's my piece of frankencode, im going to bed, not feeling too great meaning i cant focus right. :o

onevent EVENT_LOADACTOR 
//	switch sprite[].picnum // other way of checking the picnum, seems needlessly complicated.
//		case WAYPOINT
ifactor WAYPOINT
			{	
			    getactor[].hitag MHITAG
			    getactor[].lotag MLOTAG
			    // setactor[].hitag ZERO // resetting to zero seems counter intuitive to what i need.
			    // setactor[].lotag ZERO

			
			}
//		break
//	endswitch
endevent


state navigate
for TEMP sprofstat 1   
ife sprite[TEMP].picnum 5427
			{ 
				setactor[THISACTOR].pal 2 // if found the node, turn angry and try to grab it.
				getav[TEMP].HITAG MHITAG  
				ldist xydist THISACTOR TEMP 
			}
ifvarvare MHITAG COUNT  // make sure the waypoint he is going to is the next sequential one, so he doesnt backtrack. 
//IE only find nearactor with a hightag the count currently has, one at a time.
// ife sprite[TEMP].hitag COUNT 
	{
		
       		 getactor[TEMP].x MX
       		 getactor[TEMP].y MY
       		 getactor[THISACTOR].x x
       		 getactor[THISACTOR].y y
       		 subvarvar MX x
       		 subvarvar MY y
       		 getangle ANGVAR MX MY
       		 setactor[THISACTOR].ang ANGVAR

			{ 
				getav[TEMP].HITAG MHITAG  
				ldist xydist THISACTOR TEMP 
			} 
	}
else break

					ifl xydist 512
				 	ife sprite[TEMP].hitag COUNT 
					// ifvarvare MHITAG COUNT 
// add 1 to count only if the current waypoint has the same value as the one where the player was moving towards, 
// used to prevent a retrigger causing the count to rise 1 every tick the actor is within the set distance
					{
						setactor[THISACTOR].pal 1 // visual check, does he reach the point and stay in this line of code?
// it apears not. he immediatly turns to spritepal 2 again after briefly flashing blue. 
/// IE once the nasty node has been grabbed and destroyed move to the next one.
						addvar COUNT 1
						spawn EXPLOSION2
						break // force restart of the subroutine
					}
break
ends



This post has been edited by jimbob: 22 August 2021 - 03:22 PM

0

User is offline   Danukem 

  • Duke Plus Developer

#2765

I've got my own projects to worry about so I'm not spending any more time on this. The one piece of advice I will give you is you need to do more debugging than just spawning an explosion when the actor reaches the first waypoint. You need to be logging vars at key points to check what is going on.
0

User is offline   jimbob 

#2766

View PostDanukem, on 22 August 2021 - 04:34 PM, said:

I've got my own projects to worry about so I'm not spending any more time on this. The one piece of advice I will give you is you need to do more debugging than just spawning an explosion when the actor reaches the first waypoint. You need to be logging vars at key points to check what is going on.

adding logvars helped, managed to track down the issue and now have a working system.

state navigate
for temp sprofstat 1
ife sprite[temp].picnum WAYPOINT
                        { 
				getav[THISACTOR].COUNT COUNT 
				getactor[temp].htowner NODE 
				getactor[temp].hitag FOUNDHITAG
				ifvarvare FOUNDHITAG COUNT
					{
						addlogvar COUNT
						addlogvar FOUNDHITAG
						addlogvar NODE
					}
						ifvarvare FOUNDHITAG COUNT
						{

						        {              
						                 getactor[NODE].x MX
						                 getactor[NODE].y MY	
						                 getactor[THISACTOR].x x	
						                 getactor[THISACTOR].y y
						                 subvarvar MX x
						                 subvarvar MY y
						                 getangle ANGVAR MX MY
						                 setactor[THISACTOR].ang ANGVAR

						                        { 
										getactor[temp].htowner NODE 
						                                getav[NODE].FOUNDHITAG FOUNDHITAG 
						                                ldist xydist THISACTOR temp
						                        } 
										ifl xydist 512
						                        		{
						                                                addvar COUNT 1										
						                                        }
						        }
				
                      		  }
				
			}


ends

1

User is offline   jimbob 

#2767

quick question, how can i make an actor be affected by the masterswitch and or activator? i want my waypoint to be able to be 'switchable' for example, i want actors to stop navigating ( or waiting ) when a certain condition is not met. like a wall that has to be blown up, or a gate to be opened. imho the easiest way is to have a pal switch so when the pal is 1 the actor waits, but after doing X and the activator is activated, switch to pal 0 wich gives the OK to move ahead. right now the actors are piling up on a wall so i need a way to halt them.

another way would be a line of sight check, i tried that but for whatever reason they always seem to come back positive. :/
0

User is offline   Danukem 

  • Duke Plus Developer

#2768

https://wiki.eduke32...activatormotion

You can check for an activator being triggered using that.

Make sure that you test your ability to detect the activation separately from your code that makes the actors wait. I would use ifhitspace to trigger the waiting mechanic first just to make sure it works properly, then change it to trigger on the activator once you have it working. Otherwise if you test everything at once and then the inevitable failures occur you won't know where it is breaking.
0

User is offline   jimbob 

#2769

so activatormotion doesnt mean physical motion, but rather 'switching' motion? well even if it is i can just make a simple 2way train with it i guess. i came across that but it didnt seem like what i needed. guess i was wrong. thanks :)

This post has been edited by jimbob: 09 September 2021 - 11:02 AM

0

User is offline   Danukem 

  • Duke Plus Developer

#2770

You could also set a gamevar when a switch is used by checking its picnum, or have it set when a crack is blown up or whatever the condition is. You don't have to use checkactivatormotion, I just mentioned it because you specifically asked about activators.
0

Share this topic:


  • 93 Pages +
  • « First
  • 91
  • 92
  • 93
  • You cannot start a new topic
  • You cannot reply to this topic


All copyrights and trademarks not owned by Voidpoint, LLC are the sole property of their respective owners. Play Ion Fury! ;) © Voidpoint, LLC

Enter your sign in name and password


Sign in options