On the topic of open source code bases



  • A few months ago I released my code base as a bot, with minified and uglified javascript, with the intention of using it as an opponent on private and local servers. When I released the next version, I also added the unminified javascript and typescript version of the code.

    It has decent economy and some defensive and offensive capacities, but not a big threat. (and a decent amount of unintended bugs)

    I'm now thinking about releasing the next version, this time with focus on offensive and defensive capabilities. However I know there are different views on these open source code bases, and I want some feedback on this from both players and developers.

    While not my intention, the bot is being used on the public server, even more after I released the non-minified javascript version. They will probably never know the code well enough to be a real threat to established players. However, new players who write their own code will be at an disadvantage when phasing a code base with boosting, power harvesting and a solid economy.

    Some of them use it as a base for further development, others use it because they like the game but don't have the time or knowledge to develop their own codebase, and some are just NCPs (Non-coding players).

    What I want to know is twofold, what do you in general think about open source code bases, and how should I release my next version.

    Some options I've considered:

    • Full code base
    • Minified and uglified code base
    • Full code base with some of the more powerful elements removed (offensive attack units etc)
    • Do not release any more version
    • Put in locks that prevents the code to run on the public server
    • Put in trapdoors that over time handicaps the bot on the public server

    I've read some suggestions about the last option, but I really don't like it, and will not do that. It will cause a bad experience for the players, and bad feedback to both me and towards the game.

    I also want the code base to be identical to the one I'm running on public, so I don't like option five. I addition, even with a little knowledge about javascript, it's possible to remove the locks.

    I'm very interested in knowing what the players, developers and community managers feel about this,



  • I don't care about open source code bases. People can think whatever they want, doesn't make it reality. (I'm always reminded of minecraft communities where "if you didn't build it in survival, slowly mining all your resources, it doesn't count." Which is stupid).

    I do think it's not really kosher to just throw out super weapons, because of the same reason script kiddies are a thing. K-bot as it is doesn't really stand a threat, and while more effective than TA, it's still easy to stomp if you're not new, and easy to defend against if you have an afternoon (and it's not at the point of boosting).

    Option 3 is the one Bonzai goes with, and I like it most. Let's people pay for the game and support the server, while still requiring people know what they are doing if they're going to assemble that and use it as a weapon.

    Option 2 was interesting and useful for those that want an ant-farm. You could further appease people by explaining how to exploit it early, but then you're telling people you're own weaknesses, so I'm not really supportive of that.

    Bonzai was talking about a framework, so you get the benefit of the structure, pre-written, kind of like a library of functionality that we've all discovered, but allows players to get things going while still coding their logic. That might be an option you should consider as well.

    Option 1 is just "I will ignore the abuse I have enabled."

    That's my thoughts.


  • Culture

    With Quorum we've made a few decisions that I think help-

    • We refuse to put anything alliance related into the code base. Quorum will never be able to assist other players. This means if two players are using Quorum near another player they'll be just as likely to attack each other as that player, and none of the existing political entities in the game can take advantage of it.

    • We give unique controller signatures and creep names, which allows the various bot detection scripts to figure out when it is being used by other players. This way if anyone wants to go on a bot purge it'll be easy for them to identify who is running quorum.

    • Although it's not really implemented yet, we've got a system that varies behavior based on the player name. This isn't meant to be a trap or handicap, but since Quorum is meant to be an "NPC" that others can play against on their private servers we thought that variance in the bot behavior would be appreciated it.

    • From a community statement we tell people who come into #quorum that if they really are looking for a bot to use as a starting place that they should consider something else. We've pushed people to #ccc for example.

    At this point I think the way to deal with the NCP problem is with ATTACK parts, and don't think that we should hold back from releasing bots that make the "one player" variants on the game better.



  • I'll throw in my two cents here-

    --- On The Topic Of K-Bot ---

    Of all the options, simply minifying and uglifying the codebase is probably the worst, because it discourages modification of the bot. The full code base, while still problematic, at least allows players to "personalize it".

    I think the idea here is that you have to avoid handing script kiddies full code capabilities. How you achieve this is moot. You either need to limit the bot's capabilities inherently but not implementing some features into it (I.e. Boosts), or you limit it by deliberately introducing flaws into your bot.

    Of those two, I'd also suggest favoring the bonzai approach- create a framework that can be easily used to make one's own AI, without handing one the tools to necessarily be dangerous without having a good understanding of their own codebase.

    Simply locking the codebase, or even including trapdoors, have the issues that they can typically be fixed relatively easily, which leaves you back at the whole "Releasing a superweapon" problem. This could potentially be mitigated by obfuscation, minification, uglification, etc., but in my humble opinion that's like dealing with the risk of someone stealing your Death Star by printing the instruction manual for how to the parking brakes on your giant death laser with every second word in Hebrew, every third word in Gallic, every fifth word in Mandarin, and the rest in Arabic.

    It's worth noting, however, that K-Bot isn't really threatening, so...

    --- Regarding Open Source Codebases ---

    I think of them as open-source malware. It's a really, really mixed bag. On one hand, some players having open-source code has given me an opportunity to look at others handle garbage collection, memory management, etc. (think of designing an antivirus or patches against the malware) but on the other hand the risk of plug-and-play is considerable (i.e. someone recompiling the open-source malware themselves, maybe after a few small tweaks).

    The ideal middle ground is enough of an open source codebase to allow others to look at, examine, compare, etc., but neutered so that it isn't dangerous. Without the help of players like Bonzai and Ags who have open-source codebases available, my own development would have been considerably more difficult, but even as someone who insists on developing their own everything, if someone handed me a full blown BonzAI with full combat capabilities, I'd be really, really tempted to use it.

    Strive for balance.

    EDIT: Some Closing thoughts- While I agree with Tedivm's conclusion that the best solution to NCPs are ATTACK parts, that solution is much more difficult for new players, and will be made more difficult as the bot develops additional functionality.

    I do appreciate bots signing controllers with the fact that they're running a bot.



  • I'm going to tell you the future, and there is no other way it will turn out: in a couple of years there will be 10 - 20 bots available on github for people to choose from. Some will be better than others. I see no way to change this. Its like entropy - you cannot resist the heat death of the universe. You can put a finger in the dike and slow down the preponderance of bots. But if @kasami sacrifices the popularity and utility of his bot, other bots will spring up and people will use those instead. Kasami may not want the bot to be used on the public server, but this is unavoidable and there is nothing but futility in trying to hinder this. Even if kasami chooses not to release his bot, or stops all further development, other bots are out there and other bots will continue to be released by other players.

    As a consequence of this, the trajectory that the metagame will follow will be one with increasingly competitive bots available for anybody to use. When the game started you could probably write any old rubbish and be quite successful. As the game continues, the bar will raise and more and more bots will become super-effective at various tasks. This will happen due to the spread of effective techniques, the copying of code fragments, and the copying of bots in their entirety, but it will also happen just because people will be up against stronger opponents in respawn areas and will have to write correspondingly more effective code.

    A small light?

    The one thing that can work against the existence of bots is for the game to constantly be changing, so that bots require constant adjustment to continue to function well. For example, the changed rules about downgrading rooms need to be coded into every existing bot that wishes to remain competitive and provide new attack strategies to bots that choose to take advantage of the rules. Bots that are not updated will fall behind. Players who do not have the ability to update their bots will fall behind. This will apply even more so when power creeps eventually enter the game.

    Could there be problems with continuous changes to the rules of the game? This could create constant busy-work for players, and it could even end up favouring groups of players that collaborate on bots (ccc, quorum, &c.) over individual players.

    TL;DR the existence of NCP is unavoidable, and attempts to prevent them are futile, but if they're paying their subscriptions its probably healthy for the continued existence of the game.



  • Heya guys,

    I've got a few really blunt opinions :rage: on this topic, as they're the reason I've lost interest in the game. :tired_face: : Their consequence varies from person to person.

    • Running someone elses code as your mainstay on the official servers is complete ass. I don't have a solution for this. Just know that deep down I think you're feeble-garbage if you do.
    • I firmly believe Screeps has an incidence of this at well over 50% (rounded waay down!!!) of the player base on the official server. Tiny tweaks are NOT personalisation. You're a fraud.
    • Any claim that you're "learning" on the official server from using a pre-built bot is a complete and undeniable lie. You're a liar, a fraud, and a bit crap. You own an iPhone and an xBox. I'm going to go full VW Peter Stormare on your tricked-out-ride. https://www.youtube.com/watch?v=R6Dx9MhrqcE
    • This is a personal challenge game. Sure, that's not explicit, nor enforceable, you can join guilds, do as you please etc... but using someone elses code is a flag that indicates you're not qualified MENTALLY or SOCIALLY for the game. Have some pride...The simple fact that you're not to run multiple accounts is a dev-enforcement of this personal-challenge-theme, which I highly approve of.
    • NCP ?? That political correctness gone mad. Yes, I believe there is no place for such a player. No, I don't care if it's for your kids, your wife, your friend, or what-not. Don't care. Not everything has to be, nor is, accessible by everyone in the MENTAL REALM. Get out of my playground, I'm here because I want to get AWAY from those who don't have the capacity to DO THIS.

    Well with that vote-downiness being said, I've abandoned the game purely because my observation was that it seemed 90% of the surrounding players at any given location I spawned were using code they didn't build. For me, that's not good enough. They're not challenging opponents, or if they are, it's because of brute-force-GCL or numbers (guild attacks etc ).

    My code never matured beyond what I'd consider "intermediate entry level" (holy smoke it's garbage code!!) , but I lost interest at such a low level because what I'd accomplished seemed to be waaaayyy above-average. Understand that average is really low quality bot garbage.

    Sharing your hard work is FUN, and you should be proud. There is sharing, and there's spoon-feeding. Here's a great example of SHARING: http://steamcommunity.com/sharedfiles/filedetails/?id=937040772 This guy has shown what he's coded, and explained how it works. It's up to the player to duplicate, modify, or improve on the concept. Simply releasing the code would have sucked..

    Post videos of your hard work guys. They're super cool.:sunglasses: Code is not. :(

    G/luck :)


  • SUN

    My 2 cents.

    Although I dont feel as strongly about this as Mashee. I do feel this shared codebases on the public server or in private server competitions devalue the game.

    So I would say do not publish the more advanced parts of your code base.

    For me the fun and challenge of this game is writing your own code, downloading a bot of github and then running it is in the same vain as using cheat codes to beat a single player game. I am not saying its cheating because ironically using cheat codes is not cheating but IMHO it devalues from the experience.

    My code is almost entirely my own work. (there is a little bit of my defence code that my alliance shared with me, but that accounts for 61 lines of the 1000's in my codebase.

    Although we arent there yet, at some point in the future I can see that there could be a really powerful aggressive bot, if a number of players installed that bot it could start to dominate and that would spoil the game.



  • I don't think the intentions behind the players matter.

    The fact is there is a bunch of code running on screeps.com and some of it is better than others. It doesn't matter who wrote it.

    The best way to solve the issue of people with homebrew codebases getting stomped by people using public codebases is by creating an overall system that allows players to be matched against bots of similar skill.

    There are many ways to do this that range from simple to complex. Here is a simple one: if there were more resources in the center of the map vs. the edges, competent AIs would naturally migrate towards the middle and fight each other. Another simple one is to have a shard missing some of the upper-tier features like chemistry and power for newbies to mess around in.

    The real problem right now is I'm incentivized (as any established player with 5+ rooms) to wipe out any newbie that spawns within striking distance of me (because they might get big later), while at the same time agreeing not to fight anyone my size nearby (because it would be a waste of resources for both of us, even in the case where there is a winner, because they don't have enough GCL to take all my land). So the risk/reward is skewed the wrong way on each side.

    My 2c



  • Thanks for everyones feedback. It is greatly appreciated. What I have concluded is to discontinue the releases of KasamiBot in its current state.

    My view on screeps has always been that it is a game about developing an automated AI, and hearing about coders who develop their own bot is discouraged by open source code bases like KasamiBot seals the deal.

    My intentions where good, I wanted to allow players to have some competitive bots on private servers where they just downloaded the bot from steam workshop and added it to the game. As the current system is set up, it is just not possible to release such a bot without the risk of it being used on the public server.

    The currently released KasamiBot is not very competitive combatwise, but will be challenging for beginners. I will be releasing an overview over weaknesses that can be used to take out KasamiBots, to help bridge this gap. My personal codebase has been rewritten and improved since the bot-release, so I'm not worried about releasing such weaknesses. That will at least force users to understand and further develop the current code base if they want it to be useful.

    I also want to encourage beginners to write their own code, and I will write an tutorial based on top of the official tutorial to introduce more advanced techniques like remote mining, basic defense and pathfinding. It will focus on structure of the code, and hopefully teach new players some design patterns I've found useful. The end of this tutorial will be released as KasamiBot 2.0, but will basically be a framework to further develop a bot in.

    As for bots on private servers, I encourage the developers to come up with a way to release a closed source bot. I don't know how this should be done, or if it is even possible, but if there is a way to release a bot without disclosing the source, I'm happy to once again release KasamiBot as it's intended usage, a private server competitor.

    Again, thanks for all feedback!

    I encourage everyone to check out #botarena (slack) if you are interested in developing automated bots, we have an very active community of botwriters who focus on non-interactive bots. It's a great place to learn, and the botarena starts are probably the most exciting thing to watch in the screeps world.


  • Culture

    The way JS works there really is no way to have closed source bots, the best you could get is maybe a wasm based bot,

    I personally don't mind people using prebuilt bots, although, IMO it does take some of the fun and challenge out of the game. I personally run my own codebase on Shard0 and a slightly modified BonzAi on Shard1 to build GCL while I'm working on ZeSwarm.


  • Dev Team

    Hey all,

    Thanks for erecting this question, I really think it's important because open-sourced code bases clearly give players using them an advantage over other novice players on early stages of the game.

    I discussed that with dev team, and here is what I have to say.

    Screeps is a sandbox game. This means that everyone is free to play as they want (unless they violate ToS, of course), so setting limits on using open-sourced code bases would be wrong. Devs created this world for us, and that was done not for them to dictate us how to play and how not to play (again, obvious ToS restrictions doesn't count).

    So dealing with open-sourced code bases and NCPs is up to the community.

    As I'm asked explicitly (what CMs feel about this), I think it's appropriate to word my position as a player. I personally dislike NCPs who try to play Screeps without writing a single line of code. I admit that they have right to do so because, again, it's a sandbox game. But I also feel that I have right to dislike them for using bots, and I have right to send dismantlers as soon as I see NCP in range. I think it's fair because if they get advantage from using someone else's code at early stages, they should also feel disadvantage of that at mid/late game.

    I don't call up other players to follow my example, sandbox game means that this question is up to everyone to decide.



  • I know I'm really late to the party, but I'm in a commenting mood and this topic interests me so I'm going to add my 2Cents. Bots are unavoidable but ultimately unimportant because at this point every player is already competing against lots of other players of varying skills and bots are just the same. Sure it would suck to start side by side with a friend and have them do way better than you because they install a bot and you write your own code, but if not your friend then someone next to you will do a lot better than you because they already have an established code base or rooms/resources that were already built up and this will happen with both bots and existing (non-boting) players.

    I think the argument is that bots ruin the new player experience, but its actually just players ruining other players experiences and it doesn't matter if that player is running a bot or not. I'll admit that I have ruined lots of new players experiences, slaughtering so many players for territory that I didn't really care about and couldn't use. It didn't matter that I was running my own code, what mattered is that players felt they were being killed and helpless to do anything about it. Sometimes its because I had better code, lots of times it was because I had more resources, rooms, time, experience. At the same time I'd like to believe that I've also enhanced lots of new and established players experiences as well, through forming an alliance and cooperation.

    In the end I don't think its bots that are ruining new players experiences, I think it is other players and the solution to that is the community. As a community we have the opportunity of molding the experience of those around us and if you want to create an experience then the best way to do that is to team up with others who feel the same and work together to create that experience.


Log in to reply
 

Looks like your connection to Screeps Forum was lost, please wait while we try to reconnect.