diff --git a/.hintrc b/.hintrc
new file mode 100644
index 0000000..ae62a1a
--- /dev/null
+++ b/.hintrc
@@ -0,0 +1,13 @@
+{
+ "extends": [
+ "development"
+ ],
+ "hints": {
+ "axe/text-alternatives": [
+ "default",
+ {
+ "image-alt": "off"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/app/games/massive-darkness2/factorys/mobs/CoreGame.ts b/src/app/games/massive-darkness2/factorys/mobs/CoreGame.ts
deleted file mode 100644
index 7f7ca0a..0000000
--- a/src/app/games/massive-darkness2/factorys/mobs/CoreGame.ts
+++ /dev/null
@@ -1,222 +0,0 @@
-import { environment } from "../../../../../environments/environment";
-import { DefenseInfo, IMobFactory, MD2Icon, MobInfo } from "../../massive-darkness2.model";
-import { MobSkill, MobSkillType } from "../../massive-darkness2.model.boss";
-
-const MD2_IMG_URL = (id: string = null) => { return `${environment.apiUrl}/Files/Images/MD2/Mobs${(id ? `${encodeURI(id)}` : '')}` }
-const CORE_GAME_MOB_LEVEL = [
- { name: 'Gargoyles', level: 1, hp: 2, rewardTokens: 1, defBlue: 1 },
- { name: 'Gargoyles', level: 3, hp: 3, rewardTokens: 1, defBlue: 2 },
- { name: 'Gargoyles', level: 5, hp: 6, rewardTokens: 2, defBlue: 3 },
-
- { name: 'Demons', level: 1, hp: 3, rewardTokens: 1, defBlue: 1 },
- { name: 'Demons', level: 3, hp: 4, rewardTokens: 1, defBlue: 2 },
- { name: 'Demons', level: 5, hp: 6, rewardTokens: 2, defBlue: 4 },
-
- { name: 'Undead', level: 1, hp: 4, rewardTokens: 1, defBlue: 1 },
- { name: 'Undead', level: 3, hp: 5, rewardTokens: 1, defBlue: 1 },
- { name: 'Undead', level: 5, hp: 8, rewardTokens: 2, defBlue: 1 },
-
- { name: 'Fire Entities', level: 1, hp: 3, rewardTokens: 1, defBlue: 1 },
- { name: 'Fire Entities', level: 3, hp: 4, rewardTokens: 1, defBlue: 2 },
- { name: 'Fire Entities', level: 5, hp: 7, rewardTokens: 2, defBlue: 3 },
-
- { name: 'Fallen Angels', level: 1, hp: 2, rewardTokens: 1, defBlue: 2 },
- { name: 'Fallen Angels', level: 3, hp: 3, rewardTokens: 1, defBlue: 3 },
- { name: 'Fallen Angels', level: 5, hp: 5, rewardTokens: 2, defBlue: 5 },
-
- { name: 'Infernal Imps', level: 1, hp: 3, rewardTokens: 1, defBlue: 1 },
- { name: 'Infernal Imps', level: 3, hp: 4, rewardTokens: 1, defBlue: 1 },
- { name: 'Infernal Imps', level: 5, hp: 5, rewardTokens: 2, defBlue: 3 },
-
- { name: 'Skeletons', level: 1, hp: 2, rewardTokens: 1, defBlue: 1 },
- { name: 'Skeletons', level: 3, hp: 3, rewardTokens: 1, defBlue: 2 },
- { name: 'Skeletons', level: 5, hp: 5, rewardTokens: 2, defBlue: 4 },
-
- { name: 'Satyrs', level: 1, hp: 3, rewardTokens: 1, defBlue: 1 },
- { name: 'Satyrs', level: 3, hp: 4, rewardTokens: 1, defBlue: 2 },
- { name: 'Satyrs', level: 5, hp: 6, rewardTokens: 2, defBlue: 4 }]
-
-export abstract class MobFactory implements IMobFactory {
- abstract mobName: string;
- abstract generate(level: number): MobInfo
- protected mob: MobInfo;
- protected loadLevelInfo(mobName: string, level: number) {
- let levelInfo = CORE_GAME_MOB_LEVEL.find(m => m.name == mobName && level >= m.level);
-
- this.mob = new MobInfo({
- name: mobName, hp: levelInfo.hp, level: level, rewardTokens: levelInfo.rewardTokens,
- defenseInfo: new DefenseInfo(levelInfo.defBlue)
- });
- this.mob.leaderImgUrl = MD2_IMG_URL(`/CoreGame/Mobs/${this.mob.name}/Leader.png`);
- this.mob.minionImgUrl = MD2_IMG_URL(`/CoreGame/Mobs/${this.mob.name}/Minion.png`);
-
- }
- iconHtml(icon: MD2Icon, cssClass = 'g-font-size-24') {
- if (icon == MD2Icon.Fire) {
- cssClass += ' g-color-google-plus ';
- }
- if (icon == MD2Icon.Frost || icon == MD2Icon.Mana) {
- cssClass += ' g-color-aqua ';
- }
-
- if (icon < MD2Icon.RedDice) {
- return `${String.fromCharCode(65 + icon)}`
-
- }
- else {
- return ``;
- }
- }
-}
-export class MobDemonsFactory extends MobFactory {
- mobName: string = 'Demons';
- generate(level: number): MobInfo {
- this.loadLevelInfo('Demons', level);
- this.mob.combatSkill = new MobSkill(
- {
- description: `Attacking or defending Hero discards 1 ${this.iconHtml(MD2Icon.Mana)}`
- }
- )
- return this.mob;
- }
-
-}
-export class MobFallenAngelFactory extends MobFactory {
- mobName: string = 'Fallen Angels';
- generate(level: number): MobInfo {
- this.loadLevelInfo('Fallen Angels', level);
- this.mob.combatSkill = new MobSkill(
- {
- description: `Defender -${level == 1 ? 1 : 2} ${this.iconHtml(MD2Icon.Defense)}`,
- type: MobSkillType.Attack
- }
- )
- return this.mob;
- }
-}
-
-export class MobFireEntitiesFactory extends MobFactory {
- mobName: string = 'Fire Entities';
- generate(level: number): MobInfo {
- this.loadLevelInfo('Fire Entities', level);
- this.mob.combatSkill = new MobSkill(
- {
- description: `Add 1 ${this.iconHtml(MD2Icon.Fire)} to the attacking or defending Hero.`,
- type: MobSkillType.Combat
- }
- )
- return this.mob;
- }
-}
-
-export class MobGargoylesFactory extends MobFactory {
- mobName: string = 'Gargoyles';
- generate(level: number): MobInfo {
- this.loadLevelInfo('Gargoyles', level);
- this.mob.combatSkill = new MobSkill(
- {
- description: `+ ${level < 5 ? 1 : 2} ${this.iconHtml(MD2Icon.Defense)}`,
- type: MobSkillType.Defense
- }
- )
- return this.mob;
- }
-}
-export class MobInfernalImpsFactory extends MobFactory {
- mobName: string = 'Infernal Imps';
- generate(level: number): MobInfo {
- this.loadLevelInfo('Infernal Imps', level);
- let damage = 1;
- switch (level) {
- case 1:
- case 2:
- damage = 1;
- break;
- case 3:
- case 4:
- damage = 2;
- break;
- case 5:
- damage = 3;
- break;
-
- default:
- damage = 1;
- break;
- }
- this.mob.combatSkill = new MobSkill(
- {
- description: `Kill 1 Imp, then deal ${damage} Wound to each Hero in the attacker's Zone(once per roll).`,
- type: MobSkillType.Defense
- }
- )
- return this.mob;
- }
-}
-export class MobSatyrsFactory extends MobFactory {
- mobName: string = 'Satyrs';
- generate(level: number): MobInfo {
- this.loadLevelInfo('Satyrs', level);
- this.mob.combatSkill = new MobSkill(
- {
- description: `+ ${level < 3 ? 1 : 2} ${this.iconHtml(MD2Icon.Attack)}`,
- type: MobSkillType.Attack
- }
- )
- return this.mob;
- }
-}
-
-export class MobSkeletonsFactory extends MobFactory {
- mobName: string = 'Skeletons';
- generate(level: number): MobInfo {
- this.loadLevelInfo('Skeletons', level);
- this.mob.combatSkill = new MobSkill(
- {
- description: `Add 1 minion to this Mob(if possible) unless the Hero discards ${level < 5 ? 1 : 2} ${this.iconHtml(MD2Icon.Mana)}.`,
- type: MobSkillType.Defense,
- skillRoll: 2
- }
- )
- return this.mob;
- }
-}
-
-export class MobUndeadFactory extends MobFactory {
- mobName: string = 'Undead';
- generate(level: number): MobInfo {
- this.loadLevelInfo('Undead', level);
-
- let skillDesc = '';
- if (level < 3) {
- skillDesc = `+1 ${this.iconHtml(MD2Icon.YellowDice)}`;
- } else if (level < 5) {
- skillDesc = `+2 ${this.iconHtml(MD2Icon.YellowDice)}`;
-
- } else {
- skillDesc = `+1 ${this.iconHtml(MD2Icon.YellowDice)} 1 ${this.iconHtml(MD2Icon.OrangeDice)}`;
-
- }
- skillDesc += ' and this Mob takes 2 wounds';
- this.mob.combatSkill = new MobSkill(
- {
- description: skillDesc,
- type: MobSkillType.Attack
- }
- )
- this.mob.drawingWeight = 1;
- return this.mob;
- }
-}
-
-
-export const CoreGameMobFactories = [
- new MobDemonsFactory(),
- new MobFallenAngelFactory(),
- new MobFireEntitiesFactory(),
- new MobGargoylesFactory(),
- new MobInfernalImpsFactory(),
- new MobSatyrsFactory(),
- new MobSkeletonsFactory(),
- new MobUndeadFactory(),
-];
\ No newline at end of file
diff --git a/src/app/games/massive-darkness2/factorys/roamingMonsters/CoreGame.ts b/src/app/games/massive-darkness2/factorys/roamingMonsters/CoreGame.ts
index b3adc40..54dd76e 100644
--- a/src/app/games/massive-darkness2/factorys/roamingMonsters/CoreGame.ts
+++ b/src/app/games/massive-darkness2/factorys/roamingMonsters/CoreGame.ts
@@ -3,8 +3,9 @@ import { first, map } from "rxjs/operators";
import { environment } from "../../../../../environments/environment";
import { ADButtons, ADIcon } from "../../../../ui/alert-dlg/alert-dlg.model";
import { MD2Logic } from "../../massive-darkness2.logic";
-import { AttackInfo, AttackTarget, DefenseInfo, IMobFactory, MD2Icon, MobInfo, MobType, TreasureItem, TreasureType } from "../../massive-darkness2.model";
-import { MobSkill, MobSkillType } from "../../massive-darkness2.model.boss";
+import { AttackInfo, AttackTarget, IMobFactory, MD2Icon, MobInfo, MobType, TreasureItem, TreasureType } from "../../massive-darkness2.model";
+import { MobSkillType } from "../../massive-darkness2.model.boss";
+import { MD2DiceSet, MD2MobSkill } from "../../massive-darkness2.db.model";
const MD2_IMG_URL = (id: string = null) => { return `${environment.apiUrl}/Files/Images/MD2/Mobs${(id ? `${encodeURI(id)}` : '')}` }
const CORE_GAME_MOB_LEVEL = [
@@ -13,68 +14,68 @@ const CORE_GAME_MOB_LEVEL = [
name: 'Andra', level: 1, hp: 5,
attackInfos: [new AttackInfo(MD2Icon.Melee, 1, 0, 0, 1), new AttackInfo(MD2Icon.Range, 1, 0, 0, 1)],
- defenseInfo: new DefenseInfo(2, 1),
+ defenseInfo: { blue: 2, black: 1 } as MD2DiceSet,
}),
new MobInfo({
name: 'Andra', level: 3, hp: 7,
attackInfos: [new AttackInfo(MD2Icon.Melee, 1, 1, 0, 1), new AttackInfo(MD2Icon.Range, 1, 1, 0, 1)],
- defenseInfo: new DefenseInfo(3, 1),
+ defenseInfo: { blue: 3, black: 1 } as MD2DiceSet,
}),
new MobInfo({
name: 'Andra', level: 5, hp: 5,
attackInfos: [new AttackInfo(MD2Icon.Melee, 1, 2, 0, 1), new AttackInfo(MD2Icon.Range, 1, 2, 0, 1)],
- defenseInfo: new DefenseInfo(5, 1),
+ defenseInfo: { blue: 5, black: 1 } as MD2DiceSet,
}),
new MobInfo({
name: 'Ytheria, Undead Queen', level: 1, hp: 4,
attackInfos: [new AttackInfo(MD2Icon.Melee, 1), new AttackInfo(MD2Icon.Range, 2, 0, 0, 1)],
- defenseInfo: new DefenseInfo(1, 1),
+ defenseInfo: { blue: 1, black: 1 } as MD2DiceSet,
}),
new MobInfo({
name: 'Ytheria, Undead Queen', level: 3, hp: 6,
attackInfos: [new AttackInfo(MD2Icon.Melee, 0, 1), new AttackInfo(MD2Icon.Range, 1, 1, 0, 1)],
- defenseInfo: new DefenseInfo(2, 1),
+ defenseInfo: { blue: 2, black: 1 } as MD2DiceSet,
}),
new MobInfo({
name: 'Ytheria, Undead Queen', level: 5, hp: 8,
attackInfos: [new AttackInfo(MD2Icon.Melee, 2, 1), new AttackInfo(MD2Icon.Range, 2, 1, 0, 1)],
- defenseInfo: new DefenseInfo(4, 1),
+ defenseInfo: { blue: 4, black: 1 } as MD2DiceSet,
}),
new MobInfo({
name: 'Lyidan, Incubus Lord', level: 1, hp: 7,
attackInfos: [new AttackInfo(MD2Icon.Melee, 0, 1, 0, 2)],
- defenseInfo: new DefenseInfo(2, 1),
+ defenseInfo: { blue: 2, black: 1 } as MD2DiceSet,
}),
new MobInfo({
name: 'Lyidan, Incubus Lord', level: 3, hp: 10,
attackInfos: [new AttackInfo(MD2Icon.Melee, 0, 2, 0, 1)],
- defenseInfo: new DefenseInfo(2, 1),
+ defenseInfo: { blue: 2, black: 1 } as MD2DiceSet,
}),
new MobInfo({
name: 'Lyidan, Incubus Lord', level: 5, hp: 12,
attackInfos: [new AttackInfo(MD2Icon.Melee, 2, 2, 0, 1)],
- defenseInfo: new DefenseInfo(4, 1),
+ defenseInfo: { blue: 4, black: 1 } as MD2DiceSet,
}),
new MobInfo({
name: 'The Ghoul', level: 1, hp: 5,
attackInfos: [new AttackInfo(MD2Icon.Melee, 0, 1, 0, 1)],
- defenseInfo: new DefenseInfo(2, 1),
+ defenseInfo: { blue: 2, black: 1 } as MD2DiceSet,
}),
new MobInfo({
name: 'The Ghoul', level: 3, hp: 8,
attackInfos: [new AttackInfo(MD2Icon.Melee, 0, 2, 0, 2)],
- defenseInfo: new DefenseInfo(3, 1),
+ defenseInfo: { blue: 3, black: 1 } as MD2DiceSet,
}),
new MobInfo({
name: 'The Ghoul', level: 5, hp: 10,
attackInfos: [new AttackInfo(MD2Icon.Melee, 0, 3, 0, 3)],
- defenseInfo: new DefenseInfo(4, 1),
+ defenseInfo: { blue: 4, black: 1 } as MD2DiceSet,
}),
@@ -83,21 +84,21 @@ const CORE_GAME_MOB_LEVEL = [
attackInfos: [
new AttackInfo(MD2Icon.Magic, 0, 1, 0, 2),
],
- defenseInfo: new DefenseInfo(2, 1),
+ defenseInfo: { blue: 2, black: 1 } as MD2DiceSet,
}),
new MobInfo({
name: 'Balrog', level: 3, hp: 8,
attackInfos: [
new AttackInfo(MD2Icon.Magic, 0, 2, 0, 2),
],
- defenseInfo: new DefenseInfo(3, 1),
+ defenseInfo: { blue: 3, black: 1 } as MD2DiceSet,
}),
new MobInfo({
name: 'Balrog', level: 5, hp: 10,
attackInfos: [
new AttackInfo(MD2Icon.Magic, 0, 3, 0, 2),
],
- defenseInfo: new DefenseInfo(4, 1),
+ defenseInfo: { blue: 4, black: 1 } as MD2DiceSet,
}),
]
@@ -194,12 +195,13 @@ export class RMUndeadQueenFactory extends CoreGameRMFactory {
});;
}
- this.mob.combatSkill = new MobSkill(
+ this.mob.skills = [
{
description: `Add 1 Minion to each Mob in the Dungeon, if possible.`,
- type: MobSkillType.Attack
- }
- )
+ type: MobSkillType.Attack,
+
+ skillRoll: 1
+ } as MD2MobSkill];
return this.mob;
}
}
@@ -249,12 +251,12 @@ export class RMAndraFactory extends CoreGameRMFactory {
});
}
- this.mob.combatSkill = new MobSkill(
+ this.mob.skills = [
{
description: `Deal ${damage} wound to another Hero with the lowest HP in LoS`,
- type: MobSkillType.Combat
- }
- )
+ type: MobSkillType.Combat,
+ skillRoll: 1
+ } as MD2MobSkill];
return this.mob;
}
}
@@ -293,12 +295,12 @@ export class RMTheGhoulFactory extends CoreGameRMFactory {
});
}
- this.mob.combatSkill = new MobSkill(
+ this.mob.skills = [
{
description: `Move the closest Mob with minion 1 Zone toward The Ghoul.`,
- type: MobSkillType.Combat
- }
- )
+ type: MobSkillType.Combat,
+ skillRoll: 1
+ } as MD2MobSkill];
return this.mob;
}
}
@@ -340,12 +342,12 @@ export class RMLyidanIncubusLordFactory extends CoreGameRMFactory {
});
}
- this.mob.combatSkill = new MobSkill(
+ this.mob.skills = [
{
description: `After combat, resolve all ${this.iconHtml(MD2Icon.Fire)} on the defending Hero(once per combat).`,
- type: MobSkillType.Attack
- }
- )
+ type: MobSkillType.Attack,
+ skillRoll: 1
+ } as MD2MobSkill];
return this.mob;
}
}
@@ -376,12 +378,12 @@ export class RMBalrogFactory extends CoreGameRMFactory {
}
}
- this.mob.combatSkill = new MobSkill(
+ this.mob.skills = [
{
description: `The Hero takes 1 ${this.iconHtml(MD2Icon.Fire)}`,
- type: MobSkillType.Combat
- }
- )
+ type: MobSkillType.Combat,
+ skillRoll: 1
+ } as MD2MobSkill];
return this.mob;
}
}
diff --git a/src/app/games/massive-darkness2/massive-darkness2.component.html b/src/app/games/massive-darkness2/massive-darkness2.component.html
index 09e01bf..9f92ff7 100644
--- a/src/app/games/massive-darkness2/massive-darkness2.component.html
+++ b/src/app/games/massive-darkness2/massive-darkness2.component.html
@@ -15,7 +15,6 @@
-->
-