DrDuck0117 3 mesiacov pred
rodič
commit
e07d879bc8

+ 2 - 1
ddmyx.yyp

@@ -12,10 +12,10 @@
   "Folders":[
     {"$GMFolder":"","%Name":"CoreObjects","folderPath":"folders/CoreObjects.yy","name":"CoreObjects","resourceType":"GMFolder","resourceVersion":"2.0",},
     {"$GMFolder":"","%Name":"Enemy","folderPath":"folders/Enemy.yy","name":"Enemy","resourceType":"GMFolder","resourceVersion":"2.0",},
-    {"$GMFolder":"","%Name":"oEnemyFlying","folderPath":"folders/Enemy/oEnemyFlying.yy","name":"oEnemyFlying","resourceType":"GMFolder","resourceVersion":"2.0",},
     {"$GMFolder":"","%Name":"oEnemyCorpse","folderPath":"folders/Enemy/oEnemyCorpse.yy","name":"oEnemyCorpse","resourceType":"GMFolder","resourceVersion":"2.0",},
     {"$GMFolder":"","%Name":"oEnemyCrawl","folderPath":"folders/Enemy/oEnemyCrawl.yy","name":"oEnemyCrawl","resourceType":"GMFolder","resourceVersion":"2.0",},
     {"$GMFolder":"","%Name":"oEnemyDummy","folderPath":"folders/Enemy/oEnemyDummy.yy","name":"oEnemyDummy","resourceType":"GMFolder","resourceVersion":"2.0",},
+    {"$GMFolder":"","%Name":"oEnemyFlying","folderPath":"folders/Enemy/oEnemyFlying.yy","name":"oEnemyFlying","resourceType":"GMFolder","resourceVersion":"2.0",},
     {"$GMFolder":"","%Name":"oEnemyFlyingTrack","folderPath":"folders/Enemy/oEnemyFlyingTrack.yy","name":"oEnemyFlyingTrack","resourceType":"GMFolder","resourceVersion":"2.0",},
     {"$GMFolder":"","%Name":"ParticleEffects","folderPath":"folders/ParticleEffects.yy","name":"ParticleEffects","resourceType":"GMFolder","resourceVersion":"2.0",},
     {"$GMFolder":"","%Name":"Player","folderPath":"folders/Player.yy","name":"Player","resourceType":"GMFolder","resourceVersion":"2.0",},
@@ -72,6 +72,7 @@
     {"id":{"name":"oParentEntity","path":"objects/oParentEntity/oParentEntity.yy",},},
     {"id":{"name":"oParentHazard","path":"objects/oParentHazard/oParentHazard.yy",},},
     {"id":{"name":"oParentInteractive","path":"objects/oParentInteractive/oParentInteractive.yy",},},
+    {"id":{"name":"oParentObstacle","path":"objects/oParentObstacle/oParentObstacle.yy",},},
     {"id":{"name":"oParentSolid","path":"objects/oParentSolid/oParentSolid.yy",},},
     {"id":{"name":"oParticleManager","path":"objects/oParticleManager/oParticleManager.yy",},},
     {"id":{"name":"oPlayer","path":"objects/oPlayer/oPlayer.yy",},},

+ 13 - 1
notes/更新日志DrDuck/更新日志DrDuck.txt

@@ -203,4 +203,16 @@ global.player是游戏内玩家inst_id
 具体优化过程极为复杂
 
 7. 新增oParentEntity作为几乎所有可交互(实际上是具有受击反馈)对象的父类!
-比如oParentSolid, oParentEnemy...
+比如oParentSolid, oParentEnemy...
+
+2025/2/24 drduck
+
+1. 优化普适敌人ai
+例如撞墙/撞刺预判
+
+2. 考虑在3/6学校活动前完成第一版原型进行有奖试玩活动
+-基础粒子效果
+-简单音效、地图/boss曲各一首
+-基础物理引擎
+-可视化UI与交互
+-两张地图、一个小boss

+ 1 - 1
objects/oEnemyCrawl/Create_0.gml

@@ -3,7 +3,7 @@ event_inherited();
 walk_spd = 2.5;
 hp = 15;
 
-credit = 10;
+credit = 5;
 
 enemy_ai = enemy_crawl_ai;
 

+ 4 - 1
objects/oEnemyDummy/Create_0.gml

@@ -7,4 +7,7 @@ enemy_ai = enemy_dummy_ai;
 
 state = "IDLE";
 
-hitbox = enemy_create_hitboxBC(88, 180);
+hitbox = enemy_create_hitboxBC(88, 180);
+hitbox.damage = 2;
+
+has_ink = false;

+ 2 - 0
objects/oEnemyFlying/Create_0.gml

@@ -9,6 +9,8 @@ y_base_spd = lengthdir_y(fly_spd, _dir);
 
 facing_y = 1;
 
+credit = 5;
+
 enemy_ai = enemy_flying_ai;
 
 hitbox = enemy_create_hitboxMC(56, 56);

+ 2 - 0
objects/oEnemyFlyingTrack/Create_0.gml

@@ -7,6 +7,8 @@ range = 1080;
 acc = 0.125;
 hp = 100;
 
+credit = 5;
+
 enemy_ai = enemy_flying_track_ai;
 
 hitbox = enemy_create_hitboxMC(56, 56);

+ 6 - 2
objects/oParentEnemy/Create_0.gml

@@ -1,6 +1,7 @@
 get_hit = function(_info)
 {
-	player_add_INK(1);
+	if has_ink
+		player_add_INK(1);
 	
 	flash_timer = 6;
 	flash_duration = 6;
@@ -21,10 +22,13 @@ get_hit = function(_info)
 
 x_spd = 0;
 y_spd = 0;
-facing = 1;
+facing_x = 1;
+facing_y = 1;
 
 credit = 0;
 
+has_ink = true;
+
 hp = 1;
 
 hitstun_timer = 0;

+ 2 - 0
objects/oParentEnemy/Step_0.gml

@@ -5,6 +5,8 @@ image_index += animation_spd;
 
 enemy_ai();
 
+enemy_check_hazard();
+
 enemy_check_hitstun();
 
 enemy_move_and_collide();

+ 2 - 2
objects/oParentHazard/oParentHazard.yy

@@ -12,8 +12,8 @@
     "path":"folders/StationaryObjects/HazardObjects.yy",
   },
   "parentObjectId":{
-    "name":"oParentEntity",
-    "path":"objects/oParentEntity/oParentEntity.yy",
+    "name":"oParentObstacle",
+    "path":"objects/oParentObstacle/oParentObstacle.yy",
   },
   "persistent":false,
   "physicsAngularDamping":0.1,

+ 36 - 0
objects/oParentObstacle/oParentObstacle.yy

@@ -0,0 +1,36 @@
+{
+  "$GMObject":"",
+  "%Name":"oParentObstacle",
+  "eventList":[],
+  "managed":true,
+  "name":"oParentObstacle",
+  "overriddenProperties":[],
+  "parent":{
+    "name":"StationaryObjects",
+    "path":"folders/StationaryObjects.yy",
+  },
+  "parentObjectId":{
+    "name":"oParentEntity",
+    "path":"objects/oParentEntity/oParentEntity.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":[],
+  "resourceType":"GMObject",
+  "resourceVersion":"2.0",
+  "solid":false,
+  "spriteId":null,
+  "spriteMaskId":null,
+  "visible":true,
+}

+ 2 - 2
objects/oParentSolid/oParentSolid.yy

@@ -10,8 +10,8 @@
     "path":"folders/StationaryObjects/SolidObjects.yy",
   },
   "parentObjectId":{
-    "name":"oParentEntity",
-    "path":"objects/oParentEntity/oParentEntity.yy",
+    "name":"oParentObstacle",
+    "path":"objects/oParentObstacle/oParentObstacle.yy",
   },
   "persistent":false,
   "physicsAngularDamping":0.1,

+ 2 - 6
rooms/rTest_1/rTest_1.yy

@@ -515,7 +515,6 @@
     {"name":"inst_4386D1B8","path":"rooms/rTest_1/rTest_1.yy",},
     {"name":"inst_69C973EB","path":"rooms/rTest_1/rTest_1.yy",},
     {"name":"inst_10A9A902","path":"rooms/rTest_1/rTest_1.yy",},
-    {"name":"inst_4F0A848A","path":"rooms/rTest_1/rTest_1.yy",},
     {"name":"inst_18CEEF87","path":"rooms/rTest_1/rTest_1.yy",},
     {"name":"inst_3DD23708","path":"rooms/rTest_1/rTest_1.yy",},
   ],
