The Story of Foxybot



October 4th, 2020 by Diana Coman

Prelude:

~it's ten minutes to set up and ten minutes of use to make itself indispensable. the chick can code, i don't remember a tool becoming THIS FUCKING NEEDED in recent times.~

The Story

Going through my own archives and old logs may be time consuming but also quite an interesting exercise, meaning as it does that I get to look at an older context and a younger self again, only with more knowledgeable -and not just older- eyes. With the benefit of hindsight and of accumulated experience, even well remembered situations and well remembered words (of mine and of others) still yield more meaning than they did at that time, for what were *then* merely tiny signs and seeds meanwhile either grew and blossomed or shriveled up and died but looking back one can more easily see -in both cases- why and wherefore that specific outcome was even quite likely for each of them to start with. At times there are also the rather funny in hindsight bits, like those very, very early signs of my want of a bot:

diana_coman: I'm rather clueless at scripting unfortunately, did not have to use it much until now
chetty: there is a plan to allow crafting to proceed even if you are not online, queue up actions, but it is a way off
diana_coman: I will try to look into it, but not sure how much I can do1

diana_coman: chetty, can you help with any pointers regarding eulora client's structure if I am to start looking into the code? I have no idea of a crystal space app, so probably any ideas/pointers would be helpful
chetty: well what did you want to do with the client?
diana_coman: I first need to get some reasonable understanding of the code and what is done where, as otherwise I will hate just hacking it2
diana_coman: but anyway, I was thinking of something along the lines of making annoying tasks less annoying3
diana_coman: such as: automated "go to coordinates"4
diana_coman: (I don't even know how difficult that would be, lol)
chetty: lo, well the user interface pretty much all goes via 'paws'
diana_coman: or "repeat crafting x until out of recipes/ingredients/etc"
diana_coman: or even shopping list thing for a given recipe
chetty: ahh some nice botting, that would actually be pretty cool
diana_coman: well, after playing it so much5, I think I have some clear ideas of useful features, but I am still clueless regarding the client code, so not so sure how much/when I get to actually implement :p

diana_coman: for the moment more like trying to figure out the code with the hope to improve a bit the game experience afterwards; as in: automate repetitive tasks.
thestringpuller:reminds me of Eve
diana_coman: wasn't Eve anti-bots?
thestringpuller: so is WoW but it didn't stop people from using them
diana_coman: well of course, but as far as I understood Eulora is actually pro-bots
thestringpuller: tis like dinosaur island without the geneticism. (dumb facebook puzzle thing)
mircea_popescu: diana_coman eulora is actually pro. and ima write an article detailing it6.

The above log conversations happened throughout June 2015. By the end of July 2015, I had released version 1.0 of my Crafting Bot. I still recall those weeks in the summer of 2015, of rather intense wtf at contact with the legacy client code. Not as much because they are the worst I know or even knew then otherwise but more likely because they packed quite a shock, seeing how at the time I had been happily away from code for years. So it was an unpleasant shock, a lot of unpleasant work and otherwise no help to be had from anywhere, but I still made my bot because I had a use and a need -in other words a real want- for it, as simple as that. Or as I was writing some time later: last year I started programming again, rather unexpectedly. Simply out of interest, as it happens with most things worth doing: I wanted something that did not exist, so I knuckled down and did it - as a result, now it exists.

From there on, things moved on quite quickly. There was indeed a prompt reward and publicity granted for and to my fledgling bot, as well as some various further discussions of it all on irc7. At least one other player clearly stated they had a use for the bot too but if you think that actually helps concretely in some way... what can I say, it doesn't really, no. At any rate, by September of the same year, I had released the second version that included a lot more but was also essentially a full re-write of everything: basically the first version served more as a prototype and ended up thrown away, the new bots re-written almost from scratch and all that on my own effort, my own time and my own dime, imagine that! Silly woman that I am to actually put in such effort when nobody is paying me for it and others are even stood -and waiting- to benefit from the results8, right? Well, perhaps it all comes from my stupidity or perhaps it all comes from evaluating things a bit more thoroughly and from more angles and sides than you are used to even consider at all. At any rate, even laziness might have more sides than you think and for illustration of this, here's the intro to this second version of the bots:

Like anywhere else, work in Eulora is a most wonderful thing ...to watch. So rather than work on working, I worked on avoiding working – and [as a result] here are my two bots ready to take over Euloran world

By November of 2015, there was yet another version of the bots released and I can tell even now from my own writing that I wasn't all that happy with all the muck and yuck involved in getting things done there. But nothing worth doing gets ever done without some struggle or without having to overcome unexpected shit so what is needed gets done whether it's pleasant, easy, convenient, expected or exactly the opposite (as direction, while double, triple or many times over as intensity) of all four and more to boot.

The above is not to say of course that there weren't also good things coming out of it - there were for instance the first actual maps of resources entirely *made possible* by and through my bot, even as early as October 2015. There was also the fun had in finally having a working systematic tool to use against the full bulk of unknown9 that stood between myself and any significant gains in Eulora or otherwise put between myself and ...actual playing (scratch that, I mean: winning) of the game! While it's not documented as such at the time because I didn't want to give it away10, I can still recall that fine morning when I woke up to find that the tirelessly working bot had discovered an entirely new item and had produced already a very clear map that fully outlined the area of interest, as neat as neat can be. I'd say that's about as close as one can come in this time and world to discovering new worlds essentially - if you think Eulora is less of a world for being made of bits, you might be missing yet again some sides and angles to it, so perhaps read a bit more about what Eulora even is and how it's complex economy means way more than it may seem at a first glance or than the construct "real cash economy game" has meant so far.

At the end of 2015 and beginning of 2016, S.MG faced an unexpected blow of just about the worst sort possible: the CTO at the time and co-founder of S.MG fell ill and she didn't recover. The announcement came as a terrible shock in more ways than my brief words in chan at that time might suggest. Then again, the #eulora chan or any other irc chan for that matter is not the place for everything, either. At any rate, this is the sort of event and resulting context for which nobody can really plan or get "fully prepared" in advance - when it happens you'll face it with whatever you got to prepare *unknowingly* up to that point and whether that's enough or not quite or not at all or only just there, it's still all there is. In this case, all that useful work that I had put in before opened up simply a chance and nothing more, certainly not much choice: a chance for Eulora to restructure rather than close down and a chance for me to get involved even more than I had ever considered even possible by that time. Note perhaps that there's little choice involved in this at all, more of a close and narrowly avoided encounter with the end.

As I started working for S.MG, there was of course less time to pour into developing the bot further. Nevertheless, its use only increased as players simply could not quite afford to *not* use it and there were various additions to it by myself (for instance, bundling) as well as by other players: first, Daniel P. Barron's drunken explorer mode and then Mocky's updates that were directly commissioned by S.MG though meanwhile vanished11 together with their author.

The article on Foxybot's 1st anniversary gathers together quite a few pieces of evidence regarding its usefulness and widespread use. And beyond that, there is of course a lot more that came out of it, not least of which a lot of discussions in the logs and a distillation of that into a whole model of software development, no less. While that specific direction didn't *yet* get pursued much further (mainly for lack of time on my side, as I got swamped with a lot of other more pressing matters), it's still precisely the sort of "unexpected" growth that marks as far as I can tell ~all things worth doing, worth *committing* for, in the first place - correctly or not, I consider that this is the best sign of having made an excellent decision as to what problem to solve: a good (or at least decent) solution to a random problem may solve that specific problem and no more but a similarly good/decent solution to a problem that *matters* offers in return a whole lot more than the initially visible direct benefit, as it practically opens up entirely new directions for growth.

The above theme of opening up new directions for growth is in fact very central to Eulora as a whole, I should say - and with good knowledge of it - by now. There's the whole of the S.MG category documenting that for one perspective but meanwhile there are all the additional directions merely touched and barely opened up as part and parcel of all the work that went into getting some actual computer graphics and making the 2.0 client. While the old Foxybot is not going to make it as such into the new client (mainly as there's little point to importing through it all the state-machine madness that was imposed by the rotten parts of the legacy client), the directions it opened are not lost or closed either and the automation of tasks will be just as needed some point anyway - only quite an easier task to implement with the new client and protocol.

