From 07665e0e6fd909ab9a65c424b7264514e258b797 Mon Sep 17 00:00:00 2001 From: OfficialCHenry Date: Wed, 20 Apr 2022 17:07:50 -0400 Subject: [PATCH] added buff strings, quick bugfix --- src/shattered_sword/AI/EnemyAI.ts | 13 +++-- .../GameSystems/BattleManager.ts | 5 +- .../GameSystems/items/Weapon.ts | 3 + .../Player/PlayerController.ts | 56 +++++++++++++------ src/shattered_sword/Scenes/GameLevel.ts | 27 +++++++-- 5 files changed, 77 insertions(+), 27 deletions(-) diff --git a/src/shattered_sword/AI/EnemyAI.ts b/src/shattered_sword/AI/EnemyAI.ts index e04c0b2..edef365 100644 --- a/src/shattered_sword/AI/EnemyAI.ts +++ b/src/shattered_sword/AI/EnemyAI.ts @@ -24,6 +24,7 @@ import MathUtils from "../../Wolfie2D/Utils/MathUtils"; import { Player_Events } from "../sword_enums"; import InputWrapper from "../Tools/InputWrapper"; import Timer from "../../Wolfie2D/Timing/Timer"; +import PlayerController from "../Player/PlayerController"; export default class EnemyAI extends StateMachineGoapAI implements BattlerAI { /** The owner of this AI */ owner: AnimatedSprite; @@ -64,7 +65,7 @@ export default class EnemyAI extends StateMachineGoapAI implements BattlerAI { direction: number; //1 for right, -1 for left - exp_val: number =0; //exp value to give player when this dies + exp_val: number = 100; //exp value to give player when this dies poisonTimer : Timer; poisonCounter : number = 0; @@ -76,7 +77,7 @@ export default class EnemyAI extends StateMachineGoapAI implements BattlerAI { bleedCounter :number = 0; - initializeAI(owner: AnimatedSprite, options: Record): void { + initializeAI(owner: AnimatedSprite, options: Record): void { this.owner = owner; //add states @@ -220,21 +221,21 @@ export default class EnemyAI extends StateMachineGoapAI implements BattlerAI { } */ - //TODO - add extra dot damage + //TODO if(this.burnTimer.isStopped() && this.burnCounter >0){ this.burnCounter --; this.burnTimer.start(); - this.damage(5); + this.damage(5 + (this.player._ai).extraDotDmg + (this.player._ai).CURRENT_ATK * .2); } if(this.poisonTimer.isStopped() && this.poisonCounter >0){ this.poisonCounter --; this.poisonTimer.start(); - this.damage(5); + this.damage(5 + (this.player._ai).extraDotDmg + (this.player._ai).CURRENT_ATK * .2); } if(this.bleedTimer.isStopped() && this.bleedCounter >0){ this.bleedCounter --; this.bleedTimer.start(); - this.damage(5); + this.damage(5 + (this.player._ai).extraDotDmg + (this.player._ai).CURRENT_ATK * .08); } } } diff --git a/src/shattered_sword/GameSystems/BattleManager.ts b/src/shattered_sword/GameSystems/BattleManager.ts index afb6986..c8f6cb4 100644 --- a/src/shattered_sword/GameSystems/BattleManager.ts +++ b/src/shattered_sword/GameSystems/BattleManager.ts @@ -37,7 +37,10 @@ export default class BattleManager { if(player.hasBurn){ (enemy).burnCounter =5 ; } - + + if(player.hasDoubleStrike){ + enemy.damage(weapon.type.damage * (this.players[0]).CURRENT_ATK/200); + } } } } diff --git a/src/shattered_sword/GameSystems/items/Weapon.ts b/src/shattered_sword/GameSystems/items/Weapon.ts index a89d172..7c4fee2 100644 --- a/src/shattered_sword/GameSystems/items/Weapon.ts +++ b/src/shattered_sword/GameSystems/items/Weapon.ts @@ -22,6 +22,7 @@ export default class Weapon extends Item { /** The battle manager */ battleManager: BattleManager; + cooldown : number = 0; /** The cooldown timer for this weapon's use */ cooldownTimer: Timer; @@ -46,6 +47,8 @@ export default class Weapon extends Item { // Create the cooldown timer this.cooldownTimer = new Timer(type.cooldown); + this.cooldown = type.cooldown; + this.EXTRA_DAMAGE = 0; this.EXTRA_RANGE=0; } diff --git a/src/shattered_sword/Player/PlayerController.ts b/src/shattered_sword/Player/PlayerController.ts index 6a87e58..44fd8ef 100644 --- a/src/shattered_sword/Player/PlayerController.ts +++ b/src/shattered_sword/Player/PlayerController.ts @@ -127,6 +127,7 @@ export default class PlayerController extends StateMachineAI implements BattlerA hasLifesteal : Boolean = false; lifestealratio : number = 0; //percent of damage to steal hasOneShot: Boolean = false; + extraDotDmg : number =0; //TODO - add new buffs here CURRENT_BUFFS: { @@ -170,7 +171,7 @@ export default class PlayerController extends StateMachineAI implements BattlerA //to test the buffs //this.addBuff( {type:BuffType.HEALTH, value:1} ); - this.addBuff({type:BuffType.BLEED, value:1, category:BuffCategory.DOT}); + this.addBuff({type:BuffType.BURN, value:1, category:BuffCategory.DOT}); } @@ -260,16 +261,22 @@ export default class PlayerController extends StateMachineAI implements BattlerA //console.log("hurt anim"); (this.owner).animation.play("HURT" ); this.CURRENT_HP -= damage; - if(this.CURRENT_HP <= 0){ - (this.owner).animation.play("DYING"); - (this.owner).animation.queue("DEAD", true, Player_Events.PLAYER_KILLED); + //if player has shield buff give them shield when damaged + if(this.hasShield){ + this.CURRENT_SHIELD += damage * .5; } + } } else{ //console.log("player is invincible"); } + + if(this.CURRENT_HP <= 0){ + (this.owner).animation.play("DYING"); + (this.owner).animation.queue("DEAD", true, Player_Events.PLAYER_KILLED); + } } /** @@ -280,6 +287,14 @@ export default class PlayerController extends StateMachineAI implements BattlerA this.CURRENT_SHIELD = (this.CURRENT_SHIELD + shield) % this.MAX_SHIELD; } + /** + * gives health to the player + * @param health health to give player + */ + addHealth(health : number){ + this.CURRENT_HP = (this.CURRENT_HP + health) %this.MAX_HP + this.CURRENT_BUFFS.hp; + } + /** * gives the player exp * @param exp amount of exp to give the player @@ -314,23 +329,25 @@ export default class PlayerController extends StateMachineAI implements BattlerA let attackBuffs : Buff[] = [ {type:BuffType.RANGE, value:num, category: BuffCategory.ATTACK}, {type:BuffType.ATKSPEED, value:num, category: BuffCategory.ATTACK}, - {type:BuffType.DOUBLESTRIKE, value:num, category: BuffCategory.ATTACK}, ]; + if(!this.hasDoubleStrike){ + attackBuffs.push({type:BuffType.DOUBLESTRIKE, value:num, category: BuffCategory.ATTACK, string:"your attacks are followed by a weaker strike"}); + } let dotBuffs : Buff[] = [ - {type:BuffType.BLEED, value:num, category: BuffCategory.DOT}, - {type:BuffType.BURN, value:num, category: BuffCategory.DOT}, - {type:BuffType.POISON, value:num, category: BuffCategory.DOT}, - {type:BuffType.EXTRA_DOT, value:num, category: BuffCategory.DOT}, + {type:BuffType.BLEED, value:1, category: BuffCategory.DOT, string: "Your hits apply Bleed"}, + {type:BuffType.BURN, value:1, category: BuffCategory.DOT, string: "Your hits apply Burn"}, + {type:BuffType.POISON, value:1, category: BuffCategory.DOT, string: "Your hits apply poison"}, + {type:BuffType.EXTRA_DOT, value:num, category: BuffCategory.DOT, string: "increase your DOT damage"}, ]; let shieldBuffs : Buff[] = [ - {type:BuffType.HEALTH, value:num, category: BuffCategory.SHIELD}, + {type:BuffType.HEALTH, value:1, category: BuffCategory.SHIELD}, ]; //if player doesnt have shield buff, give them the option, otherwise give buff shield option if(!this.hasShield){ - shieldBuffs.push({type:BuffType.SHIELD, value:num, category: BuffCategory.SHIELD}); + shieldBuffs.push({type:BuffType.SHIELD, value:1, category: BuffCategory.SHIELD, string: "Gain Shield When Damaged"}); } else{ shieldBuffs.push({type:BuffType.SHIELD_DMG, value:num, category: BuffCategory.SHIELD}); @@ -341,20 +358,20 @@ export default class PlayerController extends StateMachineAI implements BattlerA {type:BuffType.DEF, value:num, category: BuffCategory.HEALTH} ]; if(!this.hasLifesteal){ - shieldBuffs.push({type:BuffType.LIFESTEAL, value:num, category: BuffCategory.HEALTH}); + healthBuffs.push({type:BuffType.LIFESTEAL, value:1, category: BuffCategory.HEALTH, string:"Gain lifesteal"}); } else{ - shieldBuffs.push({type:BuffType.LIFESTEALBUFF, value:num, category: BuffCategory.HEALTH}); + healthBuffs.push({type:BuffType.LIFESTEALBUFF, value:num, category: BuffCategory.HEALTH}); } let extraBuffs : Buff[] = [ - {type:BuffType.EXTRALIFE, value:num, category: BuffCategory.EXTRA}, + {type:BuffType.EXTRALIFE, value:1, category: BuffCategory.EXTRA, string: "Gain an Extra Life"}, {type:BuffType.SPEED, value:num, category: BuffCategory.EXTRA}, {type:BuffType.ATK, value:num, category: BuffCategory.EXTRA} ]; if(!this.hasOneShot){ - extraBuffs.push({type:BuffType.ONESHOT, value:num, category: BuffCategory.EXTRA}); + extraBuffs.push({type:BuffType.ONESHOT, value:1, category: BuffCategory.EXTRA, string: "Your hits hurt 100x more but you die in one shot"}); }; @@ -434,14 +451,18 @@ export default class PlayerController extends StateMachineAI implements BattlerA case BuffType.POISON: this.hasPoison = true; break; + case BuffType.EXTRA_DOT: + this.extraDotDmg += buff.value; + break; case BuffType.SHIELD: this.hasShield = true; break; + case BuffType.ATKSPEED: if (item) { //reduce cooldowntimer //(item).cooldownTimer - } + } break; case BuffType.DOUBLESTRIKE: break; @@ -455,6 +476,9 @@ export default class PlayerController extends StateMachineAI implements BattlerA this.hasLifesteal = true; break; case BuffType.ONESHOT: + this.MAX_HP = 1; + this.CURRENT_HP = 1; + this.CURRENT_ATK *= 100; break; } } diff --git a/src/shattered_sword/Scenes/GameLevel.ts b/src/shattered_sword/Scenes/GameLevel.ts index 2fcfb57..fb44a8a 100644 --- a/src/shattered_sword/Scenes/GameLevel.ts +++ b/src/shattered_sword/Scenes/GameLevel.ts @@ -246,7 +246,9 @@ export default class GameLevel extends Scene { this.enemies = this.enemies.filter(item => item !== event.data.get("ai")); this.battleManager.removeEnemy(event.data.get("ai")); //give the player the exp value of the enemy killed - (this.player._ai).giveExp(event.data.get("ai").exp_val); + if(event.data.get("ai").exp_val !== undefined){ + (this.player._ai).giveExp(event.data.get("ai").exp_val); + } node.destroy(); //destroy enemy node //TODO - this is for testing, add some chance here later //this.emitter.fireEvent(Player_Events.GIVE_BUFF); @@ -254,9 +256,26 @@ export default class GameLevel extends Scene { case Player_Events.GIVE_BUFF: this.buffs = (this.player._ai).generateBuffs(); - this.buffButton1.text = "Increase "+this.buffs[0].type.toString() + " by "+this.buffs[0].value; - this.buffButton2.text = "Increase "+this.buffs[1].type + " by "+this.buffs[1].value; - this.buffButton3.text = "Increase "+this.buffs[2].type + " by "+this.buffs[2].value; + if(this.buffs[0].string !== undefined){ + this.buffButton1.text = this.buffs[0].string; + } + else{ + this.buffButton1.text = "Increase "+this.buffs[0].type + " by "+this.buffs[0].value; + } + + if(this.buffs[1].string !== undefined){ + this.buffButton2.text = this.buffs[1].string; + } + else{ + this.buffButton2.text = "Increase "+this.buffs[1].type + " by "+this.buffs[1].value; + } + + if(this.buffs[2].string !== undefined){ + this.buffButton3.text = this.buffs[2].string; + } + else{ + this.buffButton3.text = "Increase "+this.buffs[2].type + " by "+this.buffs[2].value; + } //pause game here this.setGameState(GameState.BUFF);