DrDuck0117 5 часов назад
Родитель
Сommit
1e01ee35d6
100 измененных файлов с 754 добавлено и 331 удалено
  1. 11 5
      ddmyx.yyp
  2. 45 0
      notes/必读(更新日志)/必读(更新日志).txt
  3. 2 2
      notes/必读(更新日志)/必读(更新日志).yy
  4. 0 1
      objects/oEnemyCrawl/Alarm_0.gml
  5. 2 4
      objects/oEnemyCrawl/Create_0.gml
  6. 1 2
      objects/oEnemyCrawl/oEnemyCrawl.yy
  7. 10 0
      objects/oEnemyDummy/Create_0.gml
  8. 41 0
      objects/oEnemyDummy/oEnemyDummy.yy
  9. 6 2
      objects/oEnemyHitbox/Create_0.gml
  10. 9 2
      objects/oEnemyHitbox/Step_0.gml
  11. 4 1
      objects/oEnemyHitbox/oEnemyHitbox.yy
  12. 4 4
      objects/oGame/Create_0.gml
  13. 1 3
      objects/oGame/Step_0.gml
  14. 2 2
      objects/oParentEnemy/CleanUp_0.gml
  15. 10 2
      objects/oParentEnemy/Create_0.gml
  16. 3 1
      objects/oParentEnemy/Step_0.gml
  17. 1 8
      objects/oParentPlayerHitbox/Step_0.gml
  18. 5 2
      objects/oPlayer/Create_0.gml
  19. 4 2
      objects/oPlayer/Step_0.gml
  20. 8 1
      objects/oPlayerHitboxArc/Create_0.gml
  21. 7 2
      objects/oPlayerHitboxHor/Create_0.gml
  22. 5 2
      objects/oPlayerHitboxMark/Create_0.gml
  23. 9 1
      objects/oPlayerHitboxVer/Create_0.gml
  24. 2 2
      rooms/rTest/rTest.yy
  25. 12 0
      scripts/CrawlAI/CrawlAI.gml
  26. 13 0
      scripts/CrawlAI/CrawlAI.yy
  27. 34 0
      scripts/DummyAI/DummyAI.gml
  28. 13 0
      scripts/DummyAI/DummyAI.yy
  29. 35 17
      scripts/EnemyStates/EnemyStates.gml
  30. 151 199
      scripts/PlayerStates/PlayerStates.gml
  31. 12 4
      scripts/general/general.gml
  32. 1 1
      sprites/sEnemyCrawl/sEnemyCrawl.yy
  33. BIN
      sprites/sEnemyCrawlHitbox/a76ad535-27e8-4a95-b902-7e8bd3b236b8.png
  34. BIN
      sprites/sEnemyCrawlHitbox/layers/a76ad535-27e8-4a95-b902-7e8bd3b236b8/294f880a-79b3-48fc-888a-f3c14992345f.png
  35. BIN
      sprites/sEnemyDummyAttack/011dd06a-0e18-4aa0-926a-3710b13c329d.png
  36. BIN
      sprites/sEnemyDummyAttack/19ab20bd-1443-48d8-a3c3-75ffedbc179c.png
  37. BIN
      sprites/sEnemyDummyAttack/1d22c0c7-7cb6-4edd-82b3-a89823d6945f.png
  38. BIN
      sprites/sEnemyDummyAttack/313d19ac-423c-4585-89d5-d727c8a6382e.png
  39. BIN
      sprites/sEnemyDummyAttack/348f603a-d75d-4b72-bf68-ff75045f7e9e.png
  40. BIN
      sprites/sEnemyDummyAttack/84025141-6526-4274-91d8-896cea9709f7.png
  41. BIN
      sprites/sEnemyDummyAttack/84871857-d604-44d9-8721-cc7a4366d386.png
  42. BIN
      sprites/sEnemyDummyAttack/9c79c1b3-6f93-432e-b19d-ca5ac1601499.png
  43. BIN
      sprites/sEnemyDummyAttack/ae9034b3-fcb2-4f9c-b507-f6626ffbfb6d.png
  44. BIN
      sprites/sEnemyDummyAttack/de4004a6-51eb-4343-a9ce-2047148888b8.png
  45. BIN
      sprites/sEnemyDummyAttack/layers/011dd06a-0e18-4aa0-926a-3710b13c329d/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  46. BIN
      sprites/sEnemyDummyAttack/layers/19ab20bd-1443-48d8-a3c3-75ffedbc179c/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  47. BIN
      sprites/sEnemyDummyAttack/layers/1d22c0c7-7cb6-4edd-82b3-a89823d6945f/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  48. BIN
      sprites/sEnemyDummyAttack/layers/313d19ac-423c-4585-89d5-d727c8a6382e/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  49. BIN
      sprites/sEnemyDummyAttack/layers/348f603a-d75d-4b72-bf68-ff75045f7e9e/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  50. BIN
      sprites/sEnemyDummyAttack/layers/84025141-6526-4274-91d8-896cea9709f7/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  51. BIN
      sprites/sEnemyDummyAttack/layers/84871857-d604-44d9-8721-cc7a4366d386/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  52. BIN
      sprites/sEnemyDummyAttack/layers/9c79c1b3-6f93-432e-b19d-ca5ac1601499/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  53. BIN
      sprites/sEnemyDummyAttack/layers/ae9034b3-fcb2-4f9c-b507-f6626ffbfb6d/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  54. BIN
      sprites/sEnemyDummyAttack/layers/de4004a6-51eb-4343-a9ce-2047148888b8/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  55. 126 0
      sprites/sEnemyDummyAttack/sEnemyDummyAttack.yy
  56. BIN
      sprites/sEnemyDummyCounter/011dd06a-0e18-4aa0-926a-3710b13c329d.png
  57. BIN
      sprites/sEnemyDummyCounter/19ab20bd-1443-48d8-a3c3-75ffedbc179c.png
  58. BIN
      sprites/sEnemyDummyCounter/1d22c0c7-7cb6-4edd-82b3-a89823d6945f.png
  59. BIN
      sprites/sEnemyDummyCounter/313d19ac-423c-4585-89d5-d727c8a6382e.png
  60. BIN
      sprites/sEnemyDummyCounter/348f603a-d75d-4b72-bf68-ff75045f7e9e.png
  61. BIN
      sprites/sEnemyDummyCounter/84025141-6526-4274-91d8-896cea9709f7.png
  62. BIN
      sprites/sEnemyDummyCounter/84871857-d604-44d9-8721-cc7a4366d386.png
  63. BIN
      sprites/sEnemyDummyCounter/9c79c1b3-6f93-432e-b19d-ca5ac1601499.png
  64. BIN
      sprites/sEnemyDummyCounter/ae9034b3-fcb2-4f9c-b507-f6626ffbfb6d.png
  65. BIN
      sprites/sEnemyDummyCounter/de4004a6-51eb-4343-a9ce-2047148888b8.png
  66. BIN
      sprites/sEnemyDummyCounter/layers/011dd06a-0e18-4aa0-926a-3710b13c329d/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  67. BIN
      sprites/sEnemyDummyCounter/layers/19ab20bd-1443-48d8-a3c3-75ffedbc179c/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  68. BIN
      sprites/sEnemyDummyCounter/layers/1d22c0c7-7cb6-4edd-82b3-a89823d6945f/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  69. BIN
      sprites/sEnemyDummyCounter/layers/313d19ac-423c-4585-89d5-d727c8a6382e/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  70. BIN
      sprites/sEnemyDummyCounter/layers/348f603a-d75d-4b72-bf68-ff75045f7e9e/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  71. BIN
      sprites/sEnemyDummyCounter/layers/84025141-6526-4274-91d8-896cea9709f7/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  72. BIN
      sprites/sEnemyDummyCounter/layers/84871857-d604-44d9-8721-cc7a4366d386/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  73. BIN
      sprites/sEnemyDummyCounter/layers/9c79c1b3-6f93-432e-b19d-ca5ac1601499/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  74. BIN
      sprites/sEnemyDummyCounter/layers/ae9034b3-fcb2-4f9c-b507-f6626ffbfb6d/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  75. BIN
      sprites/sEnemyDummyCounter/layers/de4004a6-51eb-4343-a9ce-2047148888b8/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  76. 126 0
      sprites/sEnemyDummyCounter/sEnemyDummyCounter.yy
  77. BIN
      sprites/sEnemyDummyIdle/313d19ac-423c-4585-89d5-d727c8a6382e.png
  78. BIN
      sprites/sEnemyDummyIdle/layers/313d19ac-423c-4585-89d5-d727c8a6382e/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png
  79. 16 16
      sprites/sEnemyDummyIdle/sEnemyDummyIdle.yy
  80. BIN
      sprites/sEnemyHitboxRec/a76ad535-27e8-4a95-b902-7e8bd3b236b8.png
  81. BIN
      sprites/sEnemyHitboxRec/layers/a76ad535-27e8-4a95-b902-7e8bd3b236b8/294f880a-79b3-48fc-888a-f3c14992345f.png
  82. 13 13
      sprites/sEnemyHitboxRec/sEnemyHitboxRec.yy
  83. BIN
      sprites/sPlayerArcSlash/e1a31dbf-ecc8-4c15-b309-47d07e56738f.png
  84. BIN
      sprites/sPlayerArcSlash/layers/e1a31dbf-ecc8-4c15-b309-47d07e56738f/21d8bf7d-8959-4267-a6af-fcedb5d5d32f.png
  85. 3 23
      sprites/sPlayerArcSlash/sPlayerArcSlash.yy
  86. 1 1
      sprites/sPlayerAttack/sPlayerAttack.yy
  87. 1 1
      sprites/sPlayerDash/sPlayerDash.yy
  88. 1 1
      sprites/sPlayerDodge/sPlayerDodge.yy
  89. 1 1
      sprites/sPlayerDodgeEnding/sPlayerDodgeEnding.yy
  90. 1 1
      sprites/sPlayerDodgeWait/sPlayerDodgeWait.yy
  91. BIN
      sprites/sPlayerHP_2/634e7d38-4222-4a42-a608-7084d18fab17.png
  92. BIN
      sprites/sPlayerHP_2/layers/634e7d38-4222-4a42-a608-7084d18fab17/ebcad0ac-4f00-4b9d-adee-754211cdacd6.png
  93. 1 1
      sprites/sPlayerHitstunAttacked/sPlayerHitstunAttacked.yy
  94. 1 1
      sprites/sPlayerHitstunHazard/sPlayerHitstunHazard.yy
  95. BIN
      sprites/sPlayerHyper/024d89c6-16ff-4e8a-9a31-69abf3768033.png
  96. BIN
      sprites/sPlayerHyper/16f6de5b-f9ba-40c6-953b-4ccf70d5666e.png
  97. BIN
      sprites/sPlayerHyper/4e059014-ab30-43ef-b64b-2c190950eb74.png
  98. BIN
      sprites/sPlayerHyper/6739d4db-a1f7-4970-807d-dc609eaeba97.png
  99. BIN
      sprites/sPlayerHyper/layers/024d89c6-16ff-4e8a-9a31-69abf3768033/21d8bf7d-8959-4267-a6af-fcedb5d5d32f.png
  100. BIN
      sprites/sPlayerHyper/layers/16f6de5b-f9ba-40c6-953b-4ccf70d5666e/21d8bf7d-8959-4267-a6af-fcedb5d5d32f.png

+ 11 - 5
ddmyx.yyp

@@ -12,8 +12,8 @@
   "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":"CrawlEnemy","folderPath":"folders/Enemy/CrawlEnemy.yy","name":"CrawlEnemy","resourceType":"GMFolder","resourceVersion":"2.0",},
-    {"$GMFolder":"","%Name":"oEnemyCrawl","folderPath":"folders/Enemy/CrawlEnemy/oEnemyCrawl.yy","name":"oEnemyCrawl","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":"misc","folderPath":"folders/misc.yy","name":"misc","resourceType":"GMFolder","resourceVersion":"2.0",},
     {"$GMFolder":"","%Name":"Player","folderPath":"folders/Player.yy","name":"Player","resourceType":"GMFolder","resourceVersion":"2.0",},
     {"$GMFolder":"","%Name":"Hitbox","folderPath":"folders/Player/Hitbox.yy","name":"Hitbox","resourceType":"GMFolder","resourceVersion":"2.0",},
@@ -39,13 +39,14 @@
   "name":"ddmyx",
   "resources":[
     {"id":{"name":"fTest","path":"fonts/fTest/fTest.yy",},},
-    {"id":{"name":"123456","path":"notes/123456/123456.yy",},},
     {"id":{"name":"Parents","path":"notes/Parents/Parents.yy",},},
+    {"id":{"name":"必读(更新日志)","path":"notes/必读(更新日志)/必读(更新日志).yy",},},
     {"id":{"name":"oBlockClimbable","path":"objects/oBlockClimbable/oBlockClimbable.yy",},},
     {"id":{"name":"oBlockSlippery","path":"objects/oBlockSlippery/oBlockSlippery.yy",},},
     {"id":{"name":"oCamera","path":"objects/oCamera/oCamera.yy",},},
     {"id":{"name":"oDoubleJumpEffect","path":"objects/oDoubleJumpEffect/oDoubleJumpEffect.yy",},},
     {"id":{"name":"oEnemyCrawl","path":"objects/oEnemyCrawl/oEnemyCrawl.yy",},},
+    {"id":{"name":"oEnemyDummy","path":"objects/oEnemyDummy/oEnemyDummy.yy",},},
     {"id":{"name":"oEnemyHitbox","path":"objects/oEnemyHitbox/oEnemyHitbox.yy",},},
     {"id":{"name":"oFade","path":"objects/oFade/oFade.yy",},},
     {"id":{"name":"oGame","path":"objects/oGame/oGame.yy",},},
@@ -63,6 +64,8 @@
     {"id":{"name":"oPlayerHitboxVer","path":"objects/oPlayerHitboxVer/oPlayerHitboxVer.yy",},},
     {"id":{"name":"oSpike","path":"objects/oSpike/oSpike.yy",},},
     {"id":{"name":"rTest","path":"rooms/rTest/rTest.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",},},
     {"id":{"name":"general","path":"scripts/general/general.yy",},},
     {"id":{"name":"PlayerStates","path":"scripts/PlayerStates/PlayerStates.yy",},},
@@ -71,7 +74,10 @@
     {"id":{"name":"sBlockSlippery","path":"sprites/sBlockSlippery/sBlockSlippery.yy",},},
     {"id":{"name":"sDoubleJumpEffect","path":"sprites/sDoubleJumpEffect/sDoubleJumpEffect.yy",},},
     {"id":{"name":"sEnemyCrawl","path":"sprites/sEnemyCrawl/sEnemyCrawl.yy",},},
-    {"id":{"name":"sEnemyCrawlHitbox","path":"sprites/sEnemyCrawlHitbox/sEnemyCrawlHitbox.yy",},},
+    {"id":{"name":"sEnemyDummyAttack","path":"sprites/sEnemyDummyAttack/sEnemyDummyAttack.yy",},},
+    {"id":{"name":"sEnemyDummyCounter","path":"sprites/sEnemyDummyCounter/sEnemyDummyCounter.yy",},},
+    {"id":{"name":"sEnemyDummyIdle","path":"sprites/sEnemyDummyIdle/sEnemyDummyIdle.yy",},},
+    {"id":{"name":"sEnemyHitboxRec","path":"sprites/sEnemyHitboxRec/sEnemyHitboxRec.yy",},},
     {"id":{"name":"sHitboxArc","path":"sprites/sHitboxArc/sHitboxArc.yy",},},
     {"id":{"name":"sHitboxHor","path":"sprites/sHitboxHor/sHitboxHor.yy",},},
     {"id":{"name":"sHitboxMark","path":"sprites/sHitboxMark/sHitboxMark.yy",},},
@@ -84,8 +90,8 @@
     {"id":{"name":"sPlayerDodgeWait","path":"sprites/sPlayerDodgeWait/sPlayerDodgeWait.yy",},},
     {"id":{"name":"sPlayerHitstunAttacked","path":"sprites/sPlayerHitstunAttacked/sPlayerHitstunAttacked.yy",},},
     {"id":{"name":"sPlayerHitstunHazard","path":"sprites/sPlayerHitstunHazard/sPlayerHitstunHazard.yy",},},
-    {"id":{"name":"sPlayerHP_2","path":"sprites/sPlayerHP_2/sPlayerHP_2.yy",},},
     {"id":{"name":"sPlayerHP","path":"sprites/sPlayerHP/sPlayerHP.yy",},},
+    {"id":{"name":"sPlayerHyper","path":"sprites/sPlayerHyper/sPlayerHyper.yy",},},
     {"id":{"name":"sPlayerIdle","path":"sprites/sPlayerIdle/sPlayerIdle.yy",},},
     {"id":{"name":"sPlayerJump","path":"sprites/sPlayerJump/sPlayerJump.yy",},},
     {"id":{"name":"sPlayerWalk","path":"sprites/sPlayerWalk/sPlayerWalk.yy",},},

+ 45 - 0
notes/必读(更新日志)/必读(更新日志).txt

@@ -0,0 +1,45 @@
+这是一份更新项目进度后的必读文件。
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Commit中过多的内容请全体开发者在这里更新并留档。
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+2026/2/5
+项目启动。
+
+2026/2/13 DrDuck
+
+1. 统一了所有的动画接口,完全弃用image_speed, 改用animation_spd
+需要在所有create中手动定义,并在step中动画步骤位置image_index += animation_spd;
+顺带更新了animation_end()函数,与新的动画系统适配,防止卡死
+
+2. 新增set_sprite()函数,与名字一致,但会自动检测前后sprite是否一致
+并决定是否将image_index归零,防止动画跳帧
+
+3. 可以注意到gml的所有sprite都有独立的fps参数设置,之前设置为15.
+gml内部会计算image_index += sprite_fps / game_fps * image_speed等等公式进行适配
+所以画面结果没有问题,但是不便于后续维护与统一性
+所以将所有sprite统一为60fps, 新的aniation_spd定义为0.25
+除攀墙/跳跃等手动状态判断单帧动画,直接将fps设置为0
+
+4. 重定义了玩家碰撞箱反馈逻辑,与父对象统一性,太过繁杂不加具体解释
+简单概括,把每种攻击给玩家的反馈都打包进hitbox/create中的hit_feedback(_owner){...}
+
+5. 修正了玩家状态机的命名规范。现在所有可能被赋值给state的函数名字都以state_起始
+所有按帧执行的检测/更新逻辑往往以player_check_起始
+
+6. 优化了敌人状态机,不详细展开
+
+7. 我发现点右上角最大化代码窗口显然是更拟人的工作方案,不用把一堆窗口拖来拖去
+
+8. 优化敌人碰撞箱逻辑,封装enemy_create_hitbox(x, y, ...)函数,详见EnemyStates
+另外player的碰撞箱被设计为几个自带sprite和参数(例如hit_feedback)的object, 拥有共同父对象
+因为player的击中逻辑和碰撞箱形状太过复杂,无法通过简单逻辑变幻得到
+而enemy目前的碰撞箱全部为矩形,可以通过2*2的sprite拉伸位移得到
+所以enemy统一创建oEnemyHitbox再为其赋不同的属性
+
+9. 新增了oEnemyDummy自动受击反击,方便测试闪避等
+
+10. 你可以接着写
+
+2026/2/...
+...

+ 2 - 2
notes/123456/123456.yy → notes/必读(更新日志)/必读(更新日志).yy

@@ -1,7 +1,7 @@
 {
   "$GMNotes":"v1",
-  "%Name":"123456",
-  "name":"123456",
+  "%Name":"必读(更新日志)",
+  "name":"必读(更新日志)",
   "parent":{
     "name":"ddmyx",
     "path":"ddmyx.yyp",

+ 0 - 1
objects/oEnemyCrawl/Alarm_0.gml

@@ -1 +0,0 @@
-image_blend = c_white;

+ 2 - 4
objects/oEnemyCrawl/Create_0.gml

@@ -1,10 +1,8 @@
 event_inherited();
 
-walk_spd = 2;
+walk_spd = 2.5;
 hp = 150;
 
 enemy_ai = enemy_crawl_ai;
 
-collision_hitbox = icl(oEnemyHitbox);
-collision_hitbox.owner = id;
-collision_hitbox.sprite_index = sEnemyCrawlHitbox;
+hitbox = enemy_create_hitbox(48, 48);

+ 1 - 2
objects/oEnemyCrawl/oEnemyCrawl.yy

@@ -2,7 +2,6 @@
   "$GMObject":"",
   "%Name":"oEnemyCrawl",
   "eventList":[
-    {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":2,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
   ],
   "managed":true,
@@ -10,7 +9,7 @@
   "overriddenProperties":[],
   "parent":{
     "name":"oEnemyCrawl",
-    "path":"folders/Enemy/CrawlEnemy/oEnemyCrawl.yy",
+    "path":"folders/Enemy/oEnemyCrawl.yy",
   },
   "parentObjectId":{
     "name":"oParentEnemy",

+ 10 - 0
objects/oEnemyDummy/Create_0.gml

@@ -0,0 +1,10 @@
+event_inherited();
+
+hp = 9999;
+kb_factor = 0;
+
+enemy_ai = enemy_dummy_ai;
+
+state = "IDLE";
+
+hitbox = enemy_create_hitbox(80, 192);

+ 41 - 0
objects/oEnemyDummy/oEnemyDummy.yy

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

+ 6 - 2
objects/oEnemyHitbox/Create_0.gml

@@ -1,3 +1,7 @@
 damage = 1;
-attack_type = undefined; //"X" - horizontal, "Y" - vertical...
-owner = noone;
+owner = noone;
+
+persist = true;
+
+x_offset = 0;
+y_offset = 0;

+ 9 - 2
objects/oEnemyHitbox/Step_0.gml

@@ -1,5 +1,12 @@
 if owner != noone
 {
-	x = owner.x;
-	y = owner.y;
+	x = owner.x + x_offset;
+	y = owner.y + y_offset;
+}
+
+if !persist
+{
+	duration--;
+	if duration < 0
+		instance_destroy();
 }

+ 4 - 1
objects/oEnemyHitbox/oEnemyHitbox.yy

@@ -12,7 +12,10 @@
     "name":"Enemy",
     "path":"folders/Enemy.yy",
   },
-  "parentObjectId":null,
+  "parentObjectId":{
+    "name":"oParentAttackable",
+    "path":"objects/oParentAttackable/oParentAttackable.yy",
+  },
   "persistent":false,
   "physicsAngularDamping":0.1,
   "physicsDensity":0.5,

+ 4 - 4
objects/oGame/Create_0.gml

@@ -5,9 +5,9 @@ icl(oPlayer, 160, 2016);
 global.g = 0.5;
 
 global.hitstop = 0;
-
-global.playerHP = 5;
-
 global.time_scale = 1.0;
 
-global.developer_mode = true;
+global.developer_mode = true;
+
+global.playerHP = 5;
+global.playerINK = 0;

+ 1 - 3
objects/oGame/Step_0.gml

@@ -1,4 +1,2 @@
 if global.hitstop > 0
-	global.hitstop--;
-	
-//global.time_scale = lerp
+	global.hitstop--;

+ 2 - 2
objects/oParentEnemy/CleanUp_0.gml

@@ -1,2 +1,2 @@
-if instance_exists(collision_hitbox)
-	instance_destroy(collision_hitbox);
+if hitbox != noone
+	instance_destroy(hitbox);

+ 10 - 2
objects/oParentEnemy/Create_0.gml

@@ -7,11 +7,19 @@ walk_spd = 0;
 
 hitstun_timer = 0;
 hitstun_max = 10;
-can_hitstun = true;
 kb_factor = 1.0;
 
 collision_hitbox = noone;
 
 is_dead = false;
 
-enemy_ai = function(){};
+state = undefined;
+
+enemy_ai = function(){};
+
+animation_spd = 0.25;
+image_speed = 0;
+
+get_hit = false;
+
+hitbox = noone;

+ 3 - 1
objects/oParentEnemy/Step_0.gml

@@ -1,6 +1,8 @@
 if check_hitstop() || is_dead
 	exit;
-	
+
+image_index += animation_spd;
+
 enemy_ai();
 
 enemy_check_hitstun();

+ 1 - 8
objects/oParentPlayerHitbox/Step_0.gml

@@ -14,14 +14,7 @@ for (var i = 0; i < _num; i++)
     if ds_list_find_index(hit_list, _inst) == -1
 	{
 		if ds_list_empty(hit_list)
-            with(owner)
-			{
-                global.hitstop = other.hit_feedback;
-				if other.y_offset > 0 // 下劈
-					player_perform_pogo();
-				if other.x_offset != 0 // 反冲
-					player_perform_recoil();
-            }
+			hit_feedback(owner);
 		if object_is_ancestor(_inst.object_index, oParentEnemy)
             with(_inst)
 			{

+ 5 - 2
objects/oPlayer/Create_0.gml

@@ -1,5 +1,8 @@
 // 1: Right, -1: Left
 
+animation_spd = 0.25;
+image_speed = 0;
+
 state = state_free;
 
 facing = 1;
@@ -40,10 +43,10 @@ is_marked = false;
 is_perfect = false;
 
 is_invincible = false;
-
+/*
 debug_hitbox_x1 = 0;
 debug_hitbox_y1 = 0;
 debug_hitbox_x2 = 0;
 debug_hitbox_y2 = 0;
-
+*/
 tp_lastsafe = false;

+ 4 - 2
objects/oPlayer/Step_0.gml

@@ -1,7 +1,8 @@
 if check_hitstop()
 	exit;
 
-player_state_update();
+player_status_update();
+
 player_check_attacked();
 player_check_hazard();
 
@@ -9,9 +10,10 @@ state();
 
 player_move_and_collide();
 
+/**/
 image_xscale = facing;
 
-if is_invincible
+if is_invincible && global.developer_mode
 	image_blend = c_orange;
 else
 	image_blend = c_white;

+ 8 - 1
objects/oPlayerHitboxArc/Create_0.gml

@@ -5,4 +5,11 @@ damage = 20;
 kb_factor_x = 100;
 kb_factor_y = -20;
 
-hit_feedback = 30;
+hit_feedback = function(_owner)
+{
+	_owner.y_spd = _owner.jump_spd * 0.8;
+	_owner.jump_cnt = 1;
+	_owner.can_dash = true;
+	_owner.coyote_timer = 0;
+	global.hitstop = 30;
+}

+ 7 - 2
objects/oPlayerHitboxHor/Create_0.gml

@@ -2,6 +2,11 @@ event_inherited();
 
 damage = 5;
 
-kb_factor_x = 5;
+kb_factor_x = 15;
 
-hit_feedback = 2;
+hit_feedback = function(_owner)
+{
+	_owner.x_spd = - _owner.facing * 3;
+	_owner.move_lock_timer = 6;
+	global.hitstop = 2;
+}

+ 5 - 2
objects/oPlayerHitboxMark/Create_0.gml

@@ -2,6 +2,9 @@ event_inherited();
 
 damage = 5;
 
-kb_factor_y = -5;
+kb_factor_y = -15;
 
-hit_feedback = 0;
+hit_feedback = function(_owner)
+{
+	owner.is_marked = true;
+}

+ 9 - 1
objects/oPlayerHitboxVer/Create_0.gml

@@ -2,4 +2,12 @@ event_inherited();
 
 damage = 5;
 
-hit_feedback = 2;
+kb_factor_y = -10;
+
+hit_feedback = function(_owner)
+{
+	_owner.y_spd = _owner.jump_spd * 0.8;
+	_owner.jump_cnt = 1;
+	_owner.can_dash = true;
+	_owner.coyote_timer = 0;
+}

+ 2 - 2
rooms/rTest/rTest.yy

@@ -213,9 +213,9 @@
     {"name":"inst_3B649029","path":"rooms/rTest/rTest.yy",},
     {"name":"inst_6755EC69","path":"rooms/rTest/rTest.yy",},
     {"name":"inst_6EE1C0BB","path":"rooms/rTest/rTest.yy",},
-    {"name":"inst_6CFDA2B6","path":"rooms/rTest/rTest.yy",},
     {"name":"inst_73A3096C","path":"rooms/rTest/rTest.yy",},
     {"name":"inst_A4CF0EF","path":"rooms/rTest/rTest.yy",},
+    {"name":"inst_574F2C78","path":"rooms/rTest/rTest.yy",},
   ],
   "isDnd":false,
   "layers":[
@@ -427,9 +427,9 @@
         {"$GMRInstance":"v4","%Name":"inst_3B649029","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_3B649029","objectId":{"name":"oBlockClimbable","path":"objects/oBlockClimbable/oBlockClimbable.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":3712.0,"y":1216.0,},
         {"$GMRInstance":"v4","%Name":"inst_6755EC69","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_6755EC69","objectId":{"name":"oBlockClimbable","path":"objects/oBlockClimbable/oBlockClimbable.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":3648.0,"y":1216.0,},
         {"$GMRInstance":"v4","%Name":"inst_6EE1C0BB","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_6EE1C0BB","objectId":{"name":"oEnemyCrawl","path":"objects/oEnemyCrawl/oEnemyCrawl.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":256.0,"y":1760.0,},
-        {"$GMRInstance":"v4","%Name":"inst_6CFDA2B6","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_6CFDA2B6","objectId":{"name":"oEnemyCrawl","path":"objects/oEnemyCrawl/oEnemyCrawl.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":1216.0,"y":2048.0,},
         {"$GMRInstance":"v4","%Name":"inst_73A3096C","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_73A3096C","objectId":{"name":"oBlockClimbable","path":"objects/oBlockClimbable/oBlockClimbable.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":384.0,"y":1824.0,},
         {"$GMRInstance":"v4","%Name":"inst_A4CF0EF","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_A4CF0EF","objectId":{"name":"oBlockClimbable","path":"objects/oBlockClimbable/oBlockClimbable.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":448.0,"y":1824.0,},
+        {"$GMRInstance":"v4","%Name":"inst_574F2C78","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"name":"inst_574F2C78","objectId":{"name":"oEnemyDummy","path":"objects/oEnemyDummy/oEnemyDummy.yy",},"properties":[],"resourceType":"GMRInstance","resourceVersion":"2.0","rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":1024.0,"y":1984.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,},
   ],

+ 12 - 0
scripts/CrawlAI/CrawlAI.gml

@@ -0,0 +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); 
+	
+	if _wall_ahead || _ledge_ahead || _hazard_ahead
+    facing *= -1;
+	
+	x_spd = facing * walk_spd;
+	y_spd += global.g;
+}

+ 13 - 0
scripts/CrawlAI/CrawlAI.yy

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

+ 34 - 0
scripts/DummyAI/DummyAI.gml

@@ -0,0 +1,34 @@
+function enemy_dummy_ai()
+{
+	x_spd = 0;
+	y_spd = 0;
+	switch(state)
+	{
+		case "IDLE":
+			if hitstun_timer == hitstun_max
+			{
+				state = "COUNTER";
+				set_sprite(sEnemyDummyCounter);
+			}
+			facing = sign(oPlayer.x - x);
+			break;
+			
+		case "COUNTER":
+			if animation_end()
+			{
+				enemy_create_hitbox(384, 96, facing * 192, 0, 12);
+				
+				state = "ATTACK";
+				set_sprite(sEnemyDummyCounter);
+			}
+			break;
+			
+		case "ATTACK":
+			if animation_end()
+			{
+				state = "IDLE";
+				set_sprite(sEnemyDummyIdle);
+			}
+			break;
+	}
+}

+ 13 - 0
scripts/DummyAI/DummyAI.yy

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

+ 35 - 17
scripts/EnemyStates/EnemyStates.gml

@@ -31,16 +31,20 @@ function enemy_check_hitstun()
 	if hitstun_timer > 0
 	{
 		hitstun_timer -= global.time_scale;
-		x_spd_kb = lerp(x_spd_kb, 0, 0.1);
-		y_spd_kb = lerp(y_spd_kb, 0, 0.1);
+		x_spd_kb = lerp(x_spd_kb, 0, 0.2);
+		y_spd_kb = lerp(y_spd_kb, 0, 0.2);
 	
 		x_spd = 0;
 		y_spd = 0;
+		
+		image_blend = c_orange;
 	}
 	else
 	{
 		x_spd_kb = 0;
 		y_spd_kb = 0;
+		
+		image_blend = c_white;
 	}
 }
 
@@ -48,31 +52,45 @@ function enemy_get_hit(_damage, _kb_x, _kb_y)
 {
     hp -= _damage;
     
-    if can_hitstun
-        hitstun_timer = hitstun_max;
+    hitstun_timer = hitstun_max;
 
     x_spd_kb = _kb_x * kb_factor;
 	y_spd_kb = _kb_y * kb_factor;
 
-    image_blend = c_blue;
-    alarm[0] = 10;
-
     if hp <= 0
 	{
         is_dead = true;
-        instance_destroy(); // animation
+        instance_destroy();
     }
 }
 
-function enemy_crawl_ai()
+/// @desc 优雅地以该实例为原点,给定宽高、偏移与持续时间为参数,生成敌人碰撞箱
+/// @param {real} _x 碰撞箱宽度
+/// @param {real} _y 碰撞箱高度
+/// @param {real} _x_offset 碰撞箱与该实例在x轴上的偏移量,默认为0
+/// @param {real} _y_offset 碰撞箱与该实例在y轴上的偏移量,默认为0
+/// @param {real} _duration 碰撞箱持续时间,默认为0,即无限
+function enemy_create_hitbox(_x, _y,
+_x_offset = 0, _y_offset = 0, _duration = 0)
 {
-	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); 
-	
-	if _wall_ahead || _ledge_ahead || _hazard_ahead
-    facing *= -1;
+	var _hb = icd(oEnemyHitbox, x + _x_offset, y + _y_offset);
+	_hb.owner = id;
+	_hb.sprite_index = sEnemyHitboxRec;
+	_hb.x_offset = _x_offset;
+	_hb.y_offset = _y_offset;
 	
-	x_spd = facing * walk_spd;
-	y_spd += global.g;
+	var _base = 2;
+	_hb.image_xscale = _x / _base;
+	_hb.image_yscale = _y / _base;
+/*
+oEnemyHitbox的基础大小为2*2
+因为gml的1*1sprite无法将重心放在middle/center
+此处定义后续用于缩放
+*/	
+	if _duration != 0
+	{
+		_hb.persist = false;
+		_hb.duration = _duration;
+	}
+	return _hb;
 }

+ 151 - 199
scripts/PlayerStates/PlayerStates.gml

@@ -3,7 +3,7 @@ function player_move_and_collide()
     if place_meeting(x, y + y_spd, oParentSolid)
 	{
         while !place_meeting(x, y + sign(y_spd), oParentSolid)
-			y += sign(y_spd); 
+			y += sign(y_spd);
         y_spd = 0; 
     }
     y += y_spd;
@@ -29,10 +29,13 @@ function player_move_and_collide()
 	}
     x += x_spd;
 }
-function player_state_update()
+function player_status_update()
 {
 	current_attacker = instance_place(x, y, oEnemyHitbox);
 	
+	/**/
+	image_index += animation_spd;
+	
 	if oInput._dash
 		dash_buffer = dash_buffer_max;
 	if oInput._attack
@@ -44,7 +47,7 @@ function player_state_update()
 	
 	_on_wall = place_meeting(x + 1, y, oBlockClimbable)
 			- place_meeting(x - 1, y, oBlockClimbable);
-		
+
 	if _on_ground || (_on_wall != 0)
 		can_dash = true;
 
@@ -72,115 +75,13 @@ function player_state_update()
 		coyote_timer--;
 }
 
-function state_free()
-{
-	y_spd += global.g;
-	
-	if _on_wall != 0 && y_spd > 0
-		y_spd = min(y_spd, 3);
-	
-	/*下面是动画与视觉*/
-	
-	var _current_sprite = sprite_index;
-	
-	image_speed = 1;
-	if _move_dir != 0
-	{
-		facing = _move_dir;
-		if _on_ground
-			sprite_index = sPlayerWalk;
-	}
-	else sprite_index = sPlayerIdle;
-	
-	if !_on_ground
-	{
-		image_speed = 0;
-		
-		if _on_wall == facing
-			sprite_index = sPlayerWall;
-		else
-		{
-			sprite_index = sPlayerJump;
-			image_index = (y_spd < 0) ? 0 : 1;
-		}
-	}
-	if _current_sprite != sprite_index
-		image_index = 0;
-	/**/
-	player_check_dodge();
-	if state == player_dodge return;
-	
-	player_check_movement();
-	player_check_dash();
-	player_check_jump();
-	player_check_attack();
-}
-function state_dash()
-{
-    y_spd += 0.2 * global.g;
-    icl(oPlayerAfterImage);
-	
-    if animation_end()
-	{
-		if !_on_ground
-			jump_cnt = max(jump_cnt, 1);
-			
-		state = state_free;
-        player_check_attack();
-    }
-	player_check_dodge();
-}
-function state_attack()
-{
-	player_check_movement();
-	player_check_jump();
-    y_spd += global.g;
-	
-    if image_index == 1
-	{
-		var _hb;
-		if oInput._down && !_on_ground
-		{
-			_hb = icl(oPlayerHitboxVer, x, y + 64);
-			_hb.y_offset = 64;
-		}
-		else if oInput._up
-		{
-			_hb = icl(oPlayerHitboxVer, x, y - 64);
-			_hb.y_offset = -64;
-		}
-		else
-		{
-			_hb = icl(oPlayerHitboxHor, x + 72 * facing);
-			_hb.x_offset += 72 * facing;
-			
-			_hb.kb_factor_x *= facing;
-		}
-			
-		_hb.owner = id;
-	}
-    // 冲刺预输入 & 预读帧数
-    if image_index >= 2
-        player_check_dash();
-	// 攻击后摇结束
-    if animation_end()
-        state = state_free;
-}
-function state_locked()
-{
-	x_spd = 0;
-	y_spd += global.g;
-}
-
 function player_check_dash()
 {
 	if dash_buffer > 0 && dash_cooldown <= 0 && can_dash
 	{   
 		dash_buffer = 0;
         state = state_dash;
-		sprite_index = sPlayerDash;
-		image_index = 0;
-		image_speed = 1;
+		set_sprite(sPlayerDash);
         dash_cooldown = 36;
         x_spd = image_xscale * walk_spd * 3;
         y_spd = 0;
@@ -208,7 +109,7 @@ function player_check_jump()
 			y_spd = jump_spd;
 			x_spd = -_on_wall * walk_spd * 1.5;
 			jump_cnt = 1;
-		    move_lock_timer = 12;
+		    move_lock_timer = 10;
 		    oInput.jump_buffer_timer = 0;
 		}
 		else if jump_cnt < jump_max
@@ -229,21 +130,39 @@ function player_check_attack()
         attack_buffer = 0;
         state = state_attack;
 		
-		sprite_index = sPlayerAttack;
-		image_speed = 1;
-		image_index = 0;
+		set_sprite(sPlayerAttack);
     }
 }
+function player_check_dodge()
+{
+	if (oInput._down || oInput._up) && _on_ground
+	&& (oInput._dash || state == state_dash)
+	{
+		state = state_dodge;
+		set_sprite(sPlayerDodgeWait);
+		
+		dodge_phase = "WAIT";
+		dodge_timer = 0;
+		marked_target = noone;
+		is_marked = false;
+		is_perfect = false;
+		
+		var _hb = icl(oPlayerHitboxMark, x + facing * 60, y + 40);
+		_hb.owner = id;
+		_hb.x_offset = 60 * facing;
+		_hb.y_offset = 40;
+	}
+}
 
 function player_check_attacked()
 {
 	if current_attacker == noone || is_invincible
-	|| state == player_dodge
+	|| (state == state_dodge && dodge_phase == "WAIT")
 		return;
 	
 	global.playerHP -= current_attacker.damage;
 	is_invincible = true;
-	alarm[0] = 80;
+	alarm[0] = 80; // 稍后取缔
 	
 	var _dir = sign(x - current_attacker.x); 
     if _dir == 0
@@ -254,11 +173,9 @@ function player_check_attacked()
 	x_spd = _dir * 30;
     y_spd = -5;
 	
-	state = player_hitstun_attacked;
+	state = state_hitstun_attacked;
 	
-	sprite_index = sPlayerHitstunAttacked;
-	image_speed = 1;
-	image_index = 0;
+	set_sprite(sPlayerHitstunAttacked);
 	//effects
 }
 function player_check_hazard()
@@ -281,29 +198,12 @@ function player_check_hazard()
 		x_spd = _dir * 10;
 		y_spd = -10;
 		
-		state = player_hitstun_hazard;
+		state = state_hitstun_hazard;
 	
-		sprite_index = sPlayerHitstunHazard;
-		image_speed = 1;
-		image_index = 0;
+		set_sprite(sPlayerHitstunHazard);
 	}
 }
-
-function player_perform_pogo()
-{
-	y_spd = jump_spd * 0.8;
-	jump_cnt = 1;
-	can_dash = true;
-	coyote_timer = 0;
-	global.hitstop = 3;
-}
-function player_perform_recoil()
-{
-	x_spd = - facing * 3;
-	move_lock_timer = 6;
-	global.hitstop = 2;
-}
-function player_hitstun_attacked()
+function state_hitstun_attacked()
 {
 	x_spd = lerp(x_spd, 0, 0.1);	
 	y_spd += global.g;
@@ -311,7 +211,7 @@ function player_hitstun_attacked()
 	if animation_end()
 		state = state_free;
 }
-function player_hitstun_hazard()
+function state_hitstun_hazard()
 {
 	x_spd = lerp(x_spd, 0, 0.1);
 	y_spd += global.g;
@@ -330,29 +230,105 @@ function player_hitstun_hazard()
 	}
 }
 
-function player_check_dodge()
+function state_free()
 {
-	if (oInput._down || oInput._up) && _on_ground
-	&& (oInput._dash || state == state_dash)
+	y_spd += global.g;
+	
+	if _on_wall != 0 && y_spd > 0
+		y_spd = min(y_spd, 3);
+	
+	/*下面是动画与视觉*/
+	animation_spd = 0.25;
+	
+	if _move_dir != 0 //有输入
 	{
-		state = player_dodge;
-		sprite_index = sPlayerDodgeWait;
-		image_index = 0;
-		image_speed = 1;
-		
-		dodge_phase = "WAIT";
-		dodge_timer = 0;
-		marked_target = noone;
-		is_marked = false;
-		is_perfect = false;
-		
-		var _hb = icl(oPlayerHitboxMark, x + facing * 60, y + 40);
+		facing = _move_dir;
+		if _on_ground
+			set_sprite(sPlayerWalk); //走路
+	}
+	else set_sprite(sPlayerIdle); //待机
+	
+	if !_on_ground
+	{	
+		if _on_wall == facing
+			set_sprite(sPlayerWall);
+		else
+		{
+			set_sprite(sPlayerJump);
+			image_index = (y_spd < 0) ? 0 : 1;
+		}
+	}
+	
+	/**/
+	player_check_dodge();
+	if state == state_dodge return;
+	
+	player_check_movement();
+	player_check_dash();
+	player_check_jump();
+	player_check_attack();
+}
+function state_dash()
+{
+    y_spd += 0.2 * global.g;
+    icl(oPlayerAfterImage);
+	
+    if animation_end()
+	{
+		if !_on_ground
+			jump_cnt = max(jump_cnt, 1);
+			
+		state = state_free;
+        player_check_attack();
+    }
+	
+	player_check_dodge();
+}
+function state_attack()
+{
+	player_check_movement();
+	player_check_jump();
+	
+    y_spd += global.g;
+	
+    if image_index == 1
+	{
+		var _hb;
+		if oInput._down && !_on_ground
+		{
+			_hb = icl(oPlayerHitboxVer, x, y + 64);
+			_hb.y_offset = 64;
+		}
+		else if oInput._up
+		{
+			_hb = icl(oPlayerHitboxVer, x, y - 64);
+			_hb.y_offset = -64;
+			
+			_hb.kb_factor_y = -5;
+		}
+		else
+		{
+			_hb = icl(oPlayerHitboxHor, x + 72 * facing);
+			_hb.x_offset += 72 * facing;
+			
+			_hb.kb_factor_x *= facing;
+		}
 		_hb.owner = id;
-		_hb.x_offset = 60 * facing;
-		_hb.y_offset = 40;
 	}
+    // 冲刺预输入
+    if image_index >= 2
+        player_check_dash();
+	// 攻击后摇结束
+    if animation_end()
+        state = state_free;
 }
-function player_dodge()
+function state_locked()
+{
+	x_spd = 0;
+	y_spd += global.g;
+}
+
+function state_dodge()
 {
 	if dodge_phase == "WAIT"
 	{
@@ -363,8 +339,7 @@ function player_dodge()
 			y_spd = jump_spd;
 			dodge_phase = "DODGE";
 			
-			sprite_index = sPlayerDodge;
-			image_index = 0;
+			set_sprite(sPlayerDodge);
 			
 			if current_attacker != noone && is_marked
 			{
@@ -390,25 +365,22 @@ function player_dodge()
 			y_spd = 0;
 			if is_perfect
 			{
-				state = player_arc_slash;
-				sprite_index = sPlayerArcSlash;
-				image_index = 0;
-				image_speed = 1;
+				state = state_arc_slash;
+				set_sprite(sPlayerArcSlash);
 			}
 			else
 			{
-				state = player_dodge_ending;
-				sprite_index = sPlayerDodgeEnding;
-				image_index = 0;
+				state = state_dodge_ending;
+				set_sprite(sPlayerDodgeEnding);
 			}
 		}
 	}
 }
-function player_arc_slash()
+function state_arc_slash()
 {
-    if image_index == 7
+    if image_index == 12
 	{
-		var _hb = icl(oPlayerHitboxArc);
+		var _hb = icd(oPlayerHitboxArc);
         _hb.owner = id;
         
         if facing == 1
@@ -422,48 +394,28 @@ function player_arc_slash()
             _hb.image_xscale = -1;
 			_hb.image_angle = -30;
 			_hb.kb_factor_x *= -1;
-		}
-		
+		}	
     }
-	else if animation_end()
+	else if image_index > 12
+		y_spd += global.g;
+	if animation_end()
 	{
         global.time_scale = 1.0;
         state = state_free;
     }
 }
-function player_dodge_ending()
+function state_dodge_ending()
 {
     if animation_end()
 		state = state_free;
 }
-function player_check_mark()
-{
 
-    /*
-    var _width  = 2 * (72 + 16);
-    var _height = 64;
-    var _x_offset = facing * (36 + 16);
-    var _y_offset = 0;
-    
-    var x1 = x + _x_offset - (_width / 2);
-    var y1 = y + _y_offset;
-    var x2 = x + _x_offset + (_width / 2);
-    var y2 = y + _y_offset + _height;
-
-    debug_hitbox_x1 = x1;
-    debug_hitbox_y1 = y1;
-    debug_hitbox_x2 = x2;
-    debug_hitbox_y2 = y2;
-
-    var _target = collision_rectangle(x1, y1, x2, y2, oParentEnemy, false, true);
-
-    if _target != noone
+/*
+function player_check_hyper()
+{
+	if oInput.hyper
 	{
-        is_marked = true;
-        marked_target = _target;
-        // animation
-        // instance_create_layer(_target.x, _target.y, "FX", oFx_Marked);
-    }
-	*/
 	
-}
+	}
+*/
+	

+ 12 - 4
scripts/general/general.gml

@@ -2,21 +2,29 @@ function check_hitstop()
 {
 	if global.hitstop > 0
 	{
-		image_speed = 0;
 		return true;
 	}
 	else
 	{
-		image_speed = 1;
 		return false;
 	}
 }
 /// @desc 优雅地检测该实例的sprite当前动画是否到达最后一帧
 function animation_end()
 {
-	if (image_speed == 0)
+	if animation_spd == 0
 		return false;
-    return (image_index + image_speed >= image_number);
+    return (image_index + animation_spd >= image_number);
+}
+/// @desc 优雅地将该实例的sprite替换为给定值,并将sprite_index归零
+/// @param {Asset.GMSprite} _sprite 将要替换为的sprite
+function set_sprite(_sprite)
+{
+	if sprite_index != _sprite
+	{
+        sprite_index = _sprite;
+        image_index = 0;
+    }
 }
 
 function camera_snap()

+ 1 - 1
sprites/sEnemyCrawl/sEnemyCrawl.yy

@@ -26,7 +26,7 @@
   "origin":4,
   "parent":{
     "name":"oEnemyCrawl",
-    "path":"folders/Enemy/CrawlEnemy/oEnemyCrawl.yy",
+    "path":"folders/Enemy/oEnemyCrawl.yy",
   },
   "preMultiplyAlpha":false,
   "resourceType":"GMSprite",

BIN
sprites/sEnemyCrawlHitbox/a76ad535-27e8-4a95-b902-7e8bd3b236b8.png


BIN
sprites/sEnemyCrawlHitbox/layers/a76ad535-27e8-4a95-b902-7e8bd3b236b8/294f880a-79b3-48fc-888a-f3c14992345f.png


BIN
sprites/sEnemyDummyAttack/011dd06a-0e18-4aa0-926a-3710b13c329d.png


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


BIN
sprites/sEnemyDummyAttack/1d22c0c7-7cb6-4edd-82b3-a89823d6945f.png


BIN
sprites/sEnemyDummyAttack/313d19ac-423c-4585-89d5-d727c8a6382e.png


BIN
sprites/sEnemyDummyAttack/348f603a-d75d-4b72-bf68-ff75045f7e9e.png


BIN
sprites/sEnemyDummyAttack/84025141-6526-4274-91d8-896cea9709f7.png


BIN
sprites/sEnemyDummyAttack/84871857-d604-44d9-8721-cc7a4366d386.png


BIN
sprites/sEnemyDummyAttack/9c79c1b3-6f93-432e-b19d-ca5ac1601499.png


BIN
sprites/sEnemyDummyAttack/ae9034b3-fcb2-4f9c-b507-f6626ffbfb6d.png


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


BIN
sprites/sEnemyDummyAttack/layers/011dd06a-0e18-4aa0-926a-3710b13c329d/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


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


BIN
sprites/sEnemyDummyAttack/layers/1d22c0c7-7cb6-4edd-82b3-a89823d6945f/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


BIN
sprites/sEnemyDummyAttack/layers/313d19ac-423c-4585-89d5-d727c8a6382e/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


BIN
sprites/sEnemyDummyAttack/layers/348f603a-d75d-4b72-bf68-ff75045f7e9e/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


BIN
sprites/sEnemyDummyAttack/layers/84025141-6526-4274-91d8-896cea9709f7/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


BIN
sprites/sEnemyDummyAttack/layers/84871857-d604-44d9-8721-cc7a4366d386/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


BIN
sprites/sEnemyDummyAttack/layers/9c79c1b3-6f93-432e-b19d-ca5ac1601499/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


BIN
sprites/sEnemyDummyAttack/layers/ae9034b3-fcb2-4f9c-b507-f6626ffbfb6d/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


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


+ 126 - 0
sprites/sEnemyDummyAttack/sEnemyDummyAttack.yy

@@ -0,0 +1,126 @@
+{
+  "$GMSprite":"v2",
+  "%Name":"sEnemyDummyAttack",
+  "bboxMode":0,
+  "bbox_bottom":191,
+  "bbox_left":0,
+  "bbox_right":95,
+  "bbox_top":0,
+  "collisionKind":1,
+  "collisionTolerance":0,
+  "DynamicTexturePage":false,
+  "edgeFiltering":false,
+  "For3D":false,
+  "frames":[
+    {"$GMSpriteFrame":"v1","%Name":"313d19ac-423c-4585-89d5-d727c8a6382e","name":"313d19ac-423c-4585-89d5-d727c8a6382e","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
+    {"$GMSpriteFrame":"v1","%Name":"84025141-6526-4274-91d8-896cea9709f7","name":"84025141-6526-4274-91d8-896cea9709f7","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
+    {"$GMSpriteFrame":"v1","%Name":"84871857-d604-44d9-8721-cc7a4366d386","name":"84871857-d604-44d9-8721-cc7a4366d386","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
+    {"$GMSpriteFrame":"v1","%Name":"ae9034b3-fcb2-4f9c-b507-f6626ffbfb6d","name":"ae9034b3-fcb2-4f9c-b507-f6626ffbfb6d","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
+    {"$GMSpriteFrame":"v1","%Name":"348f603a-d75d-4b72-bf68-ff75045f7e9e","name":"348f603a-d75d-4b72-bf68-ff75045f7e9e","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
+    {"$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,
+  "height":192,
+  "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":"sEnemyDummyAttack",
+  "nineSlice":null,
+  "origin":4,
+  "parent":{
+    "name":"oEnemyDummy",
+    "path":"folders/Enemy/oEnemyDummy.yy",
+  },
+  "preMultiplyAlpha":false,
+  "resourceType":"GMSprite",
+  "resourceVersion":"2.0",
+  "sequence":{
+    "$GMSequence":"v1",
+    "%Name":"sEnemyDummyAttack",
+    "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":10.0,
+    "lockOrigin":false,
+    "moments":{
+      "$KeyframeStore<MomentsEventKeyframe>":"",
+      "Keyframes":[],
+      "resourceType":"KeyframeStore<MomentsEventKeyframe>",
+      "resourceVersion":"2.0",
+    },
+    "name":"sEnemyDummyAttack",
+    "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":"313d19ac-423c-4585-89d5-d727c8a6382e","path":"sprites/sEnemyDummyAttack/sEnemyDummyAttack.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"803bc476-ea8e-4da5-bd78-635ef15618c1","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"84025141-6526-4274-91d8-896cea9709f7","path":"sprites/sEnemyDummyAttack/sEnemyDummyAttack.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"dbb4428f-5f90-41bc-9e47-de0ac7ed8e93","IsCreationKey":false,"Key":1.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"84871857-d604-44d9-8721-cc7a4366d386","path":"sprites/sEnemyDummyAttack/sEnemyDummyAttack.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"94c45e0a-0396-4363-be75-9137d8a14c13","IsCreationKey":false,"Key":2.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"ae9034b3-fcb2-4f9c-b507-f6626ffbfb6d","path":"sprites/sEnemyDummyAttack/sEnemyDummyAttack.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"4f62152b-c450-4294-841f-9dacca57d9e3","IsCreationKey":false,"Key":3.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"348f603a-d75d-4b72-bf68-ff75045f7e9e","path":"sprites/sEnemyDummyAttack/sEnemyDummyAttack.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"089632c7-6a61-4260-8137-7f09e3227897","IsCreationKey":false,"Key":4.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"1d22c0c7-7cb6-4edd-82b3-a89823d6945f","path":"sprites/sEnemyDummyAttack/sEnemyDummyAttack.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"33bbbe27-abba-4c01-8cd1-380d721f1704","IsCreationKey":false,"Key":5.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"9c79c1b3-6f93-432e-b19d-ca5ac1601499","path":"sprites/sEnemyDummyAttack/sEnemyDummyAttack.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"72feb8a3-2bf4-44dc-8f54-bde013bad473","IsCreationKey":false,"Key":6.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+            {"$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,
+    "volume":1.0,
+    "xorigin":48,
+    "yorigin":96,
+  },
+  "swatchColours":null,
+  "swfPrecision":0.5,
+  "textureGroupId":{
+    "name":"Default",
+    "path":"texturegroups/Default",
+  },
+  "type":0,
+  "VTile":false,
+  "width":96,
+}

BIN
sprites/sEnemyDummyCounter/011dd06a-0e18-4aa0-926a-3710b13c329d.png


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


BIN
sprites/sEnemyDummyCounter/1d22c0c7-7cb6-4edd-82b3-a89823d6945f.png


BIN
sprites/sEnemyDummyCounter/313d19ac-423c-4585-89d5-d727c8a6382e.png


BIN
sprites/sEnemyDummyCounter/348f603a-d75d-4b72-bf68-ff75045f7e9e.png


BIN
sprites/sEnemyDummyCounter/84025141-6526-4274-91d8-896cea9709f7.png


BIN
sprites/sEnemyDummyCounter/84871857-d604-44d9-8721-cc7a4366d386.png


BIN
sprites/sEnemyDummyCounter/9c79c1b3-6f93-432e-b19d-ca5ac1601499.png


BIN
sprites/sEnemyDummyCounter/ae9034b3-fcb2-4f9c-b507-f6626ffbfb6d.png


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


BIN
sprites/sEnemyDummyCounter/layers/011dd06a-0e18-4aa0-926a-3710b13c329d/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


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


BIN
sprites/sEnemyDummyCounter/layers/1d22c0c7-7cb6-4edd-82b3-a89823d6945f/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


BIN
sprites/sEnemyDummyCounter/layers/313d19ac-423c-4585-89d5-d727c8a6382e/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


BIN
sprites/sEnemyDummyCounter/layers/348f603a-d75d-4b72-bf68-ff75045f7e9e/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


BIN
sprites/sEnemyDummyCounter/layers/84025141-6526-4274-91d8-896cea9709f7/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


BIN
sprites/sEnemyDummyCounter/layers/84871857-d604-44d9-8721-cc7a4366d386/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


BIN
sprites/sEnemyDummyCounter/layers/9c79c1b3-6f93-432e-b19d-ca5ac1601499/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


BIN
sprites/sEnemyDummyCounter/layers/ae9034b3-fcb2-4f9c-b507-f6626ffbfb6d/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


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


+ 126 - 0
sprites/sEnemyDummyCounter/sEnemyDummyCounter.yy

@@ -0,0 +1,126 @@
+{
+  "$GMSprite":"v2",
+  "%Name":"sEnemyDummyCounter",
+  "bboxMode":0,
+  "bbox_bottom":191,
+  "bbox_left":0,
+  "bbox_right":95,
+  "bbox_top":0,
+  "collisionKind":1,
+  "collisionTolerance":0,
+  "DynamicTexturePage":false,
+  "edgeFiltering":false,
+  "For3D":false,
+  "frames":[
+    {"$GMSpriteFrame":"v1","%Name":"313d19ac-423c-4585-89d5-d727c8a6382e","name":"313d19ac-423c-4585-89d5-d727c8a6382e","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
+    {"$GMSpriteFrame":"v1","%Name":"84025141-6526-4274-91d8-896cea9709f7","name":"84025141-6526-4274-91d8-896cea9709f7","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
+    {"$GMSpriteFrame":"v1","%Name":"84871857-d604-44d9-8721-cc7a4366d386","name":"84871857-d604-44d9-8721-cc7a4366d386","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
+    {"$GMSpriteFrame":"v1","%Name":"ae9034b3-fcb2-4f9c-b507-f6626ffbfb6d","name":"ae9034b3-fcb2-4f9c-b507-f6626ffbfb6d","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
+    {"$GMSpriteFrame":"v1","%Name":"348f603a-d75d-4b72-bf68-ff75045f7e9e","name":"348f603a-d75d-4b72-bf68-ff75045f7e9e","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
+    {"$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,
+  "height":192,
+  "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":"sEnemyDummyCounter",
+  "nineSlice":null,
+  "origin":4,
+  "parent":{
+    "name":"oEnemyDummy",
+    "path":"folders/Enemy/oEnemyDummy.yy",
+  },
+  "preMultiplyAlpha":false,
+  "resourceType":"GMSprite",
+  "resourceVersion":"2.0",
+  "sequence":{
+    "$GMSequence":"v1",
+    "%Name":"sEnemyDummyCounter",
+    "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":10.0,
+    "lockOrigin":false,
+    "moments":{
+      "$KeyframeStore<MomentsEventKeyframe>":"",
+      "Keyframes":[],
+      "resourceType":"KeyframeStore<MomentsEventKeyframe>",
+      "resourceVersion":"2.0",
+    },
+    "name":"sEnemyDummyCounter",
+    "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":"313d19ac-423c-4585-89d5-d727c8a6382e","path":"sprites/sEnemyDummyCounter/sEnemyDummyCounter.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"803bc476-ea8e-4da5-bd78-635ef15618c1","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"84025141-6526-4274-91d8-896cea9709f7","path":"sprites/sEnemyDummyCounter/sEnemyDummyCounter.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"dbb4428f-5f90-41bc-9e47-de0ac7ed8e93","IsCreationKey":false,"Key":1.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"84871857-d604-44d9-8721-cc7a4366d386","path":"sprites/sEnemyDummyCounter/sEnemyDummyCounter.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"94c45e0a-0396-4363-be75-9137d8a14c13","IsCreationKey":false,"Key":2.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"ae9034b3-fcb2-4f9c-b507-f6626ffbfb6d","path":"sprites/sEnemyDummyCounter/sEnemyDummyCounter.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"4f62152b-c450-4294-841f-9dacca57d9e3","IsCreationKey":false,"Key":3.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"348f603a-d75d-4b72-bf68-ff75045f7e9e","path":"sprites/sEnemyDummyCounter/sEnemyDummyCounter.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"089632c7-6a61-4260-8137-7f09e3227897","IsCreationKey":false,"Key":4.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"1d22c0c7-7cb6-4edd-82b3-a89823d6945f","path":"sprites/sEnemyDummyCounter/sEnemyDummyCounter.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"33bbbe27-abba-4c01-8cd1-380d721f1704","IsCreationKey":false,"Key":5.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"9c79c1b3-6f93-432e-b19d-ca5ac1601499","path":"sprites/sEnemyDummyCounter/sEnemyDummyCounter.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"72feb8a3-2bf4-44dc-8f54-bde013bad473","IsCreationKey":false,"Key":6.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"011dd06a-0e18-4aa0-926a-3710b13c329d","path":"sprites/sEnemyDummyCounter/sEnemyDummyCounter.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/sEnemyDummyCounter/sEnemyDummyCounter.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/sEnemyDummyCounter/sEnemyDummyCounter.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,
+    "volume":1.0,
+    "xorigin":48,
+    "yorigin":96,
+  },
+  "swatchColours":null,
+  "swfPrecision":0.5,
+  "textureGroupId":{
+    "name":"Default",
+    "path":"texturegroups/Default",
+  },
+  "type":0,
+  "VTile":false,
+  "width":96,
+}

BIN
sprites/sEnemyDummyIdle/313d19ac-423c-4585-89d5-d727c8a6382e.png


BIN
sprites/sEnemyDummyIdle/layers/313d19ac-423c-4585-89d5-d727c8a6382e/6b9701e4-db4a-44cb-947f-7ef6e92e0c3e.png


+ 16 - 16
sprites/sPlayerHP_2/sPlayerHP_2.yy → sprites/sEnemyDummyIdle/sEnemyDummyIdle.yy

@@ -1,10 +1,10 @@
 {
   "$GMSprite":"v2",
-  "%Name":"sPlayerHP_2",
+  "%Name":"sEnemyDummyIdle",
   "bboxMode":0,
-  "bbox_bottom":47,
+  "bbox_bottom":191,
   "bbox_left":0,
-  "bbox_right":47,
+  "bbox_right":95,
   "bbox_top":0,
   "collisionKind":1,
   "collisionTolerance":0,
@@ -12,28 +12,28 @@
   "edgeFiltering":false,
   "For3D":false,
   "frames":[
-    {"$GMSpriteFrame":"v1","%Name":"634e7d38-4222-4a42-a608-7084d18fab17","name":"634e7d38-4222-4a42-a608-7084d18fab17","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
+    {"$GMSpriteFrame":"v1","%Name":"313d19ac-423c-4585-89d5-d727c8a6382e","name":"313d19ac-423c-4585-89d5-d727c8a6382e","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
   ],
   "gridX":0,
   "gridY":0,
-  "height":48,
+  "height":192,
   "HTile":false,
   "layers":[
-    {"$GMImageLayer":"","%Name":"ebcad0ac-4f00-4b9d-adee-754211cdacd6","blendMode":0,"displayName":"default","isLocked":false,"name":"ebcad0ac-4f00-4b9d-adee-754211cdacd6","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
+    {"$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":"sPlayerHP_2",
+  "name":"sEnemyDummyIdle",
   "nineSlice":null,
   "origin":4,
   "parent":{
-    "name":"UIsprite",
-    "path":"folders/UIsprite.yy",
+    "name":"oEnemyDummy",
+    "path":"folders/Enemy/oEnemyDummy.yy",
   },
   "preMultiplyAlpha":false,
   "resourceType":"GMSprite",
   "resourceVersion":"2.0",
   "sequence":{
     "$GMSequence":"v1",
-    "%Name":"sPlayerHP",
+    "%Name":"sEnemyDummyIdle",
     "autoRecord":true,
     "backdropHeight":768,
     "backdropImageOpacity":0.5,
@@ -57,7 +57,7 @@
       "resourceType":"KeyframeStore<MomentsEventKeyframe>",
       "resourceVersion":"2.0",
     },
-    "name":"sPlayerHP",
+    "name":"sEnemyDummyIdle",
     "playback":1,
     "playbackSpeed":30.0,
     "playbackSpeedType":0,
@@ -69,14 +69,14 @@
     "tracks":[
       {"$GMSpriteFramesTrack":"","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"$KeyframeStore<SpriteFrameKeyframe>":"","Keyframes":[
             {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
-                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"634e7d38-4222-4a42-a608-7084d18fab17","path":"sprites/sPlayerHP_2/sPlayerHP_2.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
-              },"Disabled":false,"id":"28ed2892-8e3b-48c6-959c-74c9cffcaffc","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"313d19ac-423c-4585-89d5-d727c8a6382e","path":"sprites/sEnemyDummyIdle/sEnemyDummyIdle.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+              },"Disabled":false,"id":"803bc476-ea8e-4da5-bd78-635ef15618c1","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":24,
-    "yorigin":24,
+    "xorigin":48,
+    "yorigin":96,
   },
   "swatchColours":null,
   "swfPrecision":0.5,
@@ -86,5 +86,5 @@
   },
   "type":0,
   "VTile":false,
-  "width":48,
+  "width":96,
 }

BIN
sprites/sEnemyHitboxRec/a76ad535-27e8-4a95-b902-7e8bd3b236b8.png


BIN
sprites/sEnemyHitboxRec/layers/a76ad535-27e8-4a95-b902-7e8bd3b236b8/294f880a-79b3-48fc-888a-f3c14992345f.png


+ 13 - 13
sprites/sEnemyCrawlHitbox/sEnemyCrawlHitbox.yy → sprites/sEnemyHitboxRec/sEnemyHitboxRec.yy

@@ -1,10 +1,10 @@
 {
   "$GMSprite":"v2",
-  "%Name":"sEnemyCrawlHitbox",
+  "%Name":"sEnemyHitboxRec",
   "bboxMode":0,
-  "bbox_bottom":47,
+  "bbox_bottom":1,
   "bbox_left":0,
-  "bbox_right":47,
+  "bbox_right":1,
   "bbox_top":0,
   "collisionKind":1,
   "collisionTolerance":0,
@@ -16,24 +16,24 @@
   ],
   "gridX":0,
   "gridY":0,
-  "height":48,
+  "height":2,
   "HTile":false,
   "layers":[
     {"$GMImageLayer":"","%Name":"294f880a-79b3-48fc-888a-f3c14992345f","blendMode":0,"displayName":"default","isLocked":false,"name":"294f880a-79b3-48fc-888a-f3c14992345f","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
   ],
-  "name":"sEnemyCrawlHitbox",
+  "name":"sEnemyHitboxRec",
   "nineSlice":null,
   "origin":4,
   "parent":{
-    "name":"oEnemyCrawl",
-    "path":"folders/Enemy/CrawlEnemy/oEnemyCrawl.yy",
+    "name":"Enemy",
+    "path":"folders/Enemy.yy",
   },
   "preMultiplyAlpha":false,
   "resourceType":"GMSprite",
   "resourceVersion":"2.0",
   "sequence":{
     "$GMSequence":"v1",
-    "%Name":"sEnemyCrawlHitbox",
+    "%Name":"sEnemyHitboxRec",
     "autoRecord":true,
     "backdropHeight":768,
     "backdropImageOpacity":0.5,
@@ -57,7 +57,7 @@
       "resourceType":"KeyframeStore<MomentsEventKeyframe>",
       "resourceVersion":"2.0",
     },
-    "name":"sEnemyCrawlHitbox",
+    "name":"sEnemyHitboxRec",
     "playback":1,
     "playbackSpeed":30.0,
     "playbackSpeedType":0,
@@ -69,14 +69,14 @@
     "tracks":[
       {"$GMSpriteFramesTrack":"","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"$KeyframeStore<SpriteFrameKeyframe>":"","Keyframes":[
             {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
-                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"a76ad535-27e8-4a95-b902-7e8bd3b236b8","path":"sprites/sEnemyCrawlHitbox/sEnemyCrawlHitbox.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
+                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"a76ad535-27e8-4a95-b902-7e8bd3b236b8","path":"sprites/sEnemyHitboxRec/sEnemyHitboxRec.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
               },"Disabled":false,"id":"73869285-356b-4099-9b4c-1c03d485a21e","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":24,
-    "yorigin":24,
+    "xorigin":1,
+    "yorigin":1,
   },
   "swatchColours":null,
   "swfPrecision":0.5,
@@ -86,5 +86,5 @@
   },
   "type":0,
   "VTile":false,
-  "width":48,
+  "width":2,
 }

BIN
sprites/sPlayerArcSlash/e1a31dbf-ecc8-4c15-b309-47d07e56738f.png


BIN
sprites/sPlayerArcSlash/layers/e1a31dbf-ecc8-4c15-b309-47d07e56738f/21d8bf7d-8959-4267-a6af-fcedb5d5d32f.png


+ 3 - 23
sprites/sPlayerArcSlash/sPlayerArcSlash.yy

@@ -26,12 +26,7 @@
     {"$GMSpriteFrame":"v1","%Name":"0580fbb8-f491-4562-8c04-24c1c13e2308","name":"0580fbb8-f491-4562-8c04-24c1c13e2308","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
     {"$GMSpriteFrame":"v1","%Name":"87f1c571-158d-45d3-9556-746994a70f61","name":"87f1c571-158d-45d3-9556-746994a70f61","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
     {"$GMSpriteFrame":"v1","%Name":"5f014a04-cb6d-47f0-9d76-38b42e1b9b59","name":"5f014a04-cb6d-47f0-9d76-38b42e1b9b59","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
-    {"$GMSpriteFrame":"v1","%Name":"c83efb57-6474-4213-8bb4-519210d3223c","name":"c83efb57-6474-4213-8bb4-519210d3223c","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
     {"$GMSpriteFrame":"v1","%Name":"2ec41c83-2fa6-4f63-8d18-d3fecd0b7b57","name":"2ec41c83-2fa6-4f63-8d18-d3fecd0b7b57","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
-    {"$GMSpriteFrame":"v1","%Name":"7a8e09fe-27b8-49e8-a730-5d40244e473e","name":"7a8e09fe-27b8-49e8-a730-5d40244e473e","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
-    {"$GMSpriteFrame":"v1","%Name":"1cfaf8b4-cf32-4983-a0cb-92152def6be6","name":"1cfaf8b4-cf32-4983-a0cb-92152def6be6","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
-    {"$GMSpriteFrame":"v1","%Name":"e1a31dbf-ecc8-4c15-b309-47d07e56738f","name":"e1a31dbf-ecc8-4c15-b309-47d07e56738f","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
-    {"$GMSpriteFrame":"v1","%Name":"200681b8-4b8d-4aa2-b5ce-f20ca6800c1f","name":"200681b8-4b8d-4aa2-b5ce-f20ca6800c1f","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
   ],
   "gridX":0,
   "gridY":0,
@@ -68,7 +63,7 @@
     },
     "eventStubScript":null,
     "eventToFunction":{},
-    "length":20.0,
+    "length":15.0,
     "lockOrigin":false,
     "moments":{
       "$KeyframeStore<MomentsEventKeyframe>":"",
@@ -78,7 +73,7 @@
     },
     "name":"sPlayerArcSlash",
     "playback":1,
-    "playbackSpeed":15.0,
+    "playbackSpeed":60.0,
     "playbackSpeedType":0,
     "resourceType":"GMSequence",
     "resourceVersion":"2.0",
@@ -129,24 +124,9 @@
             {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
                 "0":{"$SpriteFrameKeyframe":"","Id":{"name":"5f014a04-cb6d-47f0-9d76-38b42e1b9b59","path":"sprites/sPlayerArcSlash/sPlayerArcSlash.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
               },"Disabled":false,"id":"89a12a6a-00a9-4071-b87c-094c3bcd0ae1","IsCreationKey":false,"Key":13.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
-            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
-                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"c83efb57-6474-4213-8bb4-519210d3223c","path":"sprites/sPlayerArcSlash/sPlayerArcSlash.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
-              },"Disabled":false,"id":"9810c292-d671-441d-a3ee-60741a295bd9","IsCreationKey":false,"Key":14.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
             {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
                 "0":{"$SpriteFrameKeyframe":"","Id":{"name":"2ec41c83-2fa6-4f63-8d18-d3fecd0b7b57","path":"sprites/sPlayerArcSlash/sPlayerArcSlash.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
-              },"Disabled":false,"id":"579df5f0-c374-496d-b6e0-1389338295a0","IsCreationKey":false,"Key":15.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
-            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
-                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"7a8e09fe-27b8-49e8-a730-5d40244e473e","path":"sprites/sPlayerArcSlash/sPlayerArcSlash.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
-              },"Disabled":false,"id":"b2d07174-d463-46b9-8055-54caa9dab632","IsCreationKey":false,"Key":16.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
-            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
-                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"1cfaf8b4-cf32-4983-a0cb-92152def6be6","path":"sprites/sPlayerArcSlash/sPlayerArcSlash.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
-              },"Disabled":false,"id":"96495ace-9889-4706-a768-ebc9e17aa412","IsCreationKey":false,"Key":17.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
-            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
-                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"e1a31dbf-ecc8-4c15-b309-47d07e56738f","path":"sprites/sPlayerArcSlash/sPlayerArcSlash.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
-              },"Disabled":false,"id":"9f4117dd-3eaa-4939-aaf1-8d44770ce8d1","IsCreationKey":false,"Key":18.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
-            {"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
-                "0":{"$SpriteFrameKeyframe":"","Id":{"name":"200681b8-4b8d-4aa2-b5ce-f20ca6800c1f","path":"sprites/sPlayerArcSlash/sPlayerArcSlash.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
-              },"Disabled":false,"id":"fa2d5fdd-d37b-43bc-882d-3458fa9a95c5","IsCreationKey":false,"Key":19.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
+              },"Disabled":false,"id":"579df5f0-c374-496d-b6e0-1389338295a0","IsCreationKey":false,"Key":14.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,

+ 1 - 1
sprites/sPlayerAttack/sPlayerAttack.yy

@@ -64,7 +64,7 @@
     },
     "name":"sPlayerAttack",
     "playback":1,
-    "playbackSpeed":15.0,
+    "playbackSpeed":60.0,
     "playbackSpeedType":0,
     "resourceType":"GMSequence",
     "resourceVersion":"2.0",

+ 1 - 1
sprites/sPlayerDash/sPlayerDash.yy

@@ -62,7 +62,7 @@
     },
     "name":"sPlayerDash",
     "playback":1,
-    "playbackSpeed":15.0,
+    "playbackSpeed":60.0,
     "playbackSpeedType":0,
     "resourceType":"GMSequence",
     "resourceVersion":"2.0",

+ 1 - 1
sprites/sPlayerDodge/sPlayerDodge.yy

@@ -62,7 +62,7 @@
     },
     "name":"sPlayerDodge",
     "playback":1,
-    "playbackSpeed":15.0,
+    "playbackSpeed":60.0,
     "playbackSpeedType":0,
     "resourceType":"GMSequence",
     "resourceVersion":"2.0",

+ 1 - 1
sprites/sPlayerDodgeEnding/sPlayerDodgeEnding.yy

@@ -73,7 +73,7 @@
     },
     "name":"sPlayerDodgeEnding",
     "playback":1,
-    "playbackSpeed":15.0,
+    "playbackSpeed":60.0,
     "playbackSpeedType":0,
     "resourceType":"GMSequence",
     "resourceVersion":"2.0",

+ 1 - 1
sprites/sPlayerDodgeWait/sPlayerDodgeWait.yy

@@ -61,7 +61,7 @@
     },
     "name":"sPlayerDodgeWait",
     "playback":1,
-    "playbackSpeed":15.0,
+    "playbackSpeed":60.0,
     "playbackSpeedType":0,
     "resourceType":"GMSequence",
     "resourceVersion":"2.0",

BIN
sprites/sPlayerHP_2/634e7d38-4222-4a42-a608-7084d18fab17.png


BIN
sprites/sPlayerHP_2/layers/634e7d38-4222-4a42-a608-7084d18fab17/ebcad0ac-4f00-4b9d-adee-754211cdacd6.png


+ 1 - 1
sprites/sPlayerHitstunAttacked/sPlayerHitstunAttacked.yy

@@ -65,7 +65,7 @@
     },
     "name":"sPlayerHitstunAttacked",
     "playback":1,
-    "playbackSpeed":15.0,
+    "playbackSpeed":60.0,
     "playbackSpeedType":0,
     "resourceType":"GMSequence",
     "resourceVersion":"2.0",

+ 1 - 1
sprites/sPlayerHitstunHazard/sPlayerHitstunHazard.yy

@@ -62,7 +62,7 @@
     },
     "name":"sPlayerHitstunHazard",
     "playback":1,
-    "playbackSpeed":15.0,
+    "playbackSpeed":60.0,
     "playbackSpeedType":0,
     "resourceType":"GMSequence",
     "resourceVersion":"2.0",

BIN
sprites/sPlayerArcSlash/1cfaf8b4-cf32-4983-a0cb-92152def6be6.png → sprites/sPlayerHyper/024d89c6-16ff-4e8a-9a31-69abf3768033.png


BIN
sprites/sPlayerArcSlash/200681b8-4b8d-4aa2-b5ce-f20ca6800c1f.png → sprites/sPlayerHyper/16f6de5b-f9ba-40c6-953b-4ccf70d5666e.png


BIN
sprites/sPlayerArcSlash/7a8e09fe-27b8-49e8-a730-5d40244e473e.png → sprites/sPlayerHyper/4e059014-ab30-43ef-b64b-2c190950eb74.png


BIN
sprites/sPlayerArcSlash/c83efb57-6474-4213-8bb4-519210d3223c.png → sprites/sPlayerHyper/6739d4db-a1f7-4970-807d-dc609eaeba97.png


BIN
sprites/sPlayerArcSlash/layers/1cfaf8b4-cf32-4983-a0cb-92152def6be6/21d8bf7d-8959-4267-a6af-fcedb5d5d32f.png → sprites/sPlayerHyper/layers/024d89c6-16ff-4e8a-9a31-69abf3768033/21d8bf7d-8959-4267-a6af-fcedb5d5d32f.png


BIN
sprites/sPlayerArcSlash/layers/200681b8-4b8d-4aa2-b5ce-f20ca6800c1f/21d8bf7d-8959-4267-a6af-fcedb5d5d32f.png → sprites/sPlayerHyper/layers/16f6de5b-f9ba-40c6-953b-4ccf70d5666e/21d8bf7d-8959-4267-a6af-fcedb5d5d32f.png


Некоторые файлы не были показаны из-за большого количества измененных файлов