A Little Busters style Battle Ranking web app

One thing you forgot is to place a threshold on how many ranks above or below you can challenge someone to a battle. I think making it a percentage of the total number of ranked players would be best.

So say there’s 100 players (yeah right!). If you’re rank #60, then you will only be able to challenge people ranked 20% above or below you. So that gives you access to everyone ranked #40-#80, or 40% of combatants. This works the same as Little Busters’ battle rankings, which let you face people 2 spots above or below you when there were 10 combatants, so you could rise from weakest to strongest in only 5 stages. If you’re in the middle, it’s a lot less than that!

However, I’ve just thought of a problem. What’s stopping the person at Rank 1 from just, setting themselves as away?

2 Likes

Also make sure that people who battled can’t rematch until they battle someone else first.

1 Like

There should probably be a some sort of time-ban on join/leave, so people can’t simply do that to get better stats.
Also, as for ability… I do understand why its better to set it on random, but it would be nice if a player can at least somehow influence the general course his ability would come from or what form it would take.
Like, a couple of questions on registration to carve your character on which you get an ability at random from a pull that somehow corresponds with answers on those questions. Though, I dunno if it is easy to implement.

Items would be good, but only if a lot of item names would be contributed.
And same probably goes for the weapon names and types.

I would like if winner could input that title on his own… but thats abusive.
So, again, a pool of random non-insult words from which you can take up to 4 or 5 words in combination… Though, it would be a pain to make it work grammar wise.

I’m not sure if this helps at all but I found this Japanese website a while ago with all the titles given in the game in Japanese if someone wants to translate them or something.

@Rincchi has us covered.

http://www.litbus.net/main/titles.htm

I’ve got a little list of considerations that will need to be made from what I’ve read so far:

  • If a player is at Rank 1 and sets themselves as away, they can’t be challenged and nobody can beat them.
  • Why do players need to be able to set themselves as away? Why not let people challenge others whenever and notify you of changes when you return?
  • If you are given random stats/abilities when you join, you should not be able to leave and join over and over to get the best stats.
  • Place a cooldown on how often you can join/leave? i.e. 6 hours or a day.
  • To keep everyone happy, the stats and abilities you are given should be well balanced.
  • If you gain stats when you win, then you can just spam !wander as often as you can to gain stats.
  • Adding a cooldown on how often you can !wander may help here but it’s a dirty fix and goes against the spirit of the game
  • No two people should be able to fight twice in a row.

This sounds really cool though, and I’d love to see it come together! Maybe for the titles, the winner puts in 2 numbers that choose and adjective and a noun (similar to those “find your superhero name” posts you see on facebook where you look at your birth month and day to find it).

Collecting and trading items also sounds like it could be fun. Sometimes the winner of a battle could find a ‘dropped item’, though we’d have to make sure that not too many items flood the system (limiting it by the total number of players or something).

1 Like

Well damn, this thing has entirely slipped my mind :masdum: Well, never too late to start! Let’s get some comments going.

This is important.

As @HeliosAlpha said, it’d be perfect for the bookclub! Otherwise, we can just have a trial battle going on before then. Once the bookclub is over, we could have a permanent battle ranking system or something.

Naturally, once you join, you start from the bottom :slight_smile: I’d imagine the first one to join would be the first one to be on top.

This will be the hardest part; what weapons to put, and how? We could just copy the weapons from the original game, and I feel that’d be fine. I don’t quite remember there being a character affinity for weapons in LB, but I could be wrong?

b-b-but… It’d be perfect! T^T

Definitely yes. It’d be way too RNG if we don’t have stats. I’m all for the “winning a fight gives you a random stat increase” because that helps the top people stay on top and make things more challenging.

Definitely a nice-to-have. That’s why we should have version 2 :smiley:

Agreeing with @Nin on this; aside from wandering, you should be able to send a challenge to somebody else 20% higher in the ranking than you. Maybe that person is your rival, or maybe you just really want that top spot. Either way, if your opponent fails to respond to your challenge in, say, a week, you get their spot. If you are defeated, you remain unable to send private challenges for amount of time.

And now for something else I thought of while typing:


###Forum-based stat boosts