Nevertheless, for all those openings and opportunities happening in plain sight, for all the documented amounts of Bitcoin involved and exchanging hands through the game and for all the previous opportunities not taken when available and closed meanwhile, those fewer and fewer remaining openings seem just as invisible today while available as the previous ones were back when they were still available, too. Arguably this is also exactly as it should be: the very same environment can seem empty and deserted to some and overcrowded with opportunities to others. At the end of the day, those seeing and capable do, those bright enough may at least follow and the rest will - at best - wait for whatever might happen since no happening has anything to do with them at all, anyway.


  1. Bwahahaha. How much did it turn out I can and did do and how much more there is to be done... 

  2. Oh, the naivety of this young self of mine, how I wince to see it yet again! Did I get meanwhile a "reasonable understanding" of the unreasonable, would you say? 

  3. This is how useful things start before it even registers as a start: by improving something that is, in its context, in its *meaningful* context. Not all that much by "being found", nor by popping out of nowhere all formed and valuable by and in itself, objectively and in a void, no, how surprising. (For my English-speaking readers, here's a translation of the highlighted fragment: The attempt to create value alone and in a void, apart and away from actual people and their interactions, the failure to understand that such a thing is not even possible since all the value comes from the subjective evaluation by others, the nutty search of some objective "gold" in the virtual world, those are all telltale signs that you still have all sorts of lessons to learn about the virtual as well as the real world and anyone having any money would certainly prefer, at least in principle, that you learn those needed lessons on your own money [rather than on theirs].)  

  4. The most important part of this aka pointing to the correct place was relatively easy to do, if extremely useful. It's still in use: the /pilot command. 

  5. In other words... after getting some actual experience and therefore beginning to form some understanding of the whole context too, as just the most basic prerequisite for coming up with anything useful anyway. 

  6. Worth a read and a re-read at the very least, I'd say. 

  7. The whole conversation there is quite funny for me on re-read. Then again, I suspect there's at least one participant who'd rather prefer that the conversation and even its whole context never existed at all. 

  8. Note that this *second* part is very important, too: while a lot of effort can be put into all sorts for which nobody is paying you, it does NOT follow that the lack of pay is a way to choose things or some sign of ...usefulness! This is not something new, of course, nothing is new after all, but here's a more straightforward statement that may help with it all (the loose translation to English is mine): in short, the fear and avoidance of competition is the mark of the incompetent and of those who know already that they'll lose. The rest of people deliberately look for competition, focusing on identifying salient inefficiencies, coming up with strategies to get rid of them and then knuckling down to work. That's what doing business even means, not just on the Internet but everywhere 

  9. As part of the attempt to attack that, I also made and published a whole library of items that turned out very useful too. 

  10. There is some data published at a later time and then even the actual fragment of the map, close to one full year later. 

  11. Eh, except those I have mirrored myself, of course, as usual. 

Comments feed: RSS 2.0

7 Responses to “The Story of Foxybot”

  1. wyrdmantis says:

    Hello Diana,
    can you please teleport my pg back on land? I'm stuck in the sphere. I've tried to figure out how to do that myself modifying the client code, with no luck. It'll be a very useful thing to know, since I'm not happy to bother you every time.
    Character name is Wyrd Mantis.
    Thank you.

  2. Diana Coman says:

    Perhaps have a look at all those detailed articles I wrote describing all the foxybot code and start from there (try it out + ask questions further there if needed) with figuring out how to change the client code to do what you want.

    This time I moved your character back on land but it's indeed unlikely that I'll have the time to keep rescuing people. I guess the bottom of the game's world will collect in the end all the characters who couldn't keep away from the edge despite knowing that they are unable to save themselves if they fall over. After all, the solution is to just keep away from the edges.

  3. wyrdmantis says:

    I know, and already done a search on the logs and here. I've tried to modify zonehandler.cpp, line 314 to:
    celclient->GetMainPlayer()->SetPosition(csVector3(183.76f, 56.17f, 154.1f), 0.0f, sector);

    Character would be moved back to land but not really because I could not explore in that "land" or do anything else apart from walking aroud.

    Then I tried to change pscelclient.cpp, line 1314 to:
    GEMClientObject::SetPosition(csVector3(183.76f, 56.17f, 154.1f), rotangle, sector);
    This was instead totally uneffective. Surely I'm looking the wrong thing/file.

  4. wyrdmantis says:

    sorry I meant line 1214, not 1314

  5. Diana Coman says:

    Well, there is no question in there so nothing that I could answer, what can I say. Look at the bot's code and *follow* that as in try to figure out what happens where and why. It's commented and explained in some parts line by line, take that and read it + explore it from there. Then think of what should happen according to your understanding if you change some little part in some specific way, change it and check what actually happens. Repeat and improve from there.

    For the record - the bot *moves* and *explores* quite fine so how on Earth do you say you looked when you don't specifically point that as your starting point and your attempts to adapt that as a way to figure something out?

  6. wyrdmantis says:

    I looked at the client code, not the bot. I was not talking about the bot. I was looking for a way to change player coordinates at startup. How can I do that?
    I assumed the bot can't teleport players around. Can it?

  7. Diana Coman says:

    I was looking for a way to change player coordinates at startup. How can I do that?

    By your own earlier words ("Character would be moved back to land but not really because I could not explore in that "land" or do anything else apart from walking aroud."), you did that already. It's of course a useless thing to do but since that's what you want, there you go, you did it, congratulations.

    How do you even imagine this "at startup" would/should work since clearly there has to be some communication with the server too, for a change in coordinates to become actual movement in game aka *have a meaning*. How do you even reason to end up with such nonsense in the first place? Specifically:
    1. by your approach there, you seem convinced that all things are separated somehow and unrelated to one another and so gotta find "the right place," as if there were no processes involved and no communications and no parts of a whole, only "right places".
    2. "looked at the client code, not the bot" is somehow both logical to you and ok + something that counts for some reason as clearly having already put in enough effort to help yourself that you are justified in asking others to help. I said from the start *foxybot code* but you seem to know better than me, so good luck to you.

    I assumed the bot can't teleport players around. Can it?

    Ask better questions than this lazy bullshit. If you can't be bothered to read, then there's no way to help you.

Leave a Reply