@@ -1041,11 +1040,8 @@
             {"$GMOverriddenProperty":"v1","%Name":"","name":"","objectId":{"name":"oDoor","path":"objects/oDoor/oDoor.yy",},"propertyId":{"name":"door_direction","path":"objects/oDoor/oDoor.yy",},"resourceType":"GMOverriddenProperty","resourceVersion":"2.0","value":"RIGHT",},
             {"$GMOverriddenProperty":"v1","%Name":"","name":"","objectId":{"name":"oDoor","path":"objects/oDoor/oDoor.yy",},"propertyId":{"name":"target_room","path":"objects/oDoor/oDoor.yy",},"resource":{"name":"rTest_2","path":"rooms/rTest_2/rTest_2.yy",},"resourceType":"GMOverriddenProperty","resourceVersion":"2.0","value":"rTest_2",},
           ],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":-64.0,"y":1536.0,},
-        {"$GMRInstance":"v4","%Name":"inst_4F0A848A","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_4F0A848A","objectId":{"name":"oSlicedApple","path":"objects/oSlicedApple/oSlicedApple.yy",},"properties":[
-            {"$GMOverriddenProperty":"v1","%Name":"","name":"","objectId":{"name":"oParentCollectable","path":"objects/oParentCollectable/oParentCollectable.yy",},"propertyId":{"name":"uuid","path":"objects/oParentCollectable/oParentCollectable.yy",},"resourceType":"GMOverriddenProperty","resourceVersion":"2.0","value":"rTest_1_sa",},
-          ],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":128.0,"y":320.0,},
-        {"$GMRInstance":"v4","%Name":"inst_18CEEF87","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_18CEEF87","objectId":{"name":"oEnemyFlyingTrack","path":"objects/oEnemyFlyingTrack/oEnemyFlyingTrack.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":1600.0,"y":1504.0,},
-        {"$GMRInstance":"v4","%Name":"inst_3DD23708","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_3DD23708","objectId":{"name":"oEnemyFlying","path":"objects/oEnemyFlying/oEnemyFlying.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":288.0,"y":800.0,},
+        {"$GMRInstance":"v4","%Name":"inst_18CEEF87","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_18CEEF87","objectId":{"name":"oEnemyFlyingTrack","path":"objects/oEnemyFlyingTrack/oEnemyFlyingTrack.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":3072.0,"y":320.0,},
+        {"$GMRInstance":"v4","%Name":"inst_3DD23708","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_3DD23708","objectId":{"name":"oEnemyFlying","path":"objects/oEnemyFlying/oEnemyFlying.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":192.0,"y":160.0,},
       ],"layers":[],"name":"Instances","properties":[],"resourceType":"GMRInstanceLayer","resourceVersion":"2.0","userdefinedDepth":false,"visible":true,},
     {"$GMRBackgroundLayer":"","%Name":"Background","animationFPS":15.0,"animationSpeedType":0,"colour":4278190080,"depth":100,"effectEnabled":true,"effectType":null,"gridX":32,"gridY":32,"hierarchyFrozen":false,"hspeed":0.0,"htiled":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"layers":[],"name":"Background","properties":[],"resourceType":"GMRBackgroundLayer","resourceVersion":"2.0","spriteId":null,"stretch":false,"userdefinedAnimFPS":false,"userdefinedDepth":false,"visible":true,"vspeed":0.0,"vtiled":false,"x":0,"y":0,},
   ],

+ 4 - 0
rooms/rTest_2/rTest_2.yy

@@ -96,6 +96,7 @@
     {"name":"inst_6E887A6C","path":"rooms/rTest_2/rTest_2.yy",},
     {"name":"inst_116B582C","path":"rooms/rTest_2/rTest_2.yy",},
     {"name":"inst_1BC019CB","path":"rooms/rTest_2/rTest_2.yy",},
+    {"name":"inst_4F0A848A","path":"rooms/rTest_2/rTest_2.yy",},
   ],
   "isDnd":false,
   "layers":[
@@ -202,6 +203,9 @@
         {"$GMRInstance":"v4","%Name":"inst_6E887A6C","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_6E887A6C","objectId":{"name":"oBlockSlippery","path":"objects/oBlockSlippery/oBlockSlippery.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":3968.0,"y":928.0,},
         {"$GMRInstance":"v4","%Name":"inst_116B582C","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_116B582C","objectId":{"name":"oBlockSlippery","path":"objects/oBlockSlippery/oBlockSlippery.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":3968.0,"y":864.0,},
         {"$GMRInstance":"v4","%Name":"inst_1BC019CB","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_1BC019CB","objectId":{"name":"oBlockSlippery","path":"objects/oBlockSlippery/oBlockSlippery.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":3968.0,"y":800.0,},
+        {"$GMRInstance":"v4","%Name":"inst_4F0A848A","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_4F0A848A","objectId":{"name":"oSlicedApple","path":"objects/oSlicedApple/oSlicedApple.yy",},"properties":[
+            {"$GMOverriddenProperty":"v1","%Name":"","name":"","objectId":{"name":"oParentCollectable","path":"objects/oParentCollectable/oParentCollectable.yy",},"propertyId":{"name":"uuid","path":"objects/oParentCollectable/oParentCollectable.yy",},"resourceType":"GMOverriddenProperty","resourceVersion":"2.0","value":"rTest_2_sa",},
+          ],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":3392.0,"y":384.0,},
       ],"layers":[],"name":"Instances","properties":[],"resourceType":"GMRInstanceLayer","resourceVersion":"2.0","userdefinedDepth":false,"visible":true,},
     {"$GMRBackgroundLayer":"","%Name":"Background","animationFPS":15.0,"animationSpeedType":0,"colour":4278190080,"depth":100,"effectEnabled":true,"effectType":null,"gridX":32,"gridY":32,"hierarchyFrozen":false,"hspeed":0.0,"htiled":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"layers":[],"name":"Background","properties":[],"resourceType":"GMRBackgroundLayer","resourceVersion":"2.0","spriteId":null,"stretch":false,"userdefinedAnimFPS":false,"userdefinedDepth":false,"visible":true,"vspeed":0.0,"vtiled":false,"x":0,"y":0,},
   ],

+ 5 - 5
scripts/CrawlAI/CrawlAI.gml

@@ -1,12 +1,12 @@
 function enemy_crawl_ai()
 {
-	var _wall_ahead = place_meeting(x + facing, y, oParentSolid);
-	var _hazard_ahead = place_meeting(x + facing * abs(sprite_width) / 2, y, oParentHazard);
-	var _ledge_ahead = !place_meeting(x + facing * abs(sprite_width), y + 1, oParentSolid); 
+	var _wall_ahead = place_meeting(x + facing_x, y, oParentSolid);
+	var _hazard_ahead = place_meeting(x + facing_x * abs(sprite_width) / 2, y, oParentHazard);
+	var _ledge_ahead = !place_meeting(x + facing_x * abs(sprite_width), y + 1, oParentSolid); 
 	
 	if _wall_ahead || _ledge_ahead || _hazard_ahead
-    facing *= -1;
+    facing_x *= -1;
 	
-	x_spd = facing * walk_spd;
+	x_spd = facing_x * walk_spd;
 	y_spd += global.g;
 }

+ 7 - 2
scripts/DummyAI/DummyAI.gml

@@ -11,13 +11,18 @@ function enemy_dummy_ai()
 				state = "COUNTER";
 				set_sprite(sEnemyDummyCounter);
 			}
-			facing = sign(global.player.x - x);
+			facing_x = sign(global.player.x - x);
+			facing_y = sign(global.player.y + sprite_height - y);
 			break;
 			
 		case "COUNTER":
 			if animation_end()
 			{
-				var _hb = enemy_create_hitboxML(384, 144, 0, -96, 10);
+				if facing_y == -1
+					var _hb = enemy_create_hitboxBC(144, 384, 0, -192, 10);
+				else
+					var _hb = enemy_create_hitboxML(384, 144, 0, -96, 10);
+				_hb.damage = 2;
 				
 				state = "ATTACK";
 				set_sprite(sEnemyDummyAttack);

+ 45 - 6
scripts/EnemyStates/EnemyStates.gml

@@ -26,6 +26,35 @@ function enemy_move_and_collide()
     x += _x_spd_total;
 }
 
+function enemy_check_hazard()
+{
+	var _current_hazard = instance_place(x, y, oParentHazard);
+	
+	if _current_hazard != noone
+	{
+		hp -= _current_hazard.damage;
+		if hp <= 0
+		{
+			is_dead = true;
+			instance_destroy();
+		}
+	}
+	
+	if hitstun_timer > 0
+		return;
+	
+	var _dist_x = x_spd + (sign(x_spd) * sprite_width * 0.25);
+	var _dist_y = y_spd + (sign(y_spd) * sprite_height * 0.25);
+	
+	if place_meeting(x + _dist_x, y, oParentSolid) ||
+	place_meeting(x + _dist_x, y, oParentHazard)
+        x_spd = 0;
+		
+	if place_meeting(x, y + _dist_y, oParentHazard)
+        y_spd = 0;
+}
+
+
 function enemy_check_hitstun()
 {
 	if hitstun_timer > 0
@@ -49,7 +78,7 @@ function enemy_check_hitstun()
 	}
 }
 
-/// @desc 优雅地以该实例为原点,给定宽高、偏移与持续时间为参数,生成敌人middle/left碰撞箱(多用于攻击)
+/// @desc 优雅地以该实例为原点,给定宽高、偏移与持续时间为参数,生成敌人middle/left碰撞箱(多用于横向攻击)
 /// @param {real} _x 碰撞箱宽度
 /// @param {real} _y 碰撞箱高度
 /// @param {real} _x_offset 碰撞箱与该实例在x轴上的偏移量,默认为0
@@ -65,7 +94,7 @@ _x_offset = 0, _y_offset = 0, _duration = 0)
 	_hb.y_offset = _y_offset;
 	
 	var _base = 2;
-	_hb.image_xscale = _x / _base * facing;
+	_hb.image_xscale = _x / _base * facing_x;
 	_hb.image_yscale = _y / _base;
 /*
 oEnemyHitbox的基础大小为2*2
@@ -95,19 +124,29 @@ function enemy_create_hitboxMC(_x, _y)
 
 	return _hb;
 }
-
-/// @desc 优雅地以该实例为原点,给定宽高为参数,生成敌人bottom/center碰撞箱(多用于地面本体)
+/// @desc 优雅地以该实例为原点,给定宽高、偏移与持续时间为参数,生成敌人bottom/center碰撞箱(多用于地面本体、纵向攻击等)
 /// @param {real} _x 碰撞箱宽度
 /// @param {real} _y 碰撞箱高度
-function enemy_create_hitboxBC(_x, _y)
+/// @param {real} _x_offset 碰撞箱与该实例在x轴上的偏移量,默认为0
+/// @param {real} _y_offset 碰撞箱与该实例在y轴上的偏移量,默认为0
+/// @param {real} _duration 碰撞箱持续时间,默认为0,即无限
+function enemy_create_hitboxBC(_x, _y,
+_x_offset = 0, _y_offset = 0, _duration = 0)
 {
-	var _hb = icd(oEnemyHitbox, x, y);
+	var _hb = icd(oEnemyHitbox, x + _x_offset, y + _y_offset);
 	_hb.owner = id;
 	_hb.sprite_index = sEnemyHitboxBC;
+	_hb.x_offset = _x_offset;
+	_hb.y_offset = _y_offset;
 	
 	var _base = 2;
 	_hb.image_xscale = _x / _base;
 	_hb.image_yscale = _y / _base;
 
+	if _duration != 0
+	{
+		_hb.hitbox_type = "BLADE";
+		_hb.duration = _duration;
+	}
 	return _hb;
 }

+ 12 - 15
scripts/FlyingAI/FlyingAI.gml

@@ -1,21 +1,18 @@
 function enemy_flying_ai()
 {
-	x_spd = facing * x_base_spd;
+	x_spd = facing_x * x_base_spd;
 	y_spd = facing_y * y_base_spd;
 	
-    if place_meeting(x, y + y_spd, oParentSolid)
-    {
-        while !place_meeting(x, y + sign(y_spd), oParentSolid)
-            y += sign(y_spd);
-			
-		facing_y = -facing_y;
-    }
-    if place_meeting(x + x_spd, y, oParentSolid)
-    {
-        while !place_meeting(x + sign(x_spd), y, oParentSolid)
-            x += sign(x_spd);
+	var _dist_x = x_spd + sign(x_spd) * abs(sprite_width) * 0.25;
+	var _dist_y = y_spd + sign(y_spd) * abs(sprite_height)* 0.25;
 	
-		facing = -facing;
-    }
-    set_sprite(sEnemyFlying);
+	if place_meeting(x + _dist_x, y, oParentSolid) ||
+	place_meeting(x + _dist_x, y, oParentHazard) ||
+	x + _dist_x > room_width || x + _dist_x < 0
+        facing_x = -facing_x;
+		
+	if place_meeting(x, y + _dist_y, oParentSolid) ||
+	place_meeting(x, y + _dist_y, oParentHazard) ||
+	y + _dist_y > room_height || y + _dist_y < 0
+        facing_y = -facing_y;
 }

+ 3 - 3
scripts/FlyingTrackAI/FlyingTrackAI.gml

@@ -4,7 +4,7 @@ function enemy_flying_track_ai()
     if instance_exists(global.player)
 	{
 		var _blocker = collision_line(x, y,
-		global.player.x, global.player.y - 1, oParentSolid, false, true);
+		global.player.x, global.player.y - 1, oParentObstacle, false, true);
 		
         if distance_to_object(global.player) < range && _blocker == noone
             _target = global.player;
@@ -17,7 +17,7 @@ function enemy_flying_track_ai()
         x_spd += lengthdir_x(acc, _dir);
         y_spd += lengthdir_y(acc, _dir);
         
-        facing = sign(_target.x - x);
+        facing_x = sign(_target.x - x);
 		
 		set_sprite(sEnemyFlyingTrack);
     }
@@ -41,5 +41,5 @@ function enemy_flying_track_ai()
         y_spd *= _scale;
     }
 	
-	image_xscale = facing;
+	image_xscale = facing_x;
 }

+ 1 - 1
scripts/PlayerStates/PlayerStates.gml

@@ -491,7 +491,7 @@ function state_death()
 		global.playerINK = 0;
 		
 		state = state_locked;
-		locked_timer = 120;
+		locked_timer = 90;
 		
 		var _fade = icl(oFade);
 		_fade._callback = function()

BIN
sprites/sEnemyDummyAttack/19ab20bd-1443-48d8-a3c3-75ffedbc179c.png


BIN
sprites/sEnemyDummyAttack/de4004a6-51eb-4343-a9ce-2047148888b8.png


BIN
sprites/sEnemyDummyAttack/layers/19ab20bd-1443-48d8-a3c3-75ffedbc179c/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


BIN
sprites/sEnemyDummyAttack/layers/de4004a6-51eb-4343-a9ce-2047148888b8/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


+ 1 - 9
sprites/sEnemyDummyAttack/sEnemyDummyAttack.yy

@@ -20,8 +20,6 @@
     {"$GMSpriteFrame":"v1","%Name":"1d22c0c7-7cb6-4edd-82b3-a89823d6945f","name":"1d22c0c7-7cb6-4edd-82b3-a89823d6945f","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
     {"$GMSpriteFrame":"v1","%Name":"9c79c1b3-6f93-432e-b19d-ca5ac1601499","name":"9c79c1b3-6f93-432e-b19d-ca5ac1601499","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
     {"$GMSpriteFrame":"v1","%Name":"011dd06a-0e18-4aa0-926a-3710b13c329d","name":"011dd06a-0e18-4aa0-926a-3710b13c329d","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
-    {"$GMSpriteFrame":"v1","%Name":"de4004a6-51eb-4343-a9ce-2047148888b8","name":"de4004a6-51eb-4343-a9ce-2047148888b8","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
-    {"$GMSpriteFrame":"v1","%Name":"19ab20bd-1443-48d8-a3c3-75ffedbc179c","name":"19ab20bd-1443-48d8-a3c3-75ffedbc179c","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
   ],
   "gridX":0,
   "gridY":0,
@@ -58,7 +56,7 @@
     },
     "eventStubScript":null,
     "eventToFunction":{},
-    "length":10.0,
+    "length":8.0,
     "lockOrigin":false,
     "moments":{
       "$KeyframeStore<MomentsEventKeyframe>":"",
@@ -101,12 +99,6 @@
             {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
                 "0":{"$SpriteFrameKeyframe":"","Id":{"name":"011dd06a-0e18-4aa0-926a-3710b13c329d","path":"sprites/sEnemyDummyAttack/sEnemyDummyAttack.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
               },"Disabled":false,"id":"d8186ef2-2fbb-488f-80f8-301fde2c4f8e","IsCreationKey":false,"Key":7.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
-            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
-                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"de4004a6-51eb-4343-a9ce-2047148888b8","path":"sprites/sEnemyDummyAttack/sEnemyDummyAttack.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
-              },"Disabled":false,"id":"e252960e-3645-471e-b49c-faf678285ed3","IsCreationKey":false,"Key":8.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
-            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
-                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"19ab20bd-1443-48d8-a3c3-75ffedbc179c","path":"sprites/sEnemyDummyAttack/sEnemyDummyAttack.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
-              },"Disabled":false,"id":"acac0fa6-f3bc-4559-9869-2c2e07fec383","IsCreationKey":false,"Key":9.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
           ],"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"2.0",},"modifiers":[],"name":"frames","resourceType":"GMSpriteFramesTrack","resourceVersion":"2.0","spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
     ],
     "visibleRange":null,