diff --git a/objects/__obj_stanncam_manager/Create_0.gml b/objects/__obj_stanncam_manager/Create_0.gml
index 189fb71..c472ca9 100644
--- a/objects/__obj_stanncam_manager/Create_0.gml
+++ b/objects/__obj_stanncam_manager/Create_0.gml
@@ -3,3 +3,9 @@ resolution_w = 0;
resolution_h = 0;
number_of_cams = 0;
keep_aspect_ratio = true;
+
+resize_width = 0;
+resize_height = 0;
+
+__display_scale_x = 1;
+__display_scale_y = 1;
\ No newline at end of file
diff --git a/objects/__obj_stanncam_manager/Other_4.gml b/objects/__obj_stanncam_manager/Other_4.gml
index 4d0a49a..14ad1c7 100644
--- a/objects/__obj_stanncam_manager/Other_4.gml
+++ b/objects/__obj_stanncam_manager/Other_4.gml
@@ -3,4 +3,4 @@ for (var i = 0; i < array_length(global.stanncams); ++i) {
if (global.stanncams[i] == -1) continue;
global.stanncams[i].__check_viewports();
}
-__stanncam_update_resolution();
+__stanncam_update_resolution();
\ No newline at end of file
diff --git a/objects/__obj_stanncam_manager/Step_2.gml b/objects/__obj_stanncam_manager/Step_2.gml
index 9bcb0e4..0cd607d 100644
--- a/objects/__obj_stanncam_manager/Step_2.gml
+++ b/objects/__obj_stanncam_manager/Step_2.gml
@@ -2,3 +2,10 @@ for (var i = 0; i < array_length(global.stanncams); ++i) {
if (global.stanncams[i] == -1) continue;
global.stanncams[i].__step();
}
+
+//constantly checks if the window is being resized and changes the resolution to match
+if(global.window_mode == STANNCAM_WINDOW_MODE.windowed && (resize_width != window_get_width() || resize_height != window_get_height())){
+ resize_width = window_get_width();
+ resize_height = window_get_height();
+ stanncam_set_resolution(resize_width,resize_height);
+}
\ No newline at end of file
diff --git a/objects/obj_ball/obj_ball.yy b/objects/obj_ball/obj_ball.yy
index 7812ffc..74ce0e2 100644
--- a/objects/obj_ball/obj_ball.yy
+++ b/objects/obj_ball/obj_ball.yy
@@ -8,8 +8,8 @@
"managed": true,
"overriddenProperties": [],
"parent": {
- "name": "Objects",
- "path": "folders/Objects.yy",
+ "name": "topdown",
+ "path": "folders/Objects/topdown.yy",
},
"parentObjectId": null,
"persistent": false,
diff --git a/objects/obj_camera/Create_0.gml b/objects/obj_camera/Create_0.gml
index 2e636d4..5fc9184 100644
--- a/objects/obj_camera/Create_0.gml
+++ b/objects/obj_camera/Create_0.gml
@@ -1,6 +1,6 @@
/// @description
//camera
-stanncam_init(320,240,1920,1080);
+stanncam_init(320,180,1920,1080);
cam1 = new stanncam(obj_player.x,obj_player.y,global.game_w,global.game_h);
cam1.follow = obj_player;
@@ -14,7 +14,7 @@ pointer_x = 0;
pointer_y = 0;
zoom_mode = 0;
-zoom_text = "no zooming"
+zoom_text = cam1.zoom_amount
speed_mode = 1;
diff --git a/objects/obj_camera/Draw_64.gml b/objects/obj_camera/Draw_64.gml
index a364e68..eec6f32 100644
--- a/objects/obj_camera/Draw_64.gml
+++ b/objects/obj_camera/Draw_64.gml
@@ -22,18 +22,32 @@ var following = (cam1.follow != undefined) ? "following" : "not following"
draw_text_outline(1,offset,"[space] " + following,outline_width,precision);
draw_text_outline(1,offset*2,"[ALT] toggle hi-res GUI",outline_width,precision);
draw_text_outline(1,offset*3,"[LMB] move cam to pos (when not following)",outline_width,precision);
-draw_text_outline(1,offset*4,"[RMB] "+ zoom_text,outline_width,precision);
+draw_text_outline(1,offset*4,"[RMB] Zoom amount: "+ string(zoom_text),outline_width,precision);
var constrained = (cam1.room_constrain) ? "camera constrained to room" : "camera not constrained to room";
draw_text_outline(1,offset*5,"[CTRL] "+ constrained,outline_width,precision);
draw_text_outline(1,offset*6,"[F] camera shake",outline_width,precision);
draw_text_outline(1,offset*7,"[Tab] camera speed "+ string(cam1.spd),outline_width,precision);
+draw_text_outline(1,offset*8,"[1 & 2] to switch between example rooms",outline_width,precision);
//draw current resolution text
draw_set_halign(fa_right)
-draw_text_outline(global.gui_w-1,1,"game resolution: "+string(__obj_stanncam_manager.display_res_w)+" x "+string(__obj_stanncam_manager.display_res_h)+" [F1]",outline_width,precision);
+draw_text_outline(global.gui_w-1,1,"game resolution: "+string(global.res_w)+" x "+string(global.res_h)+" [F1]",outline_width,precision);
draw_text_outline(global.gui_w-1,offset,"GUI resolution: "+string(global.gui_w)+" x "+string(global.gui_h)+" [F2]",outline_width,precision);
draw_text_outline(global.gui_w-1,offset*2,"Keep aspect ratio: "+string(stanncam_get_keep_aspect_ratio())+" [F3]",outline_width,precision);
-draw_text_outline(global.gui_w-1,offset*3,"fullscreen: "+string(window_get_fullscreen())+" [F4]",outline_width,precision);
+var window_mode_text = "";
+switch (global.window_mode) {
+ case STANNCAM_WINDOW_MODE.windowed:
+ window_mode_text = "windowed ";
+ break;
+ case STANNCAM_WINDOW_MODE.fullscreen:
+ window_mode_text = "fullscreen";
+ break;
+ case STANNCAM_WINDOW_MODE.borderless:
+ window_mode_text = "borderless";
+ break;
+}
+
+draw_text_outline(global.gui_w-1,offset*3,$"window mode: {window_mode_text} [F4]",outline_width,precision);
draw_text_outline(global.gui_w-1,offset*4,"split-screen: "+string(split_screen)+" [F5]",outline_width,precision);
//point at player, when it's outside camera bounds
diff --git a/objects/obj_camera/Keyboard_123.gml b/objects/obj_camera/Keyboard_123.gml
new file mode 100644
index 0000000..57067e1
--- /dev/null
+++ b/objects/obj_camera/Keyboard_123.gml
@@ -0,0 +1,3 @@
+/// @description
+
+
diff --git a/objects/obj_camera/Step_0.gml b/objects/obj_camera/Step_0.gml
index 61b3a12..15d4afa 100644
--- a/objects/obj_camera/Step_0.gml
+++ b/objects/obj_camera/Step_0.gml
@@ -46,24 +46,22 @@ if(mouse_check_button_pressed(mb_right)){
switch (zoom_mode) {
case 0:
//no zooming
- zoom_text = "no zooming";
cam1.zoom(1,room_speed*1);
obj_tv.tv.zoom(1,room_speed*1);
break;
case 1:
//zoom in
- zoom_text = "zoomed in";
cam1.zoom(0.5,room_speed*1);
obj_tv.tv.zoom(0.5,room_speed*1);
break;
case 2:
//zoom out
- zoom_text = "zoomed out";
cam1.zoom(2,room_speed*1);
obj_tv.tv.zoom(2,room_speed*1);
break;
}
}
+zoom_text = cam1.zoom_amount;
//toggle camera speed
if(keyboard_check_pressed(vk_tab)){
@@ -118,8 +116,16 @@ if(keyboard_check_pressed(vk_f2)){
stanncam_set_gui_resolution(gui_w,gui_h);
}
-//toggle fullscreen
-if(keyboard_check_pressed(vk_f3)) stanncam_toggle_keep_aspect_ratio();
+//toggle keep aspect ratio
+if(keyboard_check_pressed(vk_f3)){
+ stanncam_set_keep_aspect_ratio( !stanncam_get_keep_aspect_ratio() );
+}
-//toggle fullscreen
-if(keyboard_check_pressed(vk_f4)) stanncam_toggle_fullscreen();
\ No newline at end of file
+//toggle between window modes
+if(keyboard_check_pressed(vk_f4)){
+ var window_mode = global.window_mode;
+ window_mode++;
+ if (window_mode == 3) window_mode = 0;
+
+ stanncam_set_window_mode(window_mode)
+}
\ No newline at end of file
diff --git a/objects/obj_camera/obj_camera.yy b/objects/obj_camera/obj_camera.yy
index 8b8999c..f819e66 100644
--- a/objects/obj_camera/obj_camera.yy
+++ b/objects/obj_camera/obj_camera.yy
@@ -10,15 +10,16 @@
{"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":64,"eventType":8,"isDnD":false,},
{"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":60,"eventType":6,"isDnD":false,},
{"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":61,"eventType":6,"isDnD":false,},
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":123,"eventType":5,"isDnD":false,},
],
"managed": true,
"overriddenProperties": [],
"parent": {
- "name": "Objects",
- "path": "folders/Objects.yy",
+ "name": "topdown",
+ "path": "folders/Objects/topdown.yy",
},
"parentObjectId": null,
- "persistent": true,
+ "persistent": false,
"physicsAngularDamping": 0.1,
"physicsDensity": 0.5,
"physicsFriction": 0.2,
diff --git a/objects/obj_camera_sidescroller/Create_0.gml b/objects/obj_camera_sidescroller/Create_0.gml
new file mode 100644
index 0000000..870762f
--- /dev/null
+++ b/objects/obj_camera_sidescroller/Create_0.gml
@@ -0,0 +1,36 @@
+/// @description
+//camera
+stanncam_init(400,270,1920,1080);
+cam1 = new stanncam(obj_player_sidescroller.x,obj_player_sidescroller.y,global.game_w,global.game_h);
+cam1.follow = obj_player_sidescroller;
+cam1.room_constrain = true;
+
+cam2 = cam1.clone();
+cam2.follow = obj_player_sidescroller2;
+cam2.set_size(global.game_w/2,global.game_h,0);
+
+split_screen = false;
+
+//pointer
+zoom_text = cam1.zoom_amount
+
+speed_mode = 1;
+zoom_mode = 1;
+
+game_res = 2;
+gui_hires = false;
+gui_res = 0;
+
+resolutions = [
+{ w:400 , h:400 }, //1:1
+{ w:500 , h:250 }, //2:1
+{ w:320 , h:180 }, //16:9
+{ w:640 , h:360 },
+{ w:1280 , h:720 },
+{ w:1920 , h:1080 },
+{ w:2560 , h:1440 }
+]
+
+lookahead = false;
+
+surface = -1;
\ No newline at end of file
diff --git a/objects/obj_camera_sidescroller/Draw_64.gml b/objects/obj_camera_sidescroller/Draw_64.gml
new file mode 100644
index 0000000..04617a8
--- /dev/null
+++ b/objects/obj_camera_sidescroller/Draw_64.gml
@@ -0,0 +1,51 @@
+/// @description
+//chooses pixel font or hires font
+if(gui_hires){
+ draw_set_font(f_hires);
+ var offset = 45;
+ var outline_width = 4;
+ var precision = 16;
+ draw_set_color(c_white)
+} else {
+ draw_set_font(f_pixel);
+ var offset = 8;
+ var outline_width = 1;
+ var precision = 8;
+ draw_set_color(c_white)
+}
+
+//draws helper text
+draw_set_halign(fa_left);
+draw_set_valign(fa_top);
+draw_text_outline(1,1,"[arrow keys] move character",outline_width,precision);
+draw_text_outline(1,offset*2,"[ALT] toggle hi-res GUI",outline_width,precision);
+draw_text_outline(1,offset*4,"[RMB] / [SCRL WHEEL] "+ string(zoom_text),outline_width,precision);
+var constrained = (cam1.room_constrain) ? "camera constrained to room" : "camera not constrained to room";
+draw_text_outline(1,offset*5,"[CTRL] "+ constrained,outline_width,precision);
+var debug = (cam1.debug_draw) ? "debug draw on" : "debug draw off";
+draw_text_outline(1,offset*6,"[SHIFT] "+ debug,outline_width,precision);
+draw_text_outline(1,offset*7,"[F] camera shake",outline_width,precision);
+draw_text_outline(1,offset*8,"[Tab] camera speed "+ string(cam1.spd),outline_width,precision);
+draw_text_outline(1,offset*9,"[1 & 2] to switch between example rooms",outline_width,precision);
+
+//draw current resolution text
+draw_set_halign(fa_right)
+draw_text_outline(global.gui_w-1,1,"game resolution: "+string(global.res_w)+" x "+string(global.res_h)+" [F1]",outline_width,precision);
+draw_text_outline(global.gui_w-1,offset,"GUI resolution: "+string(global.gui_w)+" x "+string(global.gui_h)+" [F2]",outline_width,precision);
+draw_text_outline(global.gui_w-1,offset*2,"Keep aspect ratio: "+string(stanncam_get_keep_aspect_ratio())+" [F3]",outline_width,precision);
+
+var window_mode_text = "";
+switch (global.window_mode) {
+ case STANNCAM_WINDOW_MODE.windowed:
+ window_mode_text = "windowed ";
+ break;
+ case STANNCAM_WINDOW_MODE.fullscreen:
+ window_mode_text = "fullscreen";
+ break;
+ case STANNCAM_WINDOW_MODE.borderless:
+ window_mode_text = "borderless";
+ break;
+}
+
+draw_text_outline(global.gui_w-1,offset*3,$"window mode: {window_mode_text} [F4]",outline_width,precision);
+draw_text_outline(global.gui_w-1,offset*4,"split-screen: "+string(split_screen)+" [F5]",outline_width,precision);
\ No newline at end of file
diff --git a/objects/obj_camera_sidescroller/Draw_77.gml b/objects/obj_camera_sidescroller/Draw_77.gml
new file mode 100644
index 0000000..d50e7dc
--- /dev/null
+++ b/objects/obj_camera_sidescroller/Draw_77.gml
@@ -0,0 +1,50 @@
+/// @description
+
+parralax_bg = function(cam_){
+
+ //the background is scaled up so it appears smooth when being parralaxed
+
+ var scalex = stanncam_get_res_scale_x();
+ var scaley = stanncam_get_res_scale_y();
+
+ //the offset the camera is from the middle of the room
+ var offset_x = (-cam_.get_x() -cam_.x_frac) * scalex;
+ var pos_x = -200 + cam_.x_frac;
+ var pos_y = 0 + cam_.y_frac;
+
+ draw_sprite_ext_tiled(spr_underwater_layer00,0,pos_x + (offset_x * 0.0),pos_y,2,1,scalex,scaley);
+ draw_sprite_ext_tiled(spr_underwater_layer01,0,pos_x + (offset_x * 0.2),pos_y,2,1,scalex,scaley);
+ draw_sprite_ext_tiled(spr_underwater_layer02,0,pos_x + (offset_x * 0.4),pos_y,2,1,scalex,scaley);
+ draw_sprite_ext_tiled(spr_underwater_layer03,0,pos_x + (offset_x * 0.6),pos_y,2,1,scalex,scaley);
+ draw_sprite_ext_tiled(spr_underwater_layer04,0,pos_x + (offset_x * 0.8),pos_y,2,1,scalex,scaley);
+ draw_sprite_ext_tiled(spr_underwater_layer05,0,pos_x + (offset_x * 1.0),pos_y,2,1,scalex,scaley);
+}
+
+parralax_bg1 = function(){
+ parralax_bg(cam1);
+}
+
+parralax_bg2 = function(){
+ parralax_bg(cam2);
+}
+
+//fancy splitscreen rendering
+var width = global.res_w;
+var height = global.res_h;
+
+//the parralax drawing is scaled down again
+var scalex = 1/stanncam_get_res_scale_x();
+var scaley = 1/stanncam_get_res_scale_y();
+
+if(!split_screen){
+ cam1.draw_special(parralax_bg1,0,0,width,height,scalex,scaley);
+ cam1.draw(0,0);
+} else {
+//fancy splitscreen rendering
+
+ cam1.draw_special(parralax_bg1,0,0,width/2,height,scalex,scaley);
+ cam1.draw(0,0);
+
+ cam2.draw_special(parralax_bg2,global.game_w/2,0,width/2,height,scalex,scaley);
+ cam2.draw(global.game_w/2,0);
+}
\ No newline at end of file
diff --git a/objects/obj_camera_sidescroller/Mouse_60.gml b/objects/obj_camera_sidescroller/Mouse_60.gml
new file mode 100644
index 0000000..189177a
--- /dev/null
+++ b/objects/obj_camera_sidescroller/Mouse_60.gml
@@ -0,0 +1,5 @@
+/// @description
+var zoom_amount = cam1.zoom_amount;
+zoom_amount-=0.05
+zoom_amount = clamp(zoom_amount,0.1,2);
+cam1.zoom(zoom_amount,0);
\ No newline at end of file
diff --git a/objects/obj_camera_sidescroller/Mouse_61.gml b/objects/obj_camera_sidescroller/Mouse_61.gml
new file mode 100644
index 0000000..703cbba
--- /dev/null
+++ b/objects/obj_camera_sidescroller/Mouse_61.gml
@@ -0,0 +1,5 @@
+/// @description
+var zoom_amount = cam1.zoom_amount;
+zoom_amount+=0.05
+zoom_amount = clamp(zoom_amount,0.1,2);
+cam1.zoom(zoom_amount,0);
\ No newline at end of file
diff --git a/objects/obj_camera_sidescroller/Step_0.gml b/objects/obj_camera_sidescroller/Step_0.gml
new file mode 100644
index 0000000..bbfac0f
--- /dev/null
+++ b/objects/obj_camera_sidescroller/Step_0.gml
@@ -0,0 +1,128 @@
+/// @description
+
+//toggle hires gui
+if(keyboard_check_pressed(vk_alt)){
+ gui_hires = !gui_hires;
+ if(gui_hires){
+ stanncam_set_gui_resolution(1920,1080);
+ }else{
+ stanncam_set_gui_resolution(global.game_w,global.game_h);
+ }
+}
+
+//toggle zoom in
+if(mouse_check_button_pressed(mb_right)){
+ zoom_mode++;
+ if(zoom_mode > 2) zoom_mode = 0;
+
+ switch (zoom_mode) {
+ case 0:
+ //no zooming
+ cam1.zoom(1,room_speed*1);
+ break;
+ case 1:
+ //zoom in
+ cam1.zoom(0.5,room_speed*1);
+ break;
+ case 2:
+ //zoom out
+ cam1.zoom(2,room_speed*1);
+ break;
+ }
+}
+zoom_text = cam1.zoom_amount;
+
+//toggle camera speed
+if(keyboard_check_pressed(vk_tab)){
+ speed_mode++;
+ if(speed_mode > 3) speed_mode = 0;
+
+ switch (speed_mode) {
+ case 0:
+ //speed 0.5
+ cam1.set_speed(0.5,50);
+ break;
+ case 1:
+ //speed 2
+ cam1.set_speed(1,50);
+ break;
+ case 2:
+ //speed 10
+ cam1.set_speed(2,50);
+ break;
+ case 3:
+ //speed 10
+ cam1.set_speed(10,50);
+ break;
+ }
+}
+
+//toggle if the camera is constrained to the room size
+if(keyboard_check_pressed(vk_control)){
+ if(cam1.room_constrain) cam1.room_constrain = false;
+ else cam1.room_constrain = true;
+}
+
+//toggle debug drawing
+if(keyboard_check_pressed(vk_shift)){
+ cam1.debug_draw = !cam1.debug_draw;
+}
+
+//do a screenshake
+if(keyboard_check_pressed(ord("F"))){
+ cam1.shake_screen(30,room_speed*1);
+}
+
+//switch resolutions
+if(keyboard_check_pressed(vk_f1))
+{
+ game_res++;
+ if(game_res > 6) game_res = 0;
+ stanncam_set_resolution(resolutions[game_res].w,resolutions[game_res].h);
+}
+
+//switch gui resolutions
+if(keyboard_check_pressed(vk_f2)){
+ gui_res++
+ if(gui_res > 6) gui_res = 0;
+ var gui_w = resolutions[gui_res].w;
+ var gui_h = resolutions[gui_res].h;
+ stanncam_set_gui_resolution(gui_w,gui_h);
+}
+
+//toggle keep aspect ratio
+if(keyboard_check_pressed(vk_f3)){
+ stanncam_set_keep_aspect_ratio( !stanncam_get_keep_aspect_ratio() );
+}
+
+//toggle between window modes
+if(keyboard_check_pressed(vk_f4)){
+ var window_mode = global.window_mode;
+ window_mode++;
+ if (window_mode == 3) window_mode = 0;
+
+ stanncam_set_window_mode(window_mode)
+}
+
+//toggle split-screen
+if(keyboard_check_pressed(vk_f5)){
+ split_screen = !split_screen;
+
+ if(split_screen){
+
+ cam1.set_size(global.game_w/2,global.game_h,room_speed*0.5);
+
+ } else {
+ cam1.follow = obj_player_sidescroller;
+ cam2.follow = obj_player_sidescroller2;
+ cam1.set_size(global.game_w,global.game_h,room_speed*0.5);
+ }
+}
+
+//makes the camera look ahead in the direction the player is going
+if(cam1.bounds_dist_w != 0){
+ if(!lookahead){
+ cam1.offset(60*sign(cam1.bounds_dist_w),0,room_speed*0.5);
+ lookahead = true;
+ }
+} else lookahead = false;
\ No newline at end of file
diff --git a/objects/obj_camera_sidescroller/Step_2.gml b/objects/obj_camera_sidescroller/Step_2.gml
new file mode 100644
index 0000000..2dbba54
--- /dev/null
+++ b/objects/obj_camera_sidescroller/Step_2.gml
@@ -0,0 +1,17 @@
+/// @description
+
+//fancy split screen
+//x = lerp(obj_player_sidescroller.x,obj_player_sidescroller2.x,0.5);
+//y = lerp(obj_player_sidescroller.y,obj_player_sidescroller2.y,0.5);
+//player_dist = point_distance(obj_player_sidescroller.x,obj_player_sidescroller.y,obj_player_sidescroller2.x,obj_player_sidescroller2.y);
+
+//when the players are close together the camera follows the middle point between them
+//if(split_screen){
+// if(player_dist > 100){
+// cam1.follow = obj_player_sidescroller;
+// cam2.follow = obj_player_sidescroller2;
+// } else {
+// cam1.follow = self;
+// cam2.follow = self;
+// }
+//}
\ No newline at end of file
diff --git a/objects/obj_camera_sidescroller/obj_camera_sidescroller.yy b/objects/obj_camera_sidescroller/obj_camera_sidescroller.yy
new file mode 100644
index 0000000..a4f7597
--- /dev/null
+++ b/objects/obj_camera_sidescroller/obj_camera_sidescroller.yy
@@ -0,0 +1,39 @@
+{
+ "resourceType": "GMObject",
+ "resourceVersion": "1.0",
+ "name": "obj_camera_sidescroller",
+ "eventList": [
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,},
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,},
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":77,"eventType":8,"isDnD":false,},
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":64,"eventType":8,"isDnD":false,},
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":60,"eventType":6,"isDnD":false,},
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":61,"eventType":6,"isDnD":false,},
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":2,"eventType":3,"isDnD":false,},
+ ],
+ "managed": true,
+ "overriddenProperties": [],
+ "parent": {
+ "name": "sidescroller",
+ "path": "folders/Objects/sidescroller.yy",
+ },
+ "parentObjectId": null,
+ "persistent": false,
+ "physicsAngularDamping": 0.1,
+ "physicsDensity": 0.5,
+ "physicsFriction": 0.2,
+ "physicsGroup": 1,
+ "physicsKinematic": false,
+ "physicsLinearDamping": 0.1,
+ "physicsObject": false,
+ "physicsRestitution": 0.1,
+ "physicsSensor": false,
+ "physicsShape": 1,
+ "physicsShapePoints": [],
+ "physicsStartAwake": true,
+ "properties": [],
+ "solid": false,
+ "spriteId": null,
+ "spriteMaskId": null,
+ "visible": true,
+}
\ No newline at end of file
diff --git a/objects/obj_collision/obj_collision.yy b/objects/obj_collision/obj_collision.yy
new file mode 100644
index 0000000..6e65f8e
--- /dev/null
+++ b/objects/obj_collision/obj_collision.yy
@@ -0,0 +1,34 @@
+{
+ "resourceType": "GMObject",
+ "resourceVersion": "1.0",
+ "name": "obj_collision",
+ "eventList": [],
+ "managed": true,
+ "overriddenProperties": [],
+ "parent": {
+ "name": "sidescroller",
+ "path": "folders/Objects/sidescroller.yy",
+ },
+ "parentObjectId": null,
+ "persistent": false,
+ "physicsAngularDamping": 0.1,
+ "physicsDensity": 0.5,
+ "physicsFriction": 0.2,
+ "physicsGroup": 1,
+ "physicsKinematic": false,
+ "physicsLinearDamping": 0.1,
+ "physicsObject": false,
+ "physicsRestitution": 0.1,
+ "physicsSensor": false,
+ "physicsShape": 1,
+ "physicsShapePoints": [],
+ "physicsStartAwake": true,
+ "properties": [],
+ "solid": false,
+ "spriteId": {
+ "name": "spr_collision",
+ "path": "sprites/spr_collision/spr_collision.yy",
+ },
+ "spriteMaskId": null,
+ "visible": false,
+}
\ No newline at end of file
diff --git a/objects/obj_game_controller/Create_0.gml b/objects/obj_game_controller/Create_0.gml
new file mode 100644
index 0000000..4137603
--- /dev/null
+++ b/objects/obj_game_controller/Create_0.gml
@@ -0,0 +1,2 @@
+/// @description
+room_goto_next();
\ No newline at end of file
diff --git a/objects/obj_game_controller/KeyPress_49.gml b/objects/obj_game_controller/KeyPress_49.gml
new file mode 100644
index 0000000..fe322b8
--- /dev/null
+++ b/objects/obj_game_controller/KeyPress_49.gml
@@ -0,0 +1,3 @@
+/// @description go to first room
+room_goto(rm_test);
+
diff --git a/objects/obj_game_controller/KeyPress_50.gml b/objects/obj_game_controller/KeyPress_50.gml
new file mode 100644
index 0000000..5f273a3
--- /dev/null
+++ b/objects/obj_game_controller/KeyPress_50.gml
@@ -0,0 +1,3 @@
+/// @description go to sidescroller room
+room_goto(rm_sidescroller);
+
diff --git a/objects/obj_game_controller/KeyPress_82.gml b/objects/obj_game_controller/KeyPress_82.gml
new file mode 100644
index 0000000..733d03a
--- /dev/null
+++ b/objects/obj_game_controller/KeyPress_82.gml
@@ -0,0 +1,2 @@
+/// @description Restart
+game_restart();
\ No newline at end of file
diff --git a/objects/obj_game_controller/obj_game_controller.yy b/objects/obj_game_controller/obj_game_controller.yy
new file mode 100644
index 0000000..2c9805f
--- /dev/null
+++ b/objects/obj_game_controller/obj_game_controller.yy
@@ -0,0 +1,36 @@
+{
+ "resourceType": "GMObject",
+ "resourceVersion": "1.0",
+ "name": "obj_game_controller",
+ "eventList": [
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,},
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":49,"eventType":9,"isDnD":false,},
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":50,"eventType":9,"isDnD":false,},
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":82,"eventType":9,"isDnD":false,},
+ ],
+ "managed": true,
+ "overriddenProperties": [],
+ "parent": {
+ "name": "Objects",
+ "path": "folders/Objects.yy",
+ },
+ "parentObjectId": null,
+ "persistent": true,
+ "physicsAngularDamping": 0.1,
+ "physicsDensity": 0.5,
+ "physicsFriction": 0.2,
+ "physicsGroup": 1,
+ "physicsKinematic": false,
+ "physicsLinearDamping": 0.1,
+ "physicsObject": false,
+ "physicsRestitution": 0.1,
+ "physicsSensor": false,
+ "physicsShape": 1,
+ "physicsShapePoints": [],
+ "physicsStartAwake": true,
+ "properties": [],
+ "solid": false,
+ "spriteId": null,
+ "spriteMaskId": null,
+ "visible": true,
+}
\ No newline at end of file
diff --git a/objects/obj_player/Step_0.gml b/objects/obj_player/Step_0.gml
index 1b87e58..a93c53f 100644
--- a/objects/obj_player/Step_0.gml
+++ b/objects/obj_player/Step_0.gml
@@ -6,8 +6,4 @@ x+= hspd;
y+= vspd;
x = clamp(x,0,room_width);
-y = clamp(y,0,room_height);
-
-
-//Restart
-if(keyboard_check_pressed(ord("R"))) game_restart();
\ No newline at end of file
+y = clamp(y,0,room_height);
\ No newline at end of file
diff --git a/objects/obj_player/obj_player.yy b/objects/obj_player/obj_player.yy
index 48ee8cf..8c49693 100644
--- a/objects/obj_player/obj_player.yy
+++ b/objects/obj_player/obj_player.yy
@@ -10,8 +10,8 @@
"managed": true,
"overriddenProperties": [],
"parent": {
- "name": "Objects",
- "path": "folders/Objects.yy",
+ "name": "topdown",
+ "path": "folders/Objects/topdown.yy",
},
"parentObjectId": null,
"persistent": false,
diff --git a/objects/obj_player2/obj_player2.yy b/objects/obj_player2/obj_player2.yy
index 260af1e..1ed0de5 100644
--- a/objects/obj_player2/obj_player2.yy
+++ b/objects/obj_player2/obj_player2.yy
@@ -11,8 +11,8 @@
"managed": true,
"overriddenProperties": [],
"parent": {
- "name": "Objects",
- "path": "folders/Objects.yy",
+ "name": "topdown",
+ "path": "folders/Objects/topdown.yy",
},
"parentObjectId": null,
"persistent": false,
diff --git a/objects/obj_player_sidescroller/Create_0.gml b/objects/obj_player_sidescroller/Create_0.gml
new file mode 100644
index 0000000..d49a1a8
--- /dev/null
+++ b/objects/obj_player_sidescroller/Create_0.gml
@@ -0,0 +1,29 @@
+/// @description
+//player
+hinput = 0;
+
+hspd = 0;
+vspd = 0;
+acc = 0.4;
+top_spd = 6;
+
+grounded = false;
+jump_count = 0;
+jump_max = 2;
+
+
+scale_x = 1;
+scale_y = 1;
+
+lookahead = false;
+
+
+left = function(){
+ return keyboard_check_direct(vk_left);
+};
+right = function(){
+ return keyboard_check_direct(vk_right);
+};
+jump = function(){
+ return keyboard_check_pressed(vk_up);
+};
\ No newline at end of file
diff --git a/objects/obj_player_sidescroller/Draw_0.gml b/objects/obj_player_sidescroller/Draw_0.gml
new file mode 100644
index 0000000..3534d0f
--- /dev/null
+++ b/objects/obj_player_sidescroller/Draw_0.gml
@@ -0,0 +1,2 @@
+/// @description
+draw_sprite_ext(sprite_index,image_index,x,y,image_xscale*scale_x,image_yscale*scale_y,0,-1,1);
\ No newline at end of file
diff --git a/objects/obj_player_sidescroller/Step_0.gml b/objects/obj_player_sidescroller/Step_0.gml
new file mode 100644
index 0000000..3434b7f
--- /dev/null
+++ b/objects/obj_player_sidescroller/Step_0.gml
@@ -0,0 +1,57 @@
+/// @description
+hinput = right() - left();
+
+//horizontal movement
+if(hinput != 0){
+ image_xscale = sign(hinput);
+ hspd+=acc*hinput;
+ hspd = clamp(hspd,-top_spd,top_spd);
+} else if(hspd != 0){
+ hspd-= acc*sign(hspd);
+ if(abs(hspd) < acc) hspd = 0;
+}
+
+//vertical movement
+if(jump() && jump_count < jump_max){
+ vspd=-8;
+ scale_x = 0.4;
+ scale_y = 1.6;
+ jump_count++;
+}
+vspd+=acc
+vspd = clamp(vspd,-20,20);
+
+//collissions
+//horizontal
+if(place_meeting(x + hspd, y, obj_collision)){
+ var hspd_ = hspd;
+ while( abs(hspd_) > 0.1){
+ hspd_ *=0.5;
+ if (!place_meeting(x+hspd_,y,obj_collision)) x+=hspd_;
+ }
+ hspd = 0;
+}
+x+= hspd;
+
+//vertical
+if(place_meeting(x, y+vspd, obj_collision)){
+ var vspd_ = vspd;
+ if(vspd > 0 && !grounded){
+ grounded = true;
+ jump_count = 0;
+ scale_x = 1.6;
+ scale_y = 0.4;
+
+ }
+ while( abs(vspd_) > 0.1){
+ vspd_ *=0.5;
+ if (!place_meeting(x,y+vspd_,obj_collision)) y+=vspd_;
+ }
+ if(abs(vspd) < 1) vspd = 0;
+ vspd = 0;
+}
+else grounded = false;
+y+= vspd;
+
+scale_x = lerp(scale_x,1,0.15);
+scale_y = lerp(scale_y,1,0.15);
diff --git a/objects/obj_player_sidescroller/obj_player_sidescroller.yy b/objects/obj_player_sidescroller/obj_player_sidescroller.yy
new file mode 100644
index 0000000..ea885b7
--- /dev/null
+++ b/objects/obj_player_sidescroller/obj_player_sidescroller.yy
@@ -0,0 +1,38 @@
+{
+ "resourceType": "GMObject",
+ "resourceVersion": "1.0",
+ "name": "obj_player_sidescroller",
+ "eventList": [
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,},
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":8,"isDnD":false,},
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,},
+ ],
+ "managed": true,
+ "overriddenProperties": [],
+ "parent": {
+ "name": "sidescroller",
+ "path": "folders/Objects/sidescroller.yy",
+ },
+ "parentObjectId": null,
+ "persistent": false,
+ "physicsAngularDamping": 0.1,
+ "physicsDensity": 0.5,
+ "physicsFriction": 0.2,
+ "physicsGroup": 1,
+ "physicsKinematic": false,
+ "physicsLinearDamping": 0.1,
+ "physicsObject": false,
+ "physicsRestitution": 0.1,
+ "physicsSensor": false,
+ "physicsShape": 1,
+ "physicsShapePoints": [],
+ "physicsStartAwake": true,
+ "properties": [],
+ "solid": false,
+ "spriteId": {
+ "name": "spr_pengu",
+ "path": "sprites/spr_pengu/spr_pengu.yy",
+ },
+ "spriteMaskId": null,
+ "visible": true,
+}
\ No newline at end of file
diff --git a/objects/obj_player_sidescroller2/Create_0.gml b/objects/obj_player_sidescroller2/Create_0.gml
new file mode 100644
index 0000000..3fc65a4
--- /dev/null
+++ b/objects/obj_player_sidescroller2/Create_0.gml
@@ -0,0 +1,14 @@
+/// @description
+// Inherit the parent event
+event_inherited();
+
+left = function(){
+ return keyboard_check_direct(ord("A"));
+};
+right = function(){
+ return keyboard_check_direct(ord("D"));
+};
+jump = function(){
+ return keyboard_check_pressed(ord("W"));
+};
+
diff --git a/objects/obj_player_sidescroller2/obj_player_sidescroller2.yy b/objects/obj_player_sidescroller2/obj_player_sidescroller2.yy
new file mode 100644
index 0000000..81a10c4
--- /dev/null
+++ b/objects/obj_player_sidescroller2/obj_player_sidescroller2.yy
@@ -0,0 +1,39 @@
+{
+ "resourceType": "GMObject",
+ "resourceVersion": "1.0",
+ "name": "obj_player_sidescroller2",
+ "eventList": [
+ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,},
+ ],
+ "managed": true,
+ "overriddenProperties": [],
+ "parent": {
+ "name": "sidescroller",
+ "path": "folders/Objects/sidescroller.yy",
+ },
+ "parentObjectId": {
+ "name": "obj_player_sidescroller",
+ "path": "objects/obj_player_sidescroller/obj_player_sidescroller.yy",
+ },
+ "persistent": false,
+ "physicsAngularDamping": 0.1,
+ "physicsDensity": 0.5,
+ "physicsFriction": 0.2,
+ "physicsGroup": 1,
+ "physicsKinematic": false,
+ "physicsLinearDamping": 0.1,
+ "physicsObject": false,
+ "physicsRestitution": 0.1,
+ "physicsSensor": false,
+ "physicsShape": 1,
+ "physicsShapePoints": [],
+ "physicsStartAwake": true,
+ "properties": [],
+ "solid": false,
+ "spriteId": {
+ "name": "spr_pengu2",
+ "path": "sprites/spr_pengu2/spr_pengu2.yy",
+ },
+ "spriteMaskId": null,
+ "visible": true,
+}
\ No newline at end of file
diff --git a/objects/obj_tv/obj_tv.yy b/objects/obj_tv/obj_tv.yy
index 17dc750..3dd8b15 100644
--- a/objects/obj_tv/obj_tv.yy
+++ b/objects/obj_tv/obj_tv.yy
@@ -9,8 +9,8 @@
"managed": true,
"overriddenProperties": [],
"parent": {
- "name": "Objects",
- "path": "folders/Objects.yy",
+ "name": "topdown",
+ "path": "folders/Objects/topdown.yy",
},
"parentObjectId": null,
"persistent": false,
diff --git a/options/windows/options_windows.yy b/options/windows/options_windows.yy
index 0321be2..ecdaf52 100644
--- a/options/windows/options_windows.yy
+++ b/options/windows/options_windows.yy
@@ -10,7 +10,7 @@
"option_windows_description_info": "A GameMaker Game",
"option_windows_disable_sandbox": false,
"option_windows_display_cursor": true,
- "option_windows_display_name": "Created with GameMaker",
+ "option_windows_display_name": "STANNcam example project",
"option_windows_enable_steam": false,
"option_windows_executable_name": "${project_name}.exe",
"option_windows_icon": "${base_options_dir}/windows/icons/icon.ico",
@@ -20,7 +20,7 @@
"option_windows_license": "${base_options_dir}/windows/installer/license.txt",
"option_windows_nsis_file": "${base_options_dir}/windows/installer/nsis_script.nsi",
"option_windows_product_info": "Created with GameMaker",
- "option_windows_resize_window": false,
+ "option_windows_resize_window": true,
"option_windows_save_location": 0,
"option_windows_scale": 0,
"option_windows_sleep_margin": 10,
diff --git a/readme.md b/readme.md
index c04cfbd..6a9cfa3 100644
--- a/readme.md
+++ b/readme.md
@@ -3,21 +3,24 @@
-STANNcam 2.1.1
+STANNcam 2.2.0🎥
-STANNcam is a pixel-perfect camera and resolution manager system for GameMaker-LTS (and onwards)
+STANNcam is a pixel-perfect camera and resolution manager system for GameMaker (and onwards)
It foregoes gamemakers viewports and application_surface,
and instead gives full control on where and in which order to draw your different camera's contents to the screen.
https://user-images.githubusercontent.com/46312671/224503356-25316aab-1c77-422b-b994-b0013da303d0.mp4
+https://github.com/jack27121/STANNcam/assets/46312671/d8bde347-346c-48de-88a5-86bfb75c3ecb.mp4
+
# Features
* Ability to add/clone/remove up to 8 cameras at runtime easily
* Camera following options
-* Functions for moving/zooming/shaking the camera
+* Functions for moving/zooming/shaking/resizing the camera
* Independent game and GUI resolution (can be identical as well)
-* Change display resolution, fullscreen, keep aspect-ratio. at runtime
+* Change display resolution, keep aspect-ratio. at runtime
+* Switch between windowed / borderless windowed / fullscreen
* Ability to draw camera contents directly on an object in a level (can be used for TV/Monitor/portal effects)
* Easily apply shaders to everything drawn
* Draw stuff before and after the camera is drawn (useful for dynamic backgrounds/foregrounds)
diff --git a/rooms/rm_init/rm_init.yy b/rooms/rm_init/rm_init.yy
new file mode 100644
index 0000000..f6bf576
--- /dev/null
+++ b/rooms/rm_init/rm_init.yy
@@ -0,0 +1,55 @@
+{
+ "resourceType": "GMRoom",
+ "resourceVersion": "1.0",
+ "name": "rm_init",
+ "creationCodeFile": "",
+ "inheritCode": false,
+ "inheritCreationOrder": false,
+ "inheritLayers": false,
+ "instanceCreationOrder": [
+ {"name":"inst_775365B7","path":"rooms/rm_init/rm_init.yy",},
+ ],
+ "isDnd": false,
+ "layers": [
+ {"resourceType":"GMRInstanceLayer","resourceVersion":"1.0","name":"Instances","depth":0,"effectEnabled":true,"effectType":null,"gridX":16,"gridY":16,"hierarchyFrozen":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"instances":[
+ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_775365B7","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_game_controller","path":"objects/obj_game_controller/obj_game_controller.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":16.0,"y":16.0,},
+ ],"layers":[],"properties":[],"userdefinedDepth":false,"visible":true,},
+ {"resourceType":"GMRBackgroundLayer","resourceVersion":"1.0","name":"Background","animationFPS":15.0,"animationSpeedType":0,"colour":4033242726,"depth":100,"effectEnabled":true,"effectType":null,"gridX":16,"gridY":16,"hierarchyFrozen":false,"hspeed":0.0,"htiled":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"layers":[],"properties":[],"spriteId":null,"stretch":false,"userdefinedAnimFPS":false,"userdefinedDepth":false,"visible":true,"vspeed":0.0,"vtiled":false,"x":0,"y":0,},
+ ],
+ "parent": {
+ "name": "Rooms",
+ "path": "folders/Rooms.yy",
+ },
+ "parentRoom": null,
+ "physicsSettings": {
+ "inheritPhysicsSettings": false,
+ "PhysicsWorld": false,
+ "PhysicsWorldGravityX": 0.0,
+ "PhysicsWorldGravityY": 10.0,
+ "PhysicsWorldPixToMetres": 0.1,
+ },
+ "roomSettings": {
+ "Height": 80,
+ "inheritRoomSettings": false,
+ "persistent": false,
+ "Width": 80,
+ },
+ "sequenceId": null,
+ "views": [
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ ],
+ "viewSettings": {
+ "clearDisplayBuffer": true,
+ "clearViewBackground": false,
+ "enableViews": false,
+ "inheritViewSettings": false,
+ },
+ "volume": 1.0,
+}
\ No newline at end of file
diff --git a/rooms/rm_sidescroller/rm_sidescroller.yy b/rooms/rm_sidescroller/rm_sidescroller.yy
new file mode 100644
index 0000000..1986f63
--- /dev/null
+++ b/rooms/rm_sidescroller/rm_sidescroller.yy
@@ -0,0 +1,90 @@
+{
+ "resourceType": "GMRoom",
+ "resourceVersion": "1.0",
+ "name": "rm_sidescroller",
+ "creationCodeFile": "",
+ "inheritCode": false,
+ "inheritCreationOrder": false,
+ "inheritLayers": false,
+ "instanceCreationOrder": [
+ {"name":"inst_25469891","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},
+ {"name":"inst_38912525","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},
+ {"name":"inst_43F6B6EE","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},
+ {"name":"inst_28A7422B","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},
+ {"name":"inst_6F3597CA","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},
+ {"name":"inst_1D3444A7","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},
+ {"name":"inst_330D94B4","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},
+ {"name":"inst_52A3B4D0","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},
+ {"name":"inst_3DFDFCE0","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},
+ {"name":"inst_4538CAB8","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},
+ {"name":"inst_7AF44202","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},
+ {"name":"inst_3F03D43","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},
+ {"name":"inst_3C1837A1","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},
+ ],
+ "isDnd": false,
+ "layers": [
+ {"resourceType":"GMRInstanceLayer","resourceVersion":"1.0","name":"collisions","depth":0,"effectEnabled":true,"effectType":null,"gridX":16,"gridY":16,"hierarchyFrozen":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"instances":[
+ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_25469891","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_collision","path":"objects/obj_collision/obj_collision.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":9.0,"x":0.0,"y":0.0,},
+ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_38912525","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_collision","path":"objects/obj_collision/obj_collision.yy",},"properties":[],"rotation":0.0,"scaleX":3.0,"scaleY":1.0,"x":0.0,"y":288.0,},
+ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_43F6B6EE","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_collision","path":"objects/obj_collision/obj_collision.yy",},"properties":[],"rotation":0.0,"scaleX":5.0,"scaleY":2.0,"x":0.0,"y":320.0,},
+ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_28A7422B","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_collision","path":"objects/obj_collision/obj_collision.yy",},"properties":[],"rotation":0.0,"scaleX":27.0,"scaleY":3.0,"x":0.0,"y":384.0,},
+ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_6F3597CA","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_collision","path":"objects/obj_collision/obj_collision.yy",},"properties":[],"rotation":0.0,"scaleX":3.0,"scaleY":0.84375,"x":736.0,"y":256.0,},
+ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_1D3444A7","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_collision","path":"objects/obj_collision/obj_collision.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":12.0,"x":832.0,"y":0.0,},
+ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_330D94B4","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_collision","path":"objects/obj_collision/obj_collision.yy",},"properties":[],"rotation":0.0,"scaleX":6.0,"scaleY":0.78125,"x":448.0,"y":320.0,},
+ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_52A3B4D0","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_collision","path":"objects/obj_collision/obj_collision.yy",},"properties":[],"rotation":0.0,"scaleX":4.0,"scaleY":0.8125,"x":256.0,"y":192.0,},
+ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_3DFDFCE0","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_collision","path":"objects/obj_collision/obj_collision.yy",},"properties":[],"rotation":0.0,"scaleX":5.0,"scaleY":0.8125,"x":480.0,"y":96.0,},
+ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_4538CAB8","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_collision","path":"objects/obj_collision/obj_collision.yy",},"properties":[],"rotation":0.0,"scaleX":27.0,"scaleY":1.0,"x":0.0,"y":-32.0,},
+ ],"layers":[],"properties":[],"userdefinedDepth":false,"visible":true,},
+ {"resourceType":"GMRInstanceLayer","resourceVersion":"1.0","name":"Instances","depth":100,"effectEnabled":true,"effectType":null,"gridX":16,"gridY":16,"hierarchyFrozen":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"instances":[
+ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_7AF44202","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_camera_sidescroller","path":"objects/obj_camera_sidescroller/obj_camera_sidescroller.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":48.0,"y":16.0,},
+ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_3F03D43","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_player_sidescroller","path":"objects/obj_player_sidescroller/obj_player_sidescroller.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":80.0,"y":288.0,},
+ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_3C1837A1","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_player_sidescroller2","path":"objects/obj_player_sidescroller2/obj_player_sidescroller2.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":496.0,"y":304.0,},
+ ],"layers":[],"properties":[],"userdefinedDepth":false,"visible":true,},
+ {"resourceType":"GMRTileLayer","resourceVersion":"1.1","name":"Tiles_1","depth":200,"effectEnabled":true,"effectType":null,"gridX":16,"gridY":16,"hierarchyFrozen":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"layers":[],"properties":[],"tiles":{"SerialiseHeight":15,"SerialiseWidth":27,"TileCompressedData":[
+1,25,-13,0,-12,-2147483648,2,17,25,-13,0,-12,-2147483648,2,17,25,-13,0,-12,-2147483648,2,17,25,-10,0,-3,1879048192,
+6,-2147483648,44,34,34,24,46,-6,-2147483648,2,17,25,-12,0,1,1879048192,-4,-2147483648,1,33,-7,-2147483648,2,17,25,-10,0,
+-3,1879048192,-4,-2147483648,1,45,-7,-2147483648,2,17,25,-7,0,6,44,24,34,46,1879048192,1879048192,-12,-2147483648,2,17,25,-8,0,
+1,33,-6,0,-10,-2147483648,2,17,25,-8,0,2,45,0,-3,1879048192,1,0,-6,-2147483648,-2,0,7,44,24,34,10,
+3,21,37,-13,0,-8,-2147483648,8,33,-2147483648,17,1,1,3,21,37,-9,0,1,36,-4,34,1,38,-4,-2147483648,3,
+33,-2147483648,17,-4,1,1,25,-6,0,-3,-2147483648,1,33,-4,-2147483648,1,33,-4,-2147483648,3,33,-2147483648,17,-4,1,1,3,
+-9,21,1,4,-4,21,10,4,21,21,22,34,32,34,10,1,5,-4,29,1,13,-7,29,1,13,-4,29,
+4,9,1,1,25,-3,0,3,17,1,25,-4,0,1,33,-7,0,1,33,-4,0,4,17,1,1,25,-3,
+0,1,17,],"TileDataFormat":1,},"tilesetId":{"name":"ts_pixel_side_Underwater","path":"tilesets/ts_pixel_side_Underwater/ts_pixel_side_Underwater.yy",},"userdefinedDepth":false,"visible":true,"x":0,"y":0,},
+ ],
+ "parent": {
+ "name": "Rooms",
+ "path": "folders/Rooms.yy",
+ },
+ "parentRoom": null,
+ "physicsSettings": {
+ "inheritPhysicsSettings": false,
+ "PhysicsWorld": false,
+ "PhysicsWorldGravityX": 0.0,
+ "PhysicsWorldGravityY": 10.0,
+ "PhysicsWorldPixToMetres": 0.1,
+ },
+ "roomSettings": {
+ "Height": 480,
+ "inheritRoomSettings": false,
+ "persistent": false,
+ "Width": 864,
+ },
+ "sequenceId": null,
+ "views": [
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ {"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
+ ],
+ "viewSettings": {
+ "clearDisplayBuffer": true,
+ "clearViewBackground": false,
+ "enableViews": false,
+ "inheritViewSettings": false,
+ },
+ "volume": 1.0,
+}
\ No newline at end of file
diff --git a/rooms/rm_test/rm_test.yy b/rooms/rm_test/rm_test.yy
index b03c8e1..8f8d78f 100644
--- a/rooms/rm_test/rm_test.yy
+++ b/rooms/rm_test/rm_test.yy
@@ -7,7 +7,7 @@
"inheritCreationOrder": false,
"inheritLayers": false,
"instanceCreationOrder": [
- {"name":"inst_6B735959","path":"rooms/rm_test/rm_test.yy",},
+ {"name":"inst_28868B2A","path":"rooms/rm_test/rm_test.yy",},
{"name":"inst_4BF294D5","path":"rooms/rm_test/rm_test.yy",},
{"name":"inst_BEB4411","path":"rooms/rm_test/rm_test.yy",},
{"name":"inst_606FE50A","path":"rooms/rm_test/rm_test.yy",},
@@ -20,7 +20,7 @@
{"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_BEB4411","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_player","path":"objects/obj_player/obj_player.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":160.0,"y":160.0,},
{"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_606FE50A","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_player2","path":"objects/obj_player2/obj_player2.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":272.0,"y":144.0,},
{"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_15296A95","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_tv","path":"objects/obj_tv/obj_tv.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":304.0,"y":48.0,},
- {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_6B735959","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_camera","path":"objects/obj_camera/obj_camera.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":208.0,"y":112.0,},
+ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_28868B2A","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_camera","path":"objects/obj_camera/obj_camera.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":16.0,"y":16.0,},
],"layers":[],"properties":[],"userdefinedDepth":false,"visible":true,},
{"resourceType":"GMRTileLayer","resourceVersion":"1.1","name":"Tiles_1","depth":100,"effectEnabled":true,"effectType":null,"gridX":16,"gridY":16,"hierarchyFrozen":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"layers":[],"properties":[],"tiles":{"SerialiseHeight":8,"SerialiseWidth":14,"TileCompressedData":[
-112,1,],"TileDataFormat":1,},"tilesetId":{"name":"TileSet1","path":"tilesets/TileSet1/TileSet1.yy",},"userdefinedDepth":false,"visible":true,"x":0,"y":0,},
@@ -46,7 +46,7 @@
},
"sequenceId": null,
"views": [
- {"hborder":32,"hport":10,"hspeed":-1,"hview":10,"inherit":false,"objectId":null,"vborder":32,"visible":true,"vspeed":-1,"wport":10,"wview":10,"xport":0,"xview":0,"yport":0,"yview":0,},
+ {"hborder":32,"hport":10,"hspeed":-1,"hview":10,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":10,"wview":10,"xport":0,"xview":0,"yport":0,"yview":0,},
{"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
{"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
{"hborder":32,"hport":240,"hspeed":-1,"hview":240,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":420,"wview":420,"xport":0,"xview":0,"yport":0,"yview":0,},
@@ -57,8 +57,8 @@
],
"viewSettings": {
"clearDisplayBuffer": true,
- "clearViewBackground": true,
- "enableViews": true,
+ "clearViewBackground": false,
+ "enableViews": false,
"inheritViewSettings": false,
},
"volume": 1.0,
diff --git a/scripts/draw_sprite_ext_tiled/draw_sprite_ext_tiled.gml b/scripts/draw_sprite_ext_tiled/draw_sprite_ext_tiled.gml
new file mode 100644
index 0000000..b5da504
--- /dev/null
+++ b/scripts/draw_sprite_ext_tiled/draw_sprite_ext_tiled.gml
@@ -0,0 +1,15 @@
+///@description does draw_sprite_ext tiled x times on the horizontal and vertical axis
+///@function draw_sprite_ext_tiled(sprite_,subimg_,x_,y_,tile_h=1,tile_v=1,xscale_=1,yscale_=1,col_=-1,alpha_=1)
+function draw_sprite_ext_tiled(sprite_,subimg_,x_,y_,tile_h=1,tile_v=1,xscale_=1,yscale_=1,col_=-1,alpha_=1){
+
+ //horizontal
+ for (var h = 0; h < tile_h; ++h) {
+ // vertical
+ for (var v = 0; v < tile_v; ++v) {
+ var x_offset = sprite_get_width(sprite_)*xscale_;
+ var y_offset = sprite_get_height(sprite_)*yscale_;
+ draw_sprite_ext(sprite_,subimg_,x_+(x_offset*h),y_+(y_offset*v),xscale_,yscale_,0,col_,alpha_);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/scripts/draw_sprite_ext_tiled/draw_sprite_ext_tiled.yy b/scripts/draw_sprite_ext_tiled/draw_sprite_ext_tiled.yy
new file mode 100644
index 0000000..dd4fb6b
--- /dev/null
+++ b/scripts/draw_sprite_ext_tiled/draw_sprite_ext_tiled.yy
@@ -0,0 +1,11 @@
+{
+ "resourceType": "GMScript",
+ "resourceVersion": "1.0",
+ "name": "draw_sprite_ext_tiled",
+ "isCompatibility": false,
+ "isDnD": false,
+ "parent": {
+ "name": "Scripts",
+ "path": "folders/Scripts.yy",
+ },
+}
\ No newline at end of file
diff --git a/scripts/stanncam/stanncam.gml b/scripts/stanncam/stanncam.gml
index bb5a639..552ae4f 100644
--- a/scripts/stanncam/stanncam.gml
+++ b/scripts/stanncam/stanncam.gml
@@ -22,7 +22,7 @@ function stanncam(x_ = 0,y_ = 0,width_ = global.game_w,height_ = global.game_h,
__obj_stanncam_manager.number_of_cams++;
array_set(global.stanncams,cam_id,self);
- #endregion
+#endregion
#region variables
x = x_;
@@ -31,37 +31,50 @@ function stanncam(x_ = 0,y_ = 0,width_ = global.game_w,height_ = global.game_h,
width = width_;
height = height_;
+ //offset the camera from whatever it's looking at
+ offset_x = 0;
+ offset_y = 0;
+
+ follow = -1;
+
+ //The extra surface is only neccesary if you are drawing the camera recursively in the room
+ //Like a tv screen, where it can capture itself
surface_extra_on = surface_extra_on_;
- spd = 10; //how fast the camera follows an object
+ spd = 10; //how fast the camera follows an instance
spd_threshold = 50; //the minimum distance the camera is away, for the speed to be in full effect
+
room_constrain = false; //if camera should be constrained to the room size
- //the camera bounding box, for the followed object to leave before the camera starts moving
+ //the camera bounding box, for the followed instance to leave before the camera starts moving
bounds_w = 20;
bounds_h = 20;
+ bounds_dist_w = 0;
+ bounds_dist_h = 0;
//wether to use the fractional camera position when drawing the camera contents. Else it will be snapped to nearest integer
smooth_draw = smooth_draw_;
smooth_zoom = smooth_zoom_;
- __x_frac = 0;
- __y_frac = 0;
+ x_frac = 0;
+ y_frac = 0;
//which animation curve to use for moving/zooming the camera
anim_curve = stanncam_ac_ease;
anim_curve_zoom = stanncam_ac_ease;
+ anim_curve_size = stanncam_ac_ease;
+ anim_curve_offset = stanncam_ac_ease;
surface = -1;
-
surface_extra = -1;
- follow = -1;
+ debug_draw = false;
__destroyed = false;
#region animation variables
//moving
+ __moving = false;
__xStart = x;
__yStart = y;
__xTo = x;
@@ -69,11 +82,30 @@ function stanncam(x_ = 0,y_ = 0,width_ = global.game_w,height_ = global.game_h,
__duration = 0;
__t = 0;
+ //width & height
+ __size_change = false;
+ __wStart = width;
+ __hStart = height;
+ __wTo = width;
+ __hTo = height;
+ __dimen_duration = 0;
+ __dimen_t = 0;
+
+ //offset
+ __offset = false;
+ __offset_xStart = 0;
+ __offset_yStart = 0;
+ __offset_xTo = 0;
+ __offset_yTo = 0;
+ __offset_duration = 0;
+ __offset_t = 0;
+
//zoom
zoom_amount = 1;
- __zoom_x = 0;
- __zoom_y = 0;
+
__zooming = false;
+ zoom_x = 0;
+ zoom_y = 0;
__t_zoom = 0;
__zoomStart = 0;
__zoomTo = 0;
@@ -86,40 +118,42 @@ function stanncam(x_ = 0,y_ = 0,width_ = global.game_w,height_ = global.game_h,
__shake_x = 0;
__shake_y = 0;
- __moving = false;
-
__check_surface();
__check_viewports();
- __update_resolution();
+ set_size(width,height);
#endregion
#endregion
#region Step
+
+ /// @function __step
/// @description gets called every step
/// @ignore
static __step = function(){
+ #region moving
if (instance_exists(follow)){
//update destination
__xTo = follow.x;
__yTo = follow.y;
- var dist_w = max(bounds_w,abs(__xTo - x)) - bounds_w;
- var dist_h = max(bounds_h,abs(__yTo - y)) - bounds_h;
+ var x_dist = (__xTo - x);
+ var y_dist = (__yTo - y);
+
+ 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);
//update camera position
if (abs(__xTo - x) > bounds_w){
- var _spd = (dist_w/spd_threshold)*spd;
- if (x < __xTo) x+=_spd;
- else if (x > __xTo) x-=_spd;
+ var _spd = (bounds_dist_w/spd_threshold)*spd;
+ x+=_spd;
}
if (abs(y - __yTo) > bounds_h){
- var _spd = (dist_h/spd_threshold)*spd;
- if (y < __yTo) y+=_spd;
- else if (y > __yTo) y-=_spd;
+ var _spd = (bounds_dist_h/spd_threshold)*spd;
+ y+=_spd;
}
} else if(__moving){
@@ -130,6 +164,18 @@ function stanncam(x_ = 0,y_ = 0,width_ = global.game_w,height_ = global.game_h,
__t++;
if(x == __xTo && y == __yTo) __moving = false;
}
+ #endregion
+
+ #region offset
+ if(__offset){
+ //gradually offsets camera based on duration
+ offset_x = stanncam_animcurve(__offset_t,__offset_xStart,__offset_xTo,__offset_duration,anim_curve_offset);
+ offset_y = stanncam_animcurve(__offset_t,__offset_yStart,__offset_yTo,__offset_duration,anim_curve_offset);
+
+ __offset_t++;
+ if(x == __offset_xTo && y == __offset_yTo) __offset = false;
+ }
+ #endregion
#region screen-shake
var stanncam_shake_x = stanncam_shake(__shake_time,__shake_magnitude,__shake_length);
@@ -139,93 +185,226 @@ function stanncam(x_ = 0,y_ = 0,width_ = global.game_w,height_ = global.game_h,
__shake_time++;
#endregion
- #region constrains camera to room bounds
- if(room_constrain){
- x = clamp(x,(width/2),room_width -(width/2));
- y = clamp(y,(height/2),room_height-(height/2));
- }
- #endregion
-
- #region zooming
- if(__zooming){
- //gradually zooms camera
- zoom_amount = stanncam_animcurve(__t_zoom,__zoomStart,__zoomTo,__zoom_duration,anim_curve_zoom);
- __t_zoom++;
-
- // if smooth zoom is off maintains pixel perfection even when zooming in and out
- // if on it is handled by the draw events
- if(smooth_zoom){
- //When zooming in, the surface will be shrinked when the zooming is done
- //When zooming out, the surface will be enlarged immedietly
- if(__zoomTo >= zoom_amount){
- var ceiled_zoom = ceil(__zoomTo); //ensures the new surface size is a whole number
- surface_resize(surface,width*ceiled_zoom,height*ceiled_zoom);
- camera_set_view_size(view_camera[cam_id],width*ceiled_zoom,height*ceiled_zoom);
-
- __update_resolution();
- }
+ #region update camera dimensions
+ if(__zooming || __size_change){
+ if(__size_change){
+ //gradually resizes camera
+ width = stanncam_animcurve(__dimen_t,__wStart,__wTo,__dimen_duration,anim_curve_size);
+ height = stanncam_animcurve(__dimen_t,__hStart,__hTo,__dimen_duration,anim_curve_size);
+
+ __dimen_t++;
+
+ if(width == __wTo && height == __hTo) __size_change = false;
}
- else camera_set_view_size(view_camera[cam_id],width*zoom_amount,height*zoom_amount);
-
- __zoom_x = ((width *zoom_amount) - width)/2;
- __zoom_y = ((height*zoom_amount) - height)/2;
- if(zoom_amount == __zoomTo) __zooming = false;
+ if(__zooming){
+ //gradually zooms camera
+ zoom_amount = stanncam_animcurve(__t_zoom,__zoomStart,__zoomTo,__zoom_duration,anim_curve_zoom);
+ __t_zoom++;
+
+ if(zoom_amount == __zoomTo) __zooming = false;
+ }
+ zoom_x = ((width *zoom_amount) - width)/2;
+ zoom_y = ((height*zoom_amount) - height)/2;
+ }
+
+ //if smooth zoom is off maintains pixel perfection even when zooming in and out
+ //if on it is handled by the draw events
+ if(smooth_zoom){
+ 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;
+ } else {
+ var new_width = width *zoom_amount;
+ var new_height = height*zoom_amount;
+ }
+
+ //only runs if the size has changed
+ if(surface_get_width(surface) != new_width || surface_get_height(surface) != new_height){
+ __check_surface();
+ surface_resize(surface, new_width,new_height);
+ camera_set_view_size(view_camera[cam_id],new_width,new_height);
}
#endregion
+ #region update camera position
//update camera view
- var new_x = x - (width / 2) - __zoom_x + __shake_x;
- var new_y = y - (height / 2) - __zoom_y + __shake_y;
+ var new_x = x + offset_x - (width / 2) + __shake_x;
+ var new_y = y + offset_y - (height / 2) + __shake_y;
+
+ //Constrains camera to room
+ if(room_constrain){
+ constrain_offset_x = (clamp(new_x,0,room_width -width) - new_x) * clamp(zoom_amount,0,1);
+ constrain_offset_y = (clamp(new_y,0,room_height-height) - new_y) * clamp(zoom_amount,0,1);
+
+ new_x += constrain_offset_x;
+ new_y += constrain_offset_y;
+ } else {
+ constrain_offset_x = 0;
+ constrain_offset_y = 0;
+ }
+
+ //apply zoom offset
+ new_x -= zoom_x;
+ new_y -= zoom_y;
//seperates position into whole and fractional parts
if(smooth_draw == true){
- __x_frac = frac(new_x);
- __y_frac = frac(new_y);
+ x_frac = frac(new_x);
+ y_frac = frac(new_y);
} else {
- __x_frac = 0;
- __y_frac = 0;
+ x_frac = 0;
+ y_frac = 0;
}
new_x = floor(abs(new_x)) * sign(new_x);
new_y = floor(abs(new_y)) * sign(new_y);
camera_set_view_pos(view_camera[cam_id], new_x, new_y);
+ #endregion
}
#endregion
#region Drawing functions
+
+ /// @function __debug_draw
+ /// @description draws debug information
+ /// @ignore
+ static __debug_draw = function(){
+ if(debug_draw){
+ //draws camera bounding box
+ if(follow != -1){
+ surface_set_target(surface);
+
+ var pre_color = draw_get_color();
+
+ var x1 = (width /2) - bounds_w - offset_x - constrain_offset_x + zoom_x;
+ var x2 = (width /2) + bounds_w - offset_x - constrain_offset_x + zoom_x;
+ var y1 = (height/2) - bounds_h - offset_y - constrain_offset_y + zoom_y;
+ var y2 = (height/2) + bounds_h - offset_y - constrain_offset_y + zoom_y;
+ draw_set_color(c_white);
+ draw_rectangle(x1,y1,x2,y2,true);
+
+
+ draw_set_color(c_red);
+
+ //top
+ if(bounds_dist_h != 0){
+ if(bounds_dist_h < 0) {
+ draw_line(x1,y1,x2,y1);
+ //bottom
+ } else {
+ draw_line(x1,y2,x2,y2);
+ }
+ }
+
+ //left
+ if(bounds_dist_w != 0){
+ if(bounds_dist_w < 0) {
+ draw_line(x1,y1,x1,y2);
+ //right
+ } else {
+ draw_line(x2,y1,x2,y2);
+ }
+ }
+
+ draw_set_color(pre_color);
+ surface_reset_target();
+ }
+ }
+ }
+ /// @function draw
+ /// @description draws stanncam
/// @param {Real} x_
/// @param {Real} y_
/// @param {Real} [scale_x_=1]
/// @param {Real} [scale_y_=1]
+ /// @ignore
static draw = function(x_,y_,scale_x_ = 1, scale_y_ = 1){
__check_surface();
- //offsets position to match with display resoultion
- x_ *= (__obj_stanncam_manager.display_res_w / global.game_w);
- y_ *= (__obj_stanncam_manager.display_res_h / global.game_h);
+ __debug_draw();
+ draw_surf(surface,x_,y_,scale_x_,scale_y_,0,0,width*zoom_amount,height*zoom_amount);
+ }
+
+ /// @function draw_part
+ /// @description draws part of stanncam
+ /// @param {Real} x_
+ /// @param {Real} y_
+ /// @param {Real} [scale_x_=1]
+ /// @param {Real} [scale_y_=1]
+ /// @ignore
+ static draw_part = function(x_,y_,scale_x_ = 1, scale_y_ = 1,left_,top_,width_,height_){
+ __check_surface();
+ __debug_draw();
+ draw_surf(surface,x_,y_,scale_x_,scale_y_,left_,top_,width_,height_);
+ }
+
+ /// @function draw_special
+ /// @description pass in draw commands, and have them be scaled to match the stanncam
+ /// @param {function} draw_func
+ /// @param {Real} x_
+ /// @param {Real} y_
+ /// @param {Real} [width of special surface]
+ /// @param {Real} [height of special surface]
+ /// @param {Real} [scale_x_=1]
+ /// @param {Real} [scale_y_=1]
+ /// @ignore
+ static draw_special = function(draw_func,x_,y_,surf_width_=width,surf_height_=height,scale_x_ = 1, scale_y_ = 1){
+
+ var surface_special = surface_create(surf_width_,surf_height_);
+ surface_set_target(surface_special);
+ draw_clear_alpha(c_black,0);
+ draw_func();
- x_ += stanncam_fullscreen_ratio_compensate();
+ surface_reset_target();
+ var part_width_ = min(surface_get_width(surface_special),width*zoom_amount/scale_x_);
+ var part_height_ = min(surface_get_height(surface_special),height*zoom_amount/scale_y_);
+ draw_surf(surface_special,x_,y_,scale_x_,scale_y_,0,0,part_width_,part_height_);
+ surface_free(surface_special);
+ }
+
+ /// @function draw_surf
+ /// @description draws the supplied surface with the proper size and scaling
+ /// @param {surface} surface_
+ /// @param {Real} x_
+ /// @param {Real} y_
+ /// @param {Real} [scale_x_=1]
+ /// @param {Real} [scale_y_=1]
+ /// @param {Real} [left_=0]
+ /// @param {Real} [top_=0]
+ /// @param {Real} [width_=surface width]
+ /// @param {Real} [height_=surface height]
+ /// @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_)){
- var w_ = surface_get_width(surface);
- var h_ = surface_get_height(surface);
+ //offsets position to match with display resoultion
+ x_ *= (global.res_w / global.game_w);
+ y_ *= (global.res_h / global.game_h);
+ x_ += stanncam_fullscreen_ratio_compensate_x();
+ y_ += stanncam_fullscreen_ratio_compensate_y();
+
if(smooth_zoom){ //if smooth zoom is on, it scales the entire surface when drawn
scale_x_/= zoom_amount;
scale_y_/= zoom_amount;
}
- draw_surface_part_ext(surface,__x_frac,__y_frac,w_,h_,x_,y_,__display_scale_x*scale_x_,__display_scale_y*scale_y_,-1,1);
+ draw_surface_part_ext(surface_,x_frac+left_,y_frac+top_,width_,height_,x_,y_,__obj_stanncam_manager.__display_scale_x*scale_x_,__obj_stanncam_manager.__display_scale_y*scale_y_,-1,1);
}
#endregion
#region Dynamic functions
+ /// @function clone
/// @description returns a clone of the stanncam
/// @returns {Struct.stanncam}
+ /// @ignore
static clone = function(){
var clone = new stanncam(x,y,width,height);
+ clone.surface_extra_on = surface_extra_on;
+ clone.offset_x = offset_x;
+ clone.offset_y = offset_y;
clone.spd = spd;
clone.spd_threshold = spd_threshold;
clone.room_constrain = room_constrain;
@@ -235,111 +414,159 @@ function stanncam(x_ = 0,y_ = 0,width_ = global.game_w,height_ = global.game_h,
clone.smooth_draw = smooth_draw;
clone.smooth_zoom = smooth_zoom;
clone.anim_curve = anim_curve;
- clone.anim_curve_zoom= anim_curve_zoom;
+ clone.anim_curve_zoom = anim_curve_zoom;
+ clone.anim_curve_offset =anim_curve_offset;
+ clone.anim_curve_size = anim_curve_size;
return clone;
}
- /// @description sets the camera size
- /// @param {Real} _width
- /// @param {Real} _height
- static set_size = function(_width,_height){
- width = _width;
- height = _height;
- surface_resize(surface,width,height);
- __update_resolution();
- camera_set_view_size(view_camera[cam_id],width*zoom_amount,height*zoom_amount);
- }
-
- /// @description makes the camera shake
- /// @param {Real} magnitude
- /// @param {Real} duration - duration in frames
- static shake_screen = function(magnitude, duration) {
- __shake_magnitude =+ magnitude;
- __shake_length =+ duration;
- __shake_time = 0;
- }
-
+ /// @function move
/// @description moves the camera to a position over a duration
/// @param {Real} _x
/// @param {Real} _y
/// @param {Real} [_duration=0]
+ /// @ignore
static move = function(_x, _y, _duration = 0){
+ __moving = true;
+ __t = 0;
+ __xStart = x;
+ __yStart = y;
+
+ __xTo = _x;
+ __yTo = _y;
+ __duration = _duration;
+ }
+
+ /// @function set_size
+ /// @description sets the camera dimensions
+ /// @param {Real} _width
+ /// @param {Real} _height
+ /// @param {Real} _duration
+ /// @ignore
+ static set_size = function(_width,_height, _duration = 0){
if(_duration == 0){
- x = _x;
- y = _y;
-
- var new_x = x - ((width / 2) + __shake_x + __zoom_x);
- var new_y = y - ((height / 2) + __shake_y + __zoom_y);
-
- camera_set_view_pos(view_camera[cam_id], new_x, new_y);
- }else{
- __moving = true;
- __t = 0;
- __xStart = x;
- __yStart = y;
+ width = _width;
+ height = _height;
+ zoom_x = ((width *zoom_amount) - width)/2;
+ zoom_y = ((height*zoom_amount) - height)/2;
+ } else {
+ __size_change = true;
+ __dimen_t = 0;
+ __wStart = width;
+ __hStart = height;
- __xTo = _x;
- __yTo = _y;
- __duration = _duration;
+ __wTo = _width;
+ __hTo = _height;
+ __dimen_duration = _duration;
}
}
+ /// @function offset
+ /// @description offsets the camera over a duration
+ /// @param {Real} _offset_x
+ /// @param {Real} _offset_y
+ /// @param {Real} [_duration=0]
+ /// @ignore
+ static offset = function(_offset_x, _offset_y, _duration = 0){
+ __offset = true;
+ __offset_t = 0;
+ __offset_xStart = offset_x;
+ __offset_yStart = offset_y;
+
+ __offset_xTo = _offset_x;
+ __offset_yTo = _offset_y;
+ __offset_duration = _duration;
+ }
+
+ /// @function zoom
/// @description zooms the camera over a duration
/// @param {Real} _zoom
/// @param {Real} _duration
+ /// @ignore
static zoom = function(_zoom, _duration){
- __zooming = true;
- __t_zoom = 0;
- __zoomStart = zoom_amount;
- __zoomTo = _zoom;
- __zoom_duration = _duration;
+ if(_duration == 0){
+ zoom_amount = _zoom;
+ zoom_x = ((width *zoom_amount) - width)/2;
+ zoom_y = ((height*zoom_amount) - height)/2;
+ } else {
+ __zooming = true;
+ __t_zoom = 0;
+ __zoomStart = zoom_amount;
+ __zoomTo = _zoom;
+ __zoom_duration = _duration;
+ }
+ }
+
+ /// @function shake_screen
+ /// @description makes the camera shake
+ /// @param {Real} magnitude
+ /// @param {Real} duration - duration in frames
+ /// @ignore
+ static shake_screen = function(magnitude, duration) {
+ __shake_magnitude =+ magnitude;
+ __shake_length =+ duration;
+ __shake_time = 0;
}
+ /// @function set_speed
/// @description changes the speed of the camera
/// @param {Real} _spd - how fast the camera can move
/// @param {Real} threshold - minimum distance for the speed to have full effect
+ /// @ignore
static set_speed = function(_spd,threshold){
spd = _spd;
spd_threshold = threshold;
}
+ /// @function get_x
/// @description get camera corner x position. if need the middle of the camera use x
/// @returns {Real}
+ /// @ignore
static get_x = function(){
return camera_get_view_x(view_camera[cam_id]);
}
+ /// @function get_y
/// @description get camera corner y position. if need the middle of the camera use y
/// @returns {Real}
+ /// @ignore
static get_y = function(){
return camera_get_view_y(view_camera[cam_id]);
}
+ /// @function get_mouse_x
/// @description gets the mouse x position within room relative to the camera
/// @returns {Real}
+ /// @ignore
static get_mouse_x = function(){
- return (((display_mouse_get_x() - window_get_x() - stanncam_fullscreen_ratio_compensate()) / (__display_scale_x * width)) * width * zoom_amount) + get_x();
+ return (((display_mouse_get_x() - window_get_x() - stanncam_fullscreen_ratio_compensate_x()) / (__obj_stanncam_manager.__display_scale_x * width)) * width * zoom_amount) + get_x();
}
+ /// @function get_mouse_y
/// @description gets the mouse y position within room relative to the camera
/// @returns {Real}
+ /// @ignore
static get_mouse_y = function(){
- return (((display_mouse_get_y() - window_get_y()) / (__display_scale_y * height)) * height * zoom_amount) + get_y();
+ return (((display_mouse_get_y() - window_get_y() - stanncam_fullscreen_ratio_compensate_y()) / (__obj_stanncam_manager.__display_scale_y * height)) * height * zoom_amount) + get_y();
}
+ /// @function room_to_gui_x
/// @description returns the room x position as the position on the gui relative to camera
/// @param {Real} x_
/// @returns {Real}
+ /// @ignore
static room_to_gui_x = function(x_){
- return (x_-get_x()-__x_frac)*stanncam_get_gui_scale_x()/zoom_amount;
+ return (x_-get_x()-x_frac)*stanncam_get_gui_scale_x()/zoom_amount;
}
+ /// @function room_to_gui_y
/// @description returns the room y position as the position on the gui relative to camera
/// @param {Real} y_
/// @returns {Real}
+ /// @ignore
static room_to_gui_y = function(y_){
- return (y_-get_y()-__y_frac)*stanncam_get_gui_scale_y()/zoom_amount;
+ return (y_-get_y()-y_frac)*stanncam_get_gui_scale_y()/zoom_amount;
}
/// @description returns the room x position as the position on the display relative to camera
@@ -356,11 +583,13 @@ function stanncam(x_ = 0,y_ = 0,width_ = global.game_w,height_ = global.game_h,
// return (y_-get_y())*stanncam_get_res_scale_y()/zoom_amount;
//}
+ /// @function out_of_bounds
/// @description returns if the position is outside camera bounds
/// @param {Real} x_
/// @param {Real} y_
/// @param {Real} [margin=0] the margin for the camera bounds
/// @returns {Bool}
+ /// @ignore
static out_of_bounds = function(x_,y_,margin = 0){
var col = ( //uses bounding box to see if it's within the camera view
@@ -373,6 +602,9 @@ function stanncam(x_ = 0,y_ = 0,width_ = global.game_w,height_ = global.game_h,
return col;
}
+ /// @function destroy
+ /// @description marks the stanncam as destroyed
+ /// @ignore
static destroy = function(){
follow = -1;
array_set(global.stanncams,cam_id,-1);
@@ -381,7 +613,9 @@ function stanncam(x_ = 0,y_ = 0,width_ = global.game_w,height_ = global.game_h,
__destroyed = true;
}
+ /// @function is_destroyed
/// @returns {Bool}
+ /// @ignore
static is_destroyed = function(){
return __destroyed;
}
@@ -389,14 +623,18 @@ function stanncam(x_ = 0,y_ = 0,width_ = global.game_w,height_ = global.game_h,
#region Internal functions
+ /// @function __check_viewports
/// @description enables viewports and sets viewports size
/// @ignore
static __check_viewports = function(){
view_visible[cam_id] = true;
- set_size(width,height);
+ __check_surface();
+ surface_resize(surface, width*zoom_amount,height*zoom_amount);
+ camera_set_view_size(view_camera[cam_id],width*zoom_amount,height*zoom_amount);
}
- /// @descriptionchecks if surface_extra exists and else creates it and attaches it
+ /// @function __check_surface
+ /// @description checks if surface_extra exists and else creates it and attaches it
/// @ignore
static __check_surface = function(){
if (!surface_exists(surface)){
@@ -408,15 +646,7 @@ function stanncam(x_ = 0,y_ = 0,width_ = global.game_w,height_ = global.game_h,
}
}
- /// @description updates cameras drawing resolution
- /// @ignore
- static __update_resolution = function(){
- __display_scale_x = __obj_stanncam_manager.display_res_w / global.game_w;
- __display_scale_y = __obj_stanncam_manager.display_res_h / global.game_h;
-
- view_set_camera(cam_id, view_camera[cam_id]);
- }
-
+ /// @function __predraw
/// @description clears the surface
/// @ignore
static __predraw = function(){
@@ -430,4 +660,4 @@ function stanncam(x_ = 0,y_ = 0,width_ = global.game_w,height_ = global.game_h,
view_set_surface_id(cam_id,surface);
}
#endregion
-}
+}
\ No newline at end of file
diff --git a/scripts/stanncam_manager/stanncam_manager.gml b/scripts/stanncam_manager/stanncam_manager.gml
index eadbf02..1358fa9 100644
--- a/scripts/stanncam_manager/stanncam_manager.gml
+++ b/scripts/stanncam_manager/stanncam_manager.gml
@@ -1,3 +1,9 @@
+enum STANNCAM_WINDOW_MODE{
+ windowed,
+ fullscreen,
+ borderless
+}
+
/// @function stanncam_init
/// @description set game dimensions, display resolution, and gui dimensions, it's the same as game scale by default
/// @param {Real} game_w
@@ -6,7 +12,12 @@
/// @param {Real} [resolution_h=game_h]
/// @param {Real} [gui_w=game_w]
/// @param {Real} [gui_h=game_h]
-function stanncam_init(game_w,game_h,resolution_w=game_w,resolution_h=game_h,gui_w=game_w,gui_h=game_h){
+/// @param {STANNCAM_WINDOW_MODE} [window_mode=windowed]
+function stanncam_init(game_w,game_h,resolution_w=game_w,resolution_h=game_h,gui_w=game_w,gui_h=game_h,window_mode = STANNCAM_WINDOW_MODE.windowed){
+
+ //if one already exists it is destroyed
+ if(instance_exists(__obj_stanncam_manager)) instance_destroy(__obj_stanncam_manager);
+
instance_create_layer(0,0,"instances",__obj_stanncam_manager);
global.stanncams = array_create(8,-1);
global.game_w = game_w;
@@ -15,36 +26,84 @@ function stanncam_init(game_w,game_h,resolution_w=game_w,resolution_h=game_h,gui
global.gui_h = gui_h;
global.res_w = resolution_w;
global.res_h = resolution_h;
+ global.window_mode = window_mode;
for (var i = 0; i < array_length(view_camera); ++i) {
camera_destroy(view_camera[i]);
}
application_surface_draw_enable(false);
- __stanncam_update_resolution();
+
+ __obj_stanncam_manager.display_res_w = resolution_w;
+ __obj_stanncam_manager.display_res_h = resolution_h;
+ stanncam_set_window_mode(window_mode);
+
+ __obj_stanncam_manager.resize_width = window_get_width();
+ __obj_stanncam_manager.resize_height = window_get_height();
}
/// @function stanncam_set_resolution
-/// @description updates the camera resolution
+/// @description updates the camera resolution, has no visible effect when fullscreened
/// @param {Real} resolution_w
/// @param {Real} resolution_h
function stanncam_set_resolution(resolution_w,resolution_h){
- global.res_w = resolution_w;
- global.res_h = resolution_h;
+ __obj_stanncam_manager.display_res_w = resolution_w;
+ __obj_stanncam_manager.display_res_h = resolution_h;
+ window_set_size(resolution_w, resolution_h);
__stanncam_update_resolution();
}
-/// @function stanncam_toggle_fullscreen
-/// @description toggle fullscreen on/off
-function stanncam_toggle_fullscreen(){
- window_set_fullscreen(!window_get_fullscreen());
- __stanncam_update_resolution();
+/// @function stanncam_set_window_mode(window_mode)
+/// @param {STANNCAM_WINDOW_MODE} window_mode
+/// @description set game to be windowed/fullscreen/borderless
+function stanncam_set_window_mode(window_mode){
+ global.window_mode = window_mode;
+ switch (window_mode) {
+ case STANNCAM_WINDOW_MODE.windowed:
+ window_set_fullscreen(false);
+ window_set_showborder(true);
+
+ window_set_size(__obj_stanncam_manager.display_res_w, __obj_stanncam_manager.display_res_h);
+ __stanncam_center(20,20);
+
+ break;
+ case STANNCAM_WINDOW_MODE.fullscreen:
+ window_set_fullscreen(true);
+ window_set_showborder(false);
+ break;
+ case STANNCAM_WINDOW_MODE.borderless:
+ window_set_fullscreen(false);
+ window_set_showborder(false);
+ break;
+ }
+ call_later(10,time_source_units_frames,function(){
+ __stanncam_update_resolution();
+ });
}
-/// @function stanncam_toggle_keep_aspect_ratio
-/// @description toggle display keep_aspect_ratio
-function stanncam_toggle_keep_aspect_ratio(){
- __obj_stanncam_manager.keep_aspect_ratio = !__obj_stanncam_manager.keep_aspect_ratio;
+/// @function stanncam_set_windowed()
+/// @description set windowed
+function stanncam_set_windowed(){
+ stanncam_set_window_mode(STANNCAM_WINDOW_MODE.windowed);
+}
+
+/// @function stanncam_set_fullscreen()
+/// @description set fullscreen
+function stanncam_set_fullscreen(){
+ stanncam_set_window_mode(STANNCAM_WINDOW_MODE.fullscreen);
+}
+
+/// @function stanncam_set_borderless()
+/// @description set borderless
+function stanncam_set_borderless(){
+ stanncam_set_window_mode(STANNCAM_WINDOW_MODE.borderless);
+}
+
+/// @function stanncam_set_keep_aspect_ratio(on_off)
+/// @param {boolean} on_off
+/// @description set display keep_aspect_ratio
+function stanncam_set_keep_aspect_ratio(on_off){
+ __obj_stanncam_manager.keep_aspect_ratio = on_off;
__stanncam_update_resolution();
}
@@ -55,12 +114,21 @@ function stanncam_get_keep_aspect_ratio(){
return __obj_stanncam_manager.keep_aspect_ratio;
}
-/// @function stanncam_fullscreen_ratio_compensate
+/// @function stanncam_fullscreen_ratio_compensate_x
/// @description if fullscreen keep_aspect_ratio is on it offsets the x value so the render is in the middle
/// @returns {Real}
-function stanncam_fullscreen_ratio_compensate(){
- if(stanncam_get_keep_aspect_ratio() && window_get_fullscreen()){
- return (display_get_width() - __obj_stanncam_manager.display_res_w)/2;
+function stanncam_fullscreen_ratio_compensate_x(){
+ if(stanncam_get_keep_aspect_ratio()){
+ return (window_get_width() - (global.game_w*__obj_stanncam_manager.__display_scale_x))/2;
+ } else return 0;
+}
+
+/// @function stanncam_fullscreen_ratio_compensate_y
+/// @description if fullscreen keep_aspect_ratio is on it offsets the y value so the render is in the middle
+/// @returns {Real}
+function stanncam_fullscreen_ratio_compensate_y(){
+ if(stanncam_get_keep_aspect_ratio()){
+ return (window_get_height() - (global.game_h*__obj_stanncam_manager.__display_scale_y))/2;
} else return 0;
}
@@ -92,50 +160,131 @@ function stanncam_get_gui_scale_y(){
/// @description gets how much bigger res is from game
/// @returns {Real}
function stanncam_get_res_scale_x(){
- return __obj_stanncam_manager.display_res_w / global.game_w;
+ return global.res_w / global.game_w;
}
/// @function stanncam_get_res_scale_y
/// @description gets how much bigger res is from game
/// @returns {Real}
function stanncam_get_res_scale_y(){
- return __obj_stanncam_manager.display_res_h / global.game_h;
+ return global.res_h / global.game_h;
}
/// @function __stanncam_update_resolution
/// @description updates the camera resolution
/// @ignore
function __stanncam_update_resolution(){
- if(window_get_fullscreen()) {
- if(__obj_stanncam_manager.keep_aspect_ratio){
- var ratio = global.game_w / global.game_h;
- __obj_stanncam_manager.display_res_w = display_get_height() * ratio;
- __obj_stanncam_manager.display_res_h = display_get_height();
- } else {
- __obj_stanncam_manager.display_res_w = display_get_width();
- __obj_stanncam_manager.display_res_h = display_get_height();
- }
- } else {
- if(__obj_stanncam_manager.keep_aspect_ratio){
- var ratio = global.game_w / global.game_h;
- __obj_stanncam_manager.display_res_w = global.res_h * ratio;
- __obj_stanncam_manager.display_res_h = global.res_h;
+
+ switch (global.window_mode) {
+ //fullscreen
+ case STANNCAM_WINDOW_MODE.fullscreen:
+ if(__obj_stanncam_manager.keep_aspect_ratio){
+ var ratio = global.game_w / global.game_h;
+ global.res_w = display_get_height() * ratio;
+ global.res_h = display_get_height();
+ } else {
+ global.res_w = display_get_width();
+ global.res_h = display_get_height();
+ }
+ window_set_size(display_get_width(), display_get_height());
+ __stanncam_center();
+ break;
+ //borderless windowed
+ case STANNCAM_WINDOW_MODE.borderless:
+ if(__obj_stanncam_manager.keep_aspect_ratio){
+ var ratio = global.game_w / global.game_h;
+ global.res_w = display_get_height() * ratio;
+ global.res_h = display_get_height();
+ } else {
+ global.res_w = display_get_width();
+ global.res_h = display_get_height();
+ }
+
+ window_set_size(display_get_width(), display_get_height());
+ __stanncam_center();
+ break;
+
+ //windowed
+ case STANNCAM_WINDOW_MODE.windowed:
+
+ if(__obj_stanncam_manager.keep_aspect_ratio){
+ var res_ratio = (__obj_stanncam_manager.display_res_w / __obj_stanncam_manager.display_res_h) / (global.game_w / global.game_h);
+ var game_ratio = global.game_w / global.game_h;
+ if(res_ratio > 1){
+ global.res_w = __obj_stanncam_manager.display_res_h * game_ratio;
+ global.res_h = __obj_stanncam_manager.display_res_h;
+ } else {
+ global.res_w = __obj_stanncam_manager.display_res_w;
+ global.res_h = __obj_stanncam_manager.display_res_w * game_ratio;
+ }
+ } else {
+ global.res_w = __obj_stanncam_manager.display_res_w;
+ global.res_h = __obj_stanncam_manager.display_res_h;
+ }
+ break;
+ }
+
+ with(__obj_stanncam_manager){
+ if(stanncam_get_keep_aspect_ratio()){
+ var ratio = (global.res_w / global.res_h) / (global.game_w / global.game_h);
+ if(ratio > 1){
+ __display_scale_x = global.res_h / global.game_h;
+ __display_scale_y = __display_scale_x;
+ var gui_x_scale = global.res_h / global.gui_h;
+ var gui_y_scale = gui_x_scale;
+ } else {
+ __display_scale_x = global.res_w / global.game_w;
+ __display_scale_y = __display_scale_x;
+ var gui_x_scale = global.res_w / global.gui_w;
+ var gui_y_scale = gui_x_scale;
+ }
} else {
- __obj_stanncam_manager.display_res_w = global.res_w;
- __obj_stanncam_manager.display_res_h = global.res_h;
+ __display_scale_x = global.res_w / global.game_w;
+ __display_scale_y = global.res_h / global.game_h;
+ var gui_x_scale = global.res_w / global.gui_w;
+ var gui_y_scale = global.res_h / global.gui_h;
}
-
- window_set_size(__obj_stanncam_manager.display_res_w, __obj_stanncam_manager.display_res_h);
+ display_set_gui_maximize(gui_x_scale,gui_y_scale,stanncam_fullscreen_ratio_compensate_x(),stanncam_fullscreen_ratio_compensate_y());
}
+}
+
+/// @function __stanncam_center
+/// @description moves the window to the center of whichever window it's within
+/// @param {int} x_ offset
+/// @param {int} y_ offset
+/// @ignore
+function __stanncam_center(x_ = 0,y_ = 0){
+ var wx = window_get_x();
+ var wy = window_get_y();
+ var ww = window_get_width();
+ var wh = window_get_height();
+ var display_data = window_get_visible_rects(wx, wy, wx + ww, wy + wh);
+ var display_num = array_length(display_data) / 8;
- var gui_x_scale = __obj_stanncam_manager.display_res_w / global.gui_w;
- var gui_y_scale = __obj_stanncam_manager.display_res_h / global.gui_h;
+ //deletes all the overlay data as it's not needed
+ for (var i = 0; i < display_num; ++i) {
+ array_delete(display_data,i*4,4)
+ }
- display_set_gui_maximize(gui_x_scale,gui_y_scale,stanncam_fullscreen_ratio_compensate());
- //surface_resize(application_surface, display_get_gui_width(), display_get_gui_height())
+ var middle_x = wx + (ww/2);
+ var middle_y = wy + (wh/2);
- for (var i = 0; i < array_length(global.stanncams); ++i) {
- if (global.stanncams[i] == -1) continue;
- global.stanncams[i].__update_resolution();
+ var outside_view = true;
+ //checks which monitor the window is within
+ for (var i = 0; i < display_num; ++i) {
+ var x1 = display_data[(i*4)+0];
+ var y1 = display_data[(i*4)+1];
+ var x2 = display_data[(i*4)+2];
+ var y2 = display_data[(i*4)+3];
+
+ if(middle_x > x1 && middle_x < x2 && middle_y > y1 && middle_y < y2){
+ window_set_position(x1+x_,y1+y_);
+ outside_view = false;
+ break;
+ }
}
-}
+ //in case it somehow appears outside any of the monitors views it will go back to the first monitor
+ if(outside_view){
+ window_set_position(x_,y_);
+ }
+}
\ No newline at end of file
diff --git a/sprites/spr_arrow/spr_arrow.yy b/sprites/spr_arrow/spr_arrow.yy
index 1a65770..55580fc 100644
--- a/sprites/spr_arrow/spr_arrow.yy
+++ b/sprites/spr_arrow/spr_arrow.yy
@@ -27,8 +27,8 @@
"nineSlice": null,
"origin": 1,
"parent": {
- "name": "Sprites",
- "path": "folders/Sprites.yy",
+ "name": "gui",
+ "path": "folders/Sprites/gui.yy",
},
"preMultiplyAlpha": false,
"sequence": {
diff --git a/sprites/spr_arrow_small/spr_arrow_small.yy b/sprites/spr_arrow_small/spr_arrow_small.yy
index 12d1890..3cc437a 100644
--- a/sprites/spr_arrow_small/spr_arrow_small.yy
+++ b/sprites/spr_arrow_small/spr_arrow_small.yy
@@ -26,8 +26,8 @@
"nineSlice": null,
"origin": 1,
"parent": {
- "name": "Sprites",
- "path": "folders/Sprites.yy",
+ "name": "gui",
+ "path": "folders/Sprites/gui.yy",
},
"preMultiplyAlpha": false,
"sequence": {
diff --git a/sprites/spr_bg/spr_bg.yy b/sprites/spr_bg/spr_bg.yy
index 2136090..2d24bd1 100644
--- a/sprites/spr_bg/spr_bg.yy
+++ b/sprites/spr_bg/spr_bg.yy
@@ -26,8 +26,8 @@
"nineSlice": null,
"origin": 0,
"parent": {
- "name": "Sprites",
- "path": "folders/Sprites.yy",
+ "name": "tile",
+ "path": "folders/Sprites/tile.yy",
},
"preMultiplyAlpha": false,
"sequence": {
diff --git a/sprites/spr_collision/a365953c-c44b-4b88-90e8-ef1d5b51a19e.png b/sprites/spr_collision/a365953c-c44b-4b88-90e8-ef1d5b51a19e.png
new file mode 100644
index 0000000..dfcb4f3
Binary files /dev/null and b/sprites/spr_collision/a365953c-c44b-4b88-90e8-ef1d5b51a19e.png differ
diff --git a/sprites/spr_collision/b5e8d5bb-c127-4d8b-8514-dca5179f5af3.png b/sprites/spr_collision/b5e8d5bb-c127-4d8b-8514-dca5179f5af3.png
new file mode 100644
index 0000000..b406634
Binary files /dev/null and b/sprites/spr_collision/b5e8d5bb-c127-4d8b-8514-dca5179f5af3.png differ
diff --git a/sprites/spr_collision/cfa456cb-3dc7-444f-adfe-20f18d1fc6d3.png b/sprites/spr_collision/cfa456cb-3dc7-444f-adfe-20f18d1fc6d3.png
new file mode 100644
index 0000000..2fc341a
Binary files /dev/null and b/sprites/spr_collision/cfa456cb-3dc7-444f-adfe-20f18d1fc6d3.png differ
diff --git a/sprites/spr_collision/layers/a365953c-c44b-4b88-90e8-ef1d5b51a19e/4a98bca5-875b-452d-9fec-1b80c036d5f2.png b/sprites/spr_collision/layers/a365953c-c44b-4b88-90e8-ef1d5b51a19e/4a98bca5-875b-452d-9fec-1b80c036d5f2.png
new file mode 100644
index 0000000..920930d
Binary files /dev/null and b/sprites/spr_collision/layers/a365953c-c44b-4b88-90e8-ef1d5b51a19e/4a98bca5-875b-452d-9fec-1b80c036d5f2.png differ
diff --git a/sprites/spr_collision/layers/a365953c-c44b-4b88-90e8-ef1d5b51a19e/79bf20b2-e262-4265-8a1a-d57f21af8b6a.png b/sprites/spr_collision/layers/a365953c-c44b-4b88-90e8-ef1d5b51a19e/79bf20b2-e262-4265-8a1a-d57f21af8b6a.png
new file mode 100644
index 0000000..0fb6d15
Binary files /dev/null and b/sprites/spr_collision/layers/a365953c-c44b-4b88-90e8-ef1d5b51a19e/79bf20b2-e262-4265-8a1a-d57f21af8b6a.png differ
diff --git a/sprites/spr_collision/layers/b5e8d5bb-c127-4d8b-8514-dca5179f5af3/1424c1da-6011-424b-b805-a58db26d7bcc.png b/sprites/spr_collision/layers/b5e8d5bb-c127-4d8b-8514-dca5179f5af3/1424c1da-6011-424b-b805-a58db26d7bcc.png
new file mode 100644
index 0000000..6d5054f
Binary files /dev/null and b/sprites/spr_collision/layers/b5e8d5bb-c127-4d8b-8514-dca5179f5af3/1424c1da-6011-424b-b805-a58db26d7bcc.png differ
diff --git a/sprites/spr_collision/layers/cfa456cb-3dc7-444f-adfe-20f18d1fc6d3/4a98bca5-875b-452d-9fec-1b80c036d5f2.png b/sprites/spr_collision/layers/cfa456cb-3dc7-444f-adfe-20f18d1fc6d3/4a98bca5-875b-452d-9fec-1b80c036d5f2.png
new file mode 100644
index 0000000..918253c
Binary files /dev/null and b/sprites/spr_collision/layers/cfa456cb-3dc7-444f-adfe-20f18d1fc6d3/4a98bca5-875b-452d-9fec-1b80c036d5f2.png differ
diff --git a/sprites/spr_collision/layers/cfa456cb-3dc7-444f-adfe-20f18d1fc6d3/79bf20b2-e262-4265-8a1a-d57f21af8b6a.png b/sprites/spr_collision/layers/cfa456cb-3dc7-444f-adfe-20f18d1fc6d3/79bf20b2-e262-4265-8a1a-d57f21af8b6a.png
new file mode 100644
index 0000000..0fb6d15
Binary files /dev/null and b/sprites/spr_collision/layers/cfa456cb-3dc7-444f-adfe-20f18d1fc6d3/79bf20b2-e262-4265-8a1a-d57f21af8b6a.png differ
diff --git a/sprites/spr_collision/spr_collision.yy b/sprites/spr_collision/spr_collision.yy
new file mode 100644
index 0000000..cc314b2
--- /dev/null
+++ b/sprites/spr_collision/spr_collision.yy
@@ -0,0 +1,74 @@
+{
+ "resourceType": "GMSprite",
+ "resourceVersion": "1.0",
+ "name": "spr_collision",
+ "bbox_bottom": 31,
+ "bbox_left": 0,
+ "bbox_right": 31,
+ "bbox_top": 0,
+ "bboxMode": 0,
+ "collisionKind": 1,
+ "collisionTolerance": 0,
+ "DynamicTexturePage": false,
+ "edgeFiltering": false,
+ "For3D": false,
+ "frames": [
+ {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"b5e8d5bb-c127-4d8b-8514-dca5179f5af3",},
+ ],
+ "gridX": 0,
+ "gridY": 0,
+ "height": 32,
+ "HTile": false,
+ "layers": [
+ {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"1424c1da-6011-424b-b805-a58db26d7bcc","blendMode":0,"displayName":"default","isLocked":false,"opacity":50.0,"visible":true,},
+ ],
+ "nineSlice": null,
+ "origin": 0,
+ "parent": {
+ "name": "tile",
+ "path": "folders/Sprites/tile.yy",
+ },
+ "preMultiplyAlpha": false,
+ "sequence": {
+ "resourceType": "GMSequence",
+ "resourceVersion": "1.4",
+ "name": "spr_collision",
+ "autoRecord": true,
+ "backdropHeight": 768,
+ "backdropImageOpacity": 0.5,
+ "backdropImagePath": "",
+ "backdropWidth": 1366,
+ "backdropXOffset": 0.0,
+ "backdropYOffset": 0.0,
+ "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "eventStubScript": null,
+ "eventToFunction": {},
+ "length": 1.0,
+ "lockOrigin": false,
+ "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "playback": 1,
+ "playbackSpeed": 1.0,
+ "playbackSpeedType": 1,
+ "showBackdrop": true,
+ "showBackdropImage": false,
+ "timeUnits": 1,
+ "tracks": [
+ {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[
+ {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"b5e8d5bb-c127-4d8b-8514-dca5179f5af3","path":"sprites/spr_collision/spr_collision.yy",},},},"Disabled":false,"id":"b812eb00-8d23-447a-9c1b-e024f98aeb23","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
+ ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
+ ],
+ "visibleRange": null,
+ "volume": 1.0,
+ "xorigin": 0,
+ "yorigin": 0,
+ },
+ "swatchColours": null,
+ "swfPrecision": 2.525,
+ "textureGroupId": {
+ "name": "Default",
+ "path": "texturegroups/Default",
+ },
+ "type": 0,
+ "VTile": false,
+ "width": 32,
+}
\ No newline at end of file
diff --git a/sprites/spr_pengu/a2ef49bc-93ae-4ff2-8bb0-6be755f719dd.png b/sprites/spr_pengu/a2ef49bc-93ae-4ff2-8bb0-6be755f719dd.png
new file mode 100644
index 0000000..b8b475b
Binary files /dev/null and b/sprites/spr_pengu/a2ef49bc-93ae-4ff2-8bb0-6be755f719dd.png differ
diff --git a/sprites/spr_pengu/d2c4810f-6b41-442f-948d-d7f65df25f8c.png b/sprites/spr_pengu/d2c4810f-6b41-442f-948d-d7f65df25f8c.png
new file mode 100644
index 0000000..8e4b72a
Binary files /dev/null and b/sprites/spr_pengu/d2c4810f-6b41-442f-948d-d7f65df25f8c.png differ
diff --git a/sprites/spr_pengu/e0044597-6d8c-42ff-8743-1457e853bed7.png b/sprites/spr_pengu/e0044597-6d8c-42ff-8743-1457e853bed7.png
new file mode 100644
index 0000000..eedca22
Binary files /dev/null and b/sprites/spr_pengu/e0044597-6d8c-42ff-8743-1457e853bed7.png differ
diff --git a/sprites/spr_pengu/layers/a2ef49bc-93ae-4ff2-8bb0-6be755f719dd/ba51ab86-230f-4f17-a833-3a46bbc810c5.png b/sprites/spr_pengu/layers/a2ef49bc-93ae-4ff2-8bb0-6be755f719dd/ba51ab86-230f-4f17-a833-3a46bbc810c5.png
new file mode 100644
index 0000000..b8b475b
Binary files /dev/null and b/sprites/spr_pengu/layers/a2ef49bc-93ae-4ff2-8bb0-6be755f719dd/ba51ab86-230f-4f17-a833-3a46bbc810c5.png differ
diff --git a/sprites/spr_pengu/layers/d2c4810f-6b41-442f-948d-d7f65df25f8c/ba51ab86-230f-4f17-a833-3a46bbc810c5.png b/sprites/spr_pengu/layers/d2c4810f-6b41-442f-948d-d7f65df25f8c/ba51ab86-230f-4f17-a833-3a46bbc810c5.png
new file mode 100644
index 0000000..8e4b72a
Binary files /dev/null and b/sprites/spr_pengu/layers/d2c4810f-6b41-442f-948d-d7f65df25f8c/ba51ab86-230f-4f17-a833-3a46bbc810c5.png differ
diff --git a/sprites/spr_pengu/layers/e0044597-6d8c-42ff-8743-1457e853bed7/23a9db87-2942-40f9-bc8c-45ad600e50c3.png b/sprites/spr_pengu/layers/e0044597-6d8c-42ff-8743-1457e853bed7/23a9db87-2942-40f9-bc8c-45ad600e50c3.png
new file mode 100644
index 0000000..eedca22
Binary files /dev/null and b/sprites/spr_pengu/layers/e0044597-6d8c-42ff-8743-1457e853bed7/23a9db87-2942-40f9-bc8c-45ad600e50c3.png differ
diff --git a/sprites/spr_pengu/spr_pengu.yy b/sprites/spr_pengu/spr_pengu.yy
new file mode 100644
index 0000000..b4c7b56
--- /dev/null
+++ b/sprites/spr_pengu/spr_pengu.yy
@@ -0,0 +1,76 @@
+{
+ "resourceType": "GMSprite",
+ "resourceVersion": "1.0",
+ "name": "spr_pengu",
+ "bbox_bottom": 31,
+ "bbox_left": 6,
+ "bbox_right": 28,
+ "bbox_top": 6,
+ "bboxMode": 0,
+ "collisionKind": 1,
+ "collisionTolerance": 0,
+ "DynamicTexturePage": false,
+ "edgeFiltering": false,
+ "For3D": false,
+ "frames": [
+ {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"d2c4810f-6b41-442f-948d-d7f65df25f8c",},
+ {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"a2ef49bc-93ae-4ff2-8bb0-6be755f719dd",},
+ ],
+ "gridX": 0,
+ "gridY": 0,
+ "height": 32,
+ "HTile": false,
+ "layers": [
+ {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"ba51ab86-230f-4f17-a833-3a46bbc810c5","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
+ ],
+ "nineSlice": null,
+ "origin": 7,
+ "parent": {
+ "name": "players",
+ "path": "folders/Sprites/players.yy",
+ },
+ "preMultiplyAlpha": false,
+ "sequence": {
+ "resourceType": "GMSequence",
+ "resourceVersion": "1.4",
+ "name": "spr_pengu",
+ "autoRecord": true,
+ "backdropHeight": 768,
+ "backdropImageOpacity": 0.5,
+ "backdropImagePath": "",
+ "backdropWidth": 1366,
+ "backdropXOffset": 0.0,
+ "backdropYOffset": 0.0,
+ "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "eventStubScript": null,
+ "eventToFunction": {},
+ "length": 2.0,
+ "lockOrigin": false,
+ "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "playback": 1,
+ "playbackSpeed": 0.05,
+ "playbackSpeedType": 1,
+ "showBackdrop": true,
+ "showBackdropImage": false,
+ "timeUnits": 1,
+ "tracks": [
+ {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[
+ {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"d2c4810f-6b41-442f-948d-d7f65df25f8c","path":"sprites/spr_pengu/spr_pengu.yy",},},},"Disabled":false,"id":"9a2727f6-c707-4b39-bba5-f2646b5b68c9","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
+ {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"a2ef49bc-93ae-4ff2-8bb0-6be755f719dd","path":"sprites/spr_pengu/spr_pengu.yy",},},},"Disabled":false,"id":"7ed66149-6f80-4f79-ace9-a2e809179eee","IsCreationKey":false,"Key":1.0,"Length":1.0,"Stretch":false,},
+ ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
+ ],
+ "visibleRange": null,
+ "volume": 1.0,
+ "xorigin": 16,
+ "yorigin": 32,
+ },
+ "swatchColours": null,
+ "swfPrecision": 2.525,
+ "textureGroupId": {
+ "name": "Default",
+ "path": "texturegroups/Default",
+ },
+ "type": 0,
+ "VTile": false,
+ "width": 32,
+}
\ No newline at end of file
diff --git a/sprites/spr_pengu2/a2ef49bc-93ae-4ff2-8bb0-6be755f719dd.png b/sprites/spr_pengu2/a2ef49bc-93ae-4ff2-8bb0-6be755f719dd.png
new file mode 100644
index 0000000..515bce4
Binary files /dev/null and b/sprites/spr_pengu2/a2ef49bc-93ae-4ff2-8bb0-6be755f719dd.png differ
diff --git a/sprites/spr_pengu2/d2c4810f-6b41-442f-948d-d7f65df25f8c.png b/sprites/spr_pengu2/d2c4810f-6b41-442f-948d-d7f65df25f8c.png
new file mode 100644
index 0000000..e50843b
Binary files /dev/null and b/sprites/spr_pengu2/d2c4810f-6b41-442f-948d-d7f65df25f8c.png differ
diff --git a/sprites/spr_pengu2/e0044597-6d8c-42ff-8743-1457e853bed7.png b/sprites/spr_pengu2/e0044597-6d8c-42ff-8743-1457e853bed7.png
new file mode 100644
index 0000000..eedca22
Binary files /dev/null and b/sprites/spr_pengu2/e0044597-6d8c-42ff-8743-1457e853bed7.png differ
diff --git a/sprites/spr_pengu2/layers/a2ef49bc-93ae-4ff2-8bb0-6be755f719dd/ba51ab86-230f-4f17-a833-3a46bbc810c5.png b/sprites/spr_pengu2/layers/a2ef49bc-93ae-4ff2-8bb0-6be755f719dd/ba51ab86-230f-4f17-a833-3a46bbc810c5.png
new file mode 100644
index 0000000..515bce4
Binary files /dev/null and b/sprites/spr_pengu2/layers/a2ef49bc-93ae-4ff2-8bb0-6be755f719dd/ba51ab86-230f-4f17-a833-3a46bbc810c5.png differ
diff --git a/sprites/spr_pengu2/layers/d2c4810f-6b41-442f-948d-d7f65df25f8c/ba51ab86-230f-4f17-a833-3a46bbc810c5.png b/sprites/spr_pengu2/layers/d2c4810f-6b41-442f-948d-d7f65df25f8c/ba51ab86-230f-4f17-a833-3a46bbc810c5.png
new file mode 100644
index 0000000..e50843b
Binary files /dev/null and b/sprites/spr_pengu2/layers/d2c4810f-6b41-442f-948d-d7f65df25f8c/ba51ab86-230f-4f17-a833-3a46bbc810c5.png differ
diff --git a/sprites/spr_pengu2/layers/e0044597-6d8c-42ff-8743-1457e853bed7/23a9db87-2942-40f9-bc8c-45ad600e50c3.png b/sprites/spr_pengu2/layers/e0044597-6d8c-42ff-8743-1457e853bed7/23a9db87-2942-40f9-bc8c-45ad600e50c3.png
new file mode 100644
index 0000000..eedca22
Binary files /dev/null and b/sprites/spr_pengu2/layers/e0044597-6d8c-42ff-8743-1457e853bed7/23a9db87-2942-40f9-bc8c-45ad600e50c3.png differ
diff --git a/sprites/spr_pengu2/spr_pengu2.yy b/sprites/spr_pengu2/spr_pengu2.yy
new file mode 100644
index 0000000..27fd20d
--- /dev/null
+++ b/sprites/spr_pengu2/spr_pengu2.yy
@@ -0,0 +1,76 @@
+{
+ "resourceType": "GMSprite",
+ "resourceVersion": "1.0",
+ "name": "spr_pengu2",
+ "bbox_bottom": 31,
+ "bbox_left": 6,
+ "bbox_right": 28,
+ "bbox_top": 6,
+ "bboxMode": 0,
+ "collisionKind": 1,
+ "collisionTolerance": 0,
+ "DynamicTexturePage": false,
+ "edgeFiltering": false,
+ "For3D": false,
+ "frames": [
+ {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"d2c4810f-6b41-442f-948d-d7f65df25f8c",},
+ {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"a2ef49bc-93ae-4ff2-8bb0-6be755f719dd",},
+ ],
+ "gridX": 0,
+ "gridY": 0,
+ "height": 32,
+ "HTile": false,
+ "layers": [
+ {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"ba51ab86-230f-4f17-a833-3a46bbc810c5","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
+ ],
+ "nineSlice": null,
+ "origin": 7,
+ "parent": {
+ "name": "players",
+ "path": "folders/Sprites/players.yy",
+ },
+ "preMultiplyAlpha": false,
+ "sequence": {
+ "resourceType": "GMSequence",
+ "resourceVersion": "1.4",
+ "name": "spr_pengu2",
+ "autoRecord": true,
+ "backdropHeight": 768,
+ "backdropImageOpacity": 0.5,
+ "backdropImagePath": "",
+ "backdropWidth": 1366,
+ "backdropXOffset": 0.0,
+ "backdropYOffset": 0.0,
+ "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "eventStubScript": null,
+ "eventToFunction": {},
+ "length": 2.0,
+ "lockOrigin": false,
+ "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "playback": 1,
+ "playbackSpeed": 0.05,
+ "playbackSpeedType": 1,
+ "showBackdrop": true,
+ "showBackdropImage": false,
+ "timeUnits": 1,
+ "tracks": [
+ {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[
+ {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"d2c4810f-6b41-442f-948d-d7f65df25f8c","path":"sprites/spr_pengu2/spr_pengu2.yy",},},},"Disabled":false,"id":"73a5d111-32c8-4638-a0ef-fce2b0bc3ded","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
+ {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"a2ef49bc-93ae-4ff2-8bb0-6be755f719dd","path":"sprites/spr_pengu2/spr_pengu2.yy",},},},"Disabled":false,"id":"3c8a641d-c754-4eae-a3ea-c7322fac6b87","IsCreationKey":false,"Key":1.0,"Length":1.0,"Stretch":false,},
+ ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
+ ],
+ "visibleRange": null,
+ "volume": 1.0,
+ "xorigin": 16,
+ "yorigin": 32,
+ },
+ "swatchColours": null,
+ "swfPrecision": 2.525,
+ "textureGroupId": {
+ "name": "Default",
+ "path": "texturegroups/Default",
+ },
+ "type": 0,
+ "VTile": false,
+ "width": 32,
+}
\ No newline at end of file
diff --git a/sprites/spr_pixel_side_Underwater/dae6def4-3e97-477c-a99d-ee6e4037420d.png b/sprites/spr_pixel_side_Underwater/dae6def4-3e97-477c-a99d-ee6e4037420d.png
new file mode 100644
index 0000000..134a1fc
Binary files /dev/null and b/sprites/spr_pixel_side_Underwater/dae6def4-3e97-477c-a99d-ee6e4037420d.png differ
diff --git a/sprites/spr_pixel_side_Underwater/layers/dae6def4-3e97-477c-a99d-ee6e4037420d/6387e633-22c3-45c9-a755-caf8be645935.png b/sprites/spr_pixel_side_Underwater/layers/dae6def4-3e97-477c-a99d-ee6e4037420d/6387e633-22c3-45c9-a755-caf8be645935.png
new file mode 100644
index 0000000..134a1fc
Binary files /dev/null and b/sprites/spr_pixel_side_Underwater/layers/dae6def4-3e97-477c-a99d-ee6e4037420d/6387e633-22c3-45c9-a755-caf8be645935.png differ
diff --git a/sprites/spr_pixel_side_Underwater/spr_pixel_side_Underwater.yy b/sprites/spr_pixel_side_Underwater/spr_pixel_side_Underwater.yy
new file mode 100644
index 0000000..1cdcdf0
--- /dev/null
+++ b/sprites/spr_pixel_side_Underwater/spr_pixel_side_Underwater.yy
@@ -0,0 +1,74 @@
+{
+ "resourceType": "GMSprite",
+ "resourceVersion": "1.0",
+ "name": "spr_pixel_side_Underwater",
+ "bbox_bottom": 191,
+ "bbox_left": 0,
+ "bbox_right": 255,
+ "bbox_top": 0,
+ "bboxMode": 0,
+ "collisionKind": 1,
+ "collisionTolerance": 0,
+ "DynamicTexturePage": false,
+ "edgeFiltering": false,
+ "For3D": false,
+ "frames": [
+ {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"dae6def4-3e97-477c-a99d-ee6e4037420d",},
+ ],
+ "gridX": 0,
+ "gridY": 0,
+ "height": 192,
+ "HTile": false,
+ "layers": [
+ {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"6387e633-22c3-45c9-a755-caf8be645935","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
+ ],
+ "nineSlice": null,
+ "origin": 0,
+ "parent": {
+ "name": "tile",
+ "path": "folders/Sprites/tile.yy",
+ },
+ "preMultiplyAlpha": false,
+ "sequence": {
+ "resourceType": "GMSequence",
+ "resourceVersion": "1.4",
+ "name": "spr_pixel_side_Underwater",
+ "autoRecord": true,
+ "backdropHeight": 768,
+ "backdropImageOpacity": 0.5,
+ "backdropImagePath": "",
+ "backdropWidth": 1366,
+ "backdropXOffset": 0.0,
+ "backdropYOffset": 0.0,
+ "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "eventStubScript": null,
+ "eventToFunction": {},
+ "length": 1.0,
+ "lockOrigin": false,
+ "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "playback": 1,
+ "playbackSpeed": 30.0,
+ "playbackSpeedType": 0,
+ "showBackdrop": true,
+ "showBackdropImage": false,
+ "timeUnits": 1,
+ "tracks": [
+ {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[
+ {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"dae6def4-3e97-477c-a99d-ee6e4037420d","path":"sprites/spr_pixel_side_Underwater/spr_pixel_side_Underwater.yy",},},},"Disabled":false,"id":"9e895299-c397-4f7c-8828-db101507df2a","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
+ ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
+ ],
+ "visibleRange": null,
+ "volume": 1.0,
+ "xorigin": 0,
+ "yorigin": 0,
+ },
+ "swatchColours": null,
+ "swfPrecision": 2.525,
+ "textureGroupId": {
+ "name": "Default",
+ "path": "texturegroups/Default",
+ },
+ "type": 0,
+ "VTile": false,
+ "width": 256,
+}
\ No newline at end of file
diff --git a/sprites/spr_player2_idle/spr_player2_idle.yy b/sprites/spr_player2_idle/spr_player2_idle.yy
index 01c4226..e432976 100644
--- a/sprites/spr_player2_idle/spr_player2_idle.yy
+++ b/sprites/spr_player2_idle/spr_player2_idle.yy
@@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 7,
"parent": {
- "name": "Sprites",
- "path": "folders/Sprites.yy",
+ "name": "players",
+ "path": "folders/Sprites/players.yy",
},
"preMultiplyAlpha": false,
"sequence": {
diff --git a/sprites/spr_player2_moving/spr_player2_moving.yy b/sprites/spr_player2_moving/spr_player2_moving.yy
index 93a1414..ed8d56c 100644
--- a/sprites/spr_player2_moving/spr_player2_moving.yy
+++ b/sprites/spr_player2_moving/spr_player2_moving.yy
@@ -26,8 +26,8 @@
"nineSlice": null,
"origin": 7,
"parent": {
- "name": "Sprites",
- "path": "folders/Sprites.yy",
+ "name": "players",
+ "path": "folders/Sprites/players.yy",
},
"preMultiplyAlpha": false,
"sequence": {
diff --git a/sprites/spr_player_idle/spr_player_idle.yy b/sprites/spr_player_idle/spr_player_idle.yy
index ad453e1..fe8a3e0 100644
--- a/sprites/spr_player_idle/spr_player_idle.yy
+++ b/sprites/spr_player_idle/spr_player_idle.yy
@@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 7,
"parent": {
- "name": "Sprites",
- "path": "folders/Sprites.yy",
+ "name": "players",
+ "path": "folders/Sprites/players.yy",
},
"preMultiplyAlpha": false,
"sequence": {
diff --git a/sprites/spr_player_moving/spr_player_moving.yy b/sprites/spr_player_moving/spr_player_moving.yy
index 8760ede..8bd48ed 100644
--- a/sprites/spr_player_moving/spr_player_moving.yy
+++ b/sprites/spr_player_moving/spr_player_moving.yy
@@ -26,8 +26,8 @@
"nineSlice": null,
"origin": 7,
"parent": {
- "name": "Sprites",
- "path": "folders/Sprites.yy",
+ "name": "players",
+ "path": "folders/Sprites/players.yy",
},
"preMultiplyAlpha": false,
"sequence": {
diff --git a/sprites/spr_tile_bg/spr_tile_bg.yy b/sprites/spr_tile_bg/spr_tile_bg.yy
index 3b010df..7393cbf 100644
--- a/sprites/spr_tile_bg/spr_tile_bg.yy
+++ b/sprites/spr_tile_bg/spr_tile_bg.yy
@@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 0,
"parent": {
- "name": "Sprites",
- "path": "folders/Sprites.yy",
+ "name": "tile",
+ "path": "folders/Sprites/tile.yy",
},
"preMultiplyAlpha": false,
"sequence": {
diff --git a/sprites/spr_underwater/39fd8e7b-11b6-44f2-a59e-3ad4c70ede07.png b/sprites/spr_underwater/39fd8e7b-11b6-44f2-a59e-3ad4c70ede07.png
new file mode 100644
index 0000000..b14306f
Binary files /dev/null and b/sprites/spr_underwater/39fd8e7b-11b6-44f2-a59e-3ad4c70ede07.png differ
diff --git a/sprites/spr_underwater/layers/39fd8e7b-11b6-44f2-a59e-3ad4c70ede07/2ec2b468-5ef8-40ea-9006-501db8b069af.png b/sprites/spr_underwater/layers/39fd8e7b-11b6-44f2-a59e-3ad4c70ede07/2ec2b468-5ef8-40ea-9006-501db8b069af.png
new file mode 100644
index 0000000..b14306f
Binary files /dev/null and b/sprites/spr_underwater/layers/39fd8e7b-11b6-44f2-a59e-3ad4c70ede07/2ec2b468-5ef8-40ea-9006-501db8b069af.png differ
diff --git a/sprites/spr_underwater/spr_underwater.yy b/sprites/spr_underwater/spr_underwater.yy
new file mode 100644
index 0000000..3150bd8
--- /dev/null
+++ b/sprites/spr_underwater/spr_underwater.yy
@@ -0,0 +1,74 @@
+{
+ "resourceType": "GMSprite",
+ "resourceVersion": "1.0",
+ "name": "spr_underwater",
+ "bbox_bottom": 1079,
+ "bbox_left": 0,
+ "bbox_right": 1919,
+ "bbox_top": 0,
+ "bboxMode": 0,
+ "collisionKind": 1,
+ "collisionTolerance": 0,
+ "DynamicTexturePage": false,
+ "edgeFiltering": false,
+ "For3D": false,
+ "frames": [
+ {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"39fd8e7b-11b6-44f2-a59e-3ad4c70ede07",},
+ ],
+ "gridX": 0,
+ "gridY": 0,
+ "height": 1080,
+ "HTile": false,
+ "layers": [
+ {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"2ec2b468-5ef8-40ea-9006-501db8b069af","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
+ ],
+ "nineSlice": null,
+ "origin": 0,
+ "parent": {
+ "name": "BG",
+ "path": "folders/Sprites/BG.yy",
+ },
+ "preMultiplyAlpha": false,
+ "sequence": {
+ "resourceType": "GMSequence",
+ "resourceVersion": "1.4",
+ "name": "spr_underwater",
+ "autoRecord": true,
+ "backdropHeight": 768,
+ "backdropImageOpacity": 0.5,
+ "backdropImagePath": "",
+ "backdropWidth": 1366,
+ "backdropXOffset": 0.0,
+ "backdropYOffset": 0.0,
+ "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "eventStubScript": null,
+ "eventToFunction": {},
+ "length": 1.0,
+ "lockOrigin": false,
+ "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "playback": 1,
+ "playbackSpeed": 30.0,
+ "playbackSpeedType": 0,
+ "showBackdrop": true,
+ "showBackdropImage": false,
+ "timeUnits": 1,
+ "tracks": [
+ {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[
+ {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"39fd8e7b-11b6-44f2-a59e-3ad4c70ede07","path":"sprites/spr_underwater/spr_underwater.yy",},},},"Disabled":false,"id":"2757aea5-6d65-4d6c-8894-b1b5527463b0","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
+ ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
+ ],
+ "visibleRange": null,
+ "volume": 1.0,
+ "xorigin": 0,
+ "yorigin": 0,
+ },
+ "swatchColours": null,
+ "swfPrecision": 2.525,
+ "textureGroupId": {
+ "name": "Default",
+ "path": "texturegroups/Default",
+ },
+ "type": 0,
+ "VTile": false,
+ "width": 1920,
+}
\ No newline at end of file
diff --git a/sprites/spr_underwater_layer00/d4e3f691-4316-4ce9-9a6d-ddc9d577c075.png b/sprites/spr_underwater_layer00/d4e3f691-4316-4ce9-9a6d-ddc9d577c075.png
new file mode 100644
index 0000000..dd53f28
Binary files /dev/null and b/sprites/spr_underwater_layer00/d4e3f691-4316-4ce9-9a6d-ddc9d577c075.png differ
diff --git a/sprites/spr_underwater_layer00/layers/d4e3f691-4316-4ce9-9a6d-ddc9d577c075/ca428743-36ed-4f30-a586-e0ce80685662.png b/sprites/spr_underwater_layer00/layers/d4e3f691-4316-4ce9-9a6d-ddc9d577c075/ca428743-36ed-4f30-a586-e0ce80685662.png
new file mode 100644
index 0000000..dd53f28
Binary files /dev/null and b/sprites/spr_underwater_layer00/layers/d4e3f691-4316-4ce9-9a6d-ddc9d577c075/ca428743-36ed-4f30-a586-e0ce80685662.png differ
diff --git a/sprites/spr_underwater_layer00/spr_underwater_layer00.yy b/sprites/spr_underwater_layer00/spr_underwater_layer00.yy
new file mode 100644
index 0000000..6c3012e
--- /dev/null
+++ b/sprites/spr_underwater_layer00/spr_underwater_layer00.yy
@@ -0,0 +1,97 @@
+{
+ "resourceType": "GMSprite",
+ "resourceVersion": "1.0",
+ "name": "spr_underwater_layer00",
+ "bbox_bottom": 269,
+ "bbox_left": 0,
+ "bbox_right": 479,
+ "bbox_top": 0,
+ "bboxMode": 0,
+ "collisionKind": 1,
+ "collisionTolerance": 0,
+ "DynamicTexturePage": false,
+ "edgeFiltering": false,
+ "For3D": false,
+ "frames": [
+ {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"d4e3f691-4316-4ce9-9a6d-ddc9d577c075",},
+ ],
+ "gridX": 0,
+ "gridY": 0,
+ "height": 270,
+ "HTile": false,
+ "layers": [
+ {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"ca428743-36ed-4f30-a586-e0ce80685662","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
+ ],
+ "nineSlice": {
+ "resourceType": "GMNineSliceData",
+ "resourceVersion": "1.0",
+ "bottom": 0,
+ "enabled": false,
+ "guideColour": [
+ 4294902015,
+ 4294902015,
+ 4294902015,
+ 4294902015,
+ ],
+ "highlightColour": 1728023040,
+ "highlightStyle": 0,
+ "left": 0,
+ "right": 0,
+ "tileMode": [
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ ],
+ "top": 0,
+ },
+ "origin": 0,
+ "parent": {
+ "name": "Layers",
+ "path": "folders/Sprites/BG/Layers.yy",
+ },
+ "preMultiplyAlpha": false,
+ "sequence": {
+ "resourceType": "GMSequence",
+ "resourceVersion": "1.4",
+ "name": "spr_underwater_layer00",
+ "autoRecord": true,
+ "backdropHeight": 768,
+ "backdropImageOpacity": 0.5,
+ "backdropImagePath": "",
+ "backdropWidth": 1366,
+ "backdropXOffset": 0.0,
+ "backdropYOffset": 0.0,
+ "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "eventStubScript": null,
+ "eventToFunction": {},
+ "length": 1.0,
+ "lockOrigin": false,
+ "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "playback": 1,
+ "playbackSpeed": 30.0,
+ "playbackSpeedType": 0,
+ "showBackdrop": true,
+ "showBackdropImage": false,
+ "timeUnits": 1,
+ "tracks": [
+ {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[
+ {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"d4e3f691-4316-4ce9-9a6d-ddc9d577c075","path":"sprites/spr_underwater_layer00/spr_underwater_layer00.yy",},},},"Disabled":false,"id":"80c73f58-1fa7-4b93-b802-ccac1b7e9d5e","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
+ ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
+ ],
+ "visibleRange": null,
+ "volume": 1.0,
+ "xorigin": 0,
+ "yorigin": 0,
+ },
+ "swatchColours": null,
+ "swfPrecision": 2.525,
+ "textureGroupId": {
+ "name": "Default",
+ "path": "texturegroups/Default",
+ },
+ "type": 0,
+ "VTile": false,
+ "width": 480,
+}
\ No newline at end of file
diff --git a/sprites/spr_underwater_layer01/4b447b47-ddae-4ba9-8ffb-eaf4b1557c6f.png b/sprites/spr_underwater_layer01/4b447b47-ddae-4ba9-8ffb-eaf4b1557c6f.png
new file mode 100644
index 0000000..7d181b3
Binary files /dev/null and b/sprites/spr_underwater_layer01/4b447b47-ddae-4ba9-8ffb-eaf4b1557c6f.png differ
diff --git a/sprites/spr_underwater_layer01/layers/4b447b47-ddae-4ba9-8ffb-eaf4b1557c6f/c16629aa-b897-4fc8-a7a4-528254e93169.png b/sprites/spr_underwater_layer01/layers/4b447b47-ddae-4ba9-8ffb-eaf4b1557c6f/c16629aa-b897-4fc8-a7a4-528254e93169.png
new file mode 100644
index 0000000..7d181b3
Binary files /dev/null and b/sprites/spr_underwater_layer01/layers/4b447b47-ddae-4ba9-8ffb-eaf4b1557c6f/c16629aa-b897-4fc8-a7a4-528254e93169.png differ
diff --git a/sprites/spr_underwater_layer01/spr_underwater_layer01.yy b/sprites/spr_underwater_layer01/spr_underwater_layer01.yy
new file mode 100644
index 0000000..8f8edd0
--- /dev/null
+++ b/sprites/spr_underwater_layer01/spr_underwater_layer01.yy
@@ -0,0 +1,97 @@
+{
+ "resourceType": "GMSprite",
+ "resourceVersion": "1.0",
+ "name": "spr_underwater_layer01",
+ "bbox_bottom": 269,
+ "bbox_left": 0,
+ "bbox_right": 479,
+ "bbox_top": 22,
+ "bboxMode": 0,
+ "collisionKind": 1,
+ "collisionTolerance": 0,
+ "DynamicTexturePage": false,
+ "edgeFiltering": false,
+ "For3D": false,
+ "frames": [
+ {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"4b447b47-ddae-4ba9-8ffb-eaf4b1557c6f",},
+ ],
+ "gridX": 0,
+ "gridY": 0,
+ "height": 270,
+ "HTile": false,
+ "layers": [
+ {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"c16629aa-b897-4fc8-a7a4-528254e93169","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
+ ],
+ "nineSlice": {
+ "resourceType": "GMNineSliceData",
+ "resourceVersion": "1.0",
+ "bottom": 0,
+ "enabled": false,
+ "guideColour": [
+ 4294902015,
+ 4294902015,
+ 4294902015,
+ 4294902015,
+ ],
+ "highlightColour": 1728023040,
+ "highlightStyle": 0,
+ "left": 0,
+ "right": 0,
+ "tileMode": [
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ ],
+ "top": 0,
+ },
+ "origin": 0,
+ "parent": {
+ "name": "Layers",
+ "path": "folders/Sprites/BG/Layers.yy",
+ },
+ "preMultiplyAlpha": false,
+ "sequence": {
+ "resourceType": "GMSequence",
+ "resourceVersion": "1.4",
+ "name": "spr_underwater_layer01",
+ "autoRecord": true,
+ "backdropHeight": 768,
+ "backdropImageOpacity": 0.5,
+ "backdropImagePath": "",
+ "backdropWidth": 1366,
+ "backdropXOffset": 0.0,
+ "backdropYOffset": 0.0,
+ "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "eventStubScript": null,
+ "eventToFunction": {},
+ "length": 1.0,
+ "lockOrigin": false,
+ "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "playback": 1,
+ "playbackSpeed": 30.0,
+ "playbackSpeedType": 0,
+ "showBackdrop": true,
+ "showBackdropImage": false,
+ "timeUnits": 1,
+ "tracks": [
+ {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[
+ {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"4b447b47-ddae-4ba9-8ffb-eaf4b1557c6f","path":"sprites/spr_underwater_layer01/spr_underwater_layer01.yy",},},},"Disabled":false,"id":"0de0f00a-ef83-47e1-aa82-df5efdbcf2c2","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
+ ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
+ ],
+ "visibleRange": null,
+ "volume": 1.0,
+ "xorigin": 0,
+ "yorigin": 0,
+ },
+ "swatchColours": null,
+ "swfPrecision": 2.525,
+ "textureGroupId": {
+ "name": "Default",
+ "path": "texturegroups/Default",
+ },
+ "type": 0,
+ "VTile": false,
+ "width": 480,
+}
\ No newline at end of file
diff --git a/sprites/spr_underwater_layer02/4bcdea5c-3c14-4829-95a4-2e776dac0116.png b/sprites/spr_underwater_layer02/4bcdea5c-3c14-4829-95a4-2e776dac0116.png
new file mode 100644
index 0000000..3f94b94
Binary files /dev/null and b/sprites/spr_underwater_layer02/4bcdea5c-3c14-4829-95a4-2e776dac0116.png differ
diff --git a/sprites/spr_underwater_layer02/layers/4bcdea5c-3c14-4829-95a4-2e776dac0116/3a4ac70a-7236-44a1-85bf-da8e5a8c645c.png b/sprites/spr_underwater_layer02/layers/4bcdea5c-3c14-4829-95a4-2e776dac0116/3a4ac70a-7236-44a1-85bf-da8e5a8c645c.png
new file mode 100644
index 0000000..3f94b94
Binary files /dev/null and b/sprites/spr_underwater_layer02/layers/4bcdea5c-3c14-4829-95a4-2e776dac0116/3a4ac70a-7236-44a1-85bf-da8e5a8c645c.png differ
diff --git a/sprites/spr_underwater_layer02/spr_underwater_layer02.yy b/sprites/spr_underwater_layer02/spr_underwater_layer02.yy
new file mode 100644
index 0000000..5ac9831
--- /dev/null
+++ b/sprites/spr_underwater_layer02/spr_underwater_layer02.yy
@@ -0,0 +1,97 @@
+{
+ "resourceType": "GMSprite",
+ "resourceVersion": "1.0",
+ "name": "spr_underwater_layer02",
+ "bbox_bottom": 117,
+ "bbox_left": 20,
+ "bbox_right": 465,
+ "bbox_top": 48,
+ "bboxMode": 0,
+ "collisionKind": 1,
+ "collisionTolerance": 0,
+ "DynamicTexturePage": false,
+ "edgeFiltering": false,
+ "For3D": false,
+ "frames": [
+ {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"4bcdea5c-3c14-4829-95a4-2e776dac0116",},
+ ],
+ "gridX": 0,
+ "gridY": 0,
+ "height": 270,
+ "HTile": false,
+ "layers": [
+ {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"3a4ac70a-7236-44a1-85bf-da8e5a8c645c","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
+ ],
+ "nineSlice": {
+ "resourceType": "GMNineSliceData",
+ "resourceVersion": "1.0",
+ "bottom": 0,
+ "enabled": false,
+ "guideColour": [
+ 4294902015,
+ 4294902015,
+ 4294902015,
+ 4294902015,
+ ],
+ "highlightColour": 1728023040,
+ "highlightStyle": 0,
+ "left": 0,
+ "right": 0,
+ "tileMode": [
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ ],
+ "top": 0,
+ },
+ "origin": 0,
+ "parent": {
+ "name": "Layers",
+ "path": "folders/Sprites/BG/Layers.yy",
+ },
+ "preMultiplyAlpha": false,
+ "sequence": {
+ "resourceType": "GMSequence",
+ "resourceVersion": "1.4",
+ "name": "spr_underwater_layer02",
+ "autoRecord": true,
+ "backdropHeight": 768,
+ "backdropImageOpacity": 0.5,
+ "backdropImagePath": "",
+ "backdropWidth": 1366,
+ "backdropXOffset": 0.0,
+ "backdropYOffset": 0.0,
+ "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "eventStubScript": null,
+ "eventToFunction": {},
+ "length": 1.0,
+ "lockOrigin": false,
+ "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "playback": 1,
+ "playbackSpeed": 30.0,
+ "playbackSpeedType": 0,
+ "showBackdrop": true,
+ "showBackdropImage": false,
+ "timeUnits": 1,
+ "tracks": [
+ {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[
+ {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"4bcdea5c-3c14-4829-95a4-2e776dac0116","path":"sprites/spr_underwater_layer02/spr_underwater_layer02.yy",},},},"Disabled":false,"id":"84f4358c-ee75-4894-9d0a-aa7ac842e1da","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
+ ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
+ ],
+ "visibleRange": null,
+ "volume": 1.0,
+ "xorigin": 0,
+ "yorigin": 0,
+ },
+ "swatchColours": null,
+ "swfPrecision": 2.525,
+ "textureGroupId": {
+ "name": "Default",
+ "path": "texturegroups/Default",
+ },
+ "type": 0,
+ "VTile": false,
+ "width": 480,
+}
\ No newline at end of file
diff --git a/sprites/spr_underwater_layer03/d5e06d27-9b8f-4fc6-b978-629fd04f0a32.png b/sprites/spr_underwater_layer03/d5e06d27-9b8f-4fc6-b978-629fd04f0a32.png
new file mode 100644
index 0000000..f817bcd
Binary files /dev/null and b/sprites/spr_underwater_layer03/d5e06d27-9b8f-4fc6-b978-629fd04f0a32.png differ
diff --git a/sprites/spr_underwater_layer03/layers/d5e06d27-9b8f-4fc6-b978-629fd04f0a32/b2b66523-fdbc-4201-8bdf-7e1f64151767.png b/sprites/spr_underwater_layer03/layers/d5e06d27-9b8f-4fc6-b978-629fd04f0a32/b2b66523-fdbc-4201-8bdf-7e1f64151767.png
new file mode 100644
index 0000000..f817bcd
Binary files /dev/null and b/sprites/spr_underwater_layer03/layers/d5e06d27-9b8f-4fc6-b978-629fd04f0a32/b2b66523-fdbc-4201-8bdf-7e1f64151767.png differ
diff --git a/sprites/spr_underwater_layer03/spr_underwater_layer03.yy b/sprites/spr_underwater_layer03/spr_underwater_layer03.yy
new file mode 100644
index 0000000..891347b
--- /dev/null
+++ b/sprites/spr_underwater_layer03/spr_underwater_layer03.yy
@@ -0,0 +1,97 @@
+{
+ "resourceType": "GMSprite",
+ "resourceVersion": "1.0",
+ "name": "spr_underwater_layer03",
+ "bbox_bottom": 269,
+ "bbox_left": 0,
+ "bbox_right": 479,
+ "bbox_top": 84,
+ "bboxMode": 0,
+ "collisionKind": 1,
+ "collisionTolerance": 0,
+ "DynamicTexturePage": false,
+ "edgeFiltering": false,
+ "For3D": false,
+ "frames": [
+ {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"d5e06d27-9b8f-4fc6-b978-629fd04f0a32",},
+ ],
+ "gridX": 0,
+ "gridY": 0,
+ "height": 270,
+ "HTile": false,
+ "layers": [
+ {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"b2b66523-fdbc-4201-8bdf-7e1f64151767","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
+ ],
+ "nineSlice": {
+ "resourceType": "GMNineSliceData",
+ "resourceVersion": "1.0",
+ "bottom": 0,
+ "enabled": false,
+ "guideColour": [
+ 4294902015,
+ 4294902015,
+ 4294902015,
+ 4294902015,
+ ],
+ "highlightColour": 1728023040,
+ "highlightStyle": 0,
+ "left": 0,
+ "right": 0,
+ "tileMode": [
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ ],
+ "top": 0,
+ },
+ "origin": 0,
+ "parent": {
+ "name": "Layers",
+ "path": "folders/Sprites/BG/Layers.yy",
+ },
+ "preMultiplyAlpha": false,
+ "sequence": {
+ "resourceType": "GMSequence",
+ "resourceVersion": "1.4",
+ "name": "spr_underwater_layer03",
+ "autoRecord": true,
+ "backdropHeight": 768,
+ "backdropImageOpacity": 0.5,
+ "backdropImagePath": "",
+ "backdropWidth": 1366,
+ "backdropXOffset": 0.0,
+ "backdropYOffset": 0.0,
+ "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "eventStubScript": null,
+ "eventToFunction": {},
+ "length": 1.0,
+ "lockOrigin": false,
+ "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "playback": 1,
+ "playbackSpeed": 30.0,
+ "playbackSpeedType": 0,
+ "showBackdrop": true,
+ "showBackdropImage": false,
+ "timeUnits": 1,
+ "tracks": [
+ {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[
+ {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"d5e06d27-9b8f-4fc6-b978-629fd04f0a32","path":"sprites/spr_underwater_layer03/spr_underwater_layer03.yy",},},},"Disabled":false,"id":"d735136d-c3e3-46cf-879c-8c198de3863f","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
+ ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
+ ],
+ "visibleRange": null,
+ "volume": 1.0,
+ "xorigin": 0,
+ "yorigin": 0,
+ },
+ "swatchColours": null,
+ "swfPrecision": 2.525,
+ "textureGroupId": {
+ "name": "Default",
+ "path": "texturegroups/Default",
+ },
+ "type": 0,
+ "VTile": false,
+ "width": 480,
+}
\ No newline at end of file
diff --git a/sprites/spr_underwater_layer04/e75f2776-0535-42b1-9db1-ec75b507bb7a.png b/sprites/spr_underwater_layer04/e75f2776-0535-42b1-9db1-ec75b507bb7a.png
new file mode 100644
index 0000000..72ec834
Binary files /dev/null and b/sprites/spr_underwater_layer04/e75f2776-0535-42b1-9db1-ec75b507bb7a.png differ
diff --git a/sprites/spr_underwater_layer04/layers/e75f2776-0535-42b1-9db1-ec75b507bb7a/1b096359-df3e-414e-826a-43e1b91e6eae.png b/sprites/spr_underwater_layer04/layers/e75f2776-0535-42b1-9db1-ec75b507bb7a/1b096359-df3e-414e-826a-43e1b91e6eae.png
new file mode 100644
index 0000000..72ec834
Binary files /dev/null and b/sprites/spr_underwater_layer04/layers/e75f2776-0535-42b1-9db1-ec75b507bb7a/1b096359-df3e-414e-826a-43e1b91e6eae.png differ
diff --git a/sprites/spr_underwater_layer04/spr_underwater_layer04.yy b/sprites/spr_underwater_layer04/spr_underwater_layer04.yy
new file mode 100644
index 0000000..745a68c
--- /dev/null
+++ b/sprites/spr_underwater_layer04/spr_underwater_layer04.yy
@@ -0,0 +1,97 @@
+{
+ "resourceType": "GMSprite",
+ "resourceVersion": "1.0",
+ "name": "spr_underwater_layer04",
+ "bbox_bottom": 269,
+ "bbox_left": 0,
+ "bbox_right": 479,
+ "bbox_top": 105,
+ "bboxMode": 0,
+ "collisionKind": 1,
+ "collisionTolerance": 0,
+ "DynamicTexturePage": false,
+ "edgeFiltering": false,
+ "For3D": false,
+ "frames": [
+ {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"e75f2776-0535-42b1-9db1-ec75b507bb7a",},
+ ],
+ "gridX": 0,
+ "gridY": 0,
+ "height": 270,
+ "HTile": false,
+ "layers": [
+ {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"1b096359-df3e-414e-826a-43e1b91e6eae","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
+ ],
+ "nineSlice": {
+ "resourceType": "GMNineSliceData",
+ "resourceVersion": "1.0",
+ "bottom": 0,
+ "enabled": false,
+ "guideColour": [
+ 4294902015,
+ 4294902015,
+ 4294902015,
+ 4294902015,
+ ],
+ "highlightColour": 1728023040,
+ "highlightStyle": 0,
+ "left": 0,
+ "right": 0,
+ "tileMode": [
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ ],
+ "top": 0,
+ },
+ "origin": 0,
+ "parent": {
+ "name": "Layers",
+ "path": "folders/Sprites/BG/Layers.yy",
+ },
+ "preMultiplyAlpha": false,
+ "sequence": {
+ "resourceType": "GMSequence",
+ "resourceVersion": "1.4",
+ "name": "spr_underwater_layer04",
+ "autoRecord": true,
+ "backdropHeight": 768,
+ "backdropImageOpacity": 0.5,
+ "backdropImagePath": "",
+ "backdropWidth": 1366,
+ "backdropXOffset": 0.0,
+ "backdropYOffset": 0.0,
+ "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "eventStubScript": null,
+ "eventToFunction": {},
+ "length": 1.0,
+ "lockOrigin": false,
+ "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "playback": 1,
+ "playbackSpeed": 30.0,
+ "playbackSpeedType": 0,
+ "showBackdrop": true,
+ "showBackdropImage": false,
+ "timeUnits": 1,
+ "tracks": [
+ {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[
+ {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"e75f2776-0535-42b1-9db1-ec75b507bb7a","path":"sprites/spr_underwater_layer04/spr_underwater_layer04.yy",},},},"Disabled":false,"id":"e495b2b3-173c-4677-9409-2680870fcd51","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
+ ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
+ ],
+ "visibleRange": null,
+ "volume": 1.0,
+ "xorigin": 0,
+ "yorigin": 0,
+ },
+ "swatchColours": null,
+ "swfPrecision": 2.525,
+ "textureGroupId": {
+ "name": "Default",
+ "path": "texturegroups/Default",
+ },
+ "type": 0,
+ "VTile": false,
+ "width": 480,
+}
\ No newline at end of file
diff --git a/sprites/spr_underwater_layer05/b737a9c8-8f1e-4c64-ae64-398dec4c5f7e.png b/sprites/spr_underwater_layer05/b737a9c8-8f1e-4c64-ae64-398dec4c5f7e.png
new file mode 100644
index 0000000..9ee50b4
Binary files /dev/null and b/sprites/spr_underwater_layer05/b737a9c8-8f1e-4c64-ae64-398dec4c5f7e.png differ
diff --git a/sprites/spr_underwater_layer05/layers/b737a9c8-8f1e-4c64-ae64-398dec4c5f7e/40bfaf72-0526-41f2-8f80-97caf05c5274.png b/sprites/spr_underwater_layer05/layers/b737a9c8-8f1e-4c64-ae64-398dec4c5f7e/40bfaf72-0526-41f2-8f80-97caf05c5274.png
new file mode 100644
index 0000000..9ee50b4
Binary files /dev/null and b/sprites/spr_underwater_layer05/layers/b737a9c8-8f1e-4c64-ae64-398dec4c5f7e/40bfaf72-0526-41f2-8f80-97caf05c5274.png differ
diff --git a/sprites/spr_underwater_layer05/spr_underwater_layer05.yy b/sprites/spr_underwater_layer05/spr_underwater_layer05.yy
new file mode 100644
index 0000000..ad3653f
--- /dev/null
+++ b/sprites/spr_underwater_layer05/spr_underwater_layer05.yy
@@ -0,0 +1,97 @@
+{
+ "resourceType": "GMSprite",
+ "resourceVersion": "1.0",
+ "name": "spr_underwater_layer05",
+ "bbox_bottom": 269,
+ "bbox_left": 0,
+ "bbox_right": 479,
+ "bbox_top": 108,
+ "bboxMode": 0,
+ "collisionKind": 1,
+ "collisionTolerance": 0,
+ "DynamicTexturePage": false,
+ "edgeFiltering": false,
+ "For3D": false,
+ "frames": [
+ {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"b737a9c8-8f1e-4c64-ae64-398dec4c5f7e",},
+ ],
+ "gridX": 0,
+ "gridY": 0,
+ "height": 270,
+ "HTile": false,
+ "layers": [
+ {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"40bfaf72-0526-41f2-8f80-97caf05c5274","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
+ ],
+ "nineSlice": {
+ "resourceType": "GMNineSliceData",
+ "resourceVersion": "1.0",
+ "bottom": 0,
+ "enabled": false,
+ "guideColour": [
+ 4294902015,
+ 4294902015,
+ 4294902015,
+ 4294902015,
+ ],
+ "highlightColour": 1728023040,
+ "highlightStyle": 0,
+ "left": 0,
+ "right": 0,
+ "tileMode": [
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ ],
+ "top": 0,
+ },
+ "origin": 0,
+ "parent": {
+ "name": "Layers",
+ "path": "folders/Sprites/BG/Layers.yy",
+ },
+ "preMultiplyAlpha": false,
+ "sequence": {
+ "resourceType": "GMSequence",
+ "resourceVersion": "1.4",
+ "name": "spr_underwater_layer05",
+ "autoRecord": true,
+ "backdropHeight": 768,
+ "backdropImageOpacity": 0.5,
+ "backdropImagePath": "",
+ "backdropWidth": 1366,
+ "backdropXOffset": 0.0,
+ "backdropYOffset": 0.0,
+ "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "eventStubScript": null,
+ "eventToFunction": {},
+ "length": 1.0,
+ "lockOrigin": false,
+ "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],},
+ "playback": 1,
+ "playbackSpeed": 30.0,
+ "playbackSpeedType": 0,
+ "showBackdrop": true,
+ "showBackdropImage": false,
+ "timeUnits": 1,
+ "tracks": [
+ {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[
+ {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"b737a9c8-8f1e-4c64-ae64-398dec4c5f7e","path":"sprites/spr_underwater_layer05/spr_underwater_layer05.yy",},},},"Disabled":false,"id":"06a15665-e101-405e-bb42-cde890d716f0","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
+ ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
+ ],
+ "visibleRange": null,
+ "volume": 1.0,
+ "xorigin": 0,
+ "yorigin": 0,
+ },
+ "swatchColours": null,
+ "swfPrecision": 2.525,
+ "textureGroupId": {
+ "name": "Default",
+ "path": "texturegroups/Default",
+ },
+ "type": 0,
+ "VTile": false,
+ "width": 480,
+}
\ No newline at end of file
diff --git a/stanncam.resource_order b/stanncam.resource_order
index f7cb374..3a05f3f 100644
--- a/stanncam.resource_order
+++ b/stanncam.resource_order
@@ -1,28 +1,51 @@
{
"FolderOrderSettings": [
+ {"name":"sidescroller","order":11,"path":"folders/Objects/sidescroller.yy",},
+ {"name":"topdown","order":10,"path":"folders/Objects/topdown.yy",},
+ {"name":"BG","order":16,"path":"folders/Sprites/BG.yy",},
+ {"name":"Layers","order":1,"path":"folders/Sprites/BG/Layers.yy",},
+ {"name":"gui","order":13,"path":"folders/Sprites/gui.yy",},
+ {"name":"players","order":15,"path":"folders/Sprites/players.yy",},
+ {"name":"tile","order":14,"path":"folders/Sprites/tile.yy",},
{"name":"Animation_curves - add more if needed","order":5,"path":"folders/STANNcam/Animation_curves - add more if needed.yy",},
],
"ResourceOrderSettings": [
+ {"name":"spr_underwater","order":2,"path":"sprites/spr_underwater/spr_underwater.yy",},
+ {"name":"spr_underwater_layer03","order":3,"path":"sprites/spr_underwater_layer03/spr_underwater_layer03.yy",},
+ {"name":"spr_pengu2","order":5,"path":"sprites/spr_pengu2/spr_pengu2.yy",},
+ {"name":"rm_sidescroller","order":1,"path":"rooms/rm_sidescroller/rm_sidescroller.yy",},
{"name":"f_pixel","order":1,"path":"fonts/f_pixel/f_pixel.yy",},
+ {"name":"obj_player_sidescroller2","order":3,"path":"objects/obj_player_sidescroller2/obj_player_sidescroller2.yy",},
+ {"name":"rm_init","order":2,"path":"rooms/rm_init/rm_init.yy",},
{"name":"obj_player","order":2,"path":"objects/obj_player/obj_player.yy",},
{"name":"spr_arrow_small","order":1,"path":"sprites/spr_arrow_small/spr_arrow_small.yy",},
+ {"name":"obj_player_sidescroller","order":2,"path":"objects/obj_player_sidescroller/obj_player_sidescroller.yy",},
{"name":"spr_tv","order":9,"path":"sprites/spr_tv/spr_tv.yy",},
{"name":"stanncam","order":3,"path":"scripts/stanncam/stanncam.yy",},
{"name":"stanncam_animcurve","order":1,"path":"scripts/stanncam_animcurve/stanncam_animcurve.yy",},
+ {"name":"spr_underwater_layer01","order":1,"path":"sprites/spr_underwater_layer01/spr_underwater_layer01.yy",},
{"name":"obj_camera","order":1,"path":"objects/obj_camera/obj_camera.yy",},
+ {"name":"spr_underwater_layer04","order":4,"path":"sprites/spr_underwater_layer04/spr_underwater_layer04.yy",},
+ {"name":"draw_sprite_ext_tiled","order":1,"path":"scripts/draw_sprite_ext_tiled/draw_sprite_ext_tiled.yy",},
{"name":"obj_player2","order":3,"path":"objects/obj_player2/obj_player2.yy",},
+ {"name":"spr_pengu","order":4,"path":"sprites/spr_pengu/spr_pengu.yy",},
{"name":"stanncam_ac_ease","order":1,"path":"animcurves/stanncam_ac_ease/stanncam_ac_ease.yy",},
{"name":"stanncam_manager","order":4,"path":"scripts/stanncam_manager/stanncam_manager.yy",},
- {"name":"spr_tile_bg","order":8,"path":"sprites/spr_tile_bg/spr_tile_bg.yy",},
+ {"name":"ts_pixel_side_Underwater","order":2,"path":"tilesets/ts_pixel_side_Underwater/ts_pixel_side_Underwater.yy",},
+ {"name":"spr_tile_bg","order":2,"path":"sprites/spr_tile_bg/spr_tile_bg.yy",},
{"name":"obj_tv","order":4,"path":"objects/obj_tv/obj_tv.yy",},
- {"name":"spr_bg","order":3,"path":"sprites/spr_bg/spr_bg.yy",},
- {"name":"spr_player_idle","order":4,"path":"sprites/spr_player_idle/spr_player_idle.yy",},
+ {"name":"obj_collision","order":1,"path":"objects/obj_collision/obj_collision.yy",},
+ {"name":"spr_bg","order":1,"path":"sprites/spr_bg/spr_bg.yy",},
+ {"name":"spr_underwater_layer05","order":5,"path":"sprites/spr_underwater_layer05/spr_underwater_layer05.yy",},
{"name":"spr_ball","order":2,"path":"sprites/spr_ball/spr_ball.yy",},
{"name":"stanncam_shake","order":2,"path":"scripts/stanncam_shake/stanncam_shake.yy",},
- {"name":"TileSet1","order":10,"path":"tilesets/TileSet1/TileSet1.yy",},
- {"name":"spr_player2_moving","order":7,"path":"sprites/spr_player2_moving/spr_player2_moving.yy",},
- {"name":"spr_player_moving","order":5,"path":"sprites/spr_player_moving/spr_player_moving.yy",},
+ {"name":"TileSet1","order":1,"path":"tilesets/TileSet1/TileSet1.yy",},
+ {"name":"spr_player2_moving","order":3,"path":"sprites/spr_player2_moving/spr_player2_moving.yy",},
+ {"name":"spr_collision","order":3,"path":"sprites/spr_collision/spr_collision.yy",},
+ {"name":"spr_player_moving","order":1,"path":"sprites/spr_player_moving/spr_player_moving.yy",},
+ {"name":"obj_game_controller","order":6,"path":"objects/obj_game_controller/obj_game_controller.yy",},
{"name":"stanncam_ac_bouncy","order":2,"path":"animcurves/stanncam_ac_bouncy/stanncam_ac_bouncy.yy",},
- {"name":"spr_player2_idle","order":6,"path":"sprites/spr_player2_idle/spr_player2_idle.yy",},
+ {"name":"spr_underwater_layer02","order":2,"path":"sprites/spr_underwater_layer02/spr_underwater_layer02.yy",},
+ {"name":"spr_player2_idle","order":2,"path":"sprites/spr_player2_idle/spr_player2_idle.yy",},
],
}
\ No newline at end of file
diff --git a/stanncam.yyp b/stanncam.yyp
index f18f308..78551ca 100644
--- a/stanncam.yyp
+++ b/stanncam.yyp
@@ -13,13 +13,20 @@
"Folders": [
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"Fonts","folderPath":"folders/Fonts.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"Objects","folderPath":"folders/Objects.yy",},
+ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"sidescroller","folderPath":"folders/Objects/sidescroller.yy",},
+ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"topdown","folderPath":"folders/Objects/topdown.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"Rooms","folderPath":"folders/Rooms.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"Scripts","folderPath":"folders/Scripts.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"Sprites","folderPath":"folders/Sprites.yy",},
+ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"BG","folderPath":"folders/Sprites/BG.yy",},
+ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Layers","folderPath":"folders/Sprites/BG/Layers.yy",},
+ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"gui","folderPath":"folders/Sprites/gui.yy",},
+ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"players","folderPath":"folders/Sprites/players.yy",},
+ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"tile","folderPath":"folders/Sprites/tile.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"STANNcam","folderPath":"folders/STANNcam.yy",},
+ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Animation_curves - add more if needed","folderPath":"folders/STANNcam/Animation_curves - add more if needed.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"Miscellaneous","folderPath":"folders/STANNcam/Miscellaneous.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"Tile Sets","folderPath":"folders/Tile Sets.yy",},
- {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Animation_curves - add more if needed","folderPath":"folders/STANNcam/Animation_curves - add more if needed.yy",},
],
"IncludedFiles": [],
"isEcma": false,
@@ -28,37 +35,59 @@
"IDEVersion": "2023.6.0.92",
},
"resources": [
+ {"id":{"name":"spr_underwater","path":"sprites/spr_underwater/spr_underwater.yy",},},
+ {"id":{"name":"spr_underwater_layer03","path":"sprites/spr_underwater_layer03/spr_underwater_layer03.yy",},},
+ {"id":{"name":"spr_pengu2","path":"sprites/spr_pengu2/spr_pengu2.yy",},},
+ {"id":{"name":"rm_sidescroller","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},},
{"id":{"name":"f_pixel","path":"fonts/f_pixel/f_pixel.yy",},},
+ {"id":{"name":"obj_player_sidescroller2","path":"objects/obj_player_sidescroller2/obj_player_sidescroller2.yy",},},
+ {"id":{"name":"rm_init","path":"rooms/rm_init/rm_init.yy",},},
+ {"id":{"name":"spr_underwater_layer00","path":"sprites/spr_underwater_layer00/spr_underwater_layer00.yy",},},
{"id":{"name":"obj_player","path":"objects/obj_player/obj_player.yy",},},
{"id":{"name":"spr_arrow_small","path":"sprites/spr_arrow_small/spr_arrow_small.yy",},},
+ {"id":{"name":"obj_player_sidescroller","path":"objects/obj_player_sidescroller/obj_player_sidescroller.yy",},},
{"id":{"name":"spr_tv","path":"sprites/spr_tv/spr_tv.yy",},},
{"id":{"name":"rm_test","path":"rooms/rm_test/rm_test.yy",},},
{"id":{"name":"stanncam","path":"scripts/stanncam/stanncam.yy",},},
{"id":{"name":"stanncam_animcurve","path":"scripts/stanncam_animcurve/stanncam_animcurve.yy",},},
+ {"id":{"name":"spr_underwater_layer01","path":"sprites/spr_underwater_layer01/spr_underwater_layer01.yy",},},
{"id":{"name":"draw_text_outline","path":"scripts/draw_text_outline/draw_text_outline.yy",},},
{"id":{"name":"obj_camera","path":"objects/obj_camera/obj_camera.yy",},},
+ {"id":{"name":"spr_underwater_layer04","path":"sprites/spr_underwater_layer04/spr_underwater_layer04.yy",},},
+ {"id":{"name":"draw_sprite_ext_tiled","path":"scripts/draw_sprite_ext_tiled/draw_sprite_ext_tiled.yy",},},
{"id":{"name":"obj_ball","path":"objects/obj_ball/obj_ball.yy",},},
{"id":{"name":"spr_arrow","path":"sprites/spr_arrow/spr_arrow.yy",},},
{"id":{"name":"obj_player2","path":"objects/obj_player2/obj_player2.yy",},},
+ {"id":{"name":"spr_pengu","path":"sprites/spr_pengu/spr_pengu.yy",},},
{"id":{"name":"stanncam_ac_ease","path":"animcurves/stanncam_ac_ease/stanncam_ac_ease.yy",},},
{"id":{"name":"stanncam_manager","path":"scripts/stanncam_manager/stanncam_manager.yy",},},
+ {"id":{"name":"ts_pixel_side_Underwater","path":"tilesets/ts_pixel_side_Underwater/ts_pixel_side_Underwater.yy",},},
{"id":{"name":"spr_tile_bg","path":"sprites/spr_tile_bg/spr_tile_bg.yy",},},
{"id":{"name":"stanncam_ac_linear","path":"animcurves/stanncam_ac_linear/stanncam_ac_linear.yy",},},
{"id":{"name":"obj_tv","path":"objects/obj_tv/obj_tv.yy",},},
+ {"id":{"name":"obj_collision","path":"objects/obj_collision/obj_collision.yy",},},
{"id":{"name":"spr_bg","path":"sprites/spr_bg/spr_bg.yy",},},
{"id":{"name":"spr_player_idle","path":"sprites/spr_player_idle/spr_player_idle.yy",},},
+ {"id":{"name":"obj_camera_sidescroller","path":"objects/obj_camera_sidescroller/obj_camera_sidescroller.yy",},},
+ {"id":{"name":"spr_underwater_layer05","path":"sprites/spr_underwater_layer05/spr_underwater_layer05.yy",},},
{"id":{"name":"spr_ball","path":"sprites/spr_ball/spr_ball.yy",},},
{"id":{"name":"stanncam_shake","path":"scripts/stanncam_shake/stanncam_shake.yy",},},
{"id":{"name":"TileSet1","path":"tilesets/TileSet1/TileSet1.yy",},},
+ {"id":{"name":"spr_pixel_side_Underwater","path":"sprites/spr_pixel_side_Underwater/spr_pixel_side_Underwater.yy",},},
{"id":{"name":"spr_player2_moving","path":"sprites/spr_player2_moving/spr_player2_moving.yy",},},
+ {"id":{"name":"spr_collision","path":"sprites/spr_collision/spr_collision.yy",},},
{"id":{"name":"spr_player_moving","path":"sprites/spr_player_moving/spr_player_moving.yy",},},
{"id":{"name":"__obj_stanncam_manager","path":"objects/__obj_stanncam_manager/__obj_stanncam_manager.yy",},},
+ {"id":{"name":"obj_game_controller","path":"objects/obj_game_controller/obj_game_controller.yy",},},
{"id":{"name":"stanncam_ac_bouncy","path":"animcurves/stanncam_ac_bouncy/stanncam_ac_bouncy.yy",},},
+ {"id":{"name":"spr_underwater_layer02","path":"sprites/spr_underwater_layer02/spr_underwater_layer02.yy",},},
{"id":{"name":"spr_player2_idle","path":"sprites/spr_player2_idle/spr_player2_idle.yy",},},
{"id":{"name":"f_hires","path":"fonts/f_hires/f_hires.yy",},},
],
"RoomOrderNodes": [
+ {"roomId":{"name":"rm_init","path":"rooms/rm_init/rm_init.yy",},},
{"roomId":{"name":"rm_test","path":"rooms/rm_test/rm_test.yy",},},
+ {"roomId":{"name":"rm_sidescroller","path":"rooms/rm_sidescroller/rm_sidescroller.yy",},},
],
"TextureGroups": [
{"resourceType":"GMTextureGroup","resourceVersion":"1.3","name":"Default","autocrop":true,"border":2,"compressFormat":"bz2","directory":"","groupParent":null,"isScaled":true,"loadType":"default","mipsToGenerate":0,"targets":-1,},
diff --git a/tilesets/TileSet1/TileSet1.yy b/tilesets/TileSet1/TileSet1.yy
index 05e7ea3..77d6c95 100644
--- a/tilesets/TileSet1/TileSet1.yy
+++ b/tilesets/TileSet1/TileSet1.yy
@@ -12,8 +12,8 @@
"out_tilehborder": 2,
"out_tilevborder": 2,
"parent": {
- "name": "Sprites",
- "path": "folders/Sprites.yy",
+ "name": "Tile Sets",
+ "path": "folders/Tile Sets.yy",
},
"spriteId": {
"name": "spr_tile_bg",
diff --git a/tilesets/TileSet1/output_tileset.png b/tilesets/TileSet1/output_tileset.png
index 3274692..68b83bb 100644
Binary files a/tilesets/TileSet1/output_tileset.png and b/tilesets/TileSet1/output_tileset.png differ
diff --git a/tilesets/ts_pixel_side_Underwater/output_tileset.png b/tilesets/ts_pixel_side_Underwater/output_tileset.png
new file mode 100644
index 0000000..980ec48
Binary files /dev/null and b/tilesets/ts_pixel_side_Underwater/output_tileset.png differ
diff --git a/tilesets/ts_pixel_side_Underwater/ts_pixel_side_Underwater.yy b/tilesets/ts_pixel_side_Underwater/ts_pixel_side_Underwater.yy
new file mode 100644
index 0000000..20ca92c
--- /dev/null
+++ b/tilesets/ts_pixel_side_Underwater/ts_pixel_side_Underwater.yy
@@ -0,0 +1,139 @@
+{
+ "resourceType": "GMTileSet",
+ "resourceVersion": "1.0",
+ "name": "ts_pixel_side_Underwater",
+ "autoTileSets": [
+ {"resourceType":"GMAutoTileSet","resourceVersion":"1.0","name":"47 Tile Side Underwater","closed_edge":false,"tiles":[
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ ],},
+ ],
+ "macroPageTiles": {
+ "SerialiseHeight": 0,
+ "SerialiseWidth": 0,
+ "TileSerialiseData": [],
+ },
+ "out_columns": 7,
+ "out_tilehborder": 2,
+ "out_tilevborder": 2,
+ "parent": {
+ "name": "Tile Sets",
+ "path": "folders/Tile Sets.yy",
+ },
+ "spriteId": {
+ "name": "spr_pixel_side_Underwater",
+ "path": "sprites/spr_pixel_side_Underwater/spr_pixel_side_Underwater.yy",
+ },
+ "spriteNoExport": true,
+ "textureGroupId": {
+ "name": "Default",
+ "path": "texturegroups/Default",
+ },
+ "tile_count": 48,
+ "tileAnimation": {
+ "FrameData": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ ],
+ "SerialiseFrameCount": 1,
+ },
+ "tileAnimationFrames": [],
+ "tileAnimationSpeed": 15.0,
+ "tileHeight": 32,
+ "tilehsep": 0,
+ "tilevsep": 0,
+ "tileWidth": 32,
+ "tilexoff": 0,
+ "tileyoff": 0,
+}
\ No newline at end of file