|
|
function not effecting neighbour
#322138
05/04/10 21:17
05/04/10 21:17
|
Joined: Dec 2009
Posts: 361
rtsgamer706
OP
Senior Member
|
OP
Senior Member
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

3D Artist
|

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
Expert
|
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: rtsgamer706]
#322153
05/04/10 23:45
05/04/10 23:45
|
Joined: Jan 2002
Posts: 4,225 Germany / Essen
Uhrwerk
Expert
|
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
rtsgamer706
OP
Senior Member
|
OP
Senior Member
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
Expert
|
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
rtsgamer706
OP
Senior Member
|
OP
Senior Member
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
|
|
|
Moderated by mk_1, Perro, rayp, Realspawn, Rei_Ayanami, rvL_eXile, Spirit, Superku, Tobias, TSG_Torsten, VeT
|