Page 1 of 1

Sarcophagus: roguelike survival sandbox

Posted: Sun Nov 03, 2019 10:07 pm
by acerbial
Sarcophagus
— from the Greek sarx meaning “flesh”, and phagein meaning “to eat”.

Sarcophagus is a one-man game project in sandbox/survival genre. It’s heavily inspired by the works of Sisyphus and the idea of ennobling power of labor.

You start your lifespan in a shallow environment of (an allegory of) the cave and slowly work your way to a blooming garden by building and maintaining cave’s ecosystem.

By no means it’s a god sim, food always will be a problem (you must grow what you eat) and you’ll have to face some other human-specific limitations like an overwhelming urge to multitask, a pain of managing priorities, limited inventory space, absence of game’s wiki and author’s inability to communicate in good English.

The game is more on hardcore’ish/demanding/oldskool side of a spectrum and requires some exploration, learning and adjusting to its quirks.

It’s not a clone of anything, the purpose of creating the game was not an imitation of things I like but rather playing in a sandbox and looking at the ways things unfold. Sandbox game created as a sandbox project. So meta.

Homepage: https://acerbial.itch.io/sarcophagus

Start of the game:
Image

Middle (?) of the game:
Image


Re: Sarcophagus: roguelike survival sandbox

Posted: Mon Nov 04, 2019 8:03 pm
by Davidobot
This looks really polished. A bit overwhelming when looking at the gameplay, but in a way that makes it worthwhile once you start to understand what's actually going on.

Well done!

Re: Sarcophagus: roguelike survival sandbox

Posted: Tue Nov 05, 2019 12:24 am
by acerbial
Thanks, I'm trying to make an explorative game, but I guess it could scare some people away. There's a thin line between explorative and confusing.

Re: Sarcophagus: roguelike survival sandbox

Posted: Tue Nov 05, 2019 11:28 am
by pgimeno
I use Linux, so I downloaded the Mac version because the .love file is separated from the executable and I can extract it with 'unzip -j zipfile \*\*.love'. It appears that my graphics card can't support so many lights, because when I tried to run it, I had this weird shader error at startup:

Code: Select all

Error: Cannot link shader program object:
Fragment info
-------------
Internal error: assembly compile error for fragment shader at offset 1610:
-- error message --
line 47, column 35:  error: invalid local parameter number
line 53, column 15:  error: out of bounds array access
line 56, column 17:  error: out of bounds array access
line 58, column 34:  error: out of bounds array access
line 64, column 19:  error: out of bounds array access
line 73, column 15:  error: out of bounds array access
line 74, column 23:  error: offset for relative array access outside supported range
line 77, column 21:  error: out of bounds array access
line 81, column 25:  error: offset for relative array access outside supported range
line 85, column 39:  error: out of bounds array access
line 91, column 15:  error: out of bounds array access
line 98, column 15:  error: out of bounds array access
line 117, column 15:  error: out of bounds array access
line 124, column 15:  error: out of bounds array access
line 133, column 15:  error: out of bounds array access
line 135, column 21:  error: out of bounds array access
-- internal assembly text --
!!NVfp4.1
OPTION NV_parameter_buffer_object2;
# cgc version 3.4.0001, build date May 24 2018
# command line args: 
#vendor NVIDIA Corporation
#version 3.4.0.1
#profile gp4_1fp
#program main
#semantic ViewSpaceFromLocal
#semantic ClipSpaceFromView
#semantic ClipSpaceFromLocal
#semantic ViewNormalFromLocal
#semantic love_ScreenSize
#semantic love_VideoYChannel
#semantic love_VideoCbChannel
#semantic love_VideoCrChannel
#semantic MainTex
#semantic lights
#semantic num_lights
#semantic t
#semantic f
#semantic am
#semantic dying
#semantic ci
#var float4 gl_FragCoord : $vin.WPOS : WPOS : -1 : 1
#var float4 love_PixelColor : $vout.COL0 : COL0[0] : -1 : 1
#var float4x4 ViewSpaceFromLocal :  : , 4 : -1 : 0
#var float4x4 ClipSpaceFromView :  : , 4 : -1 : 0
#var float4x4 ClipSpaceFromLocal :  : , 4 : -1 : 0
#var float3x3 ViewNormalFromLocal :  : , 3 : -1 : 0
#var float4 love_ScreenSize :  : c[960] : -1 : 1
#var sampler2D love_VideoYChannel :  :  : -1 : 0
#var sampler2D love_VideoCbChannel :  :  : -1 : 0
#var sampler2D love_VideoCrChannel :  :  : -1 : 0
#var sampler2D MainTex :  : texunit 0 : -1 : 1
#var float4 VaryingTexCoord : $vin.ATTR0 : ATTR0 : -1 : 1
#var float4 VaryingColor : $vin.ATTR1 : ATTR1 : -1 : 1
#var float2 lights[0].position :  : c[0] : -1 : 1
#var float3 lights[0].diffuse :  : c[1] : -1 : 1
#var float lights[0].power :  : c[2] : -1 : 1
#var int num_lights :  : c[961] : -1 : 1
#var float t :  : c[962] : -1 : 1
#var float f :  : c[963] : -1 : 1
#var float am :  : c[964] : -1 : 1
#var int dying :  : c[965] : -1 : 1
#var int ci :  : c[966] : -1 : 1
PARAM c[967] = { program.local[0..966] };
ATTRIB fragment_attrib[] = { fragment.attrib[0..1] };
TEMP R0, R1, R2, R3, R4;
TEMP RC, HC;
OUTPUT result_color0 = result.color;
TEX.F R0, fragment.attrib[0], texture[0], 2D;
SEQ.S R1.w, c[965].x, {1, 0, 0, 0}.x;
MOV.U.CC RC.x, -R1.w;
MOV.F R1.xyz, R0;
MOV.F R2.xyz, c[964].x;
MOV.F R4.x, fragment.position;
MAD.F R4.y, fragment.position, c[960].z, c[960].w;
IF    NE.x;
MOV.F R2.xyz, {0, 0, 0, 0}.x;
ENDIF;
MOV.S R1.w, {1, 0, 0, 0}.x;
REP.S ;
SLT.S R2.w, R1, c[961].x;
SEQ.U R2.w, -R2, {0, 0, 0, 0}.x;
MOV.U.CC RC.x, -R2.w;
BRK   (GT.x);
MUL.S R2.w, R1, {3, 0, 0, 0}.x;
MOV.U R2.w, R2;
ADD.F R3.xy, c[R2.w], -R4;
DP2.F R3.x, R3, R3;
RSQ.F R3.x, R3.x;
MUL.S R3.y, c[966].x, {20, 0, 0, 0}.x;
MOV.F R3.w, c[R2.w + 2].x;
RCP.F R3.x, R3.x;
I2F.S R3.y, R3;
ADD.F R3.z, R3.w, c[962].x;
ADD.F R4.z, R3.x, R3.y;
SLT.F R4.w, R4.z, R3.z;
TRUNC.U.CC HC.x, R4.w;
MOV.F R3.xyz, c[R2.w + 1];
IF    NE.x;
MOV.F R2.w, {1, 0, 0, 0}.x;
ELSE;
MAD.F R2.w, R3, {1.25, 0, 0, 0}.x, -c[962].x;
SLT.F R2.w, R4.z, R2;
TRUNC.U.CC HC.x, R2.w;
IF    NE.x;
MOV.F R2.w, {0.75, 0, 0, 0}.x;
ELSE;
MUL.F R2.w, c[962].x, {2, 0, 0, 0}.x;
MAD.F R2.w, R3, {1.7, 0, 0, 0}.x, R2;
SLT.F R2.w, R4.z, R2;
TRUNC.U.CC HC.x, R2.w;
IF    NE.x;
MOV.F R2.w, {0.5, 0, 0, 0}.x;
ELSE;
MUL.F R2.w, c[962].x, {2, 0, 0, 0}.x;
MAD.F R2.w, R3, {2.25, 0, 0, 0}.x, R2;
SLT.F R2.w, R4.z, R2;
TRUNC.U.CC HC.x, R2.w;
IF    NE.x;
MUL.F R2.w, R4.y, {0.5, 0, 0, 0}.x;
FLR.F R2.w, R2;
MAD.F R2.w, R4.y, {0.5, 0, 0, 0}.x, -R2;
MUL.F R2.w, R2, {0.2, 0, 0, 0}.x;
ELSE;
MOV.F R2.w, {0, 0, 0, 0}.x;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
MUL.F R3.w, R4.y, {0.33333334, 0, 0, 0}.x;
FLR.F R3.w, R3;
MAD.F R3.w, -R3, {3, 0, 0, 0}.x, R4.y;
FLR.F R3.w, R3;
SEQ.F R3.w, c[962].x, R3;
TRUNC.U.CC HC.x, R3.w;
IF    NE.x;
MOV.F R3.w, {0.5, 0, 0, 0}.x;
ELSE;
MOV.F R3.w, {1, 0, 0, 0}.x;
ENDIF;
SEQ.S R4.z, c[965].x, {1, 0, 0, 0}.x;
MOV.U.CC RC.x, -R4.z;
MAD.F R2.xyz, R3, R2.w, R2;
IF    NE.x;
MUL.F R2.xyz, R2, R3.w;
ENDIF;
ADD.S R1.w, R1, {1, 0, 0, 0}.x;
ENDREP;
MOV.F.SAT R2.xyz, R2;
SEQ.S R1.w, c[965].x, {1, 0, 0, 0}.x;
MOV.U.CC RC.x, -R1.w;
MUL.F R2.xyz, R2, c[963].x;
IF    NE.x;
ADD.F R0.x, R1, R1.z;
ADD.F R0.x, R0, R1.y;
MUL.F R0.xyz, R0.x, {0.33333334, 0, 0, 0}.x;
ENDIF;
MOV.F R1.w, {1, 0, 0, 0}.x;
MOV.F R1.xyz, R2;
MUL.F R0, R0, R1;
MUL.F result_color0, R0, fragment.attrib[1];
END
# 93 instructions, 5 R-regs

stack traceback:
	[string "boot.lua"]:777: in function <[string "boot.lua"]:773>
	[C]: in function 'newShader'
	load.lua:21: in function 'load'
	[string "boot.lua"]:586: in function <[string "boot.lua"]:585>
	[C]: in function 'xpcall'
	[string "boot.lua"]:793: in function <[string "boot.lua"]:780>
	[C]: in function 'xpcall'
Fortunately, the fix was simple:

Code: Select all

--- a/shader.txt	2019-11-05 12:16:24.517827619 +0100
+++ b/shader.txt	2019-11-05 12:06:17.002642041 +0100
@@ -1,4 +1,4 @@
-#define NUM_LIGHTS 320
+#define NUM_LIGHTS 160
 struct Light {
 vec2 position;
 vec3 diffuse;
Do you foresee any problems with that patch?

I'm more of a puzzle lover than anything, so it's not likely that I will enjoy a game of this genre, but I want to give it a try.

Re: Sarcophagus: roguelike survival sandbox

Posted: Tue Nov 05, 2019 2:13 pm
by acerbial
Patch should work just fine, there are usually about 10 lights max per scene. It's just big enough number I used in shader without thinking much. I'll use your patch in future versions, thanks.

Re: Sarcophagus: roguelike survival sandbox

Posted: Tue Nov 05, 2019 3:46 pm
by pgimeno
acerbial wrote: Tue Nov 05, 2019 2:13 pm Patch should work just fine, there are usually about 10 lights max per scene. It's just big enough number I used in shader without thinking much. I'll use your patch in future versions, thanks.
Ah thanks. Note that it's not a conservative value; I made a binary search and the cutoff was at 162, so maybe you want a safer value and perhaps limit the number of lights passed to the shader in the Lua side.

Re: Sarcophagus: roguelike survival sandbox

Posted: Tue Nov 05, 2019 8:27 pm
by milon
Game looks awesome! I'm going to download, and give it a go when IRL permits.
pgimeno wrote: Tue Nov 05, 2019 11:28 am I use Linux, so I downloaded the Mac version because the .love file is separated from the executable and I can extract it with 'unzip -j zipfile \*\*.love'.
Whoa! Thanks for sharing that! I switched to Linux a while ago, and I haven't yet learned all the cool tricks. :D