7 ms·
Show HN: Noric-bot – A bot to stress-test text-based MUDs, written in Scala 3
- ayoinc 7y agotest
- jeffhuys 7y agoprocess exited with code 0
- darkstar999 7y ago> A bot to stress test text-based MMORPGs written in Scala 3. A bot written in Scala 3 to stress test text-based MMORPGs. Unless it only tests MMORPGs written in Scala....
- spir 7y agoThanks, updated.
- deleted 7y ago[deleted]
- derefr 7y agoDoesn't look like this does anything clever/special; it just randomly spits a finite set of handwritten commands to the socket that the author's target MUD happens to accept. Was hoping that this was something more like AFL for TCP clients, discovering all the commands the MUD supports, and through it, the entire state-space of the MUD's world-model.
- spir 7y agoFair enough. I try to spend as little time as possible on the bot and more time on the game itself :-) The bot you describe sounds cool -- would love to see it!
- mtndew4brkfst 7y agoIs your game project available publicly to play, and/or is it open-source? Have you ever participated in the MUD Coders Guild community? It's been mentioned elsewhere in the thread.
- spir 7y agoThe project isn't open source or playable yet. Working on a playable demo! I'm active on the MUD Discord. I'm registered for the MUD Coders Guild but am allergic to Slack :p ryanb#6419 on Discord
- zubspace 7y agoHow useful is this test tool to you? What bugs did you find or do you hope to find this way? How often and long do you run it? I'm asking, because I guess, it probably takes ages to traverse some kind of dungeon. If there are special sequences, the tool will most likely never find them (like find key, open door, kill boss), right? I've done some small games in my spare time, but Unit-Testing was either completely useless or way overkill. But I guess, the larger your game gets, the more important it will be. But the the work involved is so huge, that I think it's not worth it for indy games or small studios. If you look at the test setup for AAA-Games, like League of Legends [1], the work involved is mind-blowing... [1] https://technology.riotgames.com/news/automated-testing-league-legends https://technology.riotgames.com/news/automated-testing-leag...
- spir 7y agonoric-bot has been extremely useful as a test tool, if a bit narrow due to just spamming random cmds. To your point, the bot in its present form can't automatically run a dungeon or verify edge cases. A previous version of the server codebase was written in ruby[1]. The playable branch of that repo has a combat demo that's a bit fun, however the performance is so terrible that I shelved the whole codebase years ago. As a long-term vision I'd like to launch an indie MMORPG that supports at least 1,000 players per synchronous, single-threaded server. It's an item/equipment focused game. Each player may have hundreds of items with a total of thousands of affects. noric-bot helps me stay on track with that goal. What bugs did you find or do you hope to find this way? The server is an actor-based "distributed system" using Akka. I only ever run it on one jvm but in theory it could be clustered. The bot helps find performance bottlenecks and actor-related edge cases. The server runs at 4fps and Very Bad things happen if the 250ms frame time budget is routinely exceeded. The bots use a special password to spawn "fully loaded" player mobs with hundreds of items and ~1k affects. This helps me see bottlenecks like saving/persistence, I/O, Akka mailboxes growing, time spent processing player cmds vs moving the simulation forward naturally, etc. Sometimes the bot will find logical bugs. This is usually in the context of assertions I've added that the bots will trigger. I'll routinely write fake commands that bots will spam to execute scenarios that otherwise would be unreachable (if only due to lacking gameplay functionality at this early stage). Often I'll just run the bots for fun and see how the game feels with a lot of other "players" running around :-) [1] https://github.com/ryanberckmans/NoricMud https://github.com/ryanberckmans/NoricMud ruby codebase
- mattmcf 7y agoScala does have some interesting applications for stress testing. I personally think that this project could have benefitted from the Akka Streams library. Akka Streams allow you gloss over thread creation while focusing on scheduling events to send to a sink. Pretty handy when you want to quickly spin up a rudimentary stress test tool.
- fouc 7y agoWell that's kinda cool. I didn't know there was a discord chat for mud coders. Also it appears there's a slack chat for mud coders as well https://mudcoders.com https://mudcoders.com Oh even cooler, there's a mud chat network so people can chat between muds: https://grapevine.haus https://grapevine.haus (coded in elixir too!)
- oestrich 7y agoGrapevine is also open source if anyone wants to look under the hood at all that elixir! https://github.com/oestrich/grapevine https://github.com/oestrich/grapevine
- crtlaltdel 7y agointermud chat was something we tried back in the day. i was only ever on one team where we got it implemented. fun times.
- spir 7y agoIf you like MUDs check out the new, excellent, and often-updated https://www.titansoftext.com https://www.titansoftext.com podcast :-)
- MrLeap 7y agoVery cool! I'm working on a browser game using threejs and websockets. Its progenitor was a MUD that I wrote that I never felt was good enough to publish. Joined the discord and all else. :) (Side note, maybe this will hit google for some poor sap in the future. Blender 2.8's GLTF/GLB exporter doesn't respect the armature modifier. Bake your weights if you want your ground tentacle to wiggle in your browser. :( )
- ratacat 7y agoAwesome! I'm going to have to check that out. I'm doing a human stress test on my mud project, Enceladus right now! There's over 25+ people in so far. It's the worlds first realtime crypto RPG, as in you can find ethereum in the game. Come help us test it!! https://discord.gg/S7TkGXX https://discord.gg/S7TkGXX or http://enceladusgame.io/playtest http://enceladusgame.io/playtest
- spir 7y agoReally polished UI!
- ratacat 7y agoThanks! I've been working my ass off on it!
- GuyPostington 7y agoYou should put a TLS cert on http://enceladusgame.io/playtest http://enceladusgame.io/playtest
- trehalose 7y agoYes, I'd think people would be more excited to receive cryptocurrency over a secure connection than over an unsecure one.
- mtndew4brkfst 7y agoThis is a pretty blatant advertisement, part of a larger pattern of what would be charitably called "aggressive self-promotion", and in fairly poor taste IMO. This comment had close to nothing to do with the subject of the parent post except the tenuous connection via the "MUD" keyword.
- sk5t 7y agoIt's difficult to presume any circumstances other than this being a vehicle for the author(s) to collect cryptocurrency.
- mihaifm 7y agoCool project, but why engage in language flame war on the project readme: > I think Scala is the best mainstream language with a sophisticated type system. Sophisticated type systems are money in the bank. Going from TypeScript to Scala is like going from JavaScript to TypeScript.
- paulddraper 7y agoNot only that, accusing TypeScript of being "unsophisticated" is just dumb. Unsound, inconsistent, overly complicated, poorly abstracted, improper paradigms.....any of those would be a more legitimate criticism than "unsophisticated".
- codesushi42 7y agoTypescript is flawed, but it is a godsend compared to using straight JS. You can use it like Java until you can't. And then you are forced to muck around with JS hacks just to please the transpiler. Usually that happens using generic types. They are almost completely worthless in Typescript, and have no analog whatsoever in JS. So you are mucking around just to please the transpiler but adding a type unsafe hack anyway in place of a generic argument. Typescript should have just stuck with providing checks on type declarations. That's it. Stop adding features from Java/C# when they make no sense in JS. I would pick another language in a heartbeat, given a choice.
- nicoburns 7y agoTypeScript's type system is actually much more expressive than Java or C#'s. You can't express OR types (sum types) like `string | number` nicely in those languages. It's the main thing that made me hate statically typed languages until I tried Rust (which also lets you express this).
- codesushi42 7y agoHuh? You would just overload the method then in another language. That is a lot safer than manually checking the argument type inside the method with the hack you proposed. You're right if by "more expressive" you meant "not really safe at all". By using the types of hacks you proposed, you end up losing type information and safety guarantees. So why bother using Typescript in the first place then? Your example is the perfect argument against Typescript. If you were referring to generic types, then there's no good reason to do that in the first place. Use a base type. Polymorphism 101. Anything else would be duck typing, and not safe. There's no middle ground with type safety: it is either safe or not. And if there's a chance it's not, then you've lost and all of your efforts are pointless without resorting to manual checks. And if you were somehow referring to C++ like templating (unlikely), then Typescript doesn't support that anyway.
- lokl 7y agoI was an admin (wiz) on various MUDs and MUSHs many, many years ago, and of course an avid user. The mix of programming, creativity, and camaraderie was sometimes very special. Maybe my recollections are clouded by nostalgia, but it sometimes felt like a hacker fantasy, coding, role-playing, and working together for good (fun). I wish I could recapture that feeling, I wish there were time for it, and I wish there were some way it would do good in real life. I can't contribute anything directly about this bot, but I'm glad to see MUDs are still being studied. I feel like I never saw the full potential of what they could do for society. Some of the social interactions were much more rewarding than anything I have experienced on so-called "social" media.
- jerrysievert 7y agohey John :) I feel the same way - I have a lot of great memories associated with those times, and some fantastic life and development skills picked up because of it (I wrote my first virtual memory subsystem for a mud to work around me not having enough ram to load the world). I feel very nostalgic about text based adventures, and really feel like a lot of gameplay is really missing the imagination and experiences that were able to be captured by such a "primitive" interface.
- Darkphibre 7y agoAgreed! I am quite nostalgic about my time in MUDs and MUCKs. I recently came across a dot-matrix realtime-printout of some shenanigans (complete with type-over when I hit backspace). Brought a smile to my face. The realtime, collaborative, communal, asynchronous improvisation that could occur was so, so satisfying.
- redwall_hp 7y agoIf it were marketed correctly ("literary gaming" or something), I could see a modern variation of a MUD gaining some traction if it were browser based and styled up in way that's a little more accessible, with some other modern conveniences. Kind of like how Discord and Slack are just a coat of contemporary Web-isms on top of the same old idea as IRC.
- 7y ago
- atroche 7y agoI've always thought that building a MUD AI would be extremely fun, and a good test for language understanding and reinforcement learning. Here are a couple of related papers in the deep learning space: https://arxiv.org/abs/1812.01628 https://arxiv.org/abs/1812.01628 https://arxiv.org/abs/1903.03094 https://arxiv.org/abs/1903.03094
- dcsan 7y agonot quite related but ... any recommendation on a good open source mud? most of the projects I've tried have been very raw, or unmaintained. eg https://ranviermud.com/ https://ranviermud.com/
- thaeli 7y agoEvennia. Actively developed, and lets you write in modern Python. http://www.evennia.com/ http://www.evennia.com/
- shawncplus 7y agoAs the maintainer for Ranvier I'm curious as to which you consider it: very raw or unmaintained? :P
- scalanewaccount 7y agoThe author gushes over scala but completely neglects to mention scala.js :) (I sincerely hope he's seen it, since he seems to be a js dev). scala.js is right now the only way I use scala- after I dropped scala for backend.
- MarisaG 7y agoThe CoffeeMUD MUD engine is very feature-full and nice (IMHO). It is written in Java, and has a web interface for most activity. You can get more info here: http://www.coffeemud.org/ http://www.coffeemud.org/ There is also a Discord server at https://discord.gg/HgDxtas.. https://discord.gg/HgDxtas...