Add hospital revival, Robbie bandit, MW/shop fixes, float64 scoring

- St. Guildmore's Memorial Hospital: !hospital command with Nurse Joy,
  procedural itemized billing, same-day revival, 6-hour dead timer,
  hospital ad after death, 2-hour nudge follow-up
- Robbie the Friendly Bandit: automated inventory cleaner, random daily
  visits (8-21 UTC, 40% chance), collects sub-tier gear at €50/item,
  donates to community pot, drops Get Out of Medical Debt Free card
- Fix MW auto-equip: T1 MW no longer replaces better equipped gear
- Fix shop MW block: allow purchasing upgrades over lower-tier MW
- Float64 equipment scoring: advEffectiveTier and advEquipmentScore
  return float64, no mid-calculation truncation (MW 1.25x, Arena 1.5x)
- Fix markdown rendering: convert *asterisk* to _underscore_ italics
  across all flavor text files (shop, blacksmith, rival, hospital)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
prosolis
2026-04-05 17:04:03 -07:00
parent 6c6d74fb1b
commit 05cf6657f5
24 changed files with 2179 additions and 225 deletions

View File

@@ -22,18 +22,18 @@ var rivalRoundWon = []string{
"Did that hurt? The losing, I mean. Or is this familiar enough to be comfortable?",
"I knew what you were going to throw before you did. I know what you're going to throw next. I won't tell you.",
"You should have thrown something else. You know that now. I knew it before you threw.",
"*takes a moment to write something down* Sorry. Just keeping notes. Continue.",
"_takes a moment to write something down_ Sorry. Just keeping notes. Continue.",
"The expression on your face right now is doing a lot of work. Most of it sad.",
}
// rivalRoundLost are said by the rival after they lose a round.
var rivalRoundLost = []string{
"Even a battered, dirty, *sniffs* smelly, and broken beyond any hope of repair clock is right twice a day.",
"Even a battered, dirty, _sniffs_ smelly, and broken beyond any hope of repair clock is right twice a day.",
"Fine. You got one. Don't read into it. Actually -- you won't know what to read into. Never mind.",
"I want you to enjoy this moment. Really sit in it. It may be all you have to take home today.",
"I respect the throw. I don't respect the thrower. These are two separate things.",
"Lucky. I've seen luck before and that's what that was. Make peace with it.",
"*pauses* Okay. *pauses again* I wasn't expecting that. That changes nothing. Next round.",
"_pauses_ Okay. _pauses again_ I wasn't expecting that. That changes nothing. Next round.",
"You threw the right thing at the right time. The stopped clock principle applies. Ask someone to explain it to you later.",
}
@@ -42,28 +42,28 @@ var rivalTied = []string{
"Same throw. Neither of us embarrassed ourselves. One of us is about to rectify that.",
"We're going again. That's fine. I have nowhere to be. Do you have somewhere to be? It doesn't matter.",
"You matched me. I want to be clear that this is the ceiling of your performance and we both know it.",
"*narrows eyes* Interesting. Going again. Don't get comfortable.",
"_narrows eyes_ Interesting. Going again. Don't get comfortable.",
}
// rivalClosingWin are said by the rival when they win the match.
var rivalClosingWin = []string{
"I told you. I always tell people. People don't listen. Then it's over and they know I was right. Every time.",
"I hope the walk home gives you some time to think. Not about what you could have done differently. Just in general. Thinking is good for people.",
"Take care of yourself out there. Eat something. You look like you haven't in a while. *folds hands* Actually that's your business. Good day.",
"Take care of yourself out there. Eat something. You look like you haven't in a while. _folds hands_ Actually that's your business. Good day.",
"The gold is mine. The record is updated. You may go.",
"I've done my good deed. The world is slightly more balanced now. *nods slowly and walks away*",
"You gave it everything. *looks you over* Everything wasn't enough. But still. Points for showing up.",
"I've done my good deed. The world is slightly more balanced now. _nods slowly and walks away_",
"You gave it everything. _looks you over_ Everything wasn't enough. But still. Points for showing up.",
}
// rivalClosingLoss are said by the rival when they lose the match.
var rivalClosingLoss = []string{
"You look like you've won the damn lottery. The sheer excitement on your face from winning a handful of gold is genuinely depressing. *sighs* I suppose I've done my good deed for today. *checks off an item on a list titled 'Feed a waif today'*",
"You look like you've won the damn lottery. The sheer excitement on your face from winning a handful of gold is genuinely depressing. _sighs_ I suppose I've done my good deed for today. _checks off an item on a list titled 'Feed a waif today'_",
"Fine. Take it. You've clearly never had this much at one time and I'm not going to be the one to take that from you. Today.",
"I'll be back. Enjoy the gold. Buy yourself something warm to eat. You look cold.",
"*stares at you for a long moment* No. *turns and walks away*",
"You won. I lost. The sun is back out. These things are unrelated. *looks up at the sky anyway*",
"_stares at you for a long moment_ No. _turns and walks away_",
"You won. I lost. The sun is back out. These things are unrelated. _looks up at the sky anyway_",
"I'm not angry. I'm not even surprised. I'm something else entirely and I don't have the energy to name it right now. Congratulations.",
"Keep it. Consider it a loan. *has not indicated when or if repayment is expected* You chuckle to yourself, convinced this was said in jest. You notice them scribbling a collection date.",
"Keep it. Consider it a loan. _has not indicated when or if repayment is expected_ You chuckle to yourself, convinced this was said in jest. You notice them scribbling a collection date.",
}
// rivalRoundOutcomeWin are the player-wins-round outcome lines.