Author Topic: Coming Soon  (Read 209878 times)

Arcana

  • Sultaness of Stats
  • Elite Boss
  • *****
  • Posts: 3,672
Re: Coming Soon
« Reply #400 on: July 01, 2015, 01:41:38 AM »
multiple ways to do trajectories at one second intervals, could rig a multipoint path to follow a character then when they touch a "start run" point drop one point per location message received (similar to Arcana's idea) then set the gates to be sensors which bool TRUE if the path touches them in the right order.  but then what if a player is really fast and the path at the next second misses one gate... would be handy to have all the location data the player did in between messages to draw a proper line. but without it... even velocity and orientation with location wont do the job perfectly but it's at least closer, but then I'd defintiely need geometry, setting a static or sensor object to move to a location or follow another object's motion is fine, just /NEVER/ under any circumstances make a non dynamic object have it's own motion or velocity! or it will fly away in an odd direction on startup. if it's not static, then it will fall with gravity, that's a sad fact of blender. then again the way around that is to make the motioned object Dynamic and parent it to a static empty so it can't fall, that may well be useful here to avoid map geometry.

might be better to actually do it a different way, get the player's starting loc (wait till you see "Begin your run"), put the start a short distance in front of the slop so people wont slide around while waiting. then after that simulate a perfect run at the player's velocity starting from the first point picked up, following a path to the 1 second point, if the next location message received puts the player within a controlled distance of that point assume they went through all the gates between there, return which gate is next and get the player's new loc and velocity offset the trajectory of the path by this amount and continue to the 2 second point at the player's new velocity ETC till finish.

meh even thats got too many flaws. must think out good set-up...

You know, I literally handed you a solution that works, and the first thing you did was to counter-propose an idea that requires modifying the client code, point out problems with the suggestion that don't exist, and then made a statement about blender that's irrelevant to Paragon Chat.  Then decide the problem is too complicated to solve directly.  I handed you a solution that works.

You are your own worst enemy.  The reason why I'm so confident the approach I gave you will work is because its a trivial modification of how generalized boundary collision detection works in practically every three dimensional computer game ever written ever that contains continuous motion.  You compute the path the object will take based on its velocity or motion vector within the interval, and determine if that vector intersects with a boundary surface.  If it does, you hit it and you normally calculate the intersection and stop the object there.  Its something I learned in the 1980s, and the technique shows up again and again in gaming, simulation, and basic computer graphics.

It might actually be faster to write it, than convince you that it works.  I would rather you write it, because it sounds like something you're interested in.  But if you keep overthinking the problem, you will never get beyond listing all the ways it won't work.  Eventually, someone else will do it, and leave you in a position only to comment on how your solution would have been so much better.  Which literally no one will care about. 

Codewalker could have PMed me about this great idea to use XMPP to connect game clients, and we could have discussed all the ways that wouldn't have worked for years.  It still doesn't execute powers.  It still can't execute mission content.  It can't emulate NPC AI.  Its not as fast as the game was.  Its a good thing Codewalker ran out of F-s to give about any of that, isn't it?

Write the software.  After you see it run, or not run as the case may be, then improve it.  Don't fall into the trap of constantly cheating yourself out of the experience you need to ever get remotely good at this.  You do not miracle yourself into being good at this by thinking about it abstractly.  First you get good at it, then you start thinking about it abstractly.  After actually making things work first.

Write the software.  Or don't.  I sent a canoe, I sent a boat, and finally I sent a helicopter.  You decide.


Note to mods: If I type "Codewalker doesn't give a $-t" the forum pancakes that.  If I say "Codewalker ran out of f---s to give" it apparently passes that through.  Is that because "$-t" is abused more, or because the forum software literally knows Codewalker ran out of F-s back in 2013?

Todogut

  • Boss
  • ****
  • Posts: 247
    • Todogut on deviantART
Re: Coming Soon
« Reply #401 on: July 01, 2015, 02:11:00 AM »
Its a good thing Codewalker ran out of F-s to give...

Codewalker is like Chuck Norris. He never runs out of Fs.

Sekoia

  • Titan Network Admin
  • Elite Boss
  • *****
  • Posts: 1,848
Re: Coming Soon
« Reply #402 on: July 01, 2015, 02:11:28 AM »
Note to mods: If I type "Codewalker doesn't give a $-t" the forum pancakes that.  If I say "Codewalker ran out of f---s to give" it apparently passes that through.  Is that because "$-t" is abused more, or because the forum software literally knows Codewalker ran out of F-s back in 2013?

It's a hard-coded exception. We might've gotten carried away a bit when we were celebrating the loss of his last f---.  ;)

