From b97b5954484eba2d7a1302518603e32d5f4311a5 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Mon, 7 Mar 2022 14:35:28 -0600 Subject: [PATCH] added CRT effect option --- docs/plan.md | 4 +- run_tree/assets/shaders/crt.glsl | 167 ++ run_tree/scenes/quick_save_new.scene | 2110 ++++++++++++++++++++++++++ src/entity/editor.onyx | 4 + src/game.onyx | 18 +- src/gfx/immediate.onyx | 8 +- src/gfx/shader.onyx | 1 + 7 files changed, 2307 insertions(+), 5 deletions(-) create mode 100644 run_tree/assets/shaders/crt.glsl diff --git a/docs/plan.md b/docs/plan.md index 6dc5302..809df49 100644 --- a/docs/plan.md +++ b/docs/plan.md @@ -12,4 +12,6 @@ As this is an arcade game, the controls will be rather limited: - 1 button for interacting - 1 button for canelling - +* Spilling beer +* Mopping spills +* Throwing up people diff --git a/run_tree/assets/shaders/crt.glsl b/run_tree/assets/shaders/crt.glsl new file mode 100644 index 0000000..c23942f --- /dev/null +++ b/run_tree/assets/shaders/crt.glsl @@ -0,0 +1,167 @@ +// +// Most of the interesting parts of this code are taken from: +// https://github.com/OpenXcom/OpenXcom/blob/master/bin/common/Shaders/CRT-simple.OpenGL.shader +// + + +precision mediump float; + +COMM vec4 v_col; +COMM vec2 v_tex; +COMM vec2 v_one; +COMM float mod_factor; + +#ifdef VERTEX_SHADER + +layout(location = 0) in vec2 a_pos; +layout(location = 1) in vec2 a_tex; +layout(location = 2) in vec4 a_col; + +layout(std140) uniform u_window_matrix_block { + mat4 u_window; +}; + +layout(std140) uniform u_world_matrix_block { + mat4 u_world; + mat4 u_model; +}; + +uniform vec2 u_tex_size; +uniform vec2 u_output_size; + +void main() { + gl_Position = u_window * u_world * u_model * vec4(a_pos, 0, 1); + + v_tex = a_tex; + v_col = a_col; + v_one = 1.0 / u_tex_size; + + mod_factor = v_tex.x * u_output_size.x * u_tex_size.x / 128.0f; +} + +#endif + +#ifdef FRAGMENT_SHADER + +uniform sampler2D u_texture; + +out vec4 fragColor; + +uniform vec2 u_tex_size; +uniform vec2 u_output_size; + +// Enable screen curvature. +#define CURVATURE + +// Controls the intensity of the barrel distortion used to emulate the +// curvature of a CRT. 0.0 is perfectly flat, 1.0 is annoyingly +// distorted, higher values are increasingly ridiculous. +#define distortion 0.1 + +// Simulate a CRT gamma of 2.4. +#define inputGamma 2.2 + +// Compensate for the standard sRGB gamma of 2.2. +#define outputGamma 2.2 + +// Macros. +#define TEX2D(c) pow(texture(u_texture, (c)), vec4(inputGamma)) +#define PI 3.141592653589 + +// Apply radial distortion to the given coordinate. +vec2 radialDistortion(vec2 coord) +{ + vec2 cc = coord - 0.5; + float dist = dot(cc, cc) * distortion; + return (coord + cc * (1.0 + dist) * dist); +} + +// Calculate the influence of a scanline on the current pixel. +// +// 'distance' is the distance in texture coordinates from the current +// pixel to the scanline in question. +// 'color' is the colour of the scanline at the horizontal location of +// the current pixel. +vec4 scanlineWeights(float distance, vec4 color) +{ + // The "width" of the scanline beam is set as 2*(1 + x^4) for + // each RGB channel. + vec4 wid = 2.0 + 2.0 * pow(color, vec4(4.0)); + + // The "weights" lines basically specify the formula that gives + // you the profile of the beam, i.e. the intensity as + // a function of distance from the vertical center of the + // scanline. In this case, it is gaussian if width=2, and + // becomes nongaussian for larger widths. Ideally this should + // be normalized so that the integral across the beam is + // independent of its width. That is, for a narrower beam + // "weights" should have a higher peak at the center of the + // scanline than for a wider beam. + vec4 weights = vec4(distance / 0.3); + return 1.4 * exp(-pow(weights * inversesqrt(0.5 * wid), wid)) / (0.6 + 0.2 * wid); +} + +void main() +{ + // Here's a helpful diagram to keep in mind while trying to + // understand the code: + // + // | | | | | + // ------------------------------- + // | | | | | + // | 01 | 11 | 21 | 31 | <-- current scanline + // | | @ | | | + // ------------------------------- + // | | | | | + // | 02 | 12 | 22 | 32 | <-- next scanline + // | | | | | + // ------------------------------- + // | | | | | + // + // Each character-cell represents a pixel on the output + // surface, "@" represents the current pixel (always somewhere + // in the bottom half of the current scan-line, or the top-half + // of the next scanline). The grid of lines represents the + // edges of the texels of the underlying texture. + + // Texture coordinates of the texel containing the active pixel. +#ifdef CURVATURE + vec2 xy = radialDistortion(v_tex); +#else + vec2 xy = v_tex; +#endif + + // Of all the pixels that are mapped onto the texel we are + // currently rendering, which pixel are we currently rendering? + vec2 ratio_scale = xy * u_tex_size - vec2(0.5); + vec2 uv_ratio = fract(ratio_scale); + + // Snap to the center of the underlying texel. + xy.y = (floor(ratio_scale.y) + 0.5) / u_tex_size.y; + + // Calculate the effective colour of the current and next + // scanlines at the horizontal location of the current pixel. + vec4 col = TEX2D(xy); + vec4 col2 = TEX2D(xy + vec2(0.0, v_one.y)); + + // Calculate the influence of the current and next scanlines on + // the current pixel. + vec4 weights = scanlineWeights(uv_ratio.y, col); + vec4 weights2 = scanlineWeights(1.0 - uv_ratio.y, col2); + vec3 mul_res = (col * weights + col2 * weights2).rgb; + + // dot-mask emulation: + // Output pixels are alternately tinted green and magenta. + vec3 dotMaskWeights = mix( + vec3(1.0, 0.7, 1.0), + vec3(0.7, 1.0, 0.7), + floor(mod(mod_factor, 2.0)) + ); + + mul_res *= dotMaskWeights; + + fragColor = vec4(pow(mul_res, vec3(1.0 / outputGamma)), 1.0); +} + + +#endif diff --git a/run_tree/scenes/quick_save_new.scene b/run_tree/scenes/quick_save_new.scene index e69de29..51e4d35 100644 --- a/run_tree/scenes/quick_save_new.scene +++ b/run_tree/scenes/quick_save_new.scene @@ -0,0 +1,2110 @@ +[Background] +id = 100 +flags = 0 +pos.x = 422.5000 +pos.y = 343.5000 +size.x = 941.0000 +size.y = 751.0000 +:BackgroundComponent +texture_path = "./assets/images/background.png" +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Wall] +id = 11 +flags = 3 +pos.x = 456.0000 +pos.y = 64.0000 +size.x = 16.0000 +size.y = 96.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 30 +flags = 2 +pos.x = 136.0000 +pos.y = 336.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 31 +flags = 2 +pos.x = 184.0000 +pos.y = 336.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 32 +flags = 2 +pos.x = 160.0000 +pos.y = 336.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 40 +flags = 2 +pos.x = 136.0000 +pos.y = 256.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 41 +flags = 2 +pos.x = 184.0000 +pos.y = 256.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 42 +flags = 2 +pos.x = 160.0000 +pos.y = 256.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 55 +flags = 2 +pos.x = 536.0000 +pos.y = 256.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 54 +flags = 2 +pos.x = 584.0000 +pos.y = 256.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 53 +flags = 2 +pos.x = 560.0000 +pos.y = 256.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 52 +flags = 2 +pos.x = 536.0000 +pos.y = 336.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 51 +flags = 2 +pos.x = 584.0000 +pos.y = 336.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 50 +flags = 2 +pos.x = 560.0000 +pos.y = 336.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Wall] +id = 37 +flags = 2 +pos.x = 140.0000 +pos.y = -142.0000 +size.x = 16.0000 +size.y = 16.0000 +:RenderComponent +layer = 0 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Background] +id = 196 +flags = 0 +pos.x = 232.0000 +pos.y = 48.0000 +size.x = 432.0000 +size.y = 128.0000 +:BackgroundComponent +texture_path = "./assets/images/kitchen-background.png" +:RenderComponent +layer = 1 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Wall] +id = 10 +flags = 2 +pos.x = 216.0000 +pos.y = 104.0000 +size.x = 304.0000 +size.y = 16.0000 +:RenderComponent +layer = 2 +color.r = 0.2549 +color.g = 0.1720 +color.b = 0.0474 +color.a = 1.0000 + +[Wall] +id = 27 +flags = 2 +pos.x = 8.0000 +pos.y = 312.0000 +size.x = 16.0000 +size.y = 592.0000 +:RenderComponent +layer = 2 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Wall] +id = 35 +flags = 2 +pos.x = 192.0000 +pos.y = 592.0000 +size.x = 352.0000 +size.y = 32.0000 +:RenderComponent +layer = 2 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Wall] +id = 36 +flags = 2 +pos.x = 608.0000 +pos.y = 592.0000 +size.x = 352.0000 +size.y = 32.0000 +:RenderComponent +layer = 2 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Wall] +id = 28 +flags = 2 +pos.x = 792.0000 +pos.y = 312.0000 +size.x = 16.0000 +size.y = 592.0000 +:RenderComponent +layer = 2 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Wall] +id = 25 +flags = 2 +pos.x = 408.0000 +pos.y = 8.0000 +size.x = 816.0000 +size.y = 16.0000 +:RenderComponent +layer = 2 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 277 +flags = 2 +pos.x = 696.0000 +pos.y = 96.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 278 +flags = 2 +pos.x = 696.0000 +pos.y = 176.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 279 +flags = 2 +pos.x = 696.0000 +pos.y = 256.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 280 +flags = 2 +pos.x = 696.0000 +pos.y = 336.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 281 +flags = 2 +pos.x = 696.0000 +pos.y = 416.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 273 +flags = 2 +pos.x = 672.0000 +pos.y = 96.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 272 +flags = 2 +pos.x = 672.0000 +pos.y = 176.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 275 +flags = 2 +pos.x = 672.0000 +pos.y = 256.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 276 +flags = 2 +pos.x = 672.0000 +pos.y = 336.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 274 +flags = 2 +pos.x = 672.0000 +pos.y = 416.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 267 +flags = 2 +pos.x = 648.0000 +pos.y = 96.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 268 +flags = 2 +pos.x = 648.0000 +pos.y = 176.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 269 +flags = 2 +pos.x = 648.0000 +pos.y = 256.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 270 +flags = 2 +pos.x = 648.0000 +pos.y = 336.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 271 +flags = 2 +pos.x = 648.0000 +pos.y = 416.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 234 +flags = 2 +pos.x = 296.0000 +pos.y = 256.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 235 +flags = 2 +pos.x = 296.0000 +pos.y = 336.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 236 +flags = 2 +pos.x = 296.0000 +pos.y = 416.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 231 +flags = 2 +pos.x = 272.0000 +pos.y = 256.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 233 +flags = 2 +pos.x = 272.0000 +pos.y = 336.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 232 +flags = 2 +pos.x = 272.0000 +pos.y = 416.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 230 +flags = 2 +pos.x = 248.0000 +pos.y = 416.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 229 +flags = 2 +pos.x = 248.0000 +pos.y = 336.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 228 +flags = 2 +pos.x = 248.0000 +pos.y = 256.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 164 +flags = 2 +pos.x = 536.0000 +pos.y = 176.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 165 +flags = 2 +pos.x = 536.0000 +pos.y = 96.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 167 +flags = 2 +pos.x = 136.0000 +pos.y = 416.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 168 +flags = 2 +pos.x = 536.0000 +pos.y = 416.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 32.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 169 +flags = 2 +pos.x = 560.0000 +pos.y = 96.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 170 +flags = 2 +pos.x = 560.0000 +pos.y = 176.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 171 +flags = 2 +pos.x = 560.0000 +pos.y = 416.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 172 +flags = 2 +pos.x = 160.0000 +pos.y = 416.0000 +size.x = 32.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 1 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 173 +flags = 2 +pos.x = 584.0000 +pos.y = 416.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 174 +flags = 2 +pos.x = 584.0000 +pos.y = 176.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 175 +flags = 2 +pos.x = 584.0000 +pos.y = 96.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 176 +flags = 2 +pos.x = 184.0000 +pos.y = 416.0000 +size.x = 16.0000 +size.y = 32.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 48.0000 +sprite.pos.y = 32.0000 +sprite.size.x = -16.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 184 +flags = 2 +pos.x = 332.0000 +pos.y = 124.0000 +size.x = 24.0000 +size.y = 24.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 112.0000 +sprite.pos.y = 48.0000 +sprite.size.x = 16.0000 +sprite.size.y = 16.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 185 +flags = 2 +pos.x = 284.0000 +pos.y = 124.0000 +size.x = 24.0000 +size.y = 24.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 112.0000 +sprite.pos.y = 48.0000 +sprite.size.x = 16.0000 +sprite.size.y = 16.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 186 +flags = 2 +pos.x = 236.0000 +pos.y = 124.0000 +size.x = 24.0000 +size.y = 24.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 112.0000 +sprite.pos.y = 48.0000 +sprite.size.x = 16.0000 +sprite.size.y = 16.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 187 +flags = 2 +pos.x = 188.0000 +pos.y = 124.0000 +size.x = 24.0000 +size.y = 24.0000 +:FurnitureComponent +furniture_type = 0 +taken = false +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 112.0000 +sprite.pos.y = 48.0000 +sprite.size.x = 16.0000 +sprite.size.y = 16.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Furniture] +id = 188 +flags = 2 +pos.x = 140.0000 +pos.y = 124.0000 +size.x = 24.0000 +size.y = 24.0000 +:FurnitureComponent +furniture_type = 0 +taken = true +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 112.0000 +sprite.pos.y = 48.0000 +sprite.size.x = 16.0000 +sprite.size.y = 16.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Custom] +id = 14 +flags = 3 +pos.x = 240.0000 +pos.y = 32.0000 +size.x = 32.0000 +size.y = 32.0000 +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 0.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 +:DispenserComponent +item = "beer" +max_timeout = 2.0000 + +[Patron] +id = 330 +flags = 3 +pos.x = 696.0000 +pos.y = 176.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 1 +target = 278 +order_item = "burger" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Patron] +id = 341 +flags = 3 +pos.x = 696.0000 +pos.y = 96.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 1 +target = 277 +order_item = "beer" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Patron] +id = 344 +flags = 3 +pos.x = 696.0000 +pos.y = 416.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 1 +target = 281 +order_item = "burger" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Patron] +id = 346 +flags = 3 +pos.x = 696.0000 +pos.y = 336.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 1 +target = 280 +order_item = "beer" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Patron] +id = 347 +flags = 3 +pos.x = 284.0000 +pos.y = 124.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 1 +target = 185 +order_item = "beer" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Patron] +id = 350 +flags = 3 +pos.x = 184.0000 +pos.y = 336.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 1 +target = 31 +order_item = "beer" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Patron] +id = 351 +flags = 3 +pos.x = 236.0000 +pos.y = 124.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 1 +target = 186 +order_item = "beer" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Patron] +id = 352 +flags = 3 +pos.x = 248.0000 +pos.y = 416.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 1 +target = 230 +order_item = "burger" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Patron] +id = 354 +flags = 3 +pos.x = 648.0000 +pos.y = 256.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 1 +target = 269 +order_item = "burger" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Patron] +id = 356 +flags = 3 +pos.x = 648.0000 +pos.y = 176.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 1 +target = 268 +order_item = "beer" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Patron] +id = 358 +flags = 3 +pos.x = 136.0000 +pos.y = 256.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 1 +target = 40 +order_item = "burger" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Patron] +id = 360 +flags = 3 +pos.x = 140.0000 +pos.y = 124.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 1 +target = 188 +order_item = "burger" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Patron] +id = 362 +flags = 3 +pos.x = 184.0000 +pos.y = 256.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 1 +target = 41 +order_item = "burger" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Patron] +id = 363 +flags = 3 +pos.x = 136.0000 +pos.y = 336.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 1 +target = 30 +order_item = "burger" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Patron] +id = 364 +flags = 3 +pos.x = 584.0000 +pos.y = 416.0000 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 1 +target = 173 +order_item = "burger" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Patron] +id = 365 +flags = 3 +pos.x = 496.9649 +pos.y = 481.9315 +size.x = 16.0000 +size.y = 32.0000 +:RenderComponent +layer = 5 +color.r = 1.0000 +color.g = 0.0000 +color.b = 0.0000 +color.a = 1.0000 +:PatronComponent +state = 0 +target = 279 +order_item = "beer" +order_show_animation = 0.0000 +holding = 0 +consume_timeout = 0.0000 +annoy_timeout = 0.0000 + +[Door] +id = 13 +flags = 3 +pos.x = 368.0000 +pos.y = 104.0000 +size.x = 160.0000 +size.y = 16.0000 +:DoorComponent +max_openness = 0.8000 +target_openness = 0.8000 +openness = 0.8000 +:RenderComponent +layer = 10 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Custom] +id = 157 +flags = 3 +pos.x = 271.0000 +pos.y = 33.0000 +size.x = 32.0000 +size.y = 32.0000 +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 16.0000 +sprite.pos.y = 0.0000 +sprite.size.x = 16.0000 +sprite.size.y = 16.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 10 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 +:DispenserComponent +item = "burger" +max_timeout = 4.0000 + +[Player] +id = 152 +flags = 2 +pos.x = 398.4127 +pos.y = 262.9740 +size.x = 16.0000 +size.y = 32.0000 +:MovementComponent +controls.up = 265 +controls.down = 264 +controls.left = 263 +controls.right = 262 +controls.interact = 44 +controls.pick_up = 46 +facing = 2 +velocity.x = -0.0000 +velocity.y = 0.0000 +speed = 800.0000 +:PlayerComponent +holding = 0 +:RenderComponent +layer = 10 +color.r = 1.0000 +color.g = 0.0000 +color.b = 1.0000 +color.a = 1.0000 + +[Player] +id = 12 +flags = 2 +pos.x = 309.5813 +pos.y = 370.5432 +size.x = 16.0000 +size.y = 32.0000 +:MovementComponent +controls.up = 87 +controls.down = 83 +controls.left = 65 +controls.right = 68 +controls.interact = 70 +controls.pick_up = 71 +facing = 1 +velocity.x = -0.6185 +velocity.y = -0.6127 +speed = 800.0000 +:PlayerComponent +holding = 0 +:RenderComponent +layer = 10 +color.r = 0.0000 +color.g = 1.0000 +color.b = 0.0000 +color.a = 1.0000 + +[Entryway] +id = 156 +flags = 0 +pos.x = 400.0000 +pos.y = 592.0000 +size.x = 64.0000 +size.y = 32.0000 +:SpriteRenderComponent +sprite.sheet = "./assets/images/spritesheet.png" +sprite.pos.x = 80.0000 +sprite.pos.y = 32.0000 +sprite.size.x = 32.0000 +sprite.size.y = 32.0000 +sprite.color.r = 1.0000 +sprite.color.g = 1.0000 +sprite.color.b = 1.0000 +sprite.color.a = 1.0000 +:RenderComponent +layer = 100 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 +:EntrywayComponent +schematic = "Patron" +spawned_size.x = 16.0000 +spawned_size.y = 32.0000 +enabled = true +spawn_timeout_min = 5.0000 +spawn_timeout_max = 10.0000 +spawn_timeout = 3.6412 + +[Custom] +id = 163 +flags = 0 +pos.x = 0.0000 +pos.y = 0.0000 +size.x = 16.0000 +size.y = 16.0000 +:MoneyComponent +money = 152 +money_sprite.sheet = "./assets/images/spritesheet.png" +money_sprite.pos.x = 0.0000 +money_sprite.pos.y = 240.0000 +money_sprite.size.x = 16.0000 +money_sprite.size.y = 16.0000 +money_sprite.color.r = 1.0000 +money_sprite.color.g = 1.0000 +money_sprite.color.b = 1.0000 +money_sprite.color.a = 1.0000 +:RenderComponent +layer = 100000 +color.r = 1.0000 +color.g = 1.0000 +color.b = 1.0000 +color.a = 1.0000 + diff --git a/src/entity/editor.onyx b/src/entity/editor.onyx index ade6388..da6d3a5 100644 --- a/src/entity/editor.onyx +++ b/src/entity/editor.onyx @@ -281,6 +281,10 @@ editor_draw :: () { if draw_button(.{x, y, w, 40}, "Flush Textures") { texture_cache_clear(); } + + if draw_button(.{x, y+40, w, 40}, "Toggle distortion") { + distortion_enabled = !distortion_enabled; + } } } } diff --git a/src/game.onyx b/src/game.onyx index e11ab05..e453980 100644 --- a/src/game.onyx +++ b/src/game.onyx @@ -17,9 +17,16 @@ Spritesheet: Texture; game_time: f32; +distortion_enabled := true; +distortion_shader: Shader; + game_init :: () { Audio_Manager.init(); + distortion_shader = shader_make("./assets/shaders/crt.glsl"); + shader_link_window_matrix_block(distortion_shader); + shader_link_world_matrix_block(distortion_shader); + scene_canvas = canvas_make(800, 608); // This process of queueing the asset bucket should @@ -77,6 +84,7 @@ game_draw :: () { immediate_set_color(.{1, 1, 1}); texture := canvas_to_texture(^scene_canvas); + texture_wrap(^texture, .Clamp); view_rect: Rect; if !editor_shown() { view_rect = Rect.{0, 0, ~~window_width, ~~window_height}; @@ -91,7 +99,15 @@ game_draw :: () { glDisable(GL_CULL_FACE); immediate_image(^texture, view_rect.x, ~~window_height - view_rect.y, view_rect.w, -view_rect.h); - immediate_flush(); + if distortion_enabled { + shader_use(distortion_shader); + shader_set_uniform(distortion_shader, #cstr "u_texture", 0); + shader_set_uniform(distortion_shader, #cstr "u_tex_size", Vector2.{800, 608}); + shader_set_uniform(distortion_shader, #cstr "u_output_size", Vector2.{~~window_width, ~~window_height}); + immediate_flush(false); + } else { + immediate_flush(); + } glEnable(GL_CULL_FACE); update_world_matrix(); diff --git a/src/gfx/immediate.onyx b/src/gfx/immediate.onyx index 8a96b18..e9855d9 100644 --- a/src/gfx/immediate.onyx +++ b/src/gfx/immediate.onyx @@ -18,11 +18,13 @@ immediate_init :: () { immediate_color = .{0,0,0}; } -immediate_flush :: () { +immediate_flush :: (set_shader := true) { if vertex_count == 0 do return; - shader_use(imgui_shader); - shader_set_uniform(imgui_shader, #cstr "u_texture_enabled", 1.0f if rendering_type == .Image else 0.0f); + if set_shader { + shader_use(imgui_shader); + shader_set_uniform(imgui_shader, #cstr "u_texture_enabled", 1.0f if rendering_type == .Image else 0.0f); + } immediate_mesh.vertex_count = vertex_count; mesh_update_verticies(immediate_mesh, vertex_data); diff --git a/src/gfx/shader.onyx b/src/gfx/shader.onyx index d2b05e7..a35ce64 100644 --- a/src/gfx/shader.onyx +++ b/src/gfx/shader.onyx @@ -64,6 +64,7 @@ shader_set_uniform :: (shader: Shader, uniform: cstr, value: $T) { set_uniform_internal :: #match { macro (location: GLint, value: u32) do glUniform1i(location, value); , macro (location: GLint, value: f32) do glUniform1f(location, value); , + macro (location: GLint, value: Vector2) do glUniform2f(location, value.x, value.y); , macro (location: GLint, value: Vector3) do glUniform3f(location, value.x, value.y, value.z); , macro (location: GLint, value: Color) do glUniform4f(location, value.r, value.g, value.b, value.a); , -- 2.25.1