Instead of relying simply on RNG for stat boosts, what say we make them work for it. Having you do stuff on the forum (or maybe on discord) will give you an additional stat boost. Get a post with 10 likes? That’s +1 attack for you. Make a new topic that gets at least 10 replies? That’s +1 defense. These are just examples, but the key point here is that we make incentives for posting that is both A) an encouragement to get good discussion going; and B) Not enough to imbalance to game (to the point that only top posters can win).

This is especially helpful if we make a Little Busters Bookclub season. We could probably give a stat bonus if you post at least once in that week’s character topic. It’s a bit hard to ensure that people don’t just spam the topic for getting stat boosts, but I guess that’s the job of us moderators. That, and we put a limit on how much stat boosts you get for participating.

That’s at least more practical than a baseball minigame… right?
I still want that baseball minigame though


###Tech side

The tech for this shouldn’t be all that difficult. Things we’d need for tech stuff would be:

  • A discord bot in any arbitrary programming language. Faster, scripting languages would be better, but the important thing is that everyone participating agrees to the platform of choice.
  • Simple datastore. For something like this, the less complicated, the better. From what I’ve thought of, a simple key-value store should be fine. Or we could use our currently running redis datastore (can we, @uppfinnarn?). Heck, even sqlite is fine, but I don’t think we need the power of an ACID database unless people are simply just more comfortable with SQL.
  • Web ranking app. Once again, the simpler the better. NodeJS, Ruby, and Python come into mind. Again, as long as all the devs are comfortable with it. Front end wouldn’t need heavy JavaScript (or would it?) but it’d be good if it looked nice. Maybe we can get @kyuketsukimiyu on-board with this?
  • Alternatively; we can take a web service/microservice approach. Instead of having a database that both a discord bot and webserver access, I’d suggest making a separate web service that both the bot and the ranking app access. Heck, that way, our ranking app would be a simple JS web app. We can put most of the logic in the web service (like, say, generating random stats and a random weapon, adding stats, etc), and the bots would be a simpler interface for everything. Makes things more extensible, I think.

Let me know what you all think and we can start discussing things~

4 Likes

Be sure that I pay for something like that

I agree with Pepe that, in addition to Wandering which matches random battlers periodically, you should also be able to directly challenge people up to 20% above you. The ‘away’ problem could be handled by simply putting the “you cannot refuse a challenge” rule into effect, making the challenged player automatically forfeit and lose if they don’t respond to the challenge within 3-ish days or so.

Actually to go even further into this, I think Wandering and Challenging should be two different things in general. Anyone in ‘wandering’ mode will be matched with another online random ‘wandering’ mode member in their ranking range in a set time interval (which is higher or lower depending on the amount of people in ‘wandering’ mode). While Challenging is just one person directly picking another and fighting them specifically. Two specific players should not be able to battle each other twice within a span of a day or so (neither through Wandering nor Challenging), I think that’s a decent enough way to prevent any form of notable abuse of the system.

Also, I actually think winners of a battle should definitely be able to pick any nickname they want for the loser. Yes there is the possibility of abuse but if it remains in good fun it can be hilarious. To counteract the possibility of abuse, we can make it so the defeated player actually has the special ability to ‘decline’ a nickname if it legitimately bothers them. That feature would need to be discouraged to use at will, but respected if used for good reason. It comes down to etiquette a lot in that regard. But I do think picking nicknames should be a thing. For people who don’t want to come up with a nickname themselves we should still give them the option of instead having a random nickname be generated and assigned, like what happens with Riki.

Trading may be a good idea in the long run, but I think it’s better if we set our priorities to getting the game functioning without even items or special abilities at first (but with a good and flexible architecture), and then expanding on it later.

I agree on stats being randomly raised after a match (more for the winner but also a bit for the loser), though I also don’t think it would be a bad idea to allow the players to alternatively simply assign a set number of stat points across all stats as they please. This would solve the problem with people resetting for better stats and would allow players to customize their ‘avatar’ a bit more to their liking.

And finally one feature that ABSOLUTELY needs to be a thing (eventually): people need to be able to upload their own sound clips (2 seconds max) of them grunting in pain or making a warcry, and the fight needs to be reconstructable with these sound clips in place. I want to hear Aspi screaming “MEEEEEEEEEEEN” when I fight him.