Codewalker

  • Hero of the City
  • Titan Network Admin
  • Elite Boss
  • *****
  • Posts: 2,740
  • Moar Dots!
Re: Coming Soon
« Reply #403 on: July 01, 2015, 02:28:00 AM »
Well, I was going to point out that the amount of movement state a player can alter in a 1 second interval is actually not all that much, especially considering the lack of travel powers (or even swift) in version 1.0 and level 1 speed caps*. So a simple linear interpolation between the two points and testing if there is a collision with a well-defined plane for the waypoints and endpoint is trivial to do. It's extremely unlikely that a player could confuse that no matter crazy they're trying to move. The rate that they can alter their velocity simply isn't high enough.

If you wanted to get really fancy you could probably even take the starting and ending velocities into account and do a cubic spline or something to get an approximate acceleration curve for the interval.

Thinking about it some more, with that kind of interpolation it would be quite possible to get sub-1-second resolution for the finish times despite the relatively low sample rate. You can determine from the starting and end position and velocities approximately when during the interval they they passed through the plane within a quite reasonable margin of error. Doing so involves basic math that is a prerequisite for doing any kind of 3D game engine work.

But then I see a lot of confused stuff -- there is no Java in the paragon chat client, it's written in C, and doesn't yet support any kind of plugins. I also see a lot of wrong assumptions -- it's not simply wrapping the COH server protocol in XML. The server protocol is about 3 orders of magnitude more complex than what Paragon Chat is distilling things down to, and I am not exaggerating. It couldn't relay messages from XML that it doesn't know how to translate even if it wanted to. So I'll let Arcana continue fielding this one since she seems to know exactly how to write a ski slope bot and could probably have done so by now, and I really do have a lot of work to do getting things ready for release.

P.S. If you are working on something the actual xml namespace for the update message on the metadata channel is <u xmlns="pc:u" />. I masked the 'pc' prefix to 'xx' for the example message since the name had not yet been revealed at that time.



* Which don't really matter anyway since speed caps apply to movement buffs and there's no way to get them or even an attribute engine to apply them...

Codewalker

  • Hero of the City
  • Titan Network Admin
  • Elite Boss
  • *****
  • Posts: 2,740
  • Moar Dots!
Re: Coming Soon
« Reply #404 on: July 01, 2015, 02:38:19 AM »
Also I keep seeing orientation being mentioned. Orientation does not matter one single bit. Only position and velocity matter. Orientation is for looks only.

Which way the player is facing has no bearing on which way they're moving, and doesn't even limit their options as far as adding acceleration (see also: strafing).

Enough distraction, back to the grind. I am running low on Fs.

Arcana

  • Sultaness of Stats
  • Elite Boss
  • *****
  • Posts: 3,672
Re: Coming Soon
« Reply #405 on: July 01, 2015, 02:46:03 AM »
Also I keep seeing orientation being mentioned. Orientation does not matter one single bit. Only position and velocity matter. Orientation is for looks only.

Orientation only matters for weirds-checking, as I mentioned.  Only position and velocity matter for calculations, but if you're trying to determine if something weird happened and you might not want to trust your calculations, assuming that the player didn't run the race sideways might be something you might consider looking at.

Takinalis

  • Boss
  • ****
  • Posts: 107
Re: Coming Soon
« Reply #406 on: July 01, 2015, 02:56:43 AM »
All of my Fs are belong to Codewalker (if he needs them!)
Valkyrie Blade - Virtue Server

Victoria Victrix

  • Team Wildcard
  • Elite Boss
  • *****
  • Posts: 1,886
  • If you don't try, you have failed.
    • Mercedes Lackey
Re: Coming Soon
« Reply #407 on: July 01, 2015, 03:05:04 AM »


Enough distraction, back to the grind. I am running low on Fs.

I'd give you some of mine, but I ran out in 2000.

I will go down with this ship.  I won't put my hands up in surrender.  There will be no white flag above my door.  I'm in love, and always will be.  Dido

Codewalker

  • Hero of the City
  • Titan Network Admin
  • Elite Boss
  • *****
  • Posts: 2,740
  • Moar Dots!
