A Little Busters style Battle Ranking web app

So @Karifean and I were brainstorming, and I was thinking about how I’d love to bring the Battle Rankings to Kazamatsuri in some form for the Little Busters! Bookclub. And the more we talked, the more we agreed that this would be most fun running as a sort of web-app.

The basic idea is that the app will keep track of all users and display a ranking list, but also be used to partake in battles themselves. You could login to the app and set your status to ‘wandering’, which would alert you if any other members within your ranking threshold (it would be more than 2) are also online, so you can do battle. Just like LB, battles would be primarily luck-based, but we could potentially throw in some stats and skills and stuff.

Of course, to do this, we would require people skilled enough and willing enough to make it, so I open the floor to you guys. Would you be interested in contributing to a project like this?

Tagging @uppfinnarn and @Bonecuss for their previous work.

20 Likes

Sounds like a really fun idea.
It would be especially nice with some actual stats, skills, and weapons to get :smiley:
Though, were should probably be some limit for battles one user can make in one irl-day.
And what about the part of giving nicknames to each other?
I can’t help with development, but find this a very interesting concept.

Of course, nicknames would be important! We could potentially even incorporate that into the forum titles :wink:

1 Like

I’d be all up for this if it ever becomes a thing. It would certainly give people something to do in addition to following along with the Bookclub. :masgrin:

Is that really necessary? You could wander as many times as you were given chances to in an in-game day (which wasn’t very many, granted), even though you could only fight once per wander and spectate a couple other fights. I don’t even know if it would be possible to spectate other peoples’ matches in an app like this, but I’ve been surprised before.

I think it might be more viable, like Aspi mentioned, to make wandering a setting like how Discord has different notification settings for whether you’re online, away, wish to be undisturbed, or completely offline. You could have different settings for actively fighting and spectating, simply spectating (if such a feature gets implemented), or currently not wandering. It depends on whatever the people who make this thing want to accomplish, but I’ll just leave those ideas here. :wink:

Thinking about it, couldn’t this be handled by a Discord bot? It could have permissions to automatically nickname people.

2 Likes

Probably but if we think back to the Nadeko pokemon battles, I imagine it would go down in a similar fashion.

I’d say the biggest question is how to deal with stats. On a gut feeling, I’d say it helps the longevity of the game to not have player controlled stats. The game is more varied if no one has any idea of who would win, but some progression could still be good. If it copied the weapon proficiency system from LB!, that benefit people who battled a lot and have a better chance of getting an upgraded weapon. We also talked about players having abilities like dealing extra damage with balloons. Say all players were given 3 of these from a bigger pool, and they got to pick 1 that they can use for a week. After a week, skills and ranks would get re-rolled, so that every week can have a different champion (along with route mvp).

1 Like

I may or may not be able to help design the mechanics but I’m always looking for opportunities to expand on my abilities and I have enough experience with enough web development that I feel like I’d be able to contribute. I’m not confidant enough in my abilities to spearhead something like this but I think I could be a big help, if needed.

We could open up a google form to crowdsource title and possibly even weapons from the community.

Also we’d have to decide how big a factor RNG vs player skill will be.

Since my entire career centers around the development, deployment, and maintenance of web applications, I feel like I really should participate in this, since it’s one of the better ways I can contribute to you guys. However, I’m also at a crossroads at my career, so I don’t know exactly how I can help :x Here are a few ways:

  • Deployment: I can set up the infrastructure for testing and releasing this app. Granted, @uppfinnarn is a million times better at this than I am and already has most of the work streamlined, I can help in whatever little way I can (especially if she’s busy)

  • Back-end development: I can work on back-end services that the app has to talk to fairly easily. I imagine that the app will be a mostly Javascript app, with multiple calls to the back-end to retrieve and save data. Front-end dev is kind of my waterloo so I’ll have to pass on that.

  • Software architecting: If all else fails, and if most of the people working on this don’t know where to start, I can easily start the architecture for the software to be used for this. Where to save the data, what kind of back-end services should be run, how to actually “make things work”. All that jazz. Though I guess this is more a management role than a development role hahaha

Somehow I feel like I’ve just typed in a resume on here. Either way, I am 100% dedicated to helping out with this (as it is something I can kind of make excuses to work on, well, at work)


That can definitely work, and it’d make the interaction a lot easier. We can also have a much simpler web-app and all that does is keep track of the rankings.

4 Likes

I feel like the battles might be more engaging if they’re in a Discord channel, especially from a player pool perspective, people wouldn’t have to keep another tab open - and anyone can spectate or scroll back through previous battles! A web UI could provide ranking lists and the like, that’s harder to make a bot show without getting very “floody”.

One way to do it would be to assign a “Wandering” role to anyone who uses a command in a specific channel (!wander), then you can bump into anyone else with the Wandering role who’s online (no losing fights while you’re asleep!).

We could either trigger it upon wandering (which would mean each battle would be more deliberately initiated), or it could somehow trigger in response to activity in other channels (which would make it more chaotic, but still opt-in).


On the tech side, the technologies we have readily available are:

  • Kubernetes + Docker (containerization)
  • PostgreSQL (database)
  • Redis (key/value store + cache)
  • InfluxDB (time series data storage + analysis)
  • Distributed file storage
  • Email, if you want that for some reason
  • Arbitrary HTTP routing (rankings.kazamatsuri.org?)

The first point essentially means we can run any version of any language, and we can basically do any funky ops voodoo you could possibly imagine. (Microservices? Horizontal scaling across a cluster? Health checking and respawning of crashed processes or even covering for dead servers? We got you covered!).

Perhaps most interestingly, we can also do what we’re doing for the frontend: set it up so that any push to a Github repository verifies that all unit tests are passing, and then transparently deploys master to production with no manual intervention. That’d make community contributions easy; just send pull requests, or if you’re a core dev, just push a commit and wait.

If there’s any other tech that would come in handy, I can almost certainly provide that as well.


What programming languages do people here know?

I’m personally in love with Go as of late, but it’s a rather new language, so I woudn’t be surprised if I’m the only one who knows it. (On the other hand, it’s not very difficult to learn! Solid community and ecosystem too.)

I’m also fluent in Python, and can make my way around Ruby or Node.js, but someone else (@Pepe?) would have to do some project management for the latter two, I have no idea how to properly structure things there.

The one language I’d like to avoid if possible is Java; it’s rather memory-hungry by design, to the point where it might interfere with other processes (notably the forum), unless run with a memory limiter, in which case we risk having to fiddle around with that a fair bit to avoid out-of-memory crashes… that said, if there’s a good case for using it, I’ll make it work somehow!

(I’m pinging @NotKyon to this topic too, he’s a solid programmer.)

1 Like

Oh do we have a CI in place? I don’t remember seeing one last time, but if we don’t we could easily set up something in Jenkins to handle all that

[quote=“uppfinnarn, post:9, topic:3503”]
I’m also fluent in Python, and can make my way around Ruby or Node.js, but someone else (@Pepe?) would have to do some project management for the latter two, I have no idea how to properly structure things there.[/quote]

I’m more of a python/java guy myself :x tho I know a bit about Ruby-on-Rails. I would like to get into node.js though! It’s a fairly promising tech for web services, and if others are interested we can start learning together :yukismil:

1 Like

I definitely like the idea of making it based around a Discord bot and keeping the web client for the rankings list itself.

Maybe someone could write up exactly how the original game works, so we have some solid reference to base this on?

It’s been years and I don’t know where my save files went…

1 Like
  • You click Wander
  • You get a random opponent (from within your range)
  • Both get a random weapon.
  • Characters can have previous experience with a weapon which increases the number of hits you do.
  • Each weapon has slightly different, random ways of dealing damage.
  • Damage is also partially determined by the characters’ stats (We probably shouldn’t have that)
  • Battle continues for 30 turns or until someone dies.
2 Likes

I started working on a backend in Rust yesterday, and intend to develop a frontend as well (though I’m not a fan of html/js in general). Keep in mind that I’m not really familiar with modern web technologies. (I’ve written forum software in PHP before back in 2010, and have put together a small web app for a band me and a friend wanted to form but never did. That’s about it.) So I’m treating this initially as more of a personal project to better familiarize myself with Rust and to improve my understanding and experience with some modern web tech and practices.