3 Likes

I think you’re confused about a few things.

The battles take place on Discord, and have zero involvement of the players themselves. It’s entirely based on RNG and stats. Thus, someone wouldn’t even need to accept a battle, it could just happen passively and they could be notified about it when they get online. Also, how exactly would you get voice clips from a discord text log? Not sure I understand that.

As for nicknames, why not a mid-way point? Let players choose between select words or phrases and combine them how they please. Not everybody is going to like the idea of having to think up a witty nickname every time they win a fight. Or you could keep it random so it’s entirely automated.

I was not confused on that point. I just think there should be actively initiated battles in the form of Challenging in addition to the passive random battles in the form of Wandering. As for the voice clips, well let’s just leave that aside fow now. I may have gotten ahead of myself in cool-but-unfeasible ideas =P

I don’t get why you need two different kinds though. Shouldn’t wander just limit you to anybody 20% above or below you?

I’d be down for helping on front end design depending on timing! This sounds like it could be a really cool project.

2 Likes

Exactly because of the problem you stated:

No, the idea of the battle rankings is that you can’t control who you challenge, it’s random.

A better idea would be to just, not make it limited to people who are online, I guess.

Just because it is done randomly in-game doesn’t mean we have to copy it as-is :stuck_out_tongue: I’d say it’s fine to make changes as is necessary for our own needs.

After all, even the in-game Little Busters system isn’t entirely random; for example, when you wander as the 2nd place holder, you automatically get pitted against the current 1st place holder. If it were truly random, then there’s a high chance you wouldn’t even bump into them most of the time.

Yeah no I think it’s a better idea to also allow people to challenge specific people. When someone who happens to be max 20% higher than me in the battle rankings is all like “Tomoyo is shit” in the Discord chat I want to be able to go like “you wot mate” and fight them over it =P

4 Likes

For the sake of defending your waifu’s honor, we could even allow unranked duels more than 20% apart. They had it coming.[quote=“Khsellhu, post:23, topic:3503”]
Also, as for ability… I do understand why its better to set it on random, but it would be nice if a player can at least somehow influence the general course his ability would come from or what form it would take.Like, a couple of questions on registration to carve your character on which you get an ability at random from a pull that somehow corresponds with answers on those questions. Though, I dunno if it is easy to implement.
[/quote]

This makes me think of the personality quiz at the start of the Pokémon Mystery Dungeon games, and your answers determine which Pokémon you start as…

If someone wanted to write a quiz like that, you could totally be presented with it in DMs; maybe randomize a bit still to avoid having peopel game the system, but still feel more “personalized” than pure randomization.

If not, maybe just give a few random options and have the person pick some.

Mostly, I wouldn’t wanna be woken up in the middle of the night by my phone buzzing because someone wandered into me. I wouldn’t exactly be in the mood to celebrate my victory…

This would be a little tricky to do, because we don’t actually store who’s who on the forum anywhere… (it’s planned for the rewrite of Yumemi I’m working on, but that’s a while out still).

But that’s a technical problem that can be solved. I’m more worried this would encourage making low-effort posts, not bad enough to be flagged but not contributing meaningfully, to farm boosts. Unless we outright favor people with higher ranks, at which point the game is basically rigged in favor of Busters.


Tech stuff!

Honestly, this is gonna be like the least performance-critical thing possible, we could write it in PHP and be just fine… at least, until someone (likely me) claws their eyes out halfway through building it.

The languages I know have Discord clients are: Python, Ruby, C#/.NET, Go, Java, JavaScript/Node, Lua, PHP, Rust, Swift, Dart, Crystal and even Unity (yes, the game engine).

Sure! Redis would work wonders for this, Yumemi v2’s brain will be purely Redis. It has it all, get/set values, expiring keys, pub-sub notifications (for some reason) and even lets you watch things for changes.

Now that’s an interesting idea. We could have a bot frontend, a web frontend, and an internal API they both talk to. The bot could request a battle to take place, the internal API executes it, records the results and sends back a turn-by-turn summary of what just happened, then the bot “plays” that sequence back in the chat.

