From f8f5f7952a864802a35fdb401531d67b1e7fef2c Mon Sep 17 00:00:00 2001
From: rick <rick@gnous.eu>
Date: Sun, 6 Dec 2020 12:38:35 +0100
Subject: [PATCH] Ajout recul sur monstre lors attaque joueur
---
objects/oMonster/Create_0.gml | 1 +
objects/oMonster/Step_0.gml | 76 ++++++++++++++++--------------
objects/oMonsterMelee/Create_0.gml | 1 +
objects/oPlayer/Create_0.gml | 4 +-
objects/oPlayer/KeyPress_74.gml | 54 ++++++++++++++-------
scripts/Script1/Script1.gml | 2 +-
6 files changed, 83 insertions(+), 55 deletions(-)
diff --git a/objects/oMonster/Create_0.gml b/objects/oMonster/Create_0.gml
index 16ccb34..4e3204d 100644
--- a/objects/oMonster/Create_0.gml
+++ b/objects/oMonster/Create_0.gml
@@ -8,6 +8,7 @@ dir = 3;
pv = 5;
attack = 1;
+touche = 0; // s'ils sont touchés
enum typeMelee {
squelette,
diff --git a/objects/oMonster/Step_0.gml b/objects/oMonster/Step_0.gml
index b559fff..aefbbc6 100644
--- a/objects/oMonster/Step_0.gml
+++ b/objects/oMonster/Step_0.gml
@@ -1,36 +1,40 @@
-// deplacement monstre
-
-if dureeDeplacement != 0 {
- x += deplaceHorizontal;
- y += deplaceVertical;
- dureeDeplacement --;
-}
-else {
- deplaceHorizontal = 0;
- deplaceVertical = 0;
- dir = irandom(3);
-switch(dir) {
- case 0 : deplaceVertical = 1; break;
- case 1 : deplaceHorizontal = 1; break;
- case 2 : deplaceVertical = -1; break;
- case 3 : deplaceHorizontal = -1; break;
- }
-
- dureeDeplacement = 120;
-}
-
-// collision avec un mur
-
-if place_meeting(x,y,oWall) {
- if (dir > 1) dir -= 2;
- else dir += 2;
-
- switch(dir) {
- case 0 : deplaceVertical = 1; break;
- case 1 : deplaceHorizontal = 1; break;
- case 2 : deplaceVertical = -1; break;
- case 3 : deplaceHorizontal = -1; break;
- }
-
- dureeDeplacement = 120;
-}
\ No newline at end of file
+// deplacement monstre
+
+if (touche == 0) {
+ if dureeDeplacement != 0 {
+ x += deplaceHorizontal;
+ y += deplaceVertical;
+ dureeDeplacement --;
+ }
+ else {
+ deplaceHorizontal = 0;
+ deplaceVertical = 0;
+ dir = irandom(3);
+ switch(dir) {
+ case 0 : deplaceVertical = 1; break;
+ case 1 : deplaceHorizontal = 1; break;
+ case 2 : deplaceVertical = -1; break;
+ case 3 : deplaceHorizontal = -1; break;
+ }
+
+ dureeDeplacement = 120;
+ }
+
+ // collision avec un mur
+
+ if place_meeting(x,y,oWall) {
+ if (dir > 1) dir -= 2;
+ else dir += 2;
+
+ switch(dir) {
+ case 0 : deplaceVertical = 1; break;
+ case 1 : deplaceHorizontal = 1; break;
+ case 2 : deplaceVertical = -1; break;
+ case 3 : deplaceHorizontal = -1; break;
+ }
+
+ dureeDeplacement = 120;
+ }
+} else {
+ touche--;
+}
\ No newline at end of file
diff --git a/objects/oMonsterMelee/Create_0.gml b/objects/oMonsterMelee/Create_0.gml
index f966d8f..7c8a073 100644
--- a/objects/oMonsterMelee/Create_0.gml
+++ b/objects/oMonsterMelee/Create_0.gml
@@ -7,6 +7,7 @@ image_speed = 1;
switch (monType) {
case typeMelee.squelette:
attack = 10;
+ pv = 20;
sprite_index = sSkeletonR;
break;
case typeMelee.blob:
diff --git a/objects/oPlayer/Create_0.gml b/objects/oPlayer/Create_0.gml
index f3eec78..1c94493 100644
--- a/objects/oPlayer/Create_0.gml
+++ b/objects/oPlayer/Create_0.gml
@@ -3,4 +3,6 @@ pv = 100;
inv = 0; //timer invinsiblité
indexImageInfo = 0;
-compteurFrames = 0;
\ No newline at end of file
+compteurFrames = 0;
+
+attack = 10;
\ No newline at end of file
diff --git a/objects/oPlayer/KeyPress_74.gml b/objects/oPlayer/KeyPress_74.gml
index 2094ffa..f77a3e7 100644
--- a/objects/oPlayer/KeyPress_74.gml
+++ b/objects/oPlayer/KeyPress_74.gml
@@ -2,32 +2,52 @@
//jouer l'animation
- tailleEpee = 20; // à définir
+ tailleEpee = 30; // à définir
+ checkCote = image_index / 8; // récupère où regarde le personnage
+ inst = noone;
- switch (image_index) {
- case 0:
- inst = collision_rectangle(x+5, y+tailleEpee, x-5, y+tailleEpee, oMonster, true, oPlayer);
+if (sprite_index == sPlayerRun) {
+ if (checkCote <= 1) {
+ inst = collision_rectangle(x+5, y+tailleEpee, x-5, y+tailleEpee, oMonster, false, oPlayer);
//inst = getCollisionArea(x-5, y+tailleEpee, x+5, y+tailleEpee, oMonster);
- break;
- case 1:
- inst = collision_rectangle(x+tailleEpee, y+5, x+tailleEpee, y-5, oMonster, true, oPlayer);
+ } else if (checkCote <= 2) {
+ inst = collision_rectangle(x+tailleEpee, y+5, x+tailleEpee, y-5, oMonster, false, oPlayer);
//inst = getCollisionArea(x+tailleEpee, y+5, x+tailleEpee, y-5, oMonster)
- break;
- case 2:
- inst = collision_rectangle(x+5, y-tailleEpee, x-5, y-tailleEpee, oMonster, true, oPlayer);
+ } else if (checkCote <= 3) {
+ inst = collision_rectangle(x+5, y-tailleEpee, x-5, y-tailleEpee, oMonster, false, oPlayer);
//inst = getCollisionArea(x+5, y-tailleEpee, x-5, y-tailleEpee, oMonster)
- break;
- case 3:
- inst = collision_rectangle(x-tailleEpee, y+5, x-tailleEpee, y-5, oMonster, true, oPlayer);
+ } else if (checkCote <= 4) {
+ inst = collision_rectangle(x-tailleEpee, y+5, x-tailleEpee, y-5, oMonster, false, oPlayer);
//inst = getCollisionArea(x-tailleEpee, y+5, x-tailleEpee, y-5, oMonster);
- break;
- default:
- inst = noone;
- }
+ }
+} else {
+ switch (image_index) {
+ case 0:
+ inst = collision_rectangle(x+5, y+tailleEpee, x-5, y+tailleEpee, oMonster, false, oPlayer);
+ //inst = getCollisionArea(x-5, y+tailleEpee, x+5, y+tailleEpee, oMonster);
+ break;
+ case 1:
+ inst = collision_rectangle(x+tailleEpee, y+5, x+tailleEpee, y-5, oMonster, false, oPlayer);
+ //inst = getCollisionArea(x+tailleEpee, y+5, x+tailleEpee, y-5, oMonster)
+ break;
+ case 2:
+ inst = collision_rectangle(x+5, y-tailleEpee, x-5, y-tailleEpee, oMonster, false, oPlayer);
+ //inst = getCollisionArea(x+5, y-tailleEpee, x-5, y-tailleEpee, oMonster)
+ break;
+ case 3:
+ inst = collision_rectangle(x-tailleEpee, y+5, x-tailleEpee, y-5, oMonster, false, oPlayer);
+ //inst = getCollisionArea(x-tailleEpee, y+5, x-tailleEpee, y-5, oMonster);
+ break;
+ default:
+ inst = noone;
+ }
+}
if (inst != noone) {
show_debug_message("objet trouvé !");
// attaque
+ hit(self, inst, attack);
+ inst.touche = 30;
} else {
//a supp
show_debug_message("pas d'objet...");
diff --git a/scripts/Script1/Script1.gml b/scripts/Script1/Script1.gml
index 8471916..3049958 100644
--- a/scripts/Script1/Script1.gml
+++ b/scripts/Script1/Script1.gml
@@ -7,7 +7,7 @@
@param {objRepousse} objet qui sera repoussé
*/
function knockBack(obj, objRepousse) {
- knockback = 10;
+ knockback = 20;
oY = objRepousse.y;
oX = objRepousse.x;
if (obj.x > oX && !place_meeting(oX-knockback-1, oY, oWall)) {