If it gets far enough along then I’ll host a demo on one of my servers and open a repository on GitHub.

If someone gets to this all before me then I’ll probably still work on my own version knowing that it won’t be used since it’s still mostly just a learning project for me. If it turns out to be useful for Kaza, then that’d be a great side benefit.

Oh, as an aside, I actually wanted to put a LB!-style “battler” together for a while now, since the mechanics of it are just fun in general. So this was a good prompt for me to actually go and do that.

1 Like

IIRC the range started out as within 1 rank of you and later increased to within 2 when more people joined the system. We’ll probably have to increase this even further if a lot of people here will participate.

It sounds like an interesting idea. I love the battle ranking system in Little Busters and having to wander as you find opponents out there to battle against you was so cool in the VN. I never would have thought an idea like this would be possible but I can see myself actually participating in it if does happen. I might not be able to help with the development process like @Khsellhu said but I do think it’s something to make a web app for it. Having stats and nicknames might be interesting as well too. I do hope it works out though.

I kinda feel like it’d be more fun to do this as sort of a community project than to have one or two people do all of it, but that depends on if there’s any interest in that, of course.

Even just adding items is something anyone could help with, and it’d get us a bigger variety of random crap to fight with. And figuring out how to balance it all/make it fun in a different medium than the one it started in.

(The only problem I’d have with just contributing to a Rust version is that it’s pretty new and obscure still, so it’d be harder for most people to contribute to than if it was something like Python.)

1 Like

Yeah, I’d like this to be something everyone can contribute to if possible, but we need someone more knowledgeable to coordinate the project.

Let’s start by working out a concrete design for this. This is what I have so far:

Basic Design

  • All bot interaction is restricted to a #battles channel, name subject to change. As fun as duels in the clubroom would be, this’ll get floody.
  • Current rankings will be available online (rankings.kazamatsuri.org?), the bot will at most print the two combatants’ current ranks, not the full list.
  • The bot obviously needs to be called Kyosuke.

Questions:

  • Do we want seasons, like what Overwatch, DotA, etc. do? We could crown a winner every few months, then reset everything. This would let us do stats and such without worrying about power creep keeping newcomers out.

Participation

  • Use !join in the channel to join the battle rankings, !leave to drop out and delete yourself off the rankings list.
  • Use !wander to initiate a battle with the closest person in rank to you, who’s online and not away.
  • Upon joining, you get slightly randomized stats + a random ability:
    • Affinity for a certain type of weapon?
    • Chance for special stuff to happen?
    • Help me think of stuff!

Questions:

  • Do we want stats, and how would they be raised?
    • I’M NOT MAKING A BASEBALL MINIGAME.
    • Gain a small, random increment to a random stat when you win a fight, or maybe just for getting into one?
  • Do we want held items? A !trade @someone command? Could be interesting, could also be really dumb/redundant with abilities. (We could add this for Season 2.)

Battles!

  • BATTLE START!
  • Players get little infoboxes with their name + title + ability.
  • Turns happen with a bit of delay for optimal suspense.
  • Only one battle can happen at a time.
  • Items all implemented as scripts, to let them do all sorts of cool shit if they want to.
  • The current #1 gets a special role assigned to them. We should give it a color.

Questions

  • How will the loser get their new title?
    • Randomized from words we teach it?
    • Winner gets to pick it straight-up? (Not sure if I like this…)
    • Winner gets to choose from a couple of randomized options?
7 Likes

At least for the bookclub, it would be cool to have the weekly battle rankings champion alongside the route MVP. [quote=“uppfinnarn, post:19, topic:3503”]
Do we want stats, and how would they be raised?
[/quote]

I’m against any form of player controlled stats just so we don’t get any min-maxing. Random stats should be fine. People will be able to grind, but as long as it’s inefficient enough I don’t see a problem. Like if the difference in experience between 2 players is like 1-3 battles, they should be about equal, but of course if you have 100 more battles than your opponent, you should win handily.

This can just be simple RPG stuff. A bigger bonus for a specific weapon (+20% Swords). A smaller bonus for a larger group of weapons (+5% one handed). On-attack procs like lifesteal and crits.

1 Like