2 Likes

Having read your concerns, I tried to convey anything in a design that covers quite a bit. Anyway, my main concern for now is that important battles should be, of course, important, that’s why I’m trying to spice things up by dividing the ranking in tiers and having a tier leader in each. With this, battles for the tier leadership can be an epic event to look forward too.

I propose the following. Imagine we have 100 players. We create 5 tiers with 20 players in each, Tier I being the top 20 players.

  • The top and bottom 5 players in each tier ascend or fall to the correspondent tier every certain amount of time (24 hours?).
  • Players can only battle other players from the same tier they are in.

Random Battles

  • Battles are random within each tier.
  • Players will only be able to fight with people in their rank +/- 5 positions.
  • Players will be able to set their status as wandering or away.
  • After a Random Battle, the participants won’t be able to fight each other again for 3 hours or until they’ve fought another player.
  • After a random battle, another the players that took part in the fight can’t battle anyone else for 10 minutes.
  • Wandering players that meet the requisites can be placed in a fight.
  • Each fight will be displayed in the corresponding discord channel (there’d be one for each tier and one for announcements or so).

Challenges

  • Players can challenge a player within their “random battle reach” (+/- 5 ranks from their own).
  • Challenged players have 1 hour to respond to the challenge or the battle will be handled automatically by the bot.
  • During that time, the challenger and the challenged won’t be eligible for random battles.
  • The challenger will only be able to challenge someone else after 12 hours have passed (this feature shouldn’t be spammed).

Tier leader battles

  • Players in the top 5 of each tier may challenge the leader of their tier.
  • Challenged leaders have 3 hours to respond to the challenge. Otherwise, the battle will be handled automatically by the bot.
  • While a challenge is active, neither the leader nor the challenger can fight.
  • Only 3 people will be able to set a challenge on the leader at a time.
  • The first challenger will fight the leader first. If he fails, then the following challenger will fight him, and then the third. If the leader wins all 3 challenges, they’ll be able to keep their leader status during 3 more hours. After that time, new challenges on the leader will be able to be set.
  • If the challenger wins against the leader, they swap positions and the leader can stay as a leader for 3 hours before challenges can be set on him.
  • Battles for the leadership will have some special rules so that they can become a bit more epic (200% HP) (Add your own ideas).
  • Battles for the leadership of a tier will be announced on discord to certain level (alert all tier players?, alert all players?). They’ll also have a separate channel.

Considerations

  • During the 3 hour cooldown on challenges, players in the ranks 2, 3, 4 and 5 of the tier will automatically be set to wander. This is to avoid players getting to the top 5 and setting themselves as away.

Additional features

  • After a fight, the winner will give a 40 character max title to the looser, or can let the bot give them a random preregistered one. This name will appear on discord as: “username (title given)”, if the bot can change users’ nicknames. Otherwise, titles will only appear in the ranking page and when the bot refers to a player. Could we also try automatically setting these titles as active for the forum accounts?

  • Stat increase to be determined. I support the idea of having quality posts, fan art… give the player stat points, but if Upp says that it’s impossible, then nothing we can do about it.

Other concerns

  • Tier leaders should be active. That’s why I’m proposing the tier leader battles as a solution that makes leaders active but also gives them some time to log in and watch the battle when they want. 3 hours might not be much time, but if we make it longer then the leadership battles might be very few. Also, people on very different timezones might not be able to battle each other due to these time differences. Challenges help these players battle each other, even if it ends up being handled automatically by the bot.

@uppfinnarn, I’m sorry about the notifications, but it’s something that has to be handled this way if we want leaders to play fairly.

Feel free to cross analyze the system I proposed and to add any other thing you might have considered. Of course, this is just a design that hasn’t taken into account the tech side, so also feel free to point out any issues you might find with this design that might cause the tech side a bunch full of problems.


While I’d love to form part of this project, I only know C++, so I’ll stick to the design side. Still, if there’s any place for a coding language ignorant like me, tell me and I’ll be more than happy to help.

Pretty sure discord allows you to mute notifications for an entire channel (and yes, that includes @mentions) :wink: