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'
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.