Re: Coming Soon
« Reply #408 on: July 01, 2015, 03:13:36 AM »
Orientation only matters for weirds-checking, as I mentioned.  Only position and velocity matter for calculations, but if you're trying to determine if something weird happened and you might not want to trust your calculations, assuming that the player didn't run the race sideways might be something you might consider looking at.

Heh, I would never assume that since I run sideways or at least at a diagonal in video games as much or more than I run forwards.

Arcana

  • Sultaness of Stats
  • Elite Boss
  • *****
  • Posts: 3,672
Re: Coming Soon
« Reply #409 on: July 01, 2015, 03:38:04 AM »
Heh, I would never assume that since I run sideways or at least at a diagonal in video games as much or more than I run forwards.

Even when you're racing downhill?  I assumed that a lazy bot writer might forget a human being needs to occasionally see the course, and might set their orientation to 0,0,0 and keep it like that throughout the entire race, which a race bot monitor might notice.  But if its just Codewalker showing off his turn-by-turn ski slope directional HUD, I might have to rethink that.

Or just black flag you anyway, cheating bastard.

On a related note, I did finally break down and write a bot to play Dabo in STO (extremely trivial) so I didn't have to sit in front of my computer for hours listening to Taylor Swift and mouse click every minute.  But just in case, I made a crappy bot.  It goes to sleep for a random number of seconds at a time, clicks the button in different places, and even sometimes misses a round completely because its going to the bathroom.  It plays like someone pissed off at having to play Dabo for eight hours at a stretch.  This ain't my first rodeo.  If I made a ski running bot (and not a ski course monitoring bot) it would your mama its competitors and occasionally try to teabag the players it beat.

But first I gotta get my bot to actually log in correctly to Openfire.  At least I got Openfire to work.  Not sure if I had the fqdn problem with pidgin or not, but when its after midnight and you're in Keyboard Isn't So Strong mode, you start pushing all kinds of buttons.  At least I can actually start writing python now.  Gotta go find my pigg decoder and write a map decode since I never actually did that back in the day.  Blech. 

Felderburg

  • Ask me how I got this title!
  • Elite Boss
  • *****
  • Posts: 1,615
  • Personal text? What's that?
Re: Coming Soon
« Reply #410 on: July 01, 2015, 05:16:05 AM »
I did finally break down and write a bot to play Dabo in STO

I got super excited for a minute there, and then I realized I removed STO from my computer recently.
I used CIT before they even joined the Titan network! But then I left for a long ol' time, and came back. Now I edit the wiki.

I'm working on sorting the Lore AMAs so that questions are easily found and linked: http://paragonwiki.com/wiki/Lore_AMA/Sorted Tell me what you think!

