May 20, 2021
423
161
I think the build is just for Win PC but playable through emulator on Linux.
i may have made a mistake switching to linux if thats the case , my pc is from 2014 and well it wasnt going to update no more and i felt like saving it then to see it being useless
 

werag17897

Newbie
Feb 2, 2020
29
44
i may have made a mistake switching to linux if thats the case , my pc is from 2014 and well it wasnt going to update no more and i felt like saving it then to see it being useless
The game works on Linux, I'm running it. It's extremely rare I've encountered a Renpy game on here that doesn't work on Linux FYI, and I've played at least an hundred.

Try extracting the zip from from CLI, use the unzip command.
 
May 20, 2021
423
161
The game works on Linux, I'm running it. It's extremely rare I've encountered a Renpy game on here that doesn't work on Linux FYI, and I've played at least an hundred.

Try extracting the zip from from CLI, use the unzip command.
you have thats so strange 3 times i tried to extract and i get a message as if the file is not there what link you used
- - MEGA -
 

werag17897

Newbie
Feb 2, 2020
29
44
you have thats so strange 3 times i tried to extract and i get a message as if the file is not there what link you used
- - MEGA -
From Mega.

Like I wrote, try from from CLI.

Open gnome-terminal or whichever terminal you have installed, then type :

cd ~/Downloads

Press Enter.

Type:

unzip Theater_Of_Sinners-0.2.alpha-pc.zip

Press Enter.

If there's a error with the archive that will tell you.

You can use unzip -t Theater_Of_Sinners-0.2.alpha-pc.zip also to perform a verification of the archive.
 

werag17897

Newbie
Feb 2, 2020
29
44
If it helps you or anyone else, I run all RenPy games through a script which sandboxes them and disables internet connectivity.

It also scales them using FSR, here's the script if you want it:

Bash:
#!/bin/bash

########################################################################
# Sandboxes RenPy games on Linux, disabling network access and a few other security enhancements.
# Also runs the game through gamescope for FSR scaling.
# Requires firejail, gamescope, xrandr to be installed.
# Optionally requires rpatool to find the game resolution (for FSR).
# Put your games in $HOME/Games/renpy
# Make this script executable (chmod u+x run.sh).
# Put this script (run.sh) in the game folder, where the py, sh and exe file is.
# Double click it to run the game.
#
# To get a normal a cursor in gamescope, instead of a X, put it here: ~/.local/share/gamescope_cursor.png
# You can use this one for example : https://github.com/black7375/Breeze-Cursors-for-Windows/raw/master/Sources/normal.png
#
# License: GNU General Public License 3.0 or later
########################################################################

scriptName="$(basename "$0")"

for program in firejail gamescope xrandr; do
    if ! which $program &> /dev/null; then
        echo "Script '$scriptName' requires $program."
        exit 1
    fi
done

# Attempts to find the game's resolution for gamescope's FSR. If it fails, 1920x1080 will be used.
# If this fails. you can also use rpatool to extract the rpa file containing the images to determine the resolution.
find_game_res() {
    rpatool="$(which rpatool)"
    if [[ ! -f $rpatool ]]; then
        rpatool="$(realpath ../rpatool)"
        [[ ! -f $rpatool ]] && echo "Could not find rpatool!" && return
    fi
    gRes=$(grep -r "gui\.init([0-9]" &> /dev/stdout | head -n1)
    if [[ $gRes =~ "binary file matches" ]]; then
        archive=$(realpath "$(echo "$gRes" | cut -d: -f2 | xargs)")
        [[ ! -f $archive ]] && return
        curDir="$(realpath .)"
        tmpDir="$(mktemp -d)"
        cd "$tmpDir" || return
        "$rpatool" -x "$archive"
        gRes=$(grep -r "gui\.init([0-9]" &> /dev/stdout | head -n1)
        rm -rf "$tmpDir"
        cd "$curDir" || return
    fi
    if [[ $gRes =~ gui\.init\([0-9] ]]; then
        gWidth="$(echo "$gRes" | grep -Po "\(\d+" | cut -d\( -f2)"
        gHeight="$(echo "$gRes" | grep -Po "\d+\)" | cut -d\) -f1)"
        sed -i "s/^gWidth=[0-9]*/gWidth=$gWidth/" "$0"
        sed -i "s/^gHeight=[0-9]*/gHeight=$gHeight/" "$0"
        sed -i "s/^gameName=.*/gameName=$gameBaseName/" "$0"
        echo "Found game resolution ${gWidth}x${gHeight}."
    fi
}

[[ -d $1 ]] && cd "$1"

if [[ ! -d renpy ]]; then
    echo "Script '$scriptName' is in wrong directory, put in a renpy game (the renpy folder must exist)."
    exit 1
fi

dRes=$(xrandr | grep -m1 "\*" | grep -Po "\d+x\d+")
if [[ -n $dRes ]]; then
    dWidth=$(echo "$dRes" | cut -d x -f1)
    dHeight=$(echo "$dRes" | cut -d x -f2)
fi
[[ -z $dWidth ]] && dWidth=2560
[[ -z $dHeight ]] && dHeight=1440

gameExec="$(find . -maxdepth 1 -type f \( -name '*.sh' ! -name "$scriptName" \))"
if [[ ! -f $gameExec ]]; then
    echo "Failed to find game executable."
    exit 1
fi

gameBaseName="$(basename "$gameExec" .sh)"
gameName=x
gWidth=0
gHeight=0

if [[ ! $gameName == $gameBaseName ]]; then
    find_game_res
    if [[ $gWidth == 0 ]] || [[ $gHeight == 0 ]]; then
        echo "Failed to find game's native resolution, falling back to 1920x1080."
        gWidth=1920
        gHeight=1080
    fi
fi

chmod u+x "$gameExec"
chmod u+x "lib/linux-x86_64/$gameBaseName"

echo "Starting game."
MANGOHUD=1 ENABLE_VKBASALT=1 gamescope \
    --nested-width $gWidth --nested-height $gHeight \
    --output-width $dWidth --output-height $dHeight \
    --fullscreen \
    --nested-refresh 30 --nested-unfocused-refresh 5 \
    --fsr-upscaling \
    --sharpness 20 \
    --cursor $([[ -f ~/.local/share/gamescope_cursor.png ]] && echo ~/.local/share/gamescope_cursor.png || echo /dev/null) \
    -- \
    firejail \
        --nogroups --net=none --nodbus --nou2f --private-dev --private-tmp --seccomp \
        --whitelist=~/.renpy           --noblacklist=~/.renpy \
        --whitelist=~/.config/renpy    --noblacklist=~/.config/renpy \
        --whitelist=~/Games/renpy      --noblacklist=~/Games/renpy \
            "$gameExec"

exit "$?"
Edit: I've attached comparison screenshots, default (off.png), FSR scaling (fsr.png), FSR scaling + vkBasalt (fsr_vkbasalt.png). Easier to see the difference if you have them at their original resolution.
 
Last edited:
  • Like
Reactions: JustXThings
May 20, 2021
423
161
you have thats so strange 3 times i tried to extract and i get a message as if the file is not there what link you used
- - MEGA -
From Mega.

Like I wrote, try from from CLI.

Open gnome-terminal or whichever terminal you have installed, then type :

cd ~/Downloads

Press Enter.

Type:

unzip Theater_Of_Sinners-0.2.alpha-pc.zip

Press Enter.

If there's a error with the archive that will tell you.

You can use unzip -t Theater_Of_Sinners-0.2.alpha-pc.zip also to perform a verification of the archive.
ill look into it thanks am new to linux so i havent used a terminal before
 

Ogre

Member
Mar 29, 2018
219
556
I actually like all mighty super villains. I imagine myself doing a game where the MC's try to escape a terrible fate while growing slowly into despair seeing nothing they do work against the all mighty evil in front of them. Like the first Saw movie for instance. I could team Rebeca and Paula up against Paula's mother and make such a game =D Maybe I make an spin off.

Paula will get depth in season two part one. From a character development point of view, first season is Rebeca / Agnes spotlight . Season two is for Paula / Olivia to shine.
Well, that's fair. it's your game, you should make it how you imagine it.

Hey, perhaps Agnes's daughter can make an appearance too. Every good game benefits from having a skinny teen getting corrupted in it.
 

soldano

Member
Jan 29, 2018
244
406
I already said it in the review, but I think this game would benefit greatly from a replay option. From the structure of the game, I think it would be a really easy thing to do.

I mean a "gallery" where you can see past scenes again, I don't know if I'm explaining myself.
 

JustXThings

Member
Game Developer
May 22, 2022
210
1,220
Well, that's fair. it's your game, you should make it how you imagine it.

Hey, perhaps Agnes's daughter can make an appearance too. Every good game benefits from having a skinny teen getting corrupted in it.
She is 15 !!! Sorry, no Agnes daughter =D She will appear again though.

I already said it in the review, but I think this game would benefit greatly from a replay option. From the structure of the game, I think it would be a really easy thing to do.

I mean a "gallery" where you can see past scenes again, I don't know if I'm explaining myself.
Yes. It's planned. An event selection look alike together with the 'seen-label' function from Ren'Py. The issue is that events tend to play different based on levels, stats, etc. I have seen before that some galleries ask you for which stats the characters had when doing the event but I am no so fond of it. I'd like the gallery to separate the different options, but I didn't structure it that well... every variation of an event should be on its own label. Long story short... yes... there will be gallery of some sort.
 

JustXThings

Member
Game Developer
May 22, 2022
210
1,220
2.png
Paula "So, when are you finishing 0.2.Final and start working on MY update."

Dev "Here... look at the dev plan..."

4-4.png

Paula "What !!?!?!? You won't be working on the Theater until mid October !?!?!"

Dev "Yeah... sorry... I am away of my PC until then and working with the laptop is a real pain."

Dev "I'll be working on a short story though... more on that later."

3-4.png

Paula "But... BUT..."

3x.png

Paula "I am calling my agent !"

Dev "Wait ! Don't call anyone ! You are getting an event in 0.2.Final !!"

12a-2.png

Paula "Ok. I am going to let it pass this time. But do NOT forget who is the star."

-------

So... 0.2.Final almost ready. Coming later this week and yes...

It will contain a Paula event for Mr. Smith level 4. So if you got this photo...

11.png

You will be able to play the additional event.

10-4-5.png

Paula "Shit... another old bastard event."
 

JustXThings

Member
Game Developer
May 22, 2022
210
1,220
Hey am curious about the android version of this game where can I find it it's not available?
Hey there. I didn't do any android port myself. You have port thanks to an awesome user that did it. I think he post it in the beginning of the thread, so maybe you can ping him.

But I'd recommend waiting until 0.2.Final, which comes soon.
 
  • Like
Reactions: mesopo2

JustXThings

Member
Game Developer
May 22, 2022
210
1,220
If it helps you or anyone else, I run all RenPy games through a script which sandboxes them and disables internet connectivity.

It also scales them using FSR, here's the script if you want it:

Bash:
#!/bin/bash

########################################################################
# Sandboxes RenPy games on Linux, disabling network access and a few other security enhancements.
# Also runs the game through gamescope for FSR scaling.
# Requires firejail, gamescope, xrandr to be installed.
# Optionally requires rpatool to find the game resolution (for FSR).
# Put your games in $HOME/Games/renpy
# Make this script executable (chmod u+x run.sh).
# Put this script (run.sh) in the game folder, where the py, sh and exe file is.
# Double click it to run the game.
#
# To get a normal a cursor in gamescope, instead of a X, put it here: ~/.local/share/gamescope_cursor.png
# You can use this one for example : https://github.com/black7375/Breeze-Cursors-for-Windows/raw/master/Sources/normal.png
#
# License: GNU General Public License 3.0 or later
########################################################################

scriptName="$(basename "$0")"

for program in firejail gamescope xrandr; do
    if ! which $program &> /dev/null; then
        echo "Script '$scriptName' requires $program."
        exit 1
    fi
done

# Attempts to find the game's resolution for gamescope's FSR. If it fails, 1920x1080 will be used.
# If this fails. you can also use rpatool to extract the rpa file containing the images to determine the resolution.
find_game_res() {
    rpatool="$(which rpatool)"
    if [[ ! -f $rpatool ]]; then
        rpatool="$(realpath ../rpatool)"
        [[ ! -f $rpatool ]] && echo "Could not find rpatool!" && return
    fi
    gRes=$(grep -r "gui\.init([0-9]" &> /dev/stdout | head -n1)
    if [[ $gRes =~ "binary file matches" ]]; then
        archive=$(realpath "$(echo "$gRes" | cut -d: -f2 | xargs)")
        [[ ! -f $archive ]] && return
        curDir="$(realpath .)"
        tmpDir="$(mktemp -d)"
        cd "$tmpDir" || return
        "$rpatool" -x "$archive"
        gRes=$(grep -r "gui\.init([0-9]" &> /dev/stdout | head -n1)
        rm -rf "$tmpDir"
        cd "$curDir" || return
    fi
    if [[ $gRes =~ gui\.init\([0-9] ]]; then
        gWidth="$(echo "$gRes" | grep -Po "\(\d+" | cut -d\( -f2)"
        gHeight="$(echo "$gRes" | grep -Po "\d+\)" | cut -d\) -f1)"
        sed -i "s/^gWidth=[0-9]*/gWidth=$gWidth/" "$0"
        sed -i "s/^gHeight=[0-9]*/gHeight=$gHeight/" "$0"
        sed -i "s/^gameName=.*/gameName=$gameBaseName/" "$0"
        echo "Found game resolution ${gWidth}x${gHeight}."
    fi
}

[[ -d $1 ]] && cd "$1"

if [[ ! -d renpy ]]; then
    echo "Script '$scriptName' is in wrong directory, put in a renpy game (the renpy folder must exist)."
    exit 1
fi

dRes=$(xrandr | grep -m1 "\*" | grep -Po "\d+x\d+")
if [[ -n $dRes ]]; then
    dWidth=$(echo "$dRes" | cut -d x -f1)
    dHeight=$(echo "$dRes" | cut -d x -f2)
fi
[[ -z $dWidth ]] && dWidth=2560
[[ -z $dHeight ]] && dHeight=1440

gameExec="$(find . -maxdepth 1 -type f \( -name '*.sh' ! -name "$scriptName" \))"
if [[ ! -f $gameExec ]]; then
    echo "Failed to find game executable."
    exit 1
fi

gameBaseName="$(basename "$gameExec" .sh)"
gameName=x
gWidth=0
gHeight=0

if [[ ! $gameName == $gameBaseName ]]; then
    find_game_res
    if [[ $gWidth == 0 ]] || [[ $gHeight == 0 ]]; then
        echo "Failed to find game's native resolution, falling back to 1920x1080."
        gWidth=1920
        gHeight=1080
    fi
fi

chmod u+x "$gameExec"
chmod u+x "lib/linux-x86_64/$gameBaseName"

echo "Starting game."
MANGOHUD=1 ENABLE_VKBASALT=1 gamescope \
    --nested-width $gWidth --nested-height $gHeight \
    --output-width $dWidth --output-height $dHeight \
    --fullscreen \
    --nested-refresh 30 --nested-unfocused-refresh 5 \
    --fsr-upscaling \
    --sharpness 20 \
    --cursor $([[ -f ~/.local/share/gamescope_cursor.png ]] && echo ~/.local/share/gamescope_cursor.png || echo /dev/null) \
    -- \
    firejail \
        --nogroups --net=none --nodbus --nou2f --private-dev --private-tmp --seccomp \
        --whitelist=~/.renpy           --noblacklist=~/.renpy \
        --whitelist=~/.config/renpy    --noblacklist=~/.config/renpy \
        --whitelist=~/Games/renpy      --noblacklist=~/Games/renpy \
            "$gameExec"

exit "$?"
Edit: I've attached comparison screenshots, default (off.png), FSR scaling (fsr.png), FSR scaling + vkBasalt (fsr_vkbasalt.png). Easier to see the difference if you have them at their original resolution.
Hey there ! The middle photo is somehow the look I am looking for a comic like thingy with the story of the mother of Paula. Is that AMD only ? Do you know anything about that technique ? Like if it is something I could post-process all images in say... a python script ?

Thx !
 

SpaceBall1

I knew it...I'm surrounded by assholes!
Game Developer
Dec 12, 2020
535
2,317
View attachment 1988654
Paula "So, when are you finishing 0.2.Final and start working on MY update."

Dev "Here... look at the dev plan..."

View attachment 1988667

Paula "What !!?!?!? You won't be working on the Theater until mid October !?!?!"

Dev "Yeah... sorry... I am away of my PC until then and working with the laptop is a real pain."

Dev "I'll be working on a short story though... more on that later."

View attachment 1988670

Paula "But... BUT..."

View attachment 1988677

Paula "I am calling my agent !"

Dev "Wait ! Don't call anyone ! You are getting an event in 0.2.Final !!"

View attachment 1988679

Paula "Ok. I am going to let it pass this time. But do NOT forget who is the star."

-------

So... 0.2.Final almost ready. Coming later this week and yes...

It will contain a Paula event for Mr. Smith level 4. So if you got this photo...

View attachment 1988680

You will be able to play the additional event.

View attachment 1988681

Paula "Shit... another old bastard event."
This is the best news I’ve heard in a while! Though I’m sorry you won’t be able to work on the rest until October, a Paula event is a sweet little treat. Can’t wait.
And if I’m reading it right, the update you start in October will be centered more on Paula?
 

werag17897

Newbie
Feb 2, 2020
29
44
Hey there ! The middle photo is somehow the look I am looking for a comic like thingy with the story of the mother of Paula. Is that AMD only ? Do you know anything about that technique ? Like if it is something I could post-process all images in say... a python script ?

Thx !
Most of the look comes from a shader called , the other shaders don't affect the look as much, (with blendmode set to 2) from the same author, and (with vibrance set to 0.19).

If you're looking for a GLSL alternative to Depth Cues, there's some similar but not as good shaders in libretro, for example, . Edit: There's also some ambient occlusion and ambient obscurance shaders available in WebGL (some available in there's some gists on Scalable Ambient Obscurance also), which offer a similar effect to depth cues.

I'm not aware of any program that can take a shader and process it on an image, but I'm no expert on image editing.

Here's a script I quickly wrote that can do that using the same programs I'm already using (gamescope / vkBasalt), I'm sure you can make something better, I made this in a few minutes:

Bash:
#!/bin/bash

# License GPLv3 or later

cleanup() {
    exit 0
}

trap cleanup EXIT

inPath="$(realpath "$1")"

if [[ ! $1 =~ images/?$ ]] || [[ ! -d "$inPath" ]]; then
    echo "Pass the path to the images folder as first argument. i.e.: $0 /home/example/SomeGame/game/images"
    exit 1
fi

for image in $(find "$inPath" -type f -iregex ".*\.\(jpg\|png\|webp\)$"); do
    outPath=$(echo "$(dirname "$image")" | sed "s%game/images%game/images_out%")
    mkdir -p "$outPath"
    imgName="$outPath/"$(basename "$image")""
    imgName="$(echo "$imgName" | sed "s/\.[a-zA-Z]*$/.png/")"
    rm -f "$imgName"
    ENABLE_VKBASALT=1 gamescope --fullscreen -- timeout 1.5 ffplay -noborder "$image" &
    spectacle --background --nonotify --fullscreen --output "$imgName" --delay 800
done
Basically, it iterates through the game images, runs then through ffplay with vkBasalt applied on top, then uses spectacle to take a PNG screenshot in a identical structure folder (game/images_out).

As to why use spectacle and not use ffplay or mpv to dump the output to the image : vkBasalt is running on the gamescope image, so from the perspective of ffplay or mpv, the image is not modified. Gamescope can output a screenshot using a keybind, but I don't see a command line option, maybe using something like xdotool (EDIT: or ydotool if using Wayland) would work, then the delay could be avoided. This would also solve the issue of scaling.
 
Last edited:
  • Like
Reactions: JustXThings
4.70 star(s) 40 Votes