added CRT effect option
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 7 Mar 2022 20:35:28 +0000 (14:35 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 7 Mar 2022 20:35:28 +0000 (14:35 -0600)
docs/plan.md
run_tree/assets/shaders/crt.glsl [new file with mode: 0644]
run_tree/scenes/quick_save_new.scene
src/entity/editor.onyx
src/game.onyx
src/gfx/immediate.onyx
src/gfx/shader.onyx

index 6dc53028e16ccaa4a5e294d7b807afeaadb644a1..809df49e1f4638f4bd961d1a8766003c366c8b47 100644 (file)
@@ -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 (file)
index 0000000..c23942f
--- /dev/null
@@ -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
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..51e4d35dc42415df46addb57d1529d1394d9b8f3 100644 (file)
+[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
+
index ade6388254efc38b3142ca05002667e2d40d3a0a..da6d3a592270c437a9fddb65878113982999a9b2 100644 (file)
@@ -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;
+                }
             }
         }
     }
index e11ab05c39decf97a4276a92aca14a4570b2fa07..e453980cc8b904e7385bc660fa46e7c78ff25617 100644 (file)
@@ -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();
index 8a96b18f05f0ae2805f1b672adefb80ab9028718..e9855d9a3023b1f9c6e4637e754f54f429861d24 100644 (file)
@@ -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);
index d2b05e7ec0c592d963886ec15de7cb939378e932..a35ce64daf194c0d0d657b1b03c19ea78cbe8741 100644 (file)
@@ -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); ,