Pinnacle: The only server that faceplants before a fight! Member of the Pinnacle RP Congress (People's Elf of the CCCP); formerly @The Holy Flame

Von Krieger

  • Evil Emperor of German Chocolate
  • Boss
  • ****
  • Posts: 122
  • Silly Dragon
    • VK's FurAffinity Page
Re: Coming Soon
« Reply #411 on: July 01, 2015, 05:29:33 AM »

Carnildo

  • Lieutenant
  • ***
  • Posts: 72
Re: Coming Soon
« Reply #412 on: July 01, 2015, 05:58:50 AM »
P.S. If you are working on something the actual xml namespace for the update message on the metadata channel is <u xmlns="pc:u" />. I masked the 'pc' prefix to 'xx' for the example message since the name had not yet been revealed at that time.
Thanks.  That'll be one fewer bug to swat once I've got real data to test against.

Codewalker

  • Hero of the City
  • Titan Network Admin
  • Elite Boss
  • *****
  • Posts: 2,740
  • Moar Dots!
Re: Coming Soon
« Reply #413 on: July 01, 2015, 06:34:14 AM »
Even when you're racing downhill?  I assumed that a lazy bot writer might forget a human being needs to occasionally see the course

The camera angle isn't necessarily the same thing as player facing.

True it does make the controls a bit more difficult... or not depending on what you're trying to accomplish.

Victoria Victrix

  • Team Wildcard
  • Elite Boss
  • *****
  • Posts: 1,886
  • If you don't try, you have failed.
    • Mercedes Lackey
Re: Coming Soon
« Reply #414 on: July 01, 2015, 06:37:12 AM »
The camera angle isn't necessarily the same thing as player facing.

True it does make the controls a bit more difficult... or not depending on what you're trying to accomplish.

Why are you still awake?  It's 1:30 AM CST.
I will go down with this ship.  I won't put my hands up in surrender.  There will be no white flag above my door.  I'm in love, and always will be.  Dido

FloatingFatMan

  • An Offal
  • Elite Boss
  • *****
  • Posts: 1,178
  • Kheldian's Forever!
Re: Coming Soon
« Reply #415 on: July 01, 2015, 07:16:22 AM »
You know, I literally handed you a solution that works, and the first thing you did was to counter-propose an idea that requires modifying the client code, point out problems with the suggestion that don't exist, and then made a statement about blender that's irrelevant to Paragon Chat.  Then decide the problem is too complicated to solve directly.  I handed you a solution that works.

He forgot KISS.

Also, this is a perfect demonstration of why he's a dreamer.  Even when given the solution, he chucks it out and comes up with yet another fancy way of doing something that isn't going to work.

FloatingFatMan

  • An Offal
  • Elite Boss
  • *****
  • Posts: 1,178
  • Kheldian's Forever!
Re: Coming Soon
« Reply #416 on: July 01, 2015, 07:20:11 AM »
#include <stdio.h>
#include <stdlib.h>

main(int argc, char *argv[])
{
int loop;
for(loop=0;loop<52;loop++)


FloatingFatMan: Dammit, that's too long.  Start over, you worm.

Hey! I'm not THAT rude! Besides, includes, method definitions and var declarations don't count as they're not really doing stuff code!  That would be your FOR loop which is nicely on one line. We have a guy here who, believe it or not, would whitespace that out to at least 6 lines "to make it more readable".  He's a f***wit.

Arcana

  • Sultaness of Stats
  • Elite Boss
  • *****
  • Posts: 3,672
Re: Coming Soon
« Reply #417 on: July 01, 2015, 08:17:27 AM »
The camera angle isn't necessarily the same thing as player facing.

True, but at the point where I detect someone facing one direction, while camera pointing in a different direction**, while they are moving in a third direction, while trying to reach a destination in a fourth direction, I'll just have the bot wave hello to you.

SleekXMPP seems to work fine, and its sample code is pretty straight forward.  Importing every freaking xep is kind of annoying, but small price to pay.  I wrote a bot that said hi.  I called that the HelloBot.  Then I wrote one that said hi when you told it hi.  I called that the EchoBot.  Then I wrote one that when you said the name of a power out loud it told you a random fact about it pulled from City of Data (Did you know that the Recharge time of Blaster_Ranged.Energy_Blast.Power_Bolt is 4 seconds?) .  I called that one the ArcanaBot.

Its Mickey Mouse stuff, just getting the training wheels oiled and seeing what's involved in just making things work, but if anyone is interested, here's the ArcanaBot.  A word of warning: I do not condone testing bots on the production Paragon Chat server.  I don't even condone running bots on the Paragon Chat live server without permission at all.  I'm strictly running this on my own server just to see what's possible.  Anything possible on the real servers will also be possible on your own test server once Paragon Chat is released and you can connect at least one real client to your own server.  This is just in case someone out there is thinking about what they might be able to do with Paragon Chat, but wants to see what's involved just to get off the ground.  I still have to get PC specific stanzas working, and get map collisions working, and get timers involved with automated sending of data, etc, etc.  But a PC bot is really just a chat bot that happens to be writing some really funky chat.  Once you can chatbot, you can PC bot.  So if anyone is wondering, it ain't hard to make a chat bot.  My test platform is the Windows version of Openfire, python 2.7.10, and the SleekXMPP python library.  That's it.

Next step: start working on entity models, maps, and clocks, and wait for Paragon Chat.  Entity model (i.e. position, velocity vector, orientation, mock acceleration, impulse, naive pathing) and clocks probably this week.  Maps, err, some time after that.  Making sure it doesn't blow up at the slightest provocation, maybe even an error handler or two, some time after that.  Also would be nice if I could type input into the bot to make it do stuff without having to rewrite it.  Like change room.

Boy, once I put more than ninety minutes into this thing, it might actually do something.

Code: [Select]
import logging
import ssl
import urllib2
import random

from sleekxmpp import ClientXMPP
from sleekxmpp.exceptions import IqError, IqTimeout

cod_items = ['PvE damage scale','Accuracy','Range','Cast time','Recharge time','Endurance cost',
             'Attack types','Radius','Arc','Entities affected','Target','Target visibility']


class ArcanaBot(ClientXMPP):

    def __init__(self, jid, password, room, nick):
        ClientXMPP.__init__(self, jid, password)

        self.room = room
        self.nick = nick       

        self.add_event_handler("session_start", self.session_start)
        self.add_event_handler("message", self.message)
        self.add_event_handler("groupchat_message", self.muc_message)
        self.add_event_handler("muc::%s::got_online" % self.room, self.muc_online)

        # for Openfire
        self.ssl_version = ssl.PROTOCOL_SSLv3


    def session_start(self, event):
        self.send_presence()
        self.get_roster()

        # if room needs password, insert password=room_password between nick and wait
        self.plugin['xep_0045'].joinMUC(self.room, self.nick, wait=True)

    def message(self, msg):
        if msg['type'] in ('chat', 'normal'):
            msg.reply("Thanks for sending\n%(body)s" % msg).send()

    def muc_message(self, msg):
        if msg['mucnick'] != self.nick and self.nick in msg['body']:
            self.send_message(mto=msg['from'].bare,
                              mbody="Same to you, %s." % msg['mucnick'],
                              mtype='groupchat')
        # power names have to be enclosed in square brackets, just like Real Numbers, but at the
        # moment also must be fully qualified.  Need to add short name look up later
        if msg['mucnick'] != self.nick and msg['body'][0] == '[' and msg['body'][-1] == ']':
            msg_power = msg['body'][1:-1]
            codurl = 'http://tomax.cohtitan.com/data/powers/power.php?id='+msg_power
            codpage = urllib2.urlopen(codurl)
            codhtml = codpage.read()
            codpage.close()

            if codhtml[1:6] != 'Fatal': # oopsie, City of Data go boom
                cod_value = '-'
                while cod_value == '-' or cod_value == '':
                    cod_item = random.choice(cod_items)
                    cod_item_search = ">"+cod_item+"<" # this prevents finding the item name in the plain text
                    marker = codhtml.find(cod_item_search) + len(cod_item) + len('/th><td>') + 2
                    marker2 = codhtml.find('</td>',marker)
                    cod_value = codhtml[marker:marker2]
                    if cod_value == '-' or cod_value == '':
                        # skipping because uninteresting data
                        self.send_message(mto=msg['from'].bare,
                                          mbody="Debug: skipping "+cod_item+" because value is:"+cod_value,
                                          mtype='groupchat')
                       
                self.send_message(mto=msg['from'].bare,
                                  mbody="Did you know that the "+cod_item+" of "+msg_power+" is "+cod_value,
                                  mtype='groupchat')
            else:
                self.send_message(mto=msg['from'].bare,
                                  mbody="I don't know what power "+msg_power+" is.", # and neither does CoD
                                  mtype='groupchat')
           

    def muc_online(self, presence):
        if presence['muc']['nick'] != self.nick:
            self.send_message(mto=presence['from'].bare,
                              mbody="Hello, %s %s" % (presence['muc']['role'],
                                                      presence['muc']['nick']),
                              mtype='groupchat')



if __name__ == '__main__':

    logging.basicConfig(level=logging.DEBUG,
                        format='%(levelname)-8s %(message)s')

    # fill in with appropriate jid, password, initial room, and visible nickname
    pcbot = ArcanaBot('arcanabot@core3770', 'ab', 'test@conference.core3770','ArcanaBot')

    pcbot.register_plugin('xep_0030') # Service discovery
    pcbot.register_plugin('xep_0045') # Multiuser chat
    pcbot.register_plugin('xep_0199') # XMPP Ping support
   
    pcbot.connect()
    pcbot.process(block=True)

** I know I can't tell that.  Yet.

Kyriani

  • Elite Boss
  • *****
  • Posts: 299
Re: Coming Soon
« Reply #418 on: July 01, 2015, 10:07:08 AM »
If I've learned anything from reading the old COH forums and the forums here... 9.9 times out of 10, Arcana is right. Arguing with Arcana is an exercise in futility and asking to shine a spotlight on your own ignorance. What's that old saying...? Oh yea... "Better to remain silent and be thought a fool than to speak out and remove all doubt."
« Last Edit: July 01, 2015, 10:23:08 AM by Kyriani »

Joshex

  • [citation needed]
  • Elite Boss
  • *****
  • Posts: 1,027
    • my talk page
Re: Coming Soon
« Reply #419 on: July 01, 2015, 11:17:15 AM »
You know, I literally handed you a solution that works, and the first thing you did was to counter-propose an idea that requires modifying the client code, point out problems with the suggestion that don't exist, and then made a statement about blender that's irrelevant to Paragon Chat.  Then decide the problem is too complicated to solve directly.  I handed you a solution that works.

You are your own worst enemy.  The reason why I'm so confident the approach I gave you will work is because its a trivial modification of how generalized boundary collision detection works in practically every three dimensional computer game ever written ever that contains continuous motion.  You compute the path the object will take based on its velocity or motion vector within the interval, and determine if that vector intersects with a boundary surface.  If it does, you hit it and you normally calculate the intersection and stop the object there.  Its something I learned in the 1980s, and the technique shows up again and again in gaming, simulation, and basic computer graphics.

It might actually be faster to write it, than convince you that it works.  I would rather you write it, because it sounds like something you're interested in.  But if you keep overthinking the problem, you will never get beyond listing all the ways it won't work.  Eventually, someone else will do it, and leave you in a position only to comment on how your solution would have been so much better.  Which literally no one will care about. 

Codewalker could have PMed me about this great idea to use XMPP to connect game clients, and we could have discussed all the ways that wouldn't have worked for years.  It still doesn't execute powers.  It still can't execute mission content.  It can't emulate NPC AI.  Its not as fast as the game was.  Its a good thing Codewalker ran out of F-s to give about any of that, isn't it?

Write the software.  After you see it run, or not run as the case may be, then improve it.  Don't fall into the trap of constantly cheating yourself out of the experience you need to ever get remotely good at this.  You do not miracle yourself into being good at this by thinking about it abstractly.  First you get good at it, then you start thinking about it abstractly.  After actually making things work first.

Write the software.  Or don't.  I sent a canoe, I sent a boat, and finally I sent a helicopter.  You decide.


Note to mods: If I type "Codewalker doesn't give a $-t" the forum pancakes that.  If I say "Codewalker ran out of f---s to give" it apparently passes that through.  Is that because "$-t" is abused more, or because the forum software literally knows Codewalker ran out of F-s back in 2013?

I took your solution, and mulled it over, yes I know I'm my own worst enemy, I like to think out new and interesting ways of doing things, and if those ways all fail then I go the normal course. I know that's bad, means it's hard to learn from other people's research outcomes, because typically the research errors are not wide spread info.

your thing will work, I just want to see if anything else might work better suited to this condition of one second message intervals especially in the future for 5 second message intervals.

Blender; now that I know the message format, blender and python can send this easily, so, the bot I would make is to route player location info to my blender program, then mimic the PC client and send the outcomes through the network to said account. I work in blender, because it's already a 3D environment and has the freedom of a timer and custom collision rules..

Collisions, I was going to handle them in blender because though the location of the gates is known in PC, there is no inherent timer, I'd have to call that outside of the application. typically the timer and gate collision should be in the same program for easier communication.

I'm not talking about changing the client, I'm talking about using blender for everything and sending results back to the client.

Last method: blender's player cube will spawn trajectory lines (similar to calculating velocity and orientation) in fact the outcome is exactly the same, EXCEPT that it will spawn + and - trajectory lines at each message location interval. Bend Trigger Priority: if the player's cube is seen hitting a gate in order, trigger it for that player. if one forward trajectory line and one reverse trajectory line both Cross at a gate then the gate was hit. Add time error percent cones at the ends of each trajectory line, if those both collide with the gate assume collision was true. 

Or just do it your way cause setting an object in motion at a certain velocity and orientation from the last message then jumping to the next spot and seeing if at any point the player crossed the gate is easier.

I'll do it your way first. I'll make the last method I mentioned here as well after, then see which one is better at dealing with time lagged location info. the winner works, no biases on my part.

I can make the blender program(s) in an afternoon (though probably not till after the 10th.) especially seeing as we know gate locations from paragon wiki (and if not, We have Icon, thankyou codewalker!). then.. I will.. have to use java to make a few loops of what-dos, it would be handy to know the official messages the CoX client needs to start the race and spawn a timer window, same for gate collision and same for the finish line and results window. I will store things in that format for easy reading.

as for now, back to work on school things for the deadlines.
There is always another way. But it might not work exactly like you may desire.

A wise old rabbit once told me "Never give-up!, Trust your instincts!" granted the advice at the time led me on a tripped-out voyage out of an asteroid belt, but hey it was more impressive than a bunch of rocks and space monkies.