Sarcophagus: roguelike survival sandbox

Show off your games, demos and other (playable) creations.
Post Reply
acerbial
Prole
Posts: 3
Joined: Sun Nov 03, 2019 10:00 pm

Sarcophagus: roguelike survival sandbox

Post 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

User avatar
Davidobot
Party member
Posts: 1226
Joined: Sat Mar 31, 2012 5:18 am
Location: Oxford, UK
Contact:

Re: Sarcophagus: roguelike survival sandbox

Post 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!
PM me on here or elsewhere if you'd like to discuss porting your game to Nintendo Switch via mazette!
personal page and a raycaster
acerbial
Prole
Posts: 3
Joined: Sun Nov 03, 2019 10:00 pm

Re: Sarcophagus: roguelike survival sandbox

Post 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.
User avatar
pgimeno
Party member
Posts: 3656
Joined: Sun Oct 18, 2015 2:58 pm

Re: Sarcophagus: roguelike survival sandbox

Post 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.
acerbial
Prole
Posts: 3
Joined: Sun Nov 03, 2019 10:00 pm

Re: Sarcophagus: roguelike survival sandbox

Post 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.
User avatar
pgimeno
Party member
Posts: 3656
Joined: Sun Oct 18, 2015 2:58 pm

Re: Sarcophagus: roguelike survival sandbox

Post 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.
User avatar
milon
Party member
Posts: 472
Joined: Thu Jan 18, 2018 9:14 pm

Re: Sarcophagus: roguelike survival sandbox

Post 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
Any code samples/ideas by me should be considered Public Domain (no attribution needed) license unless otherwise stated.
Post Reply

Who is online

Users browsing this forum: No registered users and 0 guests