diff --git a/.gitignore b/.gitignore index ed38cc0..59107bb 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ # Stitch files stitch.config.json tmp/ +/options diff --git a/objects/obj_camera_pixel_grid/Create_0.gml b/objects/obj_camera_pixel_grid/Create_0.gml index dc9c2a5..64e8ed1 100644 --- a/objects/obj_camera_pixel_grid/Create_0.gml +++ b/objects/obj_camera_pixel_grid/Create_0.gml @@ -14,3 +14,11 @@ resolutions = [ {w:1280, h:720}, {w:1920, h:1080} ]; + + +hspd = 0; +vspd = 0; + +acceleration_spd = 0.02; +deacceleration_spd = 0.1; +max_spd = 3; \ No newline at end of file diff --git a/objects/obj_camera_pixel_grid/Draw_64.gml b/objects/obj_camera_pixel_grid/Draw_64.gml index 4113c48..e674f67 100644 --- a/objects/obj_camera_pixel_grid/Draw_64.gml +++ b/objects/obj_camera_pixel_grid/Draw_64.gml @@ -8,8 +8,14 @@ draw_set_valign(fa_top); draw_text_outline(1, 0, "[RMB] Zoom amount: " + string(zoom_text), _outline_width, _precision); draw_text_outline(1, _offset * 1, "[F] camera shake", _outline_width, _precision); draw_text_outline(1, _offset * 2, "[P] camera paused: " + (cam1.get_paused() ? "ON" : "OFF"), _outline_width, _precision); -draw_text_outline(1, _offset * 3, "[1 & 2 & 3] to switch", _outline_width, _precision); -draw_text_outline(1, _offset * 4, "between example rooms", _outline_width, _precision); +draw_text_outline(1, _offset * 3, "[B] smooth camera: " + (cam1.smooth_draw ? "ON" : "OFF"), _outline_width, _precision); +draw_text_outline(1, _offset * 4, "[1 & 2 & 3] to switch", _outline_width, _precision); +draw_text_outline(1, _offset * 5, "between example rooms", _outline_width, _precision); + +//draw current camera position +draw_set_halign(fa_right); +draw_text_outline(-1, 0, $"x:{cam1.get_x()} y:{cam1.get_y()} ", _outline_width, _precision); +draw_text_outline(-1, _offset * 1, $"x_frac:{cam1.x_frac} y_frac:{cam1.y_frac} ", _outline_width, _precision); //draw current resolution text draw_set_halign(fa_right); @@ -34,6 +40,6 @@ draw_text_outline(global.gui_w - 1, _offset * 3, "window mode: " + _window_mode_ var mx = cam1.room_to_gui_x(cam1.get_mouse_x()); var my = cam1.room_to_gui_y(cam1.get_mouse_y()); draw_set_halign(fa_left); -draw_text(mx,my,$"{mx} {my}"); +draw_text(mx, my, $"{mx} {my}"); diff --git a/objects/obj_camera_pixel_grid/Step_0.gml b/objects/obj_camera_pixel_grid/Step_0.gml index 3f34ded..53f34c4 100644 --- a/objects/obj_camera_pixel_grid/Step_0.gml +++ b/objects/obj_camera_pixel_grid/Step_0.gml @@ -1,4 +1,3 @@ - //toggle zoom in if(mouse_check_button_pressed(mb_right)){ zoom_mode++; @@ -33,6 +32,13 @@ if(keyboard_check_pressed(ord("P"))){ } } +//toggle camera pause +if(keyboard_check_pressed(ord("B"))){ + if(is_instanceof(cam1, stanncam)){ + cam1.smooth_draw = !cam1.smooth_draw; + } +} + //switch resolutions if(keyboard_check_pressed(vk_f1)){ game_res++; @@ -56,11 +62,21 @@ if(keyboard_check_pressed(vk_f4)){ stanncam_set_window_mode(_window_mode); } -//move camera one pixel -var _hinput = keyboard_check_pressed(vk_right) - keyboard_check_pressed(vk_left); -var _vinput = keyboard_check_pressed(vk_down) - keyboard_check_pressed(vk_up); -if(_hinput != 0 || _vinput != 0){ - var _x = cam1.x + _hinput; - var _y = cam1.y + _vinput; +//move camera +var _hinput = keyboard_check(vk_right) - keyboard_check(vk_left); +var _vinput = keyboard_check(vk_down) - keyboard_check(vk_up); + +if(_hinput != 0) hspd += _hinput*acceleration_spd; +else hspd -= min(abs(hspd), deacceleration_spd) * sign(hspd); + +if(_vinput != 0) vspd += _vinput*acceleration_spd; +else vspd -= min(abs(vspd), deacceleration_spd) * sign(vspd); + +hspd = clamp(hspd, -max_spd, max_spd); +vspd = clamp(vspd, -max_spd, max_spd); + +if(hspd != 0 || vspd != 0){ + var _x = cam1.x + hspd; + var _y = cam1.y + vspd; cam1.move(_x, _y, 0); } diff --git a/objects/obj_game_controller/Create_0.gml b/objects/obj_game_controller/Create_0.gml index 18cfcb7..607f7dc 100644 --- a/objects/obj_game_controller/Create_0.gml +++ b/objects/obj_game_controller/Create_0.gml @@ -1 +1,3 @@ room_goto_next(); + +draw_set_font(f_pixel); \ No newline at end of file diff --git a/objects/obj_stanncam_zone/Create_0.gml b/objects/obj_stanncam_zone/Create_0.gml index 12c6292..e603108 100644 --- a/objects/obj_stanncam_zone/Create_0.gml +++ b/objects/obj_stanncam_zone/Create_0.gml @@ -1,8 +1,8 @@ /// @description which sides to constrain -left = true; -top = true; -right = true; -bottom = true; +left = true; +top = true; +right = true; +bottom = true; image_angle = (image_angle mod 360 + 360) mod 360; diff --git a/objects/obj_stanncam_zone_1side/Create_0.gml b/objects/obj_stanncam_zone_1side/Create_0.gml index 7c8cb20..875ce76 100644 --- a/objects/obj_stanncam_zone_1side/Create_0.gml +++ b/objects/obj_stanncam_zone_1side/Create_0.gml @@ -1,22 +1,21 @@ -/// @description event_inherited(); -left = false; -top = false; -right = false; -bottom = false; +left = false; +top = false; +right = false; +bottom = false; switch (image_angle) { - case 0: - right = true; - break; - case 90: - top = true; - break; + case 0: + right = true; + break; + case 90: + top = true; + break; case 180: - left = true; - break; + left = true; + break; case 270: - bottom = true; - break; + bottom = true; + break; } diff --git a/objects/obj_stanncam_zone_2side/Create_0.gml b/objects/obj_stanncam_zone_2side/Create_0.gml index 6e9134b..f65ced9 100644 --- a/objects/obj_stanncam_zone_2side/Create_0.gml +++ b/objects/obj_stanncam_zone_2side/Create_0.gml @@ -1,26 +1,25 @@ -/// @description event_inherited(); -left = false; -top = false; -right = false; -bottom = false; +left = false; +top = false; +right = false; +bottom = false; switch (image_angle) { - case 0: - right = true; + case 0: + right = true; left = true; - break; - case 90: - top = true; + break; + case 90: + top = true; bottom = true; - break; + break; case 180: - right = true; + right = true; left = true; - break; + break; case 270: - top = true; + top = true; bottom = true; - break; + break; } diff --git a/objects/obj_stanncam_zone_corner/Create_0.gml b/objects/obj_stanncam_zone_corner/Create_0.gml index c154cc6..acdecd5 100644 --- a/objects/obj_stanncam_zone_corner/Create_0.gml +++ b/objects/obj_stanncam_zone_corner/Create_0.gml @@ -1,26 +1,25 @@ -/// @description event_inherited(); -left = false; -top = false; -right = false; -bottom = false; +left = false; +top = false; +right = false; +bottom = false; switch (image_angle) { - case 0: - right = true; + case 0: + right = true; bottom = true; - break; - case 90: - top = true; + break; + case 90: + top = true; right = true; - break; + break; case 180: - left = true; + left = true; top = true; - break; + break; case 270: - bottom = true; + bottom = true; left = true; - break; + break; } diff --git a/objects/obj_stanncam_zone_u/Create_0.gml b/objects/obj_stanncam_zone_u/Create_0.gml index 9c82788..0e1197f 100644 --- a/objects/obj_stanncam_zone_u/Create_0.gml +++ b/objects/obj_stanncam_zone_u/Create_0.gml @@ -1,22 +1,21 @@ -/// @description event_inherited(); -left = true; -top = true; -right = true; -bottom = true; +left = true; +top = true; +right = true; +bottom = true; switch (image_angle) { - case 0: - left = false; - break; - case 90: - bottom = false; - break; + case 0: + left = false; + break; + case 90: + bottom = false; + break; case 180: - right = false; - break; + right = false; + break; case 270: - top = false; - break; + top = false; + break; } diff --git a/scripts/stanncam/stanncam.gml b/scripts/stanncam/stanncam.gml index 9a6e91c..e3f37d7 100644 --- a/scripts/stanncam/stanncam.gml +++ b/scripts/stanncam/stanncam.gml @@ -167,14 +167,21 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf bounds_dist_w = (max(bounds_w, abs(_x_dist)) - bounds_w) * sign(_x_dist); bounds_dist_h = (max(bounds_h, abs(_y_dist)) - bounds_h) * sign(_y_dist); + bounds_dist_w = round(bounds_dist_w * 100) / 100; //rounds to 2 decimal places + bounds_dist_h = round(bounds_dist_h * 100) / 100; //more decimal places may cause the position to fluctuate at certain points + //update camera position - if(abs(__xTo - x) > bounds_w){ + if(abs(_x_dist) > bounds_w){ var _spd = (bounds_dist_w / spd_threshold) * spd; + if(smooth_draw) _spd = round(_spd); + x += _spd; } - if(abs(y - __yTo) > bounds_h){ + if(abs(_y_dist) > bounds_h){ var _spd = (bounds_dist_h / spd_threshold) * spd; + if(smooth_draw) _spd = round(_spd); + y += _spd; } @@ -256,8 +263,6 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf if(zoom_amount == __zoomTo) __zooming = false; } - zoom_x = ((width * zoom_amount) - width) * 0.5; - zoom_y = ((height * zoom_amount) - height) * 0.5; } #endregion @@ -327,8 +332,6 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf if(_duration == 0){ //if duration is 0 the view is updated immediately width = _width; height = _height; - zoom_x = ((width * zoom_amount) - width) * 0.5; - zoom_y = ((height * zoom_amount) - height) * 0.5; __update_view_size(); } else { __size_change = true; @@ -373,9 +376,14 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf static zoom = function(_zoom, _duration=0){ if(_duration == 0){ //if duration is 0 the view is updated immediately zoom_amount = _zoom; + + //some rounding issues, so here we round to nearest second decimal place, IE 0.19999999 becomes 0.02, very edge case problem + zoom_amount = round(zoom_amount * 100) / 100; + zoom_x = ((width * zoom_amount) - width) * 0.5; zoom_y = ((height * zoom_amount) - height) * 0.5; - if(!get_paused()) { + + if(!get_paused()){ __update_view_size(); } } else { @@ -427,20 +435,20 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf /// @function set_paused /// @description sets camera paused state /// @param {Bool} _paused - static set_paused = function(_paused) { + static set_paused = function(_paused){ paused = _paused; } /// @function get_paused /// @description gets camera's paused state /// @returns {Bool} - static get_paused = function() { + static get_paused = function(){ return paused; } /// @function toggle_paused /// @description toggles the camera's paused state - static toggle_paused = function() { + static toggle_paused = function(){ set_paused(!get_paused()); } @@ -622,16 +630,16 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf //if on it is handled by the draw events if(smooth_draw){ var _ceiled_zoom = ceil(zoom_amount); //ensures the new surface size is a whole number - var _new_width = width * _ceiled_zoom; - var _new_height = height * _ceiled_zoom; + var _new_width = width * _ceiled_zoom + 1; //smooth drawing needs the surface to be 1 pixel wider and taller to remove edge warping + var _new_height = height * _ceiled_zoom + 1; } else { - var _new_width = floor(width * zoom_amount); + var _new_width = floor(width * zoom_amount); var _new_height = floor(height * zoom_amount); var _width_2px = _new_width mod 2; var _height_2px = _new_height mod 2; - _new_width = _new_width - _width_2px; + _new_width = _new_width - _width_2px; _new_height = _new_height - _height_2px; } //only runs if the size has changed (unless forced, used by __check_viewports to initialize) @@ -650,7 +658,7 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf var _new_x = x + offset_x - (width * 0.5) + __shake_x; var _new_y = y + offset_y - (height * 0.5) + __shake_y; - if(!smooth_draw){ // when smooth draw is off, the actual camera position gets rounded to whole numbers + if(!smooth_draw){// when smooth draw is off, the actual camera position gets rounded to whole numbers _new_x = round(_new_x); _new_y = round(_new_y); } @@ -658,8 +666,21 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf //apply zoom offset _new_x -= zoom_x; _new_y -= zoom_y; - - //zone constricting + + if(smooth_draw){ //smooth drawing requires one extra pixel on the camera surface to remove edge warping, this is to fix the offset that occurs with that + if(_new_x <= 0) _new_x -= 1; + if(_new_y <= 0) _new_y -= 1; + } + + //without smooth_draw zooming needs to be snapped a bit + var _width_stepped = (width * zoom_amount); + var _height_stepped = (height * zoom_amount); + if(!smooth_draw){ + _width_stepped -= _width_stepped mod 2; + _height_stepped -= _height_stepped mod 2; + } + + //zone constricting if(__zone != noone){ var _zone_constrain_x = 0; var _zone_constrain_y = 0; @@ -670,27 +691,27 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf _left = max(0, __zone.bbox_left - _new_x); } if(__zone.right){ - _right = -max(0, _new_x + (width * zoom_amount) - __zone.bbox_right); + _right = -max(0, _new_x + _width_stepped - __zone.bbox_right); } if(__zone.top){ _top = max(0, __zone.bbox_top - _new_y); } if(__zone.bottom){ - _bottom = -max(0, _new_y + (height * zoom_amount) - __zone.bbox_bottom); + _bottom = -max(0, _new_y + _height_stepped - __zone.bbox_bottom); } //horizontal check - if(__zone.sprite_width <= (width * zoom_amount) && __zone.left && __zone.right){ + if(__zone.sprite_width <= (_width_stepped) && __zone.left && __zone.right){ //if the zones width is smaller than the camera and both left and right are constraining the cam will be pushed to its middle - _zone_constrain_x = (__zone.x+__zone.sprite_width/2) - (_new_x+(width*zoom_amount)/2); + _zone_constrain_x = (__zone.x+__zone.sprite_width/2) - (_new_x+_width_stepped/2); } else { - if(__zone.left) _zone_constrain_x += _left; + if(__zone.left) _zone_constrain_x += _left; if(__zone.right) _zone_constrain_x += _right; } //vertical check - if(__zone.sprite_height <= (height * zoom_amount) && __zone.top && __zone.bottom){ - _zone_constrain_y = (__zone.y+__zone.sprite_height/2) - (_new_y+(height*zoom_amount)/2); + if(__zone.sprite_height <= (_height_stepped) && __zone.top && __zone.bottom){ + _zone_constrain_y = (__zone.y+__zone.sprite_height/2) - (_new_y+_height_stepped/2); } else { if(__zone.top) _zone_constrain_y += _top; if(__zone.bottom) _zone_constrain_y += _bottom; @@ -706,8 +727,8 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf //Constrains camera to room if(room_constrain){ - __constrain_offset_x = (clamp(_new_x, 0, room_width - width * zoom_amount) - _new_x); - __constrain_offset_y = (clamp(_new_y, 0, room_height - height * zoom_amount) - _new_y); + __constrain_offset_x = (clamp(_new_x, 0, room_width - _width_stepped) - _new_x); + __constrain_offset_y = (clamp(_new_y, 0, room_height - _height_stepped) - _new_y); _new_x += __constrain_offset_x; _new_y += __constrain_offset_y; @@ -718,15 +739,17 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf if(smooth_draw){ //seperates position into whole and fractional parts - x_frac = frac(_new_x); - y_frac = frac(_new_y); + //when position is negative, fraction is too, and so this is to compensate for that + + if(_new_x > 0) x_frac = frac(_new_x); + else x_frac = 1 + frac(_new_x); + + if(_new_y > 0) y_frac = frac(_new_y); + else y_frac = 1 + frac(_new_y); _new_x = floor(abs(_new_x)) * sign(_new_x); _new_y = floor(abs(_new_y)) * sign(_new_y); - } else { - _new_x = ceil(_new_x); - _new_y = ceil(_new_y); } camera_set_view_pos(__camera, _new_x, _new_y); @@ -749,8 +772,8 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf var x_offset = -offset_x - __constrain_offset_x - (__zone_constrain_x * __zone_constrain_amount) + zoom_x; var y_offset = -offset_y - __constrain_offset_y - (__zone_constrain_y * __zone_constrain_amount) + zoom_y; - var _x1 = (width * 0.5) - bounds_w + x_offset; - var _x2 = (width * 0.5) + bounds_w + x_offset; + var _x1 = (width * 0.5) - bounds_w + x_offset; + var _x2 = (width * 0.5) + bounds_w + x_offset; var _y1 = (height * 0.5) - bounds_h + y_offset; var _y2 = (height * 0.5) + bounds_h + y_offset; draw_set_color(c_white); @@ -867,11 +890,11 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf /// @param {Real} [_scale_y=1] /// @param {Real} [_left=0] /// @param {Real} [_top=0] - /// @param {Real} [_width=surface_get_width(_surface)] - /// @param {Real} [_height=surface_get_height(_surface)] + /// @param {Real} [_width=width] + /// @param {Real} [_height=height] /// @param {Bool} [_ratio_compensate=true] /// @ignore - static draw_surf = function(_surface, _x, _y, _scale_x=1, _scale_y=1, _left=0, _top=0, _width=surface_get_width(_surface), _height=surface_get_height(_surface), _ratio_compensate=true){ + static draw_surf = function(_surface, _x, _y, _scale_x=1, _scale_y=1, _left=0, _top=0, _width=width, _height=height, _ratio_compensate=true){ if(!surface_exists(_surface)){ return; } @@ -887,9 +910,8 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf var _display_scale_x = __obj_stanncam_manager.__display_scale_x; var _display_scale_y = __obj_stanncam_manager.__display_scale_y; - - if(smooth_draw){ - //draws super smooth both when moving and zooming + + if(smooth_draw){ //if smooth draw is off, the zoom amount becomes stepped to 0.02, and frac_x/y are 0 _width *= zoom_amount; _height *= zoom_amount; _scale_x /= zoom_amount; @@ -897,10 +919,17 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf draw_surface_part_ext(_surface, x_frac + _left, y_frac + _top, _width, _height, _x, _y, _display_scale_x * _scale_x, _display_scale_y * _scale_y, -1, 1); } else { - //maintains pixel perfection when moving and zooming, appears more stuttery - draw_surface_stretched(_surface, _x, _y, _width * _display_scale_x * _scale_x, _height * _display_scale_y * _scale_y); + var _width_stepped = _width * zoom_amount; + var _height_stepped = _height * zoom_amount; + + _width_stepped -= _width_stepped mod 2; + _height_stepped -= _height_stepped mod 2; + + _scale_x = _width / _width_stepped; + _scale_y = _height / _height_stepped; + + draw_surface_part_ext(_surface, _left, _top, _width_stepped, _height_stepped, _x, _y, _display_scale_x * _scale_x, _display_scale_y * _scale_y, -1, 1); } - } #endregion @@ -908,7 +937,7 @@ function stanncam(_x=0, _y=0, _width=global.game_w, _height=global.game_h, _surf * @function toString * @returns {String} */ - static toString = function() { + static toString = function(){ return ""; } diff --git a/scripts/stanncam_macros/stanncam_macros.gml b/scripts/stanncam_macros/stanncam_macros.gml index b090fe2..f62cdd3 100644 --- a/scripts/stanncam_macros/stanncam_macros.gml +++ b/scripts/stanncam_macros/stanncam_macros.gml @@ -1,3 +1,3 @@ -#macro STANNCAM_VERSION "2.3.0" +#macro STANNCAM_VERSION "2.3.1" show_debug_message("Using STANNcam version " + STANNCAM_VERSION); diff --git a/scripts/stanncam_manager/stanncam_manager.gml b/scripts/stanncam_manager/stanncam_manager.gml index 61c7798..86a7785 100644 --- a/scripts/stanncam_manager/stanncam_manager.gml +++ b/scripts/stanncam_manager/stanncam_manager.gml @@ -63,12 +63,12 @@ function stanncam_init(_game_w, _game_h, _resolution_w=_game_w, _resolution_h=_g /// @function stanncam_destroy /// @description removes all stanncam references from the game, the opposite of stanncam_init /// @param {Bool} [_application_surface_draw_enable=true] -function stanncam_destroy(_application_surface_draw_enable = true){ +function stanncam_destroy(_application_surface_draw_enable=true){ application_surface_draw_enable(_application_surface_draw_enable); - time_source_destroy(global.stanncam_time_source,true); - for (var i = 0; i < array_length(global.stanncams); ++i) { - if(global.stanncams[i] != -1) { + time_source_destroy(global.stanncam_time_source, true); + for (var i = 0; i < array_length(global.stanncams); ++i){ + if(global.stanncams[i] != -1){ global.stanncams[i].destroy(); } } @@ -353,7 +353,7 @@ function stanncam_debug_set_draw_zones(_should_draw){ /// @function stanncam_toggle_cameras_paused /// @description toggles camera's paused state -function stanncam_toggle_cameras_paused() { +function stanncam_toggle_cameras_paused(){ var _len = array_length(global.stanncams); for (var i = 0; i < _len; ++i){ var _camera = global.stanncams[i]; @@ -366,7 +366,7 @@ function stanncam_toggle_cameras_paused() { /// @function stanncam_set_cameras_paused /// @description sets all cameras to paused state /// @param {Bool} _paused -function stanncam_set_cameras_paused(_paused) { +function stanncam_set_cameras_paused(_paused){ var _len = array_length(global.stanncams); for (var i = 0; i < _len; ++i){ var _camera = global.stanncams[i]; @@ -378,12 +378,12 @@ function stanncam_set_cameras_paused(_paused) { /// @function stanncam_cameras_pause /// @description sets all cameras to paused state -function stanncam_cameras_pause() { +function stanncam_cameras_pause(){ return stanncam_set_cameras_paused(true); } /// @function stanncam_cameras_unpause /// @description sets all cameras to an unpaused state -function stanncam_cameras_unpause() { +function stanncam_cameras_unpause(){ return stanncam_set_cameras_paused(false); } diff --git a/stanncam.yyp b/stanncam.yyp index 15ae90b..945820f 100644 --- a/stanncam.yyp +++ b/stanncam.yyp @@ -107,9 +107,9 @@ "resourceVersion":"2.0", "RoomOrderNodes":[ {"roomId":{"name":"rm_init","path":"rooms/rm_init/rm_init.yy",},}, + {"roomId":{"name":"rm_pixel_grid","path":"rooms/rm_pixel_grid/rm_pixel_grid.yy",},}, {"roomId":{"name":"rm_test","path":"rooms/rm_test/rm_test.yy",},}, {"roomId":{"name":"rm_sidescroller","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},}, - {"roomId":{"name":"rm_pixel_grid","path":"rooms/rm_pixel_grid/rm_pixel_grid.yy",},}, ], "templateType":null, "TextureGroups":[