OrionFive / Hospitality

Orion's "Hospitality" and more
https://www.patreon.com/orionmods
GNU General Public License v3.0
91 stars 53 forks source link

Option to charge guests for bed usage #269

Closed lbmaian closed 5 years ago

lbmaian commented 5 years ago

I've dabbled with hospitality a bit, but never as the main focus of a run. But I've watched some YT series where hospitality is the main focus, like trying to operate an inn or hotel, complete with stores, etc.

One thing that has always struck me as missing is that guests can't be charged for renting a room, or more specifically, reserving a bed. It would be nice if there was an option to charge guests for each day and night spent (rounded up).

A simple default cost, in lieu of advanced customizability settings: beds should be charged based off the impressiveness of the room, divided by the number of beds in the same room (and maybe a bonus for lone bed rooms), multiplied by some scalar that could be customized.

As a first pass, the silver can just be created and dropped (or maybe deposited in the nearest shopping area?) when the guest needs to pay rent. This is a cop-out, but avoids any issues with ensuring that guests having enough silver for the duration of their stay.

lbmaian commented 5 years ago

As a bonus, add support for dub's bad hygiene, whereby a bathroom's impressiveness is added to the linked bedroom.

OrionFive commented 5 years ago

Thanks for the suggestion.

I had thought about this before and what stopped me is that I don't like guests conjuring money. I also think a lot of players would be bothered by it. In theory they could bring the money upfront, but then players would raise the prices and let the guests walk through a trap. I considered sending the money by droppod when the guests leave, but many factions don't have that technology. They could bring it on their next visit, but that could take a really long time. In the earlier versions of RimWorld there was some magic money system to gift money to other factions, but it was taken out because it's not believable.

Apart from the money issue it comes with a lot of hidden pitfalls. Guests will have to reserve their room somehow, which is trickier than you'd think. The game will have to react correctly if the player destroys their room, moves their bed (the room disappeared for a moment!), adds a bed, changes the quality, pokes a hole in the wall, etc. This can probably be solved by checking the status of the room in intervals and adding up a score over the time of the stay. No room = 0 points. But still, this is a fairly tricky affair.

Until I have a good solution for the money issue, I won't consider implementing this idea.

OrionFive commented 5 years ago

Oh yeah, another component here is... Will guests just pay any amount for a room? Is there a threshold for every pawn how much they're willing to pay? Or do they just expect more quality when it's more expensive? How can this be communicated to the player?

lbmaian commented 5 years ago

Thanks for the reply.

Yeah, the complexities of guests paying is why I suggested just allowing an option (i.e. a toggled setting) to just create the silver on the fly on a daily interval. Personally, it doesn't break my SOD since raids are effectively just creating silver and items out of thin air anyway.

It's a trade-off for enabling proper hotel runs, where the quality of the rooms would now actually matter a lot more.

The simplest full scale implementation I can think is for non-tribals to simply drop pod the silver over, and for tribals to magically produce a new visitor with the silver.

As for whether there should be some pricing threshold for which certain pawns wouldn't pay above, well assuming this consideration is enabled, one simple way is to just to average the per-capita silver a visitor group is carrying, multiplied by some scalar, and that's the threshold for each pawn in the group. If they can't pay, it would show up in a message, and the group may be sent away. edit: In some ways a threshold like this could fit the theme of a colony, since a high-class hotel probably doesn't want filthy poor tribals around.

There are more realistic models that could be implemented, like an faction/group-level auction bidding system with pre-visit reservation, but that's a massive design undertaking. Keep it simple.

As for quality expectations, there could be a multiplier on any negative goodwill changes based off the total daily rent expense of the trip. Or maybe that can take the form of per pawn mood debuffs.

The price of a room could be displayed in the room info display, the one that shows the impressiveness, beauty, cleanliness, etc.

Hmm... I'm just starting now to dabble with Rimworld modding, so I may try a hand at implementing something simple in a personal fork...

OrionFive commented 5 years ago

I do like the idea of making tribals unable/unwilling to pay. So once the player sets prices, they'll feel left out. This is an interesting tradeoff.

I do think there's big a difference in immersion between spawning money when spawning the guests and spawning money when they're already there. So this solution would work for that. If players still want tribals, they'll have to provide some free rooms.

OrionFive commented 5 years ago

When I say reserving the rooms I'm not even thinking about pre-reservations. But you have to make sure that multiple guests will not just share the same bed and then all pay for it.

lbmaian commented 5 years ago

I do think there's big a difference in immersion between spawning money when spawning the guests and spawning money when they're already there. So this solution would work for that. If players still want tribals, they'll have to provide some free rooms. Or have a lower class of cheaper rooms available.

All of this does mean that visibility into visitor price thresholds and room prices does have to be easily accessible to the player. The price threshold should be viewable in the guest tab and any relevant messages. The room prices, as mentioned before, should at the very least be shown in the room info display. But that doesn't solve the issue of pricing for multiple guest beds in the same room - see below.

Perhaps a simple model of assigning faction-level thresholds would work, based off their tech levels? Unsure how Rimworld economy works, if it exists at all - just know that amount silver in stock trends upwards from tribals < modern < orbitals. edit: A faction-level price threshold could also be shown in the faction-related menus and dialogs, such as the ones from the comms console.

But you have to make sure that multiple guests will not just share the same bed and then all pay for it. Or if they do share it, they should share the cost.

A more "fair" pricing model would be to:

Now, this information does need to be shown to the player as well. Max daily price per bed needs to be shown prominently in the GUI somewhere, along with the guest tab. "Max" due to any possible discount as mentioned above, and for the cases where the guest hasn't reserved the bed for the full amount of time (which you solved with the interval scoring solution you mentioned earlier).

OrionFive commented 5 years ago

I hope you realize (by now) that even building a basic version of this is quite involved. I do think it would be cool to have it eventually, there just doesn't seem to be a step by step way to get there in increments that aren't immersion breaking.

We'll, maybe there is. Iteration 1: A fixed price per bed that can be turned on and off. Tribals will only use free beds, others will pay but get a debuff you have to compensate with a nice room.

lbmaian commented 5 years ago

Well that's the thing - even a simplistic version where silver is created out of thin air and dumb tech-based rent price thresholds (or even dumber alternative - see below) is not immersion breaking for me. I can easily just pretend that the "hidden" money is just earmarked for rent, and other simplifications are already in the ballpark of existing Rimworld simplifications.

That can be iterated upon to slowly make it more and more realistic, adding more nuanced pricing models (per room, per bed, shared bed), better faction payment, and faction willingness to rent, in later versions.

UX improvements can likewise be iterated upon. Heck, if the rent price thresholds weren't in the first iteration, or a dumb placeholder like a max rent payment per tech level instead of thresholds was used, the UI might need only minimal changes, just the rent price, for the first iteration.

OrionFive commented 5 years ago

Yeah, I can see myself working out a first iteration of this. What I do wonder is at what point this is actually fun and not just a boost to players' finances (selling stuff can already be a huge source of income).

lbmaian commented 5 years ago

It would be fun for those that are trying to play hotel runs or pacifist builder runs.

Though I do agree it would lower difficulty further. I already personally think Hospitality is too easy by default for both recruitment and goodwill.

Perhaps the feature should be under an experimental toggle, or even a submod, until it's feature complete enough and overall balance is in a better place.

OrionFive commented 5 years ago

Yeah, it could be opt-in until it's good enough. If high costs upset guests it might be somewhat balanced. I actually think it'd be fun to have a guest break into a rage because his room is too expensive.

And yeah, Hospitality makes things a lot easier through recruitment. I never convince prisoners because it's just easier with guests. But I couldn't think of a good drawback that doesn't feel like arbitrary punishment yet. People whine a lot when a faction gets upset because guest a got killed. But it's really a small drawback compared to the advantages.

lbmaian commented 5 years ago

Having costs be such a penalty to guest mood would be an interesting mechanic, although to reach such a level to cause a break purely through the existing mood system would be a challenge, considering how stackable mood buffs can be. Just looks really hard to calibrate.

Guest recruitment was probably more "fair" back before resistance was added to the game. That was a situation where gameplay balance (or at least Tynan's sense of it) trumped simulation realism. Just spitballing here, but in order to match that difficulty increase, you'd probably need some equivalent resistance mechanism, along with making guests with more friendships (and higher relationships in general) visit more frequently (or if this mechanic already exists, supercharge it).

Anyway, this is a bit off topic and better suited for another issue, say #231. I'm glad all the recent brainstorming has solidified this suggestion enough to go on the todo list 😄

OrionFive commented 5 years ago

I don't think it'll be that bad. They could get one rebuff per 5 cost over what they'd like to pay and stacked rebuffs will escalate (plus a percentage for each stacked debuffs). Something like that.

I'm not really a fan of the resistance mechanic for guests anymore. I used to have it. Now you need a certain amount of friends which I think works better. Also, befriended guests do come much more often, to the point that you have to kill/recruit them to get new options of guests ;)

lbmaian commented 5 years ago

I think the problem is that it's typically easier to build up relations with a guest than to reduce a prisoner's resistance. It doesn't matter if you have 20 social and have the nicest prison ever, if a prisoner has 50 resistance, it's going to take a LONG time. Maybe you can just add a difficulty slider for how effective and how often a guest can be charmed. Or somehow have a relation level even beyond friendship (>100).

edit: This is not to say that prisoner resistance is a great mechanic, but it's what you have to balance difficulty against.

OrionFive commented 5 years ago

I like being able to recruit guests in a pinch. You can get new pawns by sacrificing relationship you've built up. If it would also take a long time you'd lose that. Once you have more pawns it gets increasingly harder to hire more guests.

I don't really see the issue, apart from it being easy if you only have a few pawns. It does kinda take the edge off of naked brutality. But so does RimWorld, dropping pawns on you until you take one, if you have a low amount of them.

lbmaian commented 5 years ago

I'm just saying that, regardless of your opinion on prisoner resistance (which I probably share, by the way), it's what the vanilla game is balanced towards. So if you could have difficulty toggles and sliders for (some if which already exist IIRC):

I mean, there's a whole bunch of stuff that's potentially configurable here, enough to the point that if they existed, difficulty presets would be great.

(Again, sorry about dragging this issue into off-topic territory.)

OrionFive commented 5 years ago

I understand your desire for configuring the mod. But every option I give is a way for players to mess up their experience that they will later forget about and complain to me that it isn't good. Also, each setting introduces a point of failure for the mod. The best candidates for settings are those with the most important impact. But once I create a setting, I can't tweak it myself anymore, which means I have to rely on the user to get it right. There's a reason Tynan included practically no settings at all in RimWorld. You can still fine tune the game with mods. But then you're also taking responsibility for the consequences. As soon as it's a toggle or a slider, you will blame the game for whatever damage you do with it. When I say "you" I obviously don't mean you personally, but "you" as the general user.

Hospitality already has some settings, pretty much as many as I dare to provide the user with. It also has a hidden config file that can be expanded with more settings. It was made by a different programmer who wanted to tweak something specific and wasn't my idea. I personally think it's an awful idea and I'm not going to spend my time on expanding it for those 2-3 users who actually understand how to use it.

So yeah... that's my stance on settings... I might change my opinion in the future, but so far, having settings has only been a pain in the ass for me.

lbmaian commented 5 years ago

That's a reasonable stance on user-configurable settings. Though it sounds like you're open for the difficulty presets approach discussed in #231. So for ex, a more hardcore preset could have no instant recruitment and slower relation increases per charm attempt.

OrionFive commented 5 years ago

Yeah indeed. That could be an option. The downside is that I have to explain to the player what the consequences are of playing at different difficulties. Then people will ask for decoupling the game difficulty from the mod difficulty and then ask for being able to control the individual parameters separately. In any case, as soon as I give more options I'm opening a can of worms. The difficulty presets may still be before the point of no return, though.

OrionFive commented 5 years ago

Alright, this feature won the vote on patreon! I'm going with a pay-upfront to claim a bed, for whoever has the money. They'll incur a mood penalty for having to pay. If you break their bed or move it or whatever they have to claim it again and the debuff doubles.

lbmaian commented 5 years ago

Yay 👍

How much silver are the rooms going to cost? A fixed amount for the first version?

Will the guests have to physically have the silver for the up-front cost? Thought you were worried about players exploiting that, although any such exploit would be short-lived with massive relation penalty.

OrionFive commented 5 years ago

I thought 25 would be a good starting point. In the future, I'll add buttons to increase/decrease in increments of 5 or 10. It'll increase their debuff proportionally :)

The guests will bring the same amount of silver as now (which is relative to faction goodwill, but still random). So that won't change. So guests will pay for the room if they can afford it. You'll still have some who didn't bring enough money. So you'll have to offer some free beds just in case. If they like the free beds better, they'll go for those first. I'll probably add in the future that guests "borrow" money from pawns in their group automatically.

There is one major consequence to this system, though, that I'm not sure yet how to deal with: The player won't earn any more money than right now (more or less), since currently, given the opportunity, guests will spend all their money on goods. When you charge for their beds, you still can't get more than all their money, but you'll get the debuff. So maybe I'll have to make them more stingy with their money somehow, to make it worthwhile to charge for beds. Any ideas?

lbmaian commented 5 years ago

Well at the very least, if you're not making a shopping mall, the player will more often end up extracting maximum money from guests. So, if you're building an inn rather than some high-end hotel with shops all around, it's still a net positive.

If you're foregoing new UI for controlling prices (or whether to charge rent in a bed at all) for the first iteration, you can just have it so that if guests can't pay, they can stay in the room for free and don't get a mood debuff. Later, once you do add price controls and mechanics for guests who can't pay rent, you can replace this "feature".

The price mood debuff needs to be balanced by the mood buffs from the place they're staying at. Ideally, if prices are set automatically, the price mood debuff should be the exact same as the bed/room's mood buffs. Since they're not being automatically set, you'll need to just approximate how beneficial a 25/day bed is worth.

OrionFive commented 5 years ago

Yeah, indeed. Something like that. Actually, adding controls for the price isn't much harder than toggling payment on/off, so I might go for that right away. I think it should work kinda like setting the temperature on the cooling units, but then less finegrained.

I just had a wonky idea for the money extraction problem: ATMs. Happy guests will use them to withdraw more silver that they can then spend. The only issue concerning breaking immersion is how does the silver get in there in the first place. Possible options would be:

Now that I think about it, it's not all that silly.

lbmaian commented 5 years ago

ATMs are an interesting idea. You can just generalize it as an IOW system that works with tribals.

For factions that have drop pods (and are for some reason willing to waste the resources to build them... never mind, if it works for sieges it works here), they'll just droppod in the silver at the end of their stay.

For other factions, like tribals or medieval factions, they'll just ensure that the next visit includes a pawn with enough silver to pay off the debt. If there's dissatisfied enough to never return and thus never pay off a debt, well whatever, they're filthy tribals, you can punish them later 😁

The silver to pay the debt can either be dropped off in an arbitrary room that's been reserved by a guest of the faction, or if that doesn't exist, standard tradeship dropoff logic.

OrionFive commented 5 years ago

Best would be one system that all guests use. I suppose just bringing the money next time and dropping it at the player's feet when they arrive makes the most sense.

lbmaian commented 5 years ago

Alright.

The ATM/bank idea is still good - it can be done as a separate feature, unlocked by some new tech or some other requirement, to increase the spending capacities of guests.

OrionFive commented 5 years ago

I've created #285. We can further discuss this feature there.

Tharn commented 5 years ago

Hospitality is already a very powerful mod. If you can keep guests happy, there are no downsides. Getting permanent 100 relationship with all tribes & outlanders is trivially easy . You then can use relationship to request mercenaries and more trade caravans. You also get more trade by selling stuff to visitors. Adding bed rentals on top of that would only push the mod further into the realm of overpowered.

I would contend that even visitors leaving gifts when they leave is OP. I always disable it and still things feel easy.

OrionFive commented 5 years ago

I can nerf selling things to make up for it. Also guests will get a mood debuff if you charge money, so the risk of not getting 100% is higher.

lbmaian commented 5 years ago

While I agree that Hospitality currently reduces Rimworld difficulty, and I personally play with more restrictive constraints (including never recruiting guests), I think a better approach would be to introduce hardcore difficulty presets (which were briefly discussed way above), rather than exclude new features that allow new styles of play.

OrionFive commented 5 years ago

It's done. I'm not gonna set it live on Steam yet since this is a massive update. Please test it. It can be downloaded here.

lbmaian commented 5 years ago

Great! I'm working on my own mod - well, technically, updates to an existing mod - that I hope to finish in a couple days (which might be wishful thinking, but I'll try it in a new playthrough then.