Lua based map objects, help! (BW related)
Author |
Message |
411570N3
Joined: Wed Jan 07, 2009 10:26 am Posts: 4074 Location: That quaint little British colony down south
|
Re: Lua based map objects, help! (BW related)
I thought that bullets inherited holder velocity.... Meh, people will just have to get used to doing their barrel rolls carefully...
|
Wed Apr 29, 2009 1:11 pm |
|
|
piipu
Joined: Mon Jun 30, 2008 9:13 pm Posts: 499 Location: Finland
|
Re: Lua based map objects, help! (BW related)
Hmm, looks like function Update was not capitalized. Hopefully this works. Code: function Update(self) for actor in MovableMan.Actors do local diff = math.sqrt(math.pow((actor.Pos.X-self.Pos.X),2) + math.pow((actor.Pos.Y - self.Pos.Y),2)) if diff < 10 then diff = 10 end if diff < 1300 then local diffx = actor.Pos.X - self.Pos.X local diffy = actor.Pos.Y - self.Pos.Y local ang2 = math.atan2(self.Vel.Y , self.Vel.X) local ang = math.atan2(diffy , diffx) if math.abs(ang - ang2) < (math.pi / 2) then self.Vel.Y = (self.Vel.Y + (150 / diff * math.sin(ang))) self.Vel.X = (self.Vel.X + (150 / diff * math.cos(ang))) end end end end It should suck into actors within 600 pixels of it if they are in a 180 degree area in front of the chaser. The shield thing did work I think, it just made the bullets be sucked into it It should now push anything away with a lot of speed, adjust the gravitymultiplier to a smaller value until it's balanced. Code: function Update(self)
for actor in MovableMan.Items do local diff = math.sqrt(math.pow((actor.Pos.X-self.Pos.X),2) + math.pow((actor.Pos.Y - self.Pos.Y),2)) if diff < 40 then -- the smaller the value the sharper the bullets turn when they are close diff = 40 end if diff < 200 then --maximum range local gravitymultiplier = 200 -- use this to adjust gravity to a fitting value local diffx = actor.Pos.X - self.Pos.X local diffy = actor.Pos.Y - self.Pos.Y local ang = math.atan2(diffy,diffx) actor.Vel.Y = -(actor.Vel.Y + ((gravitymultiplier / math.pow(diff,2)) * math.sin(ang))) actor.Vel.X = -(actor.Vel.X + ((gravitymultiplier / math.pow(diff,2)) * math.cos(ang))) end end
for actor in MovableMan.Particles do if (actor.HitsMOs == 1) and ( not(actor.PresetName == "Mercenary Jet Particle 1")) and ( not(actor.PresetName == "Mercenary Jet Particle 2")) and ( not(actor.PresetName == "Mercenary Jet Particle 3")) then local diff = math.sqrt(math.pow((actor.Pos.X-self.Pos.X),2) + math.pow((actor.Pos.Y - self.Pos.Y),2)) if diff < 40 then -- the smaller the value the sharper the bullets turn when they are close diff = 40 end if diff < 200 then --maximum range local gravitymultiplier = 200 -- use this to adjust gravity to a fitting value local diffx = actor.Pos.X - self.Pos.X local diffy = actor.Pos.Y - self.Pos.Y local ang = math.atan2(diffy,diffx) actor.Vel.Y = -(actor.Vel.Y - ((gravitymultiplier / math.pow(diff,2)) * math.sin(ang))) actor.Vel.X = -(actor.Vel.X - ((gravitymultiplier / math.pow(diff,2)) * math.cos(ang))) end end end
end
|
Wed Apr 29, 2009 1:54 pm |
|
|
411570N3
Joined: Wed Jan 07, 2009 10:26 am Posts: 4074 Location: That quaint little British colony down south
|
Re: Lua based map objects, help! (BW related)
Yeah, I thought that the old code just set the velocity to reverse... well I got it right... yeah... Anyway, I thought of another thing, how about a field that just teleports rounds to the other side of it?
|
Wed Apr 29, 2009 2:00 pm |
|
|
numgun
Joined: Sat Jan 13, 2007 11:04 pm Posts: 2932
|
Re: Lua based map objects, help! (BW related)
I managed to test the new code out and the chasing plasma balls work, but I dont like how their angle of vision is limited to 180 degrees. They are balls of plasma so its alright if they see always full 360. And then they are quite sluggish while flying. Is there a way to make them home on to something more accurately? Also I made a new bomb: Blackhole bomb! It uses to Lua to drag people to it like the vortex bomb and when they enter the blackhole, they are removed from the game. However, its lagging abnormally alot. It works fine with the following code, but its lagging quite much. Its ment to drag only actors and delete anything that reaches the black hole. Why does it lag so much? D : Also it doesnt lag constantly, but every other second as slowdown and a brief moment of normal play. Code: function Create(self) end
function Destroy(self) end
function Update(self) --Blackhole. Simply anything that enters into it, is gone for good. for particle in MovableMan.Particles do if (particle.Pos.X >= self.Pos.X - 75) and (particle.Pos.X <= self.Pos.X + 75) and (particle.Pos.Y >= self.Pos.Y - 76) and (particle.Pos.Y <= self.Pos.Y + 76) and (particle.PinStrength <= 0) then particle.Lifetime = 1; end end for actor in MovableMan.Actors do if (actor.Pos.X >= self.Pos.X - 75) and (actor.Pos.X <= self.Pos.X + 75) and (actor.Pos.Y >= self.Pos.Y - 76) and (actor.Pos.Y <= self.Pos.Y + 76) then actor.Lifetime = 1; end end for item in MovableMan.Items do if (item.Pos.X >= self.Pos.X - 75) and (item.Pos.X <= self.Pos.X + 75) and (item.Pos.Y >= self.Pos.Y - 76) and (item.Pos.Y <= self.Pos.Y + 76) then item.Lifetime = 1; end end
--This next bit sucks in people within a certain range into the center of the hole. for actor in MovableMan.Actors do local diff = math.sqrt(math.pow((actor.Pos.X-self.Pos.X),2) + math.pow((actor.Pos.Y - self.Pos.Y),2)) if diff < 30 then diff = 30 end if diff < 400 then local diffx = actor.Pos.X - self.Pos.X local diffy = actor.Pos.Y - self.Pos.Y local ang = math.atan2(diffy,diffx) actor.Vel.Y = actor.Vel.Y - (50 / diff * math.sin(ang)) actor.Vel.X = actor.Vel.X - (100 / diff * math.cos(ang)) end end
end
|
Wed Apr 29, 2009 5:34 pm |
|
|
piipu
Joined: Mon Jun 30, 2008 9:13 pm Posts: 499 Location: Finland
|
Re: Lua based map objects, help! (BW related)
To make it home more accuratedly, changing the field of view from 180 to 90 works. The problem is that instead of actually homing, they are gravitated towards actors. So if there are two actors a hundred pixels apart, it will home between them, not towards one or the other. Having a smaller angle means the other is likely to be ignored and it will hit the other. If the plasmaballs are destroyed on impact you could have the create function save an actor presetname that's within it's range and then have it gravitate towards actors with that presetname only, but that would be kinda hacky. Another method is to tweak the gravitating code so that the gravity will get smaller more quickly and you would have a more accurate plasmathing which would home very little if the distance is longer. I'll try this since it's easy to do with scene lua. Edit: After some fiddling I noticed that having the plasmaballs have a drunken path and a field of view of 90 degrees causes them to wander around aimlessly until they see a target and smash it. Gif:
|
Wed Apr 29, 2009 7:46 pm |
|
|
numgun
Joined: Sat Jan 13, 2007 11:04 pm Posts: 2932
|
Re: Lua based map objects, help! (BW related)
Gravitate? No wonder they were so wierd on locking on the target.
I was thinking something along the lines of "slowly move to nearest actor within 600 pixels from the plasma ball".
The plasma balls are invincible emitters that constantly emit deadly particles. They cant be shot at and they cant hit anyone. They do however, explode when their time runs out, but thats another thing. So these emitters can move into an actor, tear him up and then find a next nearest guy and continue to them. "Them" includes you too, so you must know when to use this grenade.
So how the plasma chaser grenade supposed to work: 1. After 100 ms(Timer) has passed, begin moving towards the nearest actor within 600 pixels. The delay is for the balls to allow to spread a little. 2. Continue chasing nearest actors in 600px. Speed can be a preset to something slow like 15. 3. At 6500ms, gib self.
|
Wed Apr 29, 2009 8:54 pm |
|
|
piipu
Joined: Mon Jun 30, 2008 9:13 pm Posts: 499 Location: Finland
|
Re: Lua based map objects, help! (BW related)
numgun wrote: nearest actor That's the problem. If there was some other ID than presetname to actors this wouldn't be hard. Maybe I could do it with some table fiddling, dunno.
|
Wed Apr 29, 2009 9:37 pm |
|
|
numgun
Joined: Sat Jan 13, 2007 11:04 pm Posts: 2932
|
Re: Lua based map objects, help! (BW related)
piipu wrote: numgun wrote: nearest actor That's the problem. If there was some other ID than presetname to actors this wouldn't be hard. Maybe I could do it with some table fiddling, dunno. Eh what? Cant one just make it fly at something that is an actor? It would check any actor within the range and randomly just home on to one of them if there are many. EDIT: Btw good news, I managed to make the blackhole lagless. It appears I had the blackhole and its area of effect way too large. So looks like its a good idea to keep the radius small.
|
Wed Apr 29, 2009 10:07 pm |
|
|
Geti
Joined: Sun Jul 13, 2008 9:57 am Posts: 4886 Location: some compy
|
Re: Lua based map objects, help! (BW related)
numgun wrote: No they shouldnt. I usually place the muzzleoffset a couple pixels forward where the actual barrel is and then adjust the flash with that. I'm just thinking if youre moving too fast or youre rolling barrels which you'll be doing suprisingly often in a deathmatch you might accidently shoot at your foot. mmn, that is really annoying when that happens, so id prefer it if it didnt. if it was only for a few weapons that would be okay i suppose.. for the blackhole, you should make it pump all of the mass it sucked in back out again after the effect has vanished, everything just vanishing would be a little underwhelming.. also, would it be possible for you to add a black MOSP effect of a ball shrinking down to nothing when something was sucked in, for some visual fun? make the MOSP move towards the singularity (center of the black hole) as well, if possible.. glad self.GibThis() works, im going to be making some good proxy mines next build by the look of it.
|
Thu Apr 30, 2009 1:09 am |
|
|
numgun
Joined: Sat Jan 13, 2007 11:04 pm Posts: 2932
|
Re: Lua based map objects, help! (BW related)
Hmm yes, good suggestion, I'll make it blast out a large black shockwave and a large white glow flash upon end of the blackhole. The whole bomb is pretty much classified a superweapon btw. Its pretty hilarious if you drop it in a very open place where the enemy usually lands, all the dropships get sucked in and go poof. Also after further playtesting, the repeller just didnt seem right since theres already the slowmo field bomb that pretty much stops things and has a larger range. So I talked with TLB and we came up with a funny switching teleport bomb. It takes a random actor on the scene and teleports it near or even inside another random actor. Except that wasnt intended, the real idea of it was to make it switch places between 2 random actors. Any idea how to achieve that? Just find 2 random actors on the scene and switch their locations. Code: function Destroy(self) local list = {}; for actor in MovableMan.Actors do list[#list+1] = actor; end local a = list[math.random(#list)]; local b = list[math.random(#list)]; while b.ID == a.ID do b = list[math.random(#list)]; end if MovableMan:IsActor(a) and MovableMan:IsActor(b) then local posA = a.Pos; local posB = b.Pos; a.Pos = posB; b.Pos = posA; end end
|
Thu Apr 30, 2009 8:35 am |
|
|
411570N3
Joined: Wed Jan 07, 2009 10:26 am Posts: 4074 Location: That quaint little British colony down south
|
Re: Lua based map objects, help! (BW related)
Would that do it fast enough for there to be no issues with the two actors being in exactly the same place?
Also, I have another idea: a weapon that, when it hits an actor, causes any particlese in the vicinity gravitate to them. It'd make them easier to hit, take the brunt of explosions and increase the damage of well aimed shots.
|
Thu Apr 30, 2009 8:48 am |
|
|
mail2345
Joined: Tue Nov 06, 2007 6:58 am Posts: 2054
|
Re: Lua based map objects, help! (BW related)
numgun wrote: Hmm yes, good suggestion, I'll make it blast out a large black shockwave and a large white glow flash upon end of the blackhole. The whole bomb is pretty much classified a superweapon btw. Its pretty hilarious if you drop it in a very open place where the enemy usually lands, all the dropships get sucked in and go poof. Also after further playtesting, the repeller just didnt seem right since theres already the slowmo field bomb that pretty much stops things and has a larger range. So I talked with TLB and we came up with a funny switching teleport bomb. It takes a random actor on the scene and teleports it near or even inside another random actor. Except that wasnt intended, the real idea of it was to make it switch places between 2 random actors. Any idea how to achieve that? Just find 2 random actors on the scene and switch their locations. Code: function Destroy(self) local list = {}; for actor in MovableMan.Actors do list[#list+1] = actor; end local a = list[math.random(#list)]; local b = list[math.random(#list)]; while b.ID == a.ID do b = list[math.random(#list)]; end if MovableMan:IsActor(a) and MovableMan:IsActor(b) then local posA = a.Pos; local posB = b.Pos; a.Pos = posB; b.Pos = posA; end end I think it has to do with how everything in lua is a pointer. So I have it make a new vector position. Try: Code: function Destroy(self) local list = {}; for actor in MovableMan.Actors do list[#list+1] = actor; end local a = list[math.random(#list)]; local b = list[math.random(#list)]; while b.ID == a.ID do b = list[math.random(#list)]; end if MovableMan:IsActor(a) and MovableMan:IsActor(b) then local posA = Vector(a.Pos.X,a.Pos.Y); local posB = Vector(b.Pos.X,b.Pos.Y); a.Pos = posB; b.Pos = posA; end end
|
Thu Apr 30, 2009 9:15 am |
|
|
numgun
Joined: Sat Jan 13, 2007 11:04 pm Posts: 2932
|
Re: Lua based map objects, help! (BW related)
The script crashes the game if there is only 1 actor on the scene. Aka if nothing to teleport, it goes bananas.
|
Thu Apr 30, 2009 3:45 pm |
|
|
mail2345
Joined: Tue Nov 06, 2007 6:58 am Posts: 2054
|
Re: Lua based map objects, help! (BW related)
Oh, I forgot: Code: function Destroy(self) local list = {}; for actor in MovableMan.Actors do list[#list+1] = actor; end if #list > 1 then local a = list[math.random(#list)]; local b = list[math.random(#list)]; while b.ID == a.ID do b = list[math.random(#list)]; end if MovableMan:IsActor(a) and MovableMan:IsActor(b) then local posA = Vector(a.Pos.X,a.Pos.Y); local posB = Vector(b.Pos.X,b.Pos.Y); a.Pos = posB; b.Pos = posA; end end
|
Fri May 01, 2009 6:12 am |
|
|
numgun
Joined: Sat Jan 13, 2007 11:04 pm Posts: 2932
|
Re: Lua based map objects, help! (BW related)
Alright, everything works like it should but a couple problems have arisen: The accelerator device which is ment to accelerate particles like bullets and bomb/missiles(for increased damage) is affecting terrain particles too. How to prevent it from affecting terrain debris? See the following picture to see what I mean. I shoot and the terrain debris that are knocked loose start accelerating and bouncing like there's no tommorow: Code: Code: function Create(self) end
function Destroy(self) end
function Update(self) --Particle accelerator. --Any particle or item traveling through this module gets its velocity multiplied by 6. :D --for item in MovableMan.Items do -- if (item.Pos.X >= self.Pos.X - 24) and (item.Pos.X <= self.Pos.X + 24) and (item.Pos.Y >= self.Pos.Y - 25) and (item.Pos.Y <= self.Pos.Y + 25) and (item.PinStrength <= 0) then -- item.Vel.Y = (item.Vel.Y * 1.4); -- item.Vel.X = (item.Vel.X * 1.4); -- end --end for particle in MovableMan.Particles do if (particle.Pos.X >= self.Pos.X - 24) and (particle.Pos.X <= self.Pos.X + 24) and (particle.Pos.Y >= self.Pos.Y - 25) and (particle.Pos.Y <= self.Pos.Y + 25) and (particle.PinStrength <= 0) and (particle.HitsMOs == 1) then particle.Vel.Y = (particle.Vel.Y * 6); particle.Vel.X = (particle.Vel.X * 6); end end end Then another small thing, how do I make the intensity of the pull more powerful on the blackhole grenade? Which of these variables control the power of pull? Code: --This next bit sucks in people within a certain range into the center of the hole. for actor in MovableMan.Actors do local diff = math.sqrt(math.pow((actor.Pos.X-self.Pos.X),2) + math.pow((actor.Pos.Y - self.Pos.Y),2)) if diff < 30 then diff = 30 end if diff < 700 then local diffx = actor.Pos.X - self.Pos.X local diffy = actor.Pos.Y - self.Pos.Y local ang = math.atan2(diffy,diffx) actor.Vel.Y = actor.Vel.Y - (50 / diff * math.sin(ang)) actor.Vel.X = actor.Vel.X - (100 / diff * math.cos(ang)) end end if self.LTimer:IsPastSimMS(24000) then self:GibThis() ; end
|
Mon May 04, 2009 12:33 pm |
|
|
|
Who is online |
Users browsing this forum: No registered users |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|