thanks a lot for the feedbacks!
We loved the comments and felt aligned with everything. Tricking the player into not understanding the plot until very late it’s hard 😂.
Thanks again for playing it and good job for completing it!
The engine is ExcaliburJS. About the lighting, since the library does not provide anything related, I achieved a similar (yet very, very raw) effect of "lighting" using a PostProcessing Shader. The approach is straightforward:
Let me describe the shader I used (here) using this stripped version:
// As uniforms, you need (at least) uniform sampler2D u_image; // current image uniform vec2 u_resolution; // screen resolution uniform int u_lightCount; // light count uniform vec2 u_lightPos[16]; // light position uniform float u_lightIntensity[16]; // light intensity in vec2 v_texcoord; // text coords out vec4 fragColor; // final color void main() { // Here I get the current pixel color vec4 tex = texture(u_image, v_texcoord); // Compute pixel position // Since its a post processing effect, its fairly easy vec2 px_pos = vec2(v_texcoord.x * u_resolution.x, (1.0 - v_texcoord.y) * u_resolution.y); // Find intesity of lighting float maxIntensity = 0.0; // here you store the maximum for (int i = 0; i < u_lightCount; i++) { // iterate over lights vec2 lightPos = u_lightPos[i]; // get light pos (in screen coordinates!) float lightIntensity = u_lightIntensity[i]; // get light intensity vec2 diff = lightPos - px_pos; // compute distance vector float dist = length(diff); // get magnitude of the distance vector // Enter only if in light range if (dist < lightIntensity) { float dOverI = (dist / lightIntensity); // divide by maximum distance to get value between 0 and 1 float intensity = (dOverI > 0.75) ? 0.5 : 1.0; // set intesity to half above 75% of distance maxIntensity = max(maxIntensity, intensity); // update maximum } } // Set final pixel color using intesity fragColor.rgb = tex.rgb * maxIntensity; fragColor.a = tex.a; // alpha is untouched }
It's pretty simple and rough but can get the job done in less time than a solid lighting equation.
Let me know! If you need anything more, send me an email and we can share discord handles and chat there!
thank you for playing!
Unfortunately I understood the issues only a bit later and found the gameplay a little harder than expected by reading comments. I added the manual exactly for that.
The idea was to make the player scared of ghosts, thus being unable to enter in line of sight with them. Turned out to be a bit confusing, hope you liked it any case.
Thanks for the feedback!
For the 4-color limitation, I coded a dumb post processing shader that converts everything to a 4-color palette :)
Its useful to make sure to stick to the rules, here's the core section:
uniform sampler2D u_image; // final image as tex uniform vec3 u_palette[4]; // color palette in vec2 v_texcoord; // text coords out vec4 fragColor; // final color void main() { // Since its a PostProcessing shader, I have access to the final image as texture vec4 tex = texture(u_image, v_texcoord); // Than I compute the lumimance (color => grey-scale conversion) // This is optional, you can even do normal weighted average // by adding each channel and dividing by 3. float avg = 0.2126 * tex.r + 0.7152 * tex.g + 0.0722 * tex.b; // Than I divide the color spectrum in 4 sections (0.25, 0.50, 0.75, 1.0) // and assign an index for each of them, going from black-ish to white-ish // x < 0.25 => #0 // 0.25 <= x < 0.50 => #1 // 0.50 <= x < 0.75 => #2 // 0.75 <= x => #3 int index = (avg < 0.25) ? 0 : (avg < 0.5) ? 1 : (avg < 0.75) ? 2 : 3; // Than the index access a palette (uniform of 4 vec3) fragColor = vec4(u_palette[index], 1.0); }
For palettes, you can access sites like this:
https://lospec.com/palette-list
For Godot, PostProcessing shaders can be integrated easily, try following this guide:
https://docs.godotengine.org/en/stable/tutorials/shaders/custom_postprocessing.h...
Hi Ilias! Nice to meet you :)
Sorry to hear about your space bar, next time I will think about adding more than one binding per action.
About game freezing, as I answered to the others mentioning it, It was related to a bug in my code :sad:, now its gone.
About your questions:
Is Excalibur a game engine? Is it user-friendly and easy to master?
Yes, its a 2D game engine made with ts. You can check it here. It's my second time using it so I'm fairly new but it has a lot of things that comes with it and its documentation its friendly enough to start developing. I do not recommend using it if you're new to game dev, since many things do not come with doc and you will need to "find your way" (as I did in my last jam for the main rotation, you can check the game here).
What tools or technologies were essential to the development of your game?
An IDE for editing ts files (vscode is good enough for starting), npm installed locally (you can check it here) and thats it.
How did you approach balancing productivity and time constraints within the game jam timeframe?
This time I did manage poorly :(. I started working on the game without a good design and having only 6hrs left. It was my first time using Animations, Spritesheets and Tilemaps so it took a big chunk of my time understanding these new APIs. However, in the average scenario, I think giving yourself enough time to design the game (with pen & paper) will make the biggest difference! Developing towards a specific destination is 10x better than going at random directions.
What inspired the core idea behind your game?
Brainstorming ideas quickly, thinking about what was I able to achieve with this little time, made the difference and let me focus on a simple design with few resources to protect and a fighting character, using sprites and animations to learn the most :)
Could you tell me more about your creative process and the motivations behind your project?
Nothing much to say, just use pen & paper and focus on a smaller achievable objective that you can improve on (if time left). Starting with the "scarse resource" concept and the environment being "desert" (my take on the theme), narrowed my thinking and drove me towards an idea of "defending" few resources, thus the plants in the middle.
Thanks again for the comment!
Thanks! Character's sprites are from this pack: https://beyonderboy.itch.io/desert-map-tileset-16x16 and environments' are from this one: https://beyonderboy.itch.io/desert-map-tileset-16x16.
Thanks! Character's sprites are from this pack: https://beyonderboy.itch.io/desert-map-tileset-16x16 and environments' are from this one: https://beyonderboy.itch.io/desert-map-tileset-16x16.
Thanks! Character's sprites are from this pack: https://beyonderboy.itch.io/desert-map-tileset-16x16
Can i submit? From the description seems that we should be able to submit even after, am I wrong?
https://daviderisaliti.itch.io/desertsurvivor
Hi everyone. I worked on improving my game , focusing on the graphics and would love to have some feedback!
https://daviderisaliti.itch.io/quadrush