{Solved}Tank movement problem {Zscript}

Ask about ACS, DECORATE, ZScript, or any other scripting questions here!
Forum rules
Before asking on how to use a ZDoom feature, read the ZDoom wiki first. If you still don't understand how to use a feature, then ask here.

Please bear in mind that the people helping you do not automatically know how much you know. You may be asked to upload your project file to look at. Don't be afraid to ask questions about what things mean, but also please be patient with the people trying to help you. (And helpers, please be patient with the person you're trying to help!)
Post Reply
Collegia Titanica
Posts: 83
Joined: Thu Jan 25, 2018 1:37 pm

{Solved}Tank movement problem {Zscript}

Post by Collegia Titanica »

I have made 35 obj files of treads moving so that I could assign one per frame, since doom runs at 35 fps. The goal is to load 35 obj models per second.

Code: Select all

TNT1 A 1 {	
					If(IFV_Animation == 36)
					IFV_Animation == 1;
					 Switch(IFV_Animation)
				   {
					default:
						break;
				   case 0: IFV_Animation = 1;
				   case 1:  A_SpawnItemEx ("IFVTreads_01" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 2:  A_SpawnItemEx ("IFVTreads_02" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 3:  A_SpawnItemEx ("IFVTreads_03" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 4:  A_SpawnItemEx ("IFVTreads_04" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 5:  A_SpawnItemEx ("IFVTreads_05" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 6:  A_SpawnItemEx ("IFVTreads_06" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 7:  A_SpawnItemEx ("IFVTreads_07" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 8:  A_SpawnItemEx ("IFVTreads_08" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 9:  A_SpawnItemEx ("IFVTreads_09" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 10: A_SpawnItemEx ("IFVTreads_10" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 11: A_SpawnItemEx ("IFVTreads_11" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 12: A_SpawnItemEx ("IFVTreads_12" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 13: A_SpawnItemEx ("IFVTreads_13" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 14: A_SpawnItemEx ("IFVTreads_14" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 15: A_SpawnItemEx ("IFVTreads_15" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 16: A_SpawnItemEx ("IFVTreads_16" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 17: A_SpawnItemEx ("IFVTreads_17" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 18: A_SpawnItemEx ("IFVTreads_18" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 19: A_SpawnItemEx ("IFVTreads_19" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 20: A_SpawnItemEx ("IFVTreads_20" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 21: A_SpawnItemEx ("IFVTreads_21" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 22: A_SpawnItemEx ("IFVTreads_22" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 23: A_SpawnItemEx ("IFVTreads_23" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 24: A_SpawnItemEx ("IFVTreads_24" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 25: A_SpawnItemEx ("IFVTreads_25" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 26: A_SpawnItemEx ("IFVTreads_26" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 27: A_SpawnItemEx ("IFVTreads_27" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 28: A_SpawnItemEx ("IFVTreads_28" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 29: A_SpawnItemEx ("IFVTreads_29" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 30: A_SpawnItemEx ("IFVTreads_30" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 31: A_SpawnItemEx ("IFVTreads_31" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 32: A_SpawnItemEx ("IFVTreads_32" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 33: A_SpawnItemEx ("IFVTreads_33" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 34: A_SpawnItemEx ("IFVTreads_34" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
				   case 35: A_SpawnItemEx ("IFVTreads_35" , 0, 0, 0, 0, 0, 0, user_tankbasedirection, SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE); break;
					}
					Console.Printf("Animation: %d", IFV_Animation);
					IFV_Animation += 1;
				}
		
Problem: A_SpawnItemEx doesn't seem to spawn my actors, if I change them with the Hull actor, it works, but it doesn't spawn my treads. Each has a frame of it's own, and spawning them via console works.

Code: Select all

Class IFVTreads_08 : IFVHull
{
 States{
  Spawn: 
  IFT1 H 1;
  stop;
  }
}
Class IFVTreads_09 : IFVHull
{
 States{
  Spawn: 
  IFT1 I 1;
  stop;
  }
}

How do I make sure that when I press [W] [A] [D], the number gets incremented once per frame (max 35) and once 35 is reached, it returns to 1 AND when I stop moving, it remembers where to pick after.
Last edited by Collegia Titanica on Sun Aug 30, 2020 8:18 am, edited 1 time in total.
RaveYard
Posts: 203
Joined: Fri Apr 12, 2013 10:51 am

Re: Tank movement problem {Zscript}

Post by RaveYard »

Two things.

1. To my knowledge, there's some ancient behavior going on with actor spawning since forever. The first frame gets skipped. So when you have something like this

Code: Select all

  Spawn:
  IFT1 H 1; // this is skipped
  stop; //it ends up here
This doesn't happen when you spawn it from console.

You could do this:

Code: Select all

  Spawn:
  IFT1 H 0; //This should fix it
  IFT1 H 1;
  stop;
2. You can assign different model per frame. But animating it (not doable with .obj) could make it smoother and maybe more performance efficient... I think.

Code: Select all

Model G2_FluorescentLamp {
	Path "Models"
	SKIN 0 "FluorescentLamp.png"
	MODEL 0 "FluorescentLamp.md3"
	FrameIndex PCLL A 0 0 //First model and texture
	SKIN 0 "FluorescentLampOff.png"
	FrameIndex PCLL B 0 0 //Same model, but with different texture
	MODEL 0 "FluorescentLampBroken.md3"
	SKIN 0 "FluorescentLampBroken.png"
	FrameIndex PCLL W 0 0 //Different texture and model
}
As for your other questions: Is this a player? or is it some other kind of actor?
The animation state should be remembered because you have that variable IFV_Animation... unless you're reseting it somewhere.

Do you want WSAD keys exactly or are you after movement input? https://zdoom.org/wiki/GetPlayerInput_(DECORATE)
Collegia Titanica
Posts: 83
Joined: Thu Jan 25, 2018 1:37 pm

{Solved}Re: Tank movement problem {Zscript}

Post by Collegia Titanica »

Oh, I fixed it some time ago. Everything is working exactly as expected.
Post Reply

Return to “Scripting”