DrDuck0117 il y a 3 mois
Parent
commit
0741904a6b

+ 4 - 0
ddmyx.yyp

@@ -13,6 +13,7 @@
     {"$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":"oBossHex","folderPath":"folders/Enemy/oBossHex.yy","name":"oBossHex","resourceType":"GMFolder","resourceVersion":"2.0",},
+    {"$GMFolder":"","%Name":"oEnemyHex","folderPath":"folders/Enemy/oBossHex/oEnemyHex.yy","name":"oEnemyHex","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",},
@@ -66,6 +67,7 @@
     {"id":{"name":"oEnemyFlying","path":"objects/oEnemyFlying/oEnemyFlying.yy",},},
     {"id":{"name":"oEnemyFlyingTrack","path":"objects/oEnemyFlyingTrack/oEnemyFlyingTrack.yy",},},
     {"id":{"name":"oEnemyFlyingTrack2","path":"objects/oEnemyFlyingTrack2/oEnemyFlyingTrack2.yy",},},
+    {"id":{"name":"oEnemyHex","path":"objects/oEnemyHex/oEnemyHex.yy",},},
     {"id":{"name":"oEnemyHitbox","path":"objects/oEnemyHitbox/oEnemyHitbox.yy",},},
     {"id":{"name":"oFade","path":"objects/oFade/oFade.yy",},},
     {"id":{"name":"oFocusEndEffect","path":"objects/oFocusEndEffect/oFocusEndEffect.yy",},},
@@ -100,6 +102,7 @@
     {"id":{"name":"rTest_3","path":"rooms/rTest_3/rTest_3.yy",},},
     {"id":{"name":"rTest_backup","path":"rooms/rTest_backup/rTest_backup.yy",},},
     {"id":{"name":"rTitle","path":"rooms/rTitle/rTitle.yy",},},
+    {"id":{"name":"BossHexAI","path":"scripts/BossHexAI/BossHexAI.yy",},},
     {"id":{"name":"CrawlAI","path":"scripts/CrawlAI/CrawlAI.yy",},},
     {"id":{"name":"DummyAI","path":"scripts/DummyAI/DummyAI.yy",},},
     {"id":{"name":"EnemyStates","path":"scripts/EnemyStates/EnemyStates.yy",},},
@@ -133,6 +136,7 @@
     {"id":{"name":"sEnemyFlying","path":"sprites/sEnemyFlying/sEnemyFlying.yy",},},
     {"id":{"name":"sEnemyFlyingTrack","path":"sprites/sEnemyFlyingTrack/sEnemyFlyingTrack.yy",},},
     {"id":{"name":"sEnemyFlyingTrackIdle","path":"sprites/sEnemyFlyingTrackIdle/sEnemyFlyingTrackIdle.yy",},},
+    {"id":{"name":"sEnemyHex","path":"sprites/sEnemyHex/sEnemyHex.yy",},},
     {"id":{"name":"sEnemyHitboxBC","path":"sprites/sEnemyHitboxBC/sEnemyHitboxBC.yy",},},
     {"id":{"name":"sEnemyHitboxMC","path":"sprites/sEnemyHitboxMC/sEnemyHitboxMC.yy",},},
     {"id":{"name":"sEnemyHitboxML","path":"sprites/sEnemyHitboxML/sEnemyHitboxML.yy",},},

+ 16 - 4
objects/oBossHex/Create_0.gml

@@ -1,6 +1,6 @@
 event_inherited();
 
-hp = 1200;
+hp = 240;
 
 credit = 30;
 
@@ -8,16 +8,28 @@ enemy_ai = hex_ai;
 
 hitbox = enemy_create_hitboxMC(160, 160);
 
-side_len = 125;
+side_len = 128;
 roll_spd = 0;
 roll_acc = 0;
 roll_angle = 0;
 
+dir = 0;
+acc = 0;
+spd = 0;
+x_acc = 0;
+y_acc = 0;
+
 pivot_x = 0;
 pivot_y = 0;
 
 state = "IDLE";
 
-mask_index = sBossHexMask;
+//mask_index = sBossHexMask;
+
+rebounce_timer = 0;
+
+angle_alter = 0;
+
+cnt = 0;
 
-rebounce_timer = 0;
+last_attack = -1;

+ 4 - 0
objects/oBossHex/Draw_0.gml

@@ -0,0 +1,4 @@
+// Inherit the parent event
+event_inherited();
+
+draw_text(200, 200, string(last_attack));

+ 1 - 7
objects/oBossHex/Step_0.gml

@@ -5,10 +5,4 @@ image_index += animation_spd;
 
 enemy_ai();
 
-enemy_check_hitstun();
-
-if state != "ROLL"
-{
-	y_spd += global.g;
-	enemy_move_and_collide();
-}
+x = clamp(x, 200, 1920 - 200 - 64);

+ 1 - 0
objects/oBossHex/oBossHex.yy

@@ -4,6 +4,7 @@
   "eventList":[
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
+    {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":8,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
   ],
   "managed":true,
   "name":"oBossHex",

+ 4 - 2
objects/oCamera/Step_0.gml

@@ -2,8 +2,10 @@ follow = global.player;
 
 if instance_exists(follow)
 {
-    x_to = follow.x;
-    y_to = follow.y;
+	x_to = 0;
+	y_to = 0;
+    //x_to = follow.x;
+    //y_to = follow.y;
 }
 
 shake_magnitude = lerp(shake_magnitude, 0, 0.05);

+ 28 - 0
objects/oEnemyHex/Create_0.gml

@@ -0,0 +1,28 @@
+event_inherited();
+
+hp = 12;
+credit = 0;
+
+enemy_ai = enemy_hex_ai;
+
+hitbox = enemy_create_hitboxMC(40, 40);
+
+side_len = 30;
+roll_spd = 0;
+roll_acc = 0;
+roll_angle = 0;
+
+pivot_x = 0;
+pivot_y = 0;
+
+state = "SPAWN";
+
+//mask_index = sBossHexMask;
+x_spd = 0;
+y_spd = 0;
+y_acc = 0;
+enemy_spawn_init();
+
+rebounce_timer = 0;
+
+angle_alter = 0;

+ 8 - 0
objects/oEnemyHex/Step_0.gml

@@ -0,0 +1,8 @@
+if check_hitstop() || is_dead
+	exit;
+
+image_index += animation_spd;
+
+enemy_ai();
+
+x = clamp(x, 100, 1920 - 100 - 64);

+ 42 - 0
objects/oEnemyHex/oEnemyHex.yy

@@ -0,0 +1,42 @@
+{
+  "$GMObject":"",
+  "%Name":"oEnemyHex",
+  "eventList":[
+    {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
+    {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
+  ],
+  "managed":true,
+  "name":"oEnemyHex",
+  "overriddenProperties":[],
+  "parent":{
+    "name":"oEnemyHex",
+    "path":"folders/Enemy/oBossHex/oEnemyHex.yy",
+  },
+  "parentObjectId":{
+    "name":"oParentEnemy",
+    "path":"objects/oParentEnemy/oParentEnemy.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":{
+    "name":"sEnemyHex",
+    "path":"sprites/sEnemyHex/sEnemyHex.yy",
+  },
+  "spriteMaskId":null,
+  "visible":true,
+}

+ 2 - 2
rooms/rTest_2/rTest_2.yy

@@ -845,7 +845,7 @@
         {"$GMRInstance":"v4","%Name":"inst_6614D4DB","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_6614D4DB","objectId":{"name":"oBlockSlippery","path":"objects/oBlockSlippery/oBlockSlippery.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":992.0,"y":1248.0,},
         {"$GMRInstance":"v4","%Name":"inst_1BFB78B","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_1BFB78B","objectId":{"name":"oBlockSlippery","path":"objects/oBlockSlippery/oBlockSlippery.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":1120.0,"y":1184.0,},
         {"$GMRInstance":"v4","%Name":"inst_2B4CE3D8","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_2B4CE3D8","objectId":{"name":"oBlockSlippery","path":"objects/oBlockSlippery/oBlockSlippery.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":1248.0,"y":1120.0,},
-        {"$GMRInstance":"v4","%Name":"inst_72D10E65","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_72D10E65","objectId":{"name":"oBossHex","path":"objects/oBossHex/oBossHex.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":672.0,"y":896.0,},
+        {"$GMRInstance":"v4","%Name":"inst_72D10E65","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_72D10E65","objectId":{"name":"oBossHex","path":"objects/oBossHex/oBossHex.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":672.0,"y":916.0,},
       ],"layers":[],"name":"Instances","properties":[],"resourceType":"GMRInstanceLayer","resourceVersion":"2.0","userdefinedDepth":false,"visible":true,},
     {"$GMREffectLayer":"","%Name":"Effect","depth":100,"effectEnabled":true,"effectType":null,"gridX":32,"gridY":32,"hierarchyFrozen":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"layers":[],"name":"Effect","properties":[],"resourceType":"GMREffectLayer","resourceVersion":"2.0","userdefinedDepth":false,"visible":true,},
     {"$GMRBackgroundLayer":"","%Name":"Background","animationFPS":15.0,"animationSpeedType":0,"colour":4278190080,"depth":200,"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,},
@@ -873,7 +873,7 @@
   },
   "sequenceId":null,
   "views":[
-    {"hborder":32,"hport":1080,"hspeed":-1,"hview":1080,"inherit":false,"objectId":null,"vborder":32,"visible":true,"vspeed":-1,"wport":1920,"wview":1920,"xport":0,"xview":1920,"yport":0,"yview":0,},
+    {"hborder":32,"hport":1080,"hspeed":-1,"hview":1080,"inherit":false,"objectId":null,"vborder":32,"visible":true,"vspeed":-1,"wport":1920,"wview":1920,"xport":0,"xview":0,"yport":0,"yview":0,},
     {"hborder":32,"hport":1080,"hspeed":-1,"hview":1080,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":1920,"wview":1920,"xport":0,"xview":0,"yport":0,"yview":0,},
     {"hborder":32,"hport":1080,"hspeed":-1,"hview":1080,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":1920,"wview":1920,"xport":0,"xview":0,"yport":0,"yview":0,},
     {"hborder":32,"hport":1080,"hspeed":-1,"hview":1080,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":1920,"wview":1920,"xport":0,"xview":0,"yport":0,"yview":0,},

+ 273 - 0
scripts/BossHexAI/BossHexAI.gml

@@ -0,0 +1,273 @@
+function hex_ai()
+{	
+	switch(state)
+	{
+		case "IDLE":
+			if hp < 240
+			{
+				cnt = 0;
+				roll_init();
+			}
+			break;
+			
+		case "ROLL":
+		
+			rebounce_timer--;
+			
+			var _roll_spd;
+			
+			if abs(roll_angle + roll_spd) >= 60
+				_roll_spd = (60 - abs(roll_angle)) * sign(roll_angle);
+				
+			else if sign(roll_angle) == -sign(roll_angle + roll_spd)
+				_roll_spd = -roll_angle;
+				
+			else
+				_roll_spd = roll_spd;
+			
+			if collision_line(x, y, x + 144 * sign(-_roll_spd), y, oParentSolid, false, false) != noone
+			&& rebounce_timer <= 0
+			{
+				roll_spd *= -1;
+				rebounce_timer = 10;
+				screen_shake(20);
+				
+				++cnt;
+				
+				if cnt == 1
+					roll_acc *= -1;
+				if cnt == 3
+				{
+					cnt = 1;
+					smash_init();
+				}
+			}
+			roll_spd += roll_acc;
+			
+			if abs(roll_angle) == 60 || roll_angle == 0
+			{
+				roll_angle = 0;
+				y = 916;
+					
+				var _base_angle = (roll_spd > 0) ? 240 : 300;
+				pivot_x = x + lengthdir_x(side_len, _base_angle);
+				pivot_y = y + lengthdir_y(side_len, _base_angle);
+			}
+			
+			roll_angle += _roll_spd;
+			image_angle += _roll_spd;
+			
+			var _current_angle = point_direction(pivot_x, pivot_y, x, y);
+			var _new_angle = _current_angle + _roll_spd;
+	
+			x = pivot_x + lengthdir_x(side_len, _new_angle);
+			y = pivot_y + lengthdir_y(side_len, _new_angle);
+			
+			break;
+			
+		case "SMASH_BEGIN":
+			
+			x += x_spd;
+			y += y_spd;
+			image_angle += 0.4 * spd;
+			
+			if y < target_y
+			{
+				state = "SMASH";
+				
+				image_angle = round(image_angle / 60) * 60;
+				
+				y_spd = 20;
+				y_acc = 1;
+				
+				break;
+			}
+	
+			spd += acc;
+			x_spd = lengthdir_x(spd, dir);
+			y_spd = lengthdir_y(spd, dir);
+			
+			break;
+			
+		case "SMASH":
+			
+			y += y_spd;
+			
+			if collision_line(x, y, x, y + 108 + y_spd, oParentSolid, false, false) != noone
+			{
+				while collision_line(x, y, x, y + 108, oParentSolid, false, false) == noone
+					y++;
+				
+				hex_var_erase();
+				
+				screen_shake(20);
+				
+				if !--cnt
+					hex_pick_attack();
+				else
+					smash_init();
+			}
+			y_spd += y_acc;
+			
+			var _x_alter = global.player.x - x
+			x += max(4, _x_alter / 200) * sign(_x_alter);
+			
+			break;
+		
+		case "SPAWN":
+		
+			image_angle += abs(y_spd);
+			y += y_spd;
+			
+			if y_spd == 15
+			{
+				image_angle -= abs(y_spd);
+				
+				hex_var_erase();
+				
+				screen_shake(20);
+				
+				icd(oEnemyHex, x, 998);
+				
+				if !--cnt
+					hex_pick_attack();
+				else
+					spawn_init();
+			}
+			y_spd += y_acc;
+			break;
+		
+		case "BOUNCE":
+			
+			if collision_line(x, y, x + 144 * sign(x_spd), y, oParentSolid, false, false) != noone
+				x_spd = 0;
+			
+			image_angle += facing * 9;
+			x += x_spd;
+			y += y_spd;
+			
+			if y_spd == 20
+			{
+				image_angle -= facing * 9;
+				
+				hex_var_erase();
+				
+				screen_shake(20);
+				
+				if !--cnt
+					hex_pick_attack();
+				else
+					bounce_init();
+				
+				break;
+			}
+			
+			y_spd += y_acc;
+			break;
+		
+	}
+}
+function roll_init()
+{
+    state = "ROLL";
+	roll_spd = 5 * sign(global.player.x - x);
+	roll_acc = -0.1 * sign(global.player.x - x);
+
+    var _base_angle = (roll_spd > 0) ? 240 : 300;
+    pivot_x = x + lengthdir_x(side_len, _base_angle);
+    pivot_y = y + lengthdir_y(side_len, _base_angle);
+}
+function smash_init()
+{
+	state = "SMASH_BEGIN";
+	target_x = clamp(global.player.x, 200, 1920 - 200 - 64);
+	target_y = y - 480;
+
+	dir = point_direction(x, y, target_x, target_y);
+	spd = 15;
+	acc = 0.3;
+	
+	x_spd = lengthdir_x(spd, dir);
+	y_spd = lengthdir_y(spd, dir);
+}
+function spawn_init()
+{
+	y_spd = -15;
+	y_acc = 0.6;
+	
+	state = "SPAWN";
+}
+function bounce_init()
+{
+	state = "BOUNCE";
+
+	y_spd = -20;
+	y_acc = 1;
+
+	facing = sign(global.player.x - x);
+	x_spd = facing * 9;
+}
+
+function hex_pick_attack()
+{
+	hex_var_erase();
+	
+    // 构建候选池
+    var pool = [];
+    var forbidden = [];
+    
+    // 定义禁止规则
+    if last_attack != -1
+		array_push(forbidden, last_attack);
+
+	if instance_number(oEnemyHex) >= 2
+		if array_get_index(forbidden, 3) == -1
+			array_push(forbidden, 3);
+    
+    // 将不在forbidden中的技能加入候选池
+    for (var i = 0; i < 4; i++)
+	{
+        if array_get_index(forbidden, i) == -1
+            array_push(pool, i);
+	}
+    
+    // 从候选池随机选一个
+    var pick = pool[irandom(array_length(pool) - 1)];
+    last_attack = pick;
+	
+	switch(pick)
+	{
+		case 0:
+			cnt = 0;
+			roll_init();
+			break;
+		
+		case 1:
+			cnt = 3;
+			smash_init();
+			break;
+			
+		case 2:
+			cnt = 5;
+			bounce_init();
+			break;
+			
+		case 3:
+			cnt = 2;
+			spawn_init();
+			break;
+	}
+}
+function hex_var_erase()
+{
+	spd = 0;
+	acc = 0;
+	dir = 0;
+	x_spd = 0;
+	y_spd = 0;
+	x_acc = 0;
+	y_acc = 0;
+	roll_spd = 0;
+	roll_acc = 0;
+	roll_angle = 0;
+}

+ 13 - 0
scripts/BossHexAI/BossHexAI.yy

@@ -0,0 +1,13 @@
+{
+  "$GMScript":"v1",
+  "%Name":"BossHexAI",
+  "isCompatibility":false,
+  "isDnD":false,
+  "name":"BossHexAI",
+  "parent":{
+    "name":"oBossHex",
+    "path":"folders/Enemy/oBossHex.yy",
+  },
+  "resourceType":"GMScript",
+  "resourceVersion":"2.0",
+}

+ 32 - 13
scripts/HexAI/HexAI.gml

@@ -1,10 +1,10 @@
-function hex_ai()
+function enemy_hex_ai()
 {	
+	roll_spd = clamp(roll_spd, -20, 20);
 	switch(state)
 	{
 		case "IDLE":
-			if oMain._up
-				roll_init();
+			enemy_roll_init();
 			break;
 			
 		case "ROLL":
@@ -32,15 +32,14 @@ function hex_ai()
 			x = pivot_x + lengthdir_x(side_len, _new_angle);
 			y = pivot_y + lengthdir_y(side_len, _new_angle);
 			
-			if collision_line(x, y, x + 128 * sign(-roll_spd), y, oParentSolid, false, false) != noone
+			if collision_line(x, y, x + 32 * sign(-roll_spd), y, oParentSolid, false, false) != noone
 			&& rebounce_timer <= 0
 			{
-				roll_acc *= -1;
 				roll_spd *= -1;
-				rebounce_timer = 60;
-				//state = "RETRACE";
+				roll_acc *= -1;
+				rebounce_timer = 12;
 			}
-			else if abs(roll_angle) >= 60 || roll_angle == 0
+			else if abs(roll_angle) == 60 || roll_angle == 0
 			{
 				roll_angle = 0;
 					
@@ -50,19 +49,39 @@ function hex_ai()
 			}
 			break;
 			
-		case "RETRACE":
-			//roll_spd += roll_acc;
+		case "SPAWN":
+		
+			image_angle += abs(y_spd);
+			x += x_spd;
+			y += y_spd;
 			
+			if y_spd == 15
+			{
+				x_spd = 0;
+				y_spd = 0;
+				y_acc = 0;
+				state = "IDLE";
+			}
+			y_spd += y_acc;
 			break;
 	}
 }
-function roll_init()
+function enemy_roll_init()
 {
     state = "ROLL";
-	roll_spd = 5;
-	roll_acc = -0.1;
+	roll_spd = 5 * choose(-1, 1);
+	roll_acc = -0.1 * sign(roll_spd);
 
     var _base_angle = (roll_spd > 0) ? 240 : 300;
     pivot_x = x + lengthdir_x(side_len, _base_angle);
     pivot_y = y + lengthdir_y(side_len, _base_angle);
+}
+function enemy_spawn_init()
+{
+	y_spd = -15;
+	x_spd = sign(global.player.x - x) * random_range(10, 15);
+	
+	y_acc = 0.6;
+	
+	state = "SPAWN";
 }

+ 2 - 2
scripts/HexAI/HexAI.yy

@@ -5,8 +5,8 @@
   "isDnD":false,
   "name":"HexAI",
   "parent":{
-    "name":"oBossHex",
-    "path":"folders/Enemy/oBossHex.yy",
+    "name":"oEnemyHex",
+    "path":"folders/Enemy/oBossHex/oEnemyHex.yy",
   },
   "resourceType":"GMScript",
   "resourceVersion":"2.0",

+ 2 - 2
scripts/PlayerStates/PlayerStates.gml

@@ -213,7 +213,7 @@ function player_check_death()
 }
 function player_check_focus()
 {
-	if oMain._focus && global.playerINK >= 0
+	if oMain._focus && global.playerINK >= 9
 	{
 		set_sprite(sPlayerFocus);
 		state = state_focus;
@@ -512,7 +512,7 @@ function state_focus()
 	y_spd = 0;
 	if animation_end()
 	{
-		player_add_INK(0);
+		player_add_INK(-9);
 		global.playerHP += 3;
 		global.playerHP = clamp(global.playerHP, 0, global.save_data.player.maxHP);
 		state = state_free;

BIN
sprites/sBossHexMask/eece6a41-a8f3-4e33-b519-060097baf368.png


BIN
sprites/sBossHexMask/layers/eece6a41-a8f3-4e33-b519-060097baf368/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


+ 1 - 1
sprites/sBossHexMask/sBossHexMask.yy

@@ -6,7 +6,7 @@
   "bbox_left":0,
   "bbox_right":215,
   "bbox_top":0,
-  "collisionKind":4,
+  "collisionKind":2,
   "collisionTolerance":0,
   "DynamicTexturePage":false,
   "edgeFiltering":false,

BIN
sprites/sEnemyHex/eece6a41-a8f3-4e33-b519-060097baf368.png


BIN
sprites/sEnemyHex/layers/eece6a41-a8f3-4e33-b519-060097baf368/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


+ 109 - 0
sprites/sEnemyHex/sEnemyHex.yy

@@ -0,0 +1,109 @@
+{
+  "$GMSprite":"v2",
+  "%Name":"sEnemyHex",
+  "bboxMode":0,
+  "bbox_bottom":53,
+  "bbox_left":0,
+  "bbox_right":63,
+  "bbox_top":0,
+  "collisionKind":1,
+  "collisionTolerance":0,
+  "DynamicTexturePage":false,
+  "edgeFiltering":false,
+  "For3D":false,
+  "frames":[
+    {"$GMSpriteFrame":"v1","%Name":"eece6a41-a8f3-4e33-b519-060097baf368","name":"eece6a41-a8f3-4e33-b519-060097baf368","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
+  ],
+  "gridX":0,
+  "gridY":0,
+  "height":54,
+  "HTile":false,
+  "layers":[
+    {"$GMImageLayer":"","%Name":"6b9701e4-db4a-44cb-947f-7ef6e92e0c3e","blendMode":0,"displayName":"default","isLocked":false,"name":"6b9701e4-db4a-44cb-947f-7ef6e92e0c3e","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
+  ],
+  "name":"sEnemyHex",
+  "nineSlice":{
+    "$GMNineSliceData":"",
+    "bottom":0,
+    "enabled":false,
+    "guideColour":[4294902015,4294902015,4294902015,4294902015,],
+    "highlightColour":1728023040,
+    "highlightStyle":0,
+    "left":0,
+    "resourceType":"GMNineSliceData",
+    "resourceVersion":"2.0",
+    "right":0,
+    "tileMode":[
+      0,
+      0,
+      0,
+      0,
+      0,
+    ],
+    "top":0,
+  },
+  "origin":4,
+  "parent":{
+    "name":"oEnemyHex",
+    "path":"folders/Enemy/oBossHex/oEnemyHex.yy",
+  },
+  "preMultiplyAlpha":false,
+  "resourceType":"GMSprite",
+  "resourceVersion":"2.0",
+  "sequence":{
+    "$GMSequence":"v1",
+    "%Name":"sEnemyHex",
+    "autoRecord":true,
+    "backdropHeight":768,
+    "backdropImageOpacity":0.5,
+    "backdropImagePath":"",
+    "backdropWidth":1366,
+    "backdropXOffset":0.0,
+    "backdropYOffset":0.0,
+    "events":{
+      "$KeyframeStore<MessageEventKeyframe>":"",
+      "Keyframes":[],
+      "resourceType":"KeyframeStore<MessageEventKeyframe>",
+      "resourceVersion":"2.0",
+    },
+    "eventStubScript":null,
+    "eventToFunction":{},
+    "length":1.0,
+    "lockOrigin":false,
+    "moments":{
+      "$KeyframeStore<MomentsEventKeyframe>":"",
+      "Keyframes":[],
+      "resourceType":"KeyframeStore<MomentsEventKeyframe>",
+      "resourceVersion":"2.0",
+    },
+    "name":"sEnemyHex",
+    "playback":1,
+    "playbackSpeed":30.0,
+    "playbackSpeedType":0,
+    "resourceType":"GMSequence",
+    "resourceVersion":"2.0",
+    "showBackdrop":true,
+    "showBackdropImage":false,
+    "timeUnits":1,
+    "tracks":[
+      {"$GMSpriteFramesTrack":"","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"$KeyframeStore<SpriteFrameKeyframe>":"","Keyframes":[
+            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"eece6a41-a8f3-4e33-b519-060097baf368","path":"sprites/sEnemyHex/sEnemyHex.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"7cf6e5ff-fb85-481b-afb0-f80e4c0050d4","IsCreationKey":false,"Key":0.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,
+    "volume":1.0,
+    "xorigin":32,
+    "yorigin":27,
+  },
+  "swatchColours":null,
+  "swfPrecision":0.5,
+  "textureGroupId":{
+    "name":"Default",
+    "path":"texturegroups/Default",
+  },
+  "type":0,
+  "VTile":false,
+  "width":64,
+}