Gamestudio Links
Zorro Links
Newest Posts
WFO Training with parallel cores Zorro64
by Martin_HH. 02/24/26 19:51
Zorro version 3.0 prerelease!
by TipmyPip. 02/24/26 17:09
ZorroGPT
by TipmyPip. 02/23/26 21:52
Camera always moves upwards?
by clonman. 02/21/26 09:29
Sam Foster Sound | Experienced Game Composer for Hire
by titanicpiano14. 02/19/26 13:22
AUM Magazine
Latest Screens
Dorifto samurai
Shadow 2
Rocker`s Revenge
Stug 3 Stormartillery
Who's Online Now
5 registered members (Martin_HH, TipmyPip, AndrewAMD, Grant, USER0328), 5,287 guests, and 2 spiders.
Key: Admin, Global Mod, Mod
Newest Members
alx, ApprenticeInMuc, PatrickH90, USER0328, Sfrdragon
19199 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 2 1 2
function not effecting neighbour #322138
05/04/10 21:17
05/04/10 21:17
Joined: Dec 2009
Posts: 361
R
rtsgamer706 Offline OP
Senior Member
rtsgamer706  Offline OP
Senior Member
R

Joined: Dec 2009
Posts: 361
I am a programmer working with the free version of lite-c.
I am making a simple action game but I have hit an odd problem.
I am trying to get my enemies to move but have had many errors with that. I have figured out a way to avoid the problems: put the move command in another function. My problem is that it still doesn't work. I have the following code:

ENTITY* ene;

action invader_one()
{
my.pan = -90;
ene = me;
my.emask |= (ENABLE_IMPACT);
c_setminmax(me);
my.event = explode;
}

action invader_ai()
{
c_move (ene, vector(-100, 0, 0), nullvector, GLIDE); // move invaders
wait(-1);
c_move (ene, vector(-100, 0, 0), nullvector, GLIDE); // move invaders
}

in that order. I have a control entity running "invader_ai" and
all my invader entities are running "invader_one".
What should happen is the invaders start a bit off the one side wait one second and them move jump to the side.
What does happen is absolutely nothing.
The invaders stay put! Please help!
P.S. I know the move...pause...move code is good its just that the function is for some reason not effecting the invaders.
Thanks for the help
rtsgamer706

Re: function not effecting neighbour [Re: rtsgamer706] #322143
05/04/10 21:26
05/04/10 21:26
Joined: Apr 2005
Posts: 3,076
Germany, NRW
rvL_eXile Offline

3D Artist
rvL_eXile  Offline

3D Artist

Joined: Apr 2005
Posts: 3,076
Germany, NRW
you missed a "while" in your Action... Put the C_move into a While ...

cYa Sebastian


Tutorials:
[Blender]Terrain creation ENG/GER
[Blender]Low Poly Tree Modeling
[GIMP]Create a Texture for Terrains
CLICK HERE


Re: function not effecting neighbour [Re: rtsgamer706] #322144
05/04/10 21:26
05/04/10 21:26
Joined: Jan 2002
Posts: 4,225
Germany / Essen
Uhrwerk Offline
Expert
Uhrwerk  Offline
Expert

Joined: Jan 2002
Posts: 4,225
Germany / Essen
Moving the call of c_move to another function for sure did not solve your problem. There must have been an other side effect that causes the difference. You can call any function from any other function. Two points:

1. Are you aware you overwrite the pointer ene every time invader_one() is called? A pointer can only point to one other thing, no to multiples.

2. Are you aware your function invader_ai() is never called in the code you present us here and may never be executed?


Always learn from history, to be sure you make the same mistakes again...
Re: function not effecting neighbour [Re: Uhrwerk] #322145
05/04/10 21:38
05/04/10 21:38
Joined: Dec 2009
Posts: 361
R
rtsgamer706 Offline OP
Senior Member
rtsgamer706  Offline OP
Senior Member
R

Joined: Dec 2009
Posts: 361
I added the while loop... no difference.
I am aware that I didn't show you the line:

ent_create("invader_III.mdl", vector (0, 0, 6520), invader_ai); //create a control

but I can assure you that it's there.
Secondly what do you mean by the pointer is overwrote?
I have 24 entities running invader_one at once is that causing my problem? if so how can I fix it.
Thanks rtsgamer706

Re: function not effecting neighbour [Re: rtsgamer706] #322148
05/04/10 22:30
05/04/10 22:30
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline
Senior Expert
Superku  Offline
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
You should read the online tutorial, at least Workshop 10: Actions. When you invest some minutes/ hours in these tutorials, it will speed up your development and learning curve many times over.


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: function not effecting neighbour [Re: Superku] #322151
05/04/10 23:24
05/04/10 23:24
Joined: Dec 2009
Posts: 361
R
rtsgamer706 Offline OP
Senior Member
rtsgamer706  Offline OP
Senior Member
R

Joined: Dec 2009
Posts: 361
I did all the tutorials before I started programming but thanks for the suggestion.
Please tell me how to fix my probelm.
thanks rtsgamer706

Re: function not effecting neighbour [Re: rtsgamer706] #322153
05/04/10 23:45
05/04/10 23:45
Joined: Jan 2002
Posts: 4,225
Germany / Essen
Uhrwerk Offline
Expert
Uhrwerk  Offline
Expert

Joined: Jan 2002
Posts: 4,225
Germany / Essen
Your action invader_ai moves exactly one entity. No more. Replace "ene" in invader_ai by me. This should work. And don't forget the while loop.

If you have this line

ent_create("invader_III.mdl", vector (0, 0, 6520), invader_ai); //create a control

in your code all your entities will run with invader_ai. Not invader_one as you previously stated. I can only agree with Superku. Follow his advice. I have the feeling you really missed some basics.


Always learn from history, to be sure you make the same mistakes again...
Re: function not effecting neighbour [Re: Uhrwerk] #322156
05/05/10 00:28
05/05/10 00:28
Joined: Dec 2009
Posts: 361
R
rtsgamer706 Offline OP
Senior Member
rtsgamer706  Offline OP
Senior Member
R

Joined: Dec 2009
Posts: 361
why would all my invaders run invader_ai? all my invaders are running invader_one.
I just used an invader model to create the control.
The following is my function main:

function main()
{
video_screen = 1;
video_mode = 7;
level_load ("");
ent_create("tank.mdl", vector (0, 50, -300), si_tank); //create your tank
ent_create("invader_I.mdl", vector (0, 750, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, 550, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, 350, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, 150, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, -50, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, -250, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, -450, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, -650, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, -8050, 300), invader_one); //create an enemy
////////////////////////////////////////////////////////////////////////////////////////
ent_create("invader_II.mdl", vector (0, 750, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, 550, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, 350, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, 150, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, -50, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, -250, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, -450, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, -650, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, -8050, 400), invader_one); //create an enemy
////////////////////////////////////////////////////////////////////////////////////////
ent_create("invader_III.mdl", vector (0, 750, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, 550, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, 350, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, 150, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, -50, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, -250, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, -450, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, -650, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, -8050, 520), invader_one); //create an enemy
////////////////////////////////////////////////////////////////////////////////////////
ent_create("invader_III.mdl", vector (0, 0, 6520), invader_ai); //create a control
ent_create("bg_black.mdl", vector (1000, 0, 0), NULL); //create the black BG
vec_set(camera.x, vector (-1900, 0, 200)); // set a proper camera position
}

I am assuming all the invaders with invader_one attached to them are running invader_one am I wrong?
Anyway...
Your advice is bringing me back to my old problems.
If I change ene to me then only my control entity moves not my invaders.
If I put the move code in invader_one then I get a message that pops up at the begging of my game saying:

invalid arguments in explode

here is some more of my code which you should know:
action explode()
{
if(event_type == EVENT_IMPACT)
{
ent_morph(me, "pixlexplo.mdl");
wait(1);
ent_remove(missile);
wait (-0.25);
ent_remove(me);
missile_on = 0;
}
}

action invader_one()
{
my.pan = -90;
ene = me;
my.emask |= (ENABLE_IMPACT);
c_setminmax(me);
my.event = explode;
//////////////////////////////////
c_move (me, vector(-100, 0, 0), nullvector, GLIDE); // move invaders
wait(-1);
c_move (me, vector(100, 0, 0), nullvector, GLIDE); // move invaders
wait(-1);
c_move (me, vector(100, 0, 0), nullvector, GLIDE); // move invaders
wait(-1);
c_move (me, vector(100, 0, 0), nullvector, GLIDE); // move invaders
wait(-1);
c_move (me, vector(100, 0, 0), nullvector, GLIDE); // move invaders
wait(-1);
c_move (me, vector(100, 0, 0), nullvector, GLIDE); // move invaders
wait(1);
}

I am assuming the error is in the fact that over 20 entities are running invader_one.
Please correct me if I'm wrong.
lastly I didn't miss basics in the tutorials I just didn't tell you all my code so we misunderstood each other.
I hope there are no more misunderstandings. Sorry for the inconvenience.
rtsgamer706

Re: function not effecting neighbour [Re: rtsgamer706] #322159
05/05/10 00:48
05/05/10 00:48
Joined: Jan 2002
Posts: 4,225
Germany / Essen
Uhrwerk Offline
Expert
Uhrwerk  Offline
Expert

Joined: Jan 2002
Posts: 4,225
Germany / Essen
Sorry, I don't get it. What ist the pointer "ene" good for. For what purpose did you create it. What does the function invader_ai contain right now? Would you mind posting all your code inside code tags. Without text inbetween? That would make it much easier. If the action invader_one contains the code shown above inlcuding the part after the line with the "///////" then your invaders should move - at least 6 times.

I especially dont understand what you intend to do with the line: "ent_create("invader_III.mdl", vector (0, 0, 6520), invader_ai); //create a control". What does control mean to you here?


Always learn from history, to be sure you make the same mistakes again...
Re: function not effecting neighbour [Re: Uhrwerk] #322161
05/05/10 00:59
05/05/10 00:59
Joined: Dec 2009
Posts: 361
R
rtsgamer706 Offline OP
Senior Member
rtsgamer706  Offline OP
Senior Member
R

Joined: Dec 2009
Posts: 361
I'm sorry for being unclear here is all my code:




//////////////////////////////////////////////////////////////////////
//Alien Invaders
//////////////////////////////////////////////////////////////////////
////////////////////////////*SEMICOLIN*///////////////////////////////
//////////////////////////////////////////////////////////////////////
ENTITY* tank;
//////////////////////////////////////////////////////////////////////
ENTITY* missile;
//////////////////////////////////////////////////////////////////////
ENTITY* ene;
//////////////////////////////////////////////////////////////////////


var missile_on = 0;

action explode()
{
if(event_type == EVENT_IMPACT)
{
ent_morph(me, "pixlexplo.mdl");
wait(1);
ent_remove(missile);
wait (-0.25);
ent_remove(me);
missile_on = 0;
}
}

action invader_one()
{
my.pan = -90;
ene = me;
my.emask |= (ENABLE_IMPACT);
c_setminmax(me);
my.event = explode;
//////////////////////////////////
c_move (me, vector(-100, 0, 0), nullvector, GLIDE); // move invaders
wait(-1);
c_move (me, vector(100, 0, 0), nullvector, GLIDE); // move invaders
wait(-1);
c_move (me, vector(100, 0, 0), nullvector, GLIDE); // move invaders
wait(-1);
c_move (me, vector(100, 0, 0), nullvector, GLIDE); // move invaders
wait(-1);
c_move (me, vector(100, 0, 0), nullvector, GLIDE); // move invaders
wait(-1);
c_move (me, vector(100, 0, 0), nullvector, GLIDE); // move invaders
wait(1);
}

action invader_ai()
{

}

action rocket()
{
my.emask |= (ENABLE_IMPACT);
missile = me;
missile_on += 120;
var there = 1;
// my.event = miss_boom;
while (1)
{
c_move (my, vector(0*time_step, 0,11), nullvector, GLIDE); // move the rocket up
if (there == 1)
missile_on -= 1;
if (missile_on <= 0)
{
missile_on = 0;
there = 0;
// ent_remove(me);
}
if(event_type == EVENT_IMPACT || event_type == EVENT_ENTITY)
{
ent_remove(me);
}
wait(1);
}
}

action si_tank()
{
tank = me;
while (1)
{
if (key_cur)
{
c_move (my, vector(0*time_step, -5.5, 0), nullvector, GLIDE); // move the tank right
}

if (key_cul)
{
c_move (my, vector(0*time_step, 5.5, 0), nullvector, GLIDE); // move the tank left
}

if (key_space)
{
if (missile_on <= 1)
ent_create("si_rocket.mdl", vector (me.x, me.y, me.z+70), rocket); //create your tank
}
wait (1);
}
}

function main()
{
video_screen = 1;
video_mode = 7;
level_load ("");
ent_create("tank.mdl", vector (0, 50, -300), si_tank); //create your tank
ent_create("invader_I.mdl", vector (0, 750, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, 550, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, 350, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, 150, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, -50, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, -250, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, -450, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, -650, 300), invader_one); //create an enemy
ent_create("invader_I.mdl", vector (0, -8050, 300), invader_one); //create an enemy
////////////////////////////////////////////////////////////////////////////////////////
ent_create("invader_II.mdl", vector (0, 750, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, 550, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, 350, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, 150, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, -50, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, -250, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, -450, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, -650, 400), invader_one); //create an enemy
ent_create("invader_II.mdl", vector (0, -8050, 400), invader_one); //create an enemy
////////////////////////////////////////////////////////////////////////////////////////
ent_create("invader_III.mdl", vector (0, 750, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, 550, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, 350, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, 150, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, -50, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, -250, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, -450, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, -650, 520), invader_one); //create an enemy
ent_create("invader_III.mdl", vector (0, -8050, 520), invader_one); //create an enemy
////////////////////////////////////////////////////////////////////////////////////////
ent_create("invader_III.mdl", vector (0, 0, 6520), invader_ai); //create a control
ent_create("bg_black.mdl", vector (1000, 0, 0), NULL); //create the black BG
vec_set(camera.x, vector (-1900, 0, 200)); // set a proper camera position
}


Firstly I am no longer using the control. (as you can see invader_ai is empty)
I was trying to use it before but I am now trying to work with putting the move command in the invader_one action.
I gave my invaders a pointer so I could have easier programming for other actions that effect the invaders (which I haven't done yet).
Finally I sympathize with you as I don't understand why it doesn't work. They should move about six times but I get an error. That is why I am asking this question on the forum.
Thanks for the help with the crazy code.
rtsgamer706

Page 1 of 2 1 2

Gamestudio download | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1