She’s waiting… ready to tease you LIVE — come play. Join Now!
x

RPGM Succum Brewery [v0.4.5] [LimeJuiceGames]

4.30 star(s) 128 Votes

Detective Cancer

Deep Cunt
Donor
Aug 28, 2018
2,096
4,361
501
Is this a out of control robot forces lewd stuff hypno or "she kinda wanted to do this anyway it's just disinhibition" hypno?
I like the art and I like the bar trope, just wonderin' if the content itself is something I'd like.
Hypno stuff is very very very hit or miss.
 
  • Like
Reactions: Murtle745
Apr 14, 2023
309
303
172
Is this a out of control robot forces lewd stuff hypno or "she kinda wanted to do this anyway it's just disinhibition" hypno?
I like the art and I like the bar trope, just wonderin' if the content itself is something I'd like.
Hypno stuff is very very very hit or miss.
A bit of both. Early on Catherine shows excitement and curiosity to perversion, but she's shy about it. IO goes "Hmm, this sells" and works on her inhibitions. Later, an event leads to a diary from the previous resident with a way to resist his influence, but that's up to you. And if you let it go long enough without resisting, Catherine will prevent you from going/continuing that path. asdwqdwqeq.png
 

Detective Cancer

Deep Cunt
Donor
Aug 28, 2018
2,096
4,361
501
A bit of both. Early on Catherine shows excitement and curiosity to perversion, but she's shy about it. IO goes "Hmm, this sells" and works on her inhibitions. Later, an event leads to a diary from the previous resident with a way to resist his influence, but that's up to you. And if you let it go long enough without resisting, Catherine will prevent you from going/continuing that path. View attachment 5249053
Neat, okay I'll try it then and give 'em some mons if I have fun.
 

Detective Cancer

Deep Cunt
Donor
Aug 28, 2018
2,096
4,361
501
If you buy the crowbar too early the game kinda freaks out and thinks you're already trying to oppose I/O if you go in the basement. It seems to make a lot of assumptions here and there.

There maybe should be a safeguard so you can't save up and buy it right away since it doesn't take that long.
I get that you can also use it for the bathroom but that doesn't have content for a while from what I'm seeing.
The reader being expensive makes sense.
 

slowparson

Active Member
May 30, 2017
849
584
219
That's it so far when it comes to the plot. Check the gallery, if you have everything unlocked there then you got everything until the next patch
Yeah, the sewers have kinda taken a backseat in the dev process for now, perhaps to allow for some art to be redrawn. Or maybe just 'cuz there's more demand for gettin' Cat dancing on the pole...!
 

clrpurp

Newbie
Feb 3, 2019
23
7
93
Please tell me we get to yeet that shop owner bitch off a roof or something. I feel like she is getting in the way of everyone's happiness and needs a comeuppance. Or cumuppance depending on the tone.
 

Groomtinger

Newbie
Aug 9, 2017
77
267
200
Auto-Perfect Fill Bartender

Works for all drink types and the “Serving Tables” minigame.

1. Open www/js/plugins.js
2. Find this entry:
JSON:
{"name":"GraphicsRenderFix","status":true,"description":"","parameters":{}}
3. Replace it with this (adds the new plugin after the existing one):
JSON:
{"name":"GraphicsRenderFix","status":true,"description":"","parameters":{}},
{"name":"AutoPerfectBartender","status":true,"description":"","parameters":{}}
4. Create a new file at www/js/plugins/AutoPerfectBartender.js and paste the code below.
5. Save the file and restart the game.

JavaScript:
/*:
* @target MZ
* @plugindesc Always pass bartender QTE success checks without skipping content. Leaves waitress hazards (Tripped! / Groped!) untouched.
* @author Groomtinger (+ helper)
*/

(() => {
  'use strict';

  const QTE_ACTIVE_SWITCH    = 3;

  const VAR_MART_POS   = 6;   // Martini cursor offset
  const VAR_MART_STAGE = 27;  // Martini tally 0..3

  const PERFECT_MART_POS   = 0;  // centered, inside -130..130
  const PERFECT_MART_STAGE = 3;  // perfect result branch

  const _gvValue = Game_Variables.prototype.value;
  Game_Variables.prototype.value = function(id) {
    const real = _gvValue.call(this, id);

    if (id === VAR_MART_POS)   return PERFECT_MART_POS;
    if (id === VAR_MART_STAGE) return PERFECT_MART_STAGE;

    return real;
  };

  const PHRASES_PERFECT = [
    "Perfect Fill"
  ];

  function deepClone(o){ return JSON.parse(JSON.stringify(o)); }

  function isExactSingleLineShowTextAt(list, i, phrases) {
    const cmd = list[i];
    if (!cmd || cmd.code !== 401) return false;
    const txt = cmd.parameters?.[0];
    if (typeof txt !== 'string' || !phrases.includes(txt)) return false;
    if (!(i > 0 && list[i - 1]?.code === 101)) return false;
    if (i + 1 < list.length && list[i + 1]?.code === 401) return false;
    return true;
  }

  function findOwningIfIndex(list, i) {
    const needIndent = Math.max(0, (list[i]?.indent ?? 0) - 1);
    for (let j = i - 1; j >= 0; j--) {
      const c = list[j];
      if (!c) continue;
      if (c.code === 111 && c.indent === needIndent) return j;
      if (c.indent < needIndent) break;
    }
    return -1;
  }

  function alreadyPatched(cev) {
    const first = cev?.list?.[0];
    return first && first.code === 108 && String(first.parameters?.[0]||'').startsWith('AUTO PERFECT (rewrite)');
  }
 
  function patchCommonEvent(cev) {
    if (!cev || !Array.isArray(cev.list) || alreadyPatched(cev)) return false;

    let changed = false;
    const L = cev.list;

    for (let i = 0; i < L.length; i++) {
      if (!isExactSingleLineShowTextAt(L, i, PHRASES_PERFECT)) continue;

      const ifIdx = findOwningIfIndex(L, i);
      if (ifIdx < 0) continue;

      const branch = L[ifIdx];
      if (branch && branch.code === 111) {
        const b2 = deepClone(branch);
        b2.parameters = [12, "true"];
        L[ifIdx] = b2;
        changed = true;
      }
    }

    if (changed) {
      L.unshift({ code:108, indent:0, parameters:['AUTO PERFECT (rewrite): perfect-branch condition set to true'] });
    }
    return changed;
  }

  const _DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
  DataManager.isDatabaseLoaded = function() {
    if (!_DataManager_isDatabaseLoaded.call(this)) return false;

    if (!DataManager._autoPerfectRewriteDone) {
      DataManager._autoPerfectRewriteDone = true;
      if (Array.isArray($dataCommonEvents)) {
        for (let i = 1; i < $dataCommonEvents.length; i++) {
          try { patchCommonEvent($dataCommonEvents[i]); } catch(e){ console.error(e); }
        }
      }
    }
    return true;
  };
})();
 
Last edited:
  • Like
Reactions: reallybadman

clrpurp

Newbie
Feb 3, 2019
23
7
93
I think I am following your instructions clearly but I get a black screen on loading the game that doesn't go away. I replaced one line with the new one and created the new js by copying your text block and naming a new file. Did I fuck up?




This has worked for me, so far. I'm not aware of any places it fails the QTE.

Auto-Perfect Fill Bartender

* Updated to work with Martinis
* Updated for the "Serving Tables" minigame.

- This works by making it so that your selected drinks don't matter. It doesn't prevent tripping or anything else. Just removes the skill portion of drink selection.
 

Groomtinger

Newbie
Aug 9, 2017
77
267
200
I think I am following your instructions clearly but I get a black screen on loading the game that doesn't go away. I replaced one line with the new one and created the new js by copying your text block and naming a new file. Did I fuck up?
I've updated my instructions to try to be more clear.

I assure you if they're followed correctly the game works just fine. It's just a new plugin, there's no room for error.

I wish I could be more help, but you'll get that black screen if you mess any of the instructions up, so I can't exactly help you figure out where the mistake was.
 
4.30 star(s) 128 Votes