This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Messages - Clickbeetle
Pages: 1 ... 34 35 36 37 38 39 40 [41] 42 43 44 45 46 47 48 ... 174
801
« on: September 03, 2011, 10:08:13 PM »
OK I've got all the bots AI'd except Trovaner's (because the AI he sent me is crashing) and Naryar's. Filming should commence within the week.
802
« on: August 28, 2011, 10:09:56 PM »
Problem. I tried AI'ing my entry for this, which uses the custom thrusters, and there are some major issues: - The thrusters are WAAAAY more powerful when the AI uses them than when a human uses them. - The AI can only use the thrusters at +100 power. If the AI is told to use them at any other value, say -50, it still inputs +100 anyway. - It's really annoying getting the AI to turn off the thrusters once activated. My entry is supposed to pulse its thrusters on and off, but it just keeps them on and doesn't turn them off until the enemy is out of range (I'm almost certain this isn't just a Python mistake as I've tried about 5 different methods of making it work). You may want to consider not allowing those thrusters. It's possible to work around those issues, but they're going to be seriously overpowered and it's going to be a pain AI'ing certain bots (like bots that use thrusters for drive... though you may want to double check that thrusters for drive have the same issues as thrusters for weapons. RA2 is weird; maybe thruster-drive bots would work.)
803
« on: August 28, 2011, 12:59:01 AM »
Oh, I just assumed the numbers would alternate correctly to prevent rematches. Didn't look at the bracket as a whole. Guess I've got Bubbleman next then. I've already beaten one flipper so I know I can win this... however I also know that Bubbles can win this. There are no guarantees when flippers are involved...
804
« on: August 27, 2011, 11:51:27 PM »
So THAT's what wimpy.wav is for. I always wondered where that sound was used. I didn't even know most of those bots existed... I only knew about Gammaraze and Omnivore because the skins can still be found in the new version.
805
« on: August 27, 2011, 11:41:10 PM »
Maybe the more specific version would be related to long wedges that are essentially parallel to the combat surface.
Yeah that's more what I was thinking of.
806
« on: August 27, 2011, 11:32:06 PM »
Wait I'm confused about the bracket. It says "Loser to 36" for my fight with R0B0. And the spot numbered 36 in the loser's bracket would put me against Mike. Are you not following the numbers? Whoa, think about this. Rammers tend to do well against wedgeless VS, so Guitars has a decent chance of beating VB. G.K. vs. R0B0 is basically a wedge war and could go either way. Suppose G.K. wins. G.K. has a weak link in the flippers (those 20cm aluminum extenders) and also a bit of exposed chassis. If Guitars can avoid getting flipped out right away, 3 or 4 good hits might be all it takes to cripple G.K. Sure it's still a long shot, but it's conceivable. That would put Guitars in the grand final. That would be pretty hilarious if an 11 year old girl who's not even a registered member and who hasn't even built any other bots that we know of won a tournament against all these experienced guys in their teens and twenties who think they're all great and powerful. It's like something out of a bad anime.
807
« on: August 27, 2011, 10:27:19 PM »
LOL great music choice for that match. Amazing how the lyrics line up just right so it says "Watch me exploooooooode..." right when the first Havok explosion happens. Battle 4's havok was really weird. It didn't look like a Runtime Error havok, but if Minesweeper didn't lose any motors... couldn't be much else.
808
« on: August 27, 2011, 09:13:01 PM »
Some of the bots in here I wouldn't have allowed as IRL realistic. I guess some of us have different standards. Regardless, I'm pretty happy with my matchup. No bots that I'm totally doomed against.
809
« on: August 27, 2011, 08:49:40 PM »
Whups, forgot to try and make a new Bisector. Oh well, we'll see how the original does when you don't have your trolly extender in the front.
810
« on: August 27, 2011, 08:35:47 PM »
Ah. Those bots don't work because they're not upside-down enough. The AI still thinks they're right side up. You can use this handy bit of code FB used for Seism 13:
if list(plus.getDirection(self.GetID(),0))[1]>0.9: self.Input("Srimech", 0, 1)
Just throw that in def Tick somewhere. It tells the AI to fire the srimech if the Y direction is pointing sideways (=the bot is stuck on its side or rear).
811
« on: August 27, 2011, 08:17:39 PM »
I think a good guideline for IRL realistic is if you can find a real life example of what you're trying to do, it should be allowed. If the realism is at all debatable and you can't find a real life example, it's not allowed. Example: Flails do exist in real life. There are several examples of bots with 2 flails on a spinner. But 8 flails? No. Similarly, hinged wedges/forks do exist in real life. But huge long 120cm angled sheets? That's taking it too far.
812
« on: August 27, 2011, 08:01:55 PM »
This has been posted before, it's a false alarm. The offending file is INF1.exe, which is the Infogrames registration service. Perfectly harmless and definitely NOT A VIRUS.
813
« on: August 27, 2011, 07:49:36 PM »
No weapons line, would that affect it?
Yes, the AI is told to only spin if it still has weapons. If there is no 'weapons' line, the AI doesn't know that it has any weapons and it won't spin. If you don't want to actually have any real weapons set, just use 'weapons':(0,) The reason the AI never stops spinning once they start is because button controls are almost impossible to turn off once activated. Edit: i ai-ed a pushy bot with a snowplow that fails. it's wired correctly, it faces the right way, but this is what it does.
it drives toward me, backs up, then drives staright into a corner. help?
What .py are you using? Does it eventually drive out of the corner or does it just stay there? Does the AI ever turn? It may also help to post the bindings you're using. Answer those questions and someone may be able to help.
814
« on: August 27, 2011, 07:39:55 PM »
'nuther bump. You can replace "flipper1.bmp" with "flipper1.tga", (though it's actually named "emergency_flipper.bmp") but there's one extra step you need to do in order to get transparency. Copy the whole texture like this
*TEXTURE { *MAP_NAME Map #10 *MAP_CLASS Bitmap *BITMAP emergency_flipper.tga *MAP_AMOUNT 1 *MAP_DIFFUSE *MAP_TYPE Screen *UVW_U_OFFSET 0 *UVW_V_OFFSET 0 *UVW_U_TILING 1 *UVW_V_TILING 1 *UVW_ANGLE 0 *UVW_BLUR 1 *UVW_BLUR_OFFSET 0 *UVW_NOISE_AMT 1 *UVW_NOISE_SIZE 1 *UVW_NOISE_LEVEL 1 *UVW_NOISE_PHASE 0 *BITMAP_FILTER Pyramidal *BITMAP_MAP_CHANNEL 1 }
and paste it directly underneath, so you have two textures. Now change MAP_DIFFUSE to MAP_OPACITY in the second texture. This tells the game to apply that texture as an opacity map instead of a color map. Finally, find where it says *TEXTURE_COUNT 1 above the two textures and change the 1 to a 2.
815
« on: August 27, 2011, 07:29:53 PM »
Bump Most of my useful py's are included in various AI packs. I really need to make a pack of just py's sometime. Anyway, EcoOmni.py will fire srimechs during the immobility counter, though that's hardly an elegant solution. It would be much better to actually self right as soon as the bot is upside down. Can you post some pictures of the bots that won't self right? Here is EcoOmni.py:
from __future__ import generators import plus import AI from AI import vector3 import Arenas import Gooey import math import Tactics class EcoOmni(AI.SuperAI): "Energy-efficient, environmentally friendly, 100% organic (okay maybe not that last) Omni." name = "EcoOmni" # Has the option of using a smart zone for spinner activation. Name this zone "spin" and then put 'UseSpinZone':1 in Bindings. Set 'range' to something high like 99. # 'StartSpinup' is the time at the beginning of the match for which the AI should spin its weapons, to get them going. Measured in seconds. Default is 2. Some bots can't move unless this is greater than 0. # Has the option for pulsing a spinner, rather than running it constantly, if the enemy is outside of a certain range. Good for shell spinners that can't drive straight when the weapon is running. # 'Pulse' is the number of ticks the active weapon should stay on PLUS the number of ticks it stays off. A tick is 1/8 second. # 'Coast' is the number of ticks the active weapon should turn off and coast for. This should be less than the Pulse value. For equal times on/off, set Coast equal to half of Pulse. # 'PulseRange' is the range within which the weapon should spin constantly. A 0 value makes it always pulse. def __init__(self, **args): AI.SuperAI.__init__(self, **args) self.zone = "weapon" self.zone2 = "spin" self.triggers = ["Fire"] self.trigger2 = ["Srimech"] self.reloadTime = 0 self.reloadDelay = 3 self.goodFunction = self.GoodStuckHandler self.wiggletimer = -8 self.srimechtimer = 0 self.srispintimer = 0 self.botinzone1 = 0 self.botinzone2 = 0 self.usespinzone = 0 if 'UseSpinZone' in args: self.usespinzone = args.get('UseSpinZone') self.spin_range = 3.0 if 'range' in args: self.spin_range = args.get('range') if 'triggers' in args: self.triggers = args['triggers'] if 'reload' in args: self.reloadDelay = args['reload'] self.pulsetime = 0 if 'Pulse' in args: self.pulsetime = args.get('Pulse') self.pulse = self.pulsetime self.pulsetime2 = self.pulsetime/2 if 'Coast' in args: self.pulsetime2 = args.get('Coast') self.pulse_range = 0 if 'PulseRange' in args: self.pulse_range = args.get('PulseRange') self.spinup = 2 if 'StartSpinup' in args: self.spinup = args.get('StartSpinup') self.triggerIterator = iter(self.triggers) self.tactics.append(Tactics.Engage(self)) def Activate(self, active): if active: if AI.SuperAI.debugging: self.debug = Gooey.Plain("watch", 0, 75, 512, 75) tbox = self.debug.addText("line0", 0, 0, 100, 15) tbox.setText("Throttle") tbox = self.debug.addText("line1", 0, 15, 100, 15) tbox.setText("Turning") tbox = self.debug.addText("line2", 0, 30, 100, 15) tbox.setText("") tbox = self.debug.addText("line3", 0, 45, 100, 15) tbox.setText("") tbox = self.debug.addText("line4", 10, 60, 512, 15) tbox.setText("") self.RegisterSmartZone(self.zone, 1) self.RegisterSmartZone(self.zone2, 2) else: # get rid of reference to self self.goodFunction = None return AI.SuperAI.Activate(self, active) def Tick(self): #self.DebugString(4, str(self.zone2)) # spin weapons briefly at start because for some dumb reason we can't move otherwise. if plus.getTimeElapsed() <= self.spinup: self.Input("Spin", 0, 100) # spin up depending on enemy's range enemy, range = self.GetNearestEnemy() if enemy is not None: heading = self.GetHeadingToID(enemy, False) # spin weapons only when necessary, and don't waste battery on them when we're being counted out! if enemy is not None and self.weapons and range < self.spin_range and not self.bImmobile and (self.botinzone2 == 1 or self.usespinzone == 0): if self.pulsetime > 0 and range > self.pulse_range: # Pulse spinner self.pulse -= 1 if self.pulsetime2 < self.pulse < self.pulsetime: self.Input("Spin", 0, 100) if 0 < self.pulse < self.pulsetime2: self.Input("Spin", 0, 0) if self.pulse <= 0: self.pulse = self.pulsetime else: self.Input("Spin", 0, 100) else: if plus.getTimeElapsed() > self.spinup: self.Input("Spin", 0, 0) targets = [x for x in self.sensors.itervalues() if x.contacts > 0 \ and not plus.isDefeated(x.robot)] # slight delay between firing if self.reloadTime > 0: self.reloadTime -= 1 if self.botinzone1 == 1 and self.reloadTime <= 0: try: trigger = self.triggerIterator.next() except StopIteration: self.triggerIterator = iter(self.triggers) trigger = self.triggerIterator.next() self.Input(trigger, 0, 1) self.reloadTime = self.reloadDelay bReturn = AI.SuperAI.Tick(self) # call this now so it takes place after other driving commands if self.goodFunction: self.goodFunction(len(targets) > 0) return bReturn def InvertHandler(self): # fire all weapons once per second (until we're upright!) while 1: for trigger in self.trigger2: self.Input(trigger, 0, 1) for i in range(0, 8): yield 0 def StuckHandler(self): "Do nothing because the GoodStuckHandler function is better." while 1: for i in range(0, 16): yield 0 def GoodStuckHandler(self, bTarget): if self.bImmobile: self.srimechtimer += 1 # keep driving in one direction as long as we can if self.GetSpeed() > 0.5: self.Throttle(100) if self.GetSpeed() < -0.5: self.Throttle(-100) # if we're not moving very fast try wiggling back and forth if abs(self.GetSpeed()) <= 0.5: self.wiggletimer += 1 if self.wiggletimer < 0: self.Throttle(100) if self.wiggletimer >= 0: self.Throttle(-100) if self.wiggletimer >= 8: self.wiggletimer = -8 # fire everything we have as a last-ditch effort if we're still not free after 5 seconds if self.srimechtimer >= 20: self.srispintimer += 1 for trigger in self.triggers: self.Input(trigger, 0, 1) for trigger in self.trigger2: self.Input(trigger, 0, 1) if self.srispintimer < 7: self.Input("Spin", 0, -100) if self.srispintimer >= 7: self.Input("Spin", 0, 100) if self.srispintimer == 15: self.srispintimer = 0 else: self.srimechtimer = 0 self.srispintimer = 0 self.wiggletimer = -8 def LostComponent(self, id): # if we lose all our weapons, stop using the Engage tactic and switch to Shove if id in self.weapons: self.weapons.remove(id) if not self.weapons: tactic = [x for x in self.tactics if x.name == "Engage"] if len(tactic) > 0: self.tactics.remove(tactic[0]) self.tactics.append(Tactics.Shove(self)) self.tactics.append(Tactics.Charge(self)) return AI.SuperAI.LostComponent(self, id) def DebugString(self, id, string): if self.debug: if id == 0: self.debug.get("line0").setText(string) elif id == 1: self.debug.get("line1").setText(string) elif id == 2: self.debug.get("line2").setText(string) elif id == 3: self.debug.get("line3").setText(string) elif id == 4: self.debug.get("line4").setText(string) def SmartZoneEvent(self, direction, id, robot, chassis): if id == 1: if robot > 0: if direction == 1: self.botinzone1 = 1 if direction == -1: self.botinzone1 = 0 elif id == 2: if robot > 0: if direction == 1: self.botinzone2 = 1 if direction == -1: self.botinzone2 = 0 return True AI.register(EcoOmni)
816
« on: August 27, 2011, 07:20:31 PM »
Okay, so I select the gmf file for both source and destination and select compile, press "compile", and then I get this:
Run-time error '62':
Input past end of file
What am I doing wrong now? :P
You have to decompile first. Decompiling puts the gmf into a readable, editable format. When you're done making changes, THEN you compile the file, which puts it back into a compressed form that is readable by RA2. Also, when decompiling, you should enter a different name in the Destination field. Like if you're decompiling ram_plate.gmf, put ram_plate.gmf as the Source and ram_plate_txt.gmf as the Destination. Then when you're ready to compile, put ram_plate_txt.gmf as the Source and ram_plate.gmf as the Destination.
817
« on: August 27, 2011, 07:08:15 PM »
All right I got it to work! ...kind of sort of not really. It switches arenas without crashing, but none of the hazards work and the bots start out inside the floor. I suspected this might happen if I used createArenaByName, but it was worth a try. Fortunately, I have a backup plan. Though I suspect that apanx used the same technique as me, I must say that my way is extremely sloppy and would require quite a few tweaks to the main arena PY and possibly GMF. I've also yet to figure out a way of getting the hammer's zone to work after the change. I would strongly suggest using Madiaba's method instead...
Similar to how Mad did the Matrix Arena, you can add the walls, floor, and ceiling separately (using self.AddXtra or self.AddXtraSound). All that needs to be loaded at the beginning are the startpoints, zones, and hinges. As long as you use some fancy camera work during the introduction, people won't even notice the difference between this method and the use of Arenas.createArenaByName. I'll have to do that, which will mean some more .gmf editing, but at least I'm sure it will work.
818
« on: August 23, 2011, 11:13:07 PM »
Advanced Python question for Trovaner or Mad here. I need to make an arena that changes into another arena at the start of the match (right after the countdown). I know it's possible because I remember Mad (at least I think it was Mad) making an arena that cycles through all the stock arenas mid-battle. However, I cannot find this arena anywhere. I'm fairly certain the command used for this is Arenas.createArenaByName("Arena name"). That's what I used for the special SFTW AI to make it switch to the Epic Showdown arena automatically. However, when I put that command in an arena, it crashes as soon as it's called. I've tried Arenas.createArenaByName, self.createArenaByName, self.Arenas.createArenaByName, and even Arenas.SuperArena.createArenaByName. Same result. Here's my full .py in context:
from __future__ import generators import plus import Arenas import random import Hazards import math class Box(Arenas.SuperArena): "In space, no one can hear you scream... as your bot's components are brutally torn off with magic Python powers." name = "Ironbot Space" preview = "cube/cube_preview.bmp" game_types = ['DEATHMATCH', 'BATTLE ROYAL', 'TEAM MATCH'] extent = (-16, 16, 16, -16) def __init__(self): Arenas.SuperArena.__init__(self, "Arenas/cube/ironbotspace.gmf") #plus.Arena.__init__(self, "") plus.setBackColor(0, 0, 0) degrad = 0.01745 self.AddStaticCamera("Battle Veiw", (19.5, 15, 19.5), (50*degrad,225*degrad), 55*degrad) self.AddStaticCamera("High Flipper View", (-19.5, 45, -19.5), (48*degrad,45*degrad), 84*degrad) self.AddStaticCamera("Birds Eye View", (0, 45, 0), (90*degrad,0), 75*degrad) self.AddWatchCamera("Combat Cam", (-12, 8, 12), (16, 36, 65*degrad, 30*degrad)) self.AddWatchCamera("Aerial Cam", (-19.5, 35, -19.5), (50, 60, 45*degrad, 60*degrad)) self.AddWatchCamera("Ground Cam", (8, -5, -8), (15, 40, 75*degrad, 35*degrad)) self.AddWatchCamera("Spectator Cam", (13, 15, 13), (6, 18, 45*degrad, 45*degrad)) self.players = () def Introduction(self): self.LostComps0 = eval(open("Bot0_comps.txt").read()) for id in self.LostComps0: plus.damage(0, id, 1000, plus.getLocation(0)) plus.damage(0, id, 1000, plus.getLocation(0)) self.LostComps1 = eval(open("Bot1_comps.txt").read()) for id in self.LostComps1: plus.damage(1, id, 1000, plus.getLocation(1)) plus.damage(1, id, 1000, plus.getLocation(1)) yield 0 def Activate(self, on): if on: self.players = plus.getPlayers() Arenas.createArenaByName("Containment Cube") Arenas.SuperArena.Activate(self, on) Arenas.register(Box)
The arena itself is just empty space with a single grape crate in the middle (just so there is some object). I'm using it for Ironbot so I can break off all the bots' components that were broken in previous fights via a list imported from txt files (this part works fine), have the broken parts fall into empty space during the countdown so they don't interfere with the fight, and then change the arena to the Containment Cube for the actual fight (this part doesn't work fine). If anyone knows what I'm doing wrong, or if you know where to find that arena that switches arenas mid-battle, help is appreciated.
819
« on: August 21, 2011, 11:35:06 PM »
That is awesome. It looks like something I might have built as a MW Drumblebee. ... I've just realized that drums are like the optimum design for IRL realism. No other real life bot has as many weapon components.
820
« on: August 21, 2011, 11:25:16 PM »
Update! Turns out I DID have weight for a tribar setup. I get one more tooth out of the deal, a few DSL bars, still perfectly stable, and still IRL realistic.
Pages: 1 ... 34 35 36 37 38 39 40 [41] 42 43 44 45 46 47 48 ... 174
|