Character
Marcus
Bar manager on Independent only. He hires you, sets the uniform, takes a cut of the tips.
Quick facts
- Role
- Bar manager
- Location
- [[loc:bar|The Bar]]
- VAR
- BarManagerName (default "Marcus")
- Active when
- master_intensity == 0 (Independent route)
- Replaced by
- MasterName on intensity 1, 2, 3
- Patreon
- No, free content
TL;DR
Marcus is a default. On the Independent route (master_intensity = 0), he’s the friendly-pragmatic small-business owner who hires you, gives you the uniform, takes a cut of the bar’s pay, and runs the minigames. On any Master route he’s overwritten at character creation: BarManagerName gets set to your MasterName so the Master can credibly visit the bar to give orders. The same scenes play; the name on screen is different.
So Marcus’s wiki page is, in effect, the page for the bar’s manager when there is no Master. The systems below are identical across routes; only the identity changes.
How he’s named
In character-editor.js, after initStory():
const barMgr = masterIntensity >= 1 ? characterData.masterName : "Marcus";
story.variablesState.BarManagerName = barMgr;
So:
- Independent run:
BarManagerName = "Marcus". He owns the bar, runs it, and is unrelated to anyone else in the story. - Roommate / Landlord / Owner run:
BarManagerName = <MasterName>. The Master is the bar’s manager; Marcus the character doesn’t exist on these routes.
This is the Bar-Orders sibling-bug fix from v0.2.5.2 — pre-fix, “Marcus” reached between your legs in a Master-coded order scene on an Owner run, which read as “wait, who is Marcus?” Now the name resolves correctly to whatever the player chose.
The hire
BarIntro -> BarIntro_Job. Marcus is behind the counter. Studies you. Two questions: are you here for the job, and can you handle being looked at?
Three exit branches:
| Choice | Branch | Outcome |
|---|---|---|
| Take the uniform | BarIntro_Uniform_Accept |
Floor work. Polo + pants. Starts at bar_outfit = 2. |
| I’ll work in the back | BarIntro_Storage_Accept |
Stockroom only. T-shirt allowed. bar_outfit = 1, bar_works_storage = true. |
| Decline | None | $20 walking-away money. No job. |
The choice isn’t final. Bar_AcceptUniform_Late and Bar_SwitchToStorage both let you swap later — Marcus folds the uniform neatly, shrugs about your call, and lets you change shifts.
The four outfit tiers
bar_outfit carries the player’s current state.
| Value | Outfit | Where you work | Base pay |
|---|---|---|---|
| 0 | None | Not hired | n/a |
| 1 | T-shirt / casual | Stockroom (Bar_StorageWorked) |
$35 flat |
| 2 | Polo + pants | Floor (BarWorked) |
$50 base + tips + bonuses |
| 3 | Cocktail dress | Floor (BarWorked) |
$65 base + tips + bonuses |
Bar_DressOffer is the pivot. It fires after bar_shifts_worked >= 5 AND bar_outfit == 2 AND dress_offered == false. Marcus pulls a short black cocktail dress from under the counter.
“It’s tradition. Twenty years. My father started it. Everyone who’s worked the floor wore this eventually.”
Accept (Bar_DressOffer_Accept): bar_outfit = 3, fem_gain(2), shame_gain(3), the dress is yours, base pay jumps from $50 to $65, and the regulars notice immediately.
Decline (Bar_DressOffer_Decline): the offer stays open whenever you change your mind.
The first-shift inspection
Bar_FirstShift ends with a pacing-mode-aware gate:
| Pacing mode | Trigger day | First-shift inspection |
|---|---|---|
| Fast (4W) | Day 3 | Yes |
| Standard (default) | Day 10 | Yes |
| Slow | Day 17 | Yes |
| Very Slow | Day 24 | Yes |
Before that threshold, Marcus closes the night with “Good work tonight. Get home, get some sleep. There’s plenty more to come, soon enough.” Stat-wise, this is the gentle exit. (master_intensity == 0 adds a quiet fem_gain(1); >= 1 adds Arousal and a shame_gain — the difference is just framing.)
At or past the threshold, Bar_FirstShift_Inspection fires. Marcus leads you to the back room. “Turn around. Slowly.” From there, three branches:
- Comply — He smooths your collar, brushes your collarbone. Stats land at
fem_gain(1),sub_gain(2),shame_gain(3), Arousal +5. - Don’t stop — Hand goes under the uniform, finds the cage.
sub_gain(2),shame_gain(3), Arousal +8. - Refuse — He shrugs. “You’ll get comfortable soon.”
fem_loss(1), no other consequence.
On Master routes, this scene plays as Master-coded touch (because BarManagerName resolves to MasterName). On Independent, it stays in Marcus’s frame.
Pay math
BarWorked calculates pay before handle_result(result) — important for blackout safety, the money survives even if Energy dies mid-shift. Inputs:
- Base pay — $50 (polo) or $65 (dress).
- Fame bonus — +$5 at
sissy_fame >= 25, +$10 at 50, +$15 at 75. - Perk bonus —
perk_fast_shiftsadds $5. - Office-ready set bonus —
set_office_readyadds $10. - Allure tips —
get_allure() / 5if Allure >= 10. (Allure is the streaming/lounge-style stat, not feminine equipment.) - Penalties —
is_dirty-$10,is_tired-$15. - Makeup bonus — has_makeup_on AND makeup_skill >= 2: +$10, or +$20 if
pro_makeup. - Trait bonus —
competitiveadds $10.
After the math, master_cut(bar_pay) skims a cut for the Master if master_intensity >= 1. On Independent there is no cut — Marcus takes the bar’s share via base pay; the player keeps the full earned number.
Stockroom (Bar_StorageWorked): flat $35, no fame bonus, no Allure tips. The dress-tier maxes out at well over $100/shift; the storage path is intentionally less.
Minigames
Every shift dispatches a minigame after handle_result:
- Floor shifts ->
Bar_CocktailMinigame(cocktail mixing). - Storage shifts ->
Bar_CratesMinigame(crate sorting).
Both are skippable. Score lands in bar_minigame_bonus which is added to Money inside the minigame tunnel (so the value survives auto-sleep). Marcus doesn’t comment on the minigame outcome directly; it’s an abstraction of the shift’s craft.
Master-route order scenes (NOT Marcus)
When master_intensity >= 2, BarWorked calls Bar_MasterOrderCheck after the shift. These knots (Bar_Order_Chastity_*, Bar_Order_Plug_*, Bar_Order_Laser_*, Bar_Order_Makeup_*, Bar_Order_Hair_*, Bar_Order_Downsize_*) all use {BarManagerName} — which on a Master route is your MasterName. The character driving them is the Master visiting the bar, not Marcus.
This is the naming gotcha flagged in CLAUDE.md: any narration with #char:master_* portraits or #sms:master: follow-ups belongs to the Master arc and uses MasterName. Treat the bar-order scenes as Master content that happens to fire at the bar.
Tips and gotchas
The two storage events that compliment your strength
Bar_Storage_Barrels has a “Wow, you did all three? Marcus usually calls someone for the heavy ones” beat from a server. And Bar_Storage_Delivery has the driver: “You’re stronger than you look.”
Both fire regardless of Fem, but at Fem >= 30 the barrels event also catches your reflection in the walk-in cooler door: “The t-shirt hangs loose on you now. You’ve lost some muscle.” Marcus isn’t the speaker, but the scene happens on his watch.
OrderBlocked screens are Marcus's voice on Independent
BarEntry_OrderBlocked_Chastity and BarEntry_OrderBlocked_Plug SMS the player: “No cage, no work. You know what to do.” These fire only when master_intensity >= 1 (so on Independent runs they never appear), and the text is the Master’s voice in the Master arc, not Marcus’s. Marcus doesn’t gate shifts on cage compliance — he just runs the bar.
Twice-a-day cap on shifts
shifts_today caps at 2 per day. The third visit shows a disabled choice: “Already worked two shifts today.” Marcus doesn’t say it; it’s a system message. But it’s worth knowing the bar isn’t a money fountain — you grind two shifts and then go somewhere else.
Related
- Master, the character whose name overwrites BarManagerName on intensity >= 1.
- Bar, the bar he runs.
- Lily, one knot in
Bar_FirstShiftname-drops her as the bartender showing you how to pour. That’s not the dancer Lily — just shared first name. - Sarah, the Sarah-dominant route’s first cuck scene (
sarah_dom_chair_partner = 1) uses Marcus as the partner on Independent (master_intensity = 0). Onmaster_intensity = 3the chair partner becomes the Master himself (= 4).
Comments
Patreon supporters can post. Public can read. Posts show under an anonymous handle (e.g. Quiet Owl 423) derived from your account, your real Patreon name stays hidden.