Browse Source

added resistances to constitution details.

Warafear 11 months ago
parent
commit
ee99db4690

+ 54 - 0
src/app/character/character-creator/character-creator.component.ts

@@ -374,6 +374,60 @@ export class CharacterCreatorComponent {
         'spellLevel9',
         'spellLevel9',
       ),
       ),
 
 
+      this.dataAccessor.addData(
+        this.characterName,
+        {
+          data: {},
+        },
+        'companions',
+      ),
+      this.dataAccessor.addData(
+        this.characterName,
+        {
+          data: {},
+        },
+        'notes',
+      ),
+      this.dataAccessor.addData(
+        this.characterName,
+        {
+          data: {},
+        },
+        'quests',
+      ),
+      this.dataAccessor.addData(
+        this.characterName,
+        {
+          data: {},
+        },
+        'npcs',
+      ),
+      this.dataAccessor.addData(
+        this.characterName,
+        {
+          data: {},
+        },
+        'locations',
+      ),
+      this.dataAccessor.addData(
+        this.characterName,
+        {
+          data: {},
+        },
+        'maps',
+      ),
+      this.dataAccessor.addData(
+        this.characterName,
+        {
+          data: {
+            resistances: [],
+            immunities: [],
+            vulnerabilities: [],
+          },
+        },
+        'resistances',
+      ),
+
       // Notes
       // Notes
 
 
       // Maps
       // Maps

+ 116 - 3
src/app/journal/journal-stats/attribute-skill-container/attribute-panel/attribute-field/attribute-details/attribute-details.component.html

@@ -10,7 +10,7 @@
 </div>
 </div>
 
 
 @if (attribute.name !== "constitution") {
 @if (attribute.name !== "constitution") {
-  <div class="subheading">
+  <div class="subheading left">
     {{ "attributeDetails.affectedSkills" | translate }}
     {{ "attributeDetails.affectedSkills" | translate }}
   </div>
   </div>
   <div class="skills">
   <div class="skills">
@@ -18,8 +18,6 @@
       <div class="skill-item">{{ "skills." + skill | translate }}</div>
       <div class="skill-item">{{ "skills." + skill | translate }}</div>
     }
     }
   </div>
   </div>
-} @else {
-  Resistenzen ausarbeiten
 }
 }
 
 
 <mat-expansion-panel>
 <mat-expansion-panel>
@@ -81,3 +79,118 @@
     </tbody>
     </tbody>
   </table>
   </table>
 </mat-expansion-panel>
 </mat-expansion-panel>
+
+@if (attribute.name === "constitution") {
+  <!-- Resistances etc. -->
+  <div class="heading-row t-2">
+    <h4>{{ "attributeDetails.strengths" | translate }}</h4>
+    <icon-button
+      [icon]="isEdit ? 'cross' : 'edit'"
+      (click)="toggleEdit()"
+    ></icon-button>
+  </div>
+  <!-- Resistance -->
+  <div class="resistance-box">
+    <div class="input-label">{{ "resistances.resistances" | translate }}</div>
+    @if (isEdit) {
+      <mat-form-field appearance="outline">
+        <mat-select
+          [(ngModel)]="resistances"
+          (selectionChange)="showButtons()"
+          multiple
+        >
+          @for (type of translator.damageTypes; track type) {
+            <mat-option [value]="type">
+              {{ "damageTypes." + type | translate }}
+            </mat-option>
+          }
+        </mat-select>
+      </mat-form-field>
+    } @else {
+      <div class="resistance-container">
+        @for (type of resistances; track type) {
+          <icon [size]="'s'" [type]="'damage'" [icon]="type"></icon>
+        } @empty {
+          -
+        }
+      </div>
+    }
+  </div>
+
+  <!-- Immunity -->
+  <div class="resistance-box">
+    <div class="input-label">{{ "resistances.immunities" | translate }}</div>
+    @if (isEdit) {
+      <mat-form-field appearance="outline">
+        <mat-select
+          [(ngModel)]="immunities"
+          (selectionChange)="showButtons()"
+          multiple
+        >
+          @for (type of translator.damageTypes; track type) {
+            <mat-option [value]="type">
+              {{ "damageTypes." + type | translate }}
+            </mat-option>
+          }
+        </mat-select>
+      </mat-form-field>
+    } @else {
+      <div class="resistance-container">
+        @for (type of immunities; track type) {
+          <icon [size]="'s'" [type]="'damage'" [icon]="type"></icon>
+        } @empty {
+          -
+        }
+      </div>
+    }
+  </div>
+
+  <!-- Vulnerabilities -->
+  <div class="resistance-box">
+    <div class="input-label">
+      {{ "resistances.vulnerabilities" | translate }}
+    </div>
+    @if (isEdit) {
+      <mat-form-field appearance="outline">
+        <mat-select
+          [(ngModel)]="vulnerabilities"
+          (change)="showButtons()"
+          multiple
+        >
+          @for (type of translator.damageTypes; track type) {
+            <mat-option [value]="type">
+              {{ "damageTypes." + type | translate }}
+            </mat-option>
+          }
+        </mat-select>
+      </mat-form-field>
+    } @else {
+      <div class="resistance-container">
+        @for (type of vulnerabilities; track type) {
+          <icon [size]="'s'" [type]="'damage'" [icon]="type"></icon>
+        } @empty {
+          -
+        }
+      </div>
+    }
+  </div>
+
+  @if (showButtonsContainer) {
+    <div class="vertical-buttons t-2">
+      <ui-button
+        [color]="'green'"
+        [type]="'apply'"
+        [width]="'w20'"
+        (click)="close()"
+      >
+      </ui-button>
+      <ui-button
+        [color]="'red'"
+        [type]="'discard'"
+        [width]="'w20'"
+        (click)="close()"
+      >
+      </ui-button>
+    </div>
+  }
+}

+ 24 - 0
src/app/journal/journal-stats/attribute-skill-container/attribute-panel/attribute-field/attribute-details/attribute-details.component.scss

@@ -19,6 +19,30 @@
   box-shadow: 2px 2px 5px 0px rgba(0, 0, 0, 0.75);
   box-shadow: 2px 2px 5px 0px rgba(0, 0, 0, 0.75);
 }
 }
 
 
+.heading-row {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.resistance-box {
+  margin-top: 1.25rem;
+}
+
+.resistance-container {
+  height: 3rem;
+  width: 100%;
+  padding: 0.5rem;
+  padding-left: 1rem;
+  display: flex;
+  flex-wrap: wrap;
+  gap: 0.5rem;
+  background-color: white;
+  border-radius: 10px;
+  box-shadow: var(--shadow);
+  border: var(--border);
+}
+
 mat-expansion-panel {
 mat-expansion-panel {
   border: var(--border) !important;
   border: var(--border) !important;
   border-radius: 10px !important;
   border-radius: 10px !important;

+ 33 - 1
src/app/journal/journal-stats/attribute-skill-container/attribute-panel/attribute-field/attribute-details/attribute-details.component.ts

@@ -1,7 +1,9 @@
 import { Component, Input } from '@angular/core';
 import { Component, Input } from '@angular/core';
 import { DetailsService } from 'src/services/details/details.service';
 import { DetailsService } from 'src/services/details/details.service';
+import { DataService } from 'src/services/data/data.service';
 import { Attribute } from 'src/interfaces/attribute';
 import { Attribute } from 'src/interfaces/attribute';
 import { TranslateService } from '@ngx-translate/core';
 import { TranslateService } from '@ngx-translate/core';
+import { TranslatorService } from 'src/services/translator/translator.service';
 
 
 @Component({
 @Component({
   selector: 'app-attribute-details',
   selector: 'app-attribute-details',
@@ -12,10 +14,22 @@ export class AttributeDetailsComponent {
   @Input() public attribute!: Attribute;
   @Input() public attribute!: Attribute;
   @Input() public modifier!: string;
   @Input() public modifier!: string;
 
 
+  public resistances: string[] = [];
+  public immunities: string[] = [];
+  public vulnerabilities: string[] = [];
+  public showButtonsContainer: boolean = false;
+  public isEdit: boolean = false;
+
   public constructor(
   public constructor(
     public detailsService: DetailsService,
     public detailsService: DetailsService,
     public translate: TranslateService,
     public translate: TranslateService,
-  ) {}
+    public translator: TranslatorService,
+    public dataAccessor: DataService,
+  ) {
+    this.resistances = this.dataAccessor.resistances.resistances;
+    this.immunities = this.dataAccessor.resistances.immunities;
+    this.vulnerabilities = this.dataAccessor.resistances.vulnerabilities;
+  }
 
 
   public skillsTable: any = {
   public skillsTable: any = {
     strength: ['athletics'],
     strength: ['athletics'],
@@ -25,4 +39,22 @@ export class AttributeDetailsComponent {
     wisdom: ['animalHandling', 'insight', 'medicine', 'perception', 'survival'],
     wisdom: ['animalHandling', 'insight', 'medicine', 'perception', 'survival'],
     charisma: ['deception', 'intimidation', 'performance', 'persuasion'],
     charisma: ['deception', 'intimidation', 'performance', 'persuasion'],
   };
   };
+
+  public showButtons() {
+    this.showButtonsContainer = true;
+    console.log('show Buttons:', this.showButtonsContainer);
+  }
+
+  public toggleEdit() {
+    this.isEdit = !this.isEdit;
+  }
+
+  public close(): void {
+    this.dataAccessor.resistances = {
+      resistances: this.resistances,
+      immunities: this.immunities,
+      vulnerabilities: this.vulnerabilities,
+    };
+    this.detailsService.closePanel('dismiss');
+  }
 }
 }

+ 11 - 0
src/app/journal/journal-stats/attribute-skill-container/attribute-panel/attribute-field/attribute-field.component.ts

@@ -17,6 +17,7 @@ export class AttributeFieldComponent {
   public attributeModifier: string = '0';
   public attributeModifier: string = '0';
   public saveModifier: string = '0';
   public saveModifier: string = '0';
   public proficiencyBonus: number = 0;
   public proficiencyBonus: number = 0;
+  public resistances: string[][] = [];
 
 
   public constructor(
   public constructor(
     public dataAccessor: DataService,
     public dataAccessor: DataService,
@@ -44,6 +45,7 @@ export class AttributeFieldComponent {
       value: this.attribute.value,
       value: this.attribute.value,
       proficiency: this.attribute.proficiency,
       proficiency: this.attribute.proficiency,
     });
     });
+    this.dataAccessor.resistances = this.resistances;
   }
   }
 
 
   public calculateModifier(): string {
   public calculateModifier(): string {
@@ -60,5 +62,14 @@ export class AttributeFieldComponent {
       attribute: this.attribute,
       attribute: this.attribute,
       modifier: this.attributeModifier,
       modifier: this.attributeModifier,
     });
     });
+    const resultSubscription = this.detailsAccessor.result$.subscribe(
+      (result) => {
+        if (result.state === 'update') {
+          this.resistances = result.data.resistances;
+          this.updateValue();
+        }
+        resultSubscription.unsubscribe();
+      },
+    );
   }
   }
 }
 }

+ 15 - 4
src/assets/i18n/de.json

@@ -110,8 +110,7 @@
     "poison": "Gift",
     "poison": "Gift",
     "psychic": "Psychisch",
     "psychic": "Psychisch",
     "radiant": "Gleißend",
     "radiant": "Gleißend",
-    "slashing": "Hieb",
-    "thunder": "Blitz"
+    "slashing": "Hieb"
   },
   },
   "areaTypes": {
   "areaTypes": {
     "areaType": "Flächentyp",
     "areaType": "Flächentyp",
@@ -292,7 +291,13 @@
     "constitution": "Konstitution steht für die Widerstandsfähigkeit, Gesundheit und Ausdauer deines Charakters. Ein hoher Konstitutionswert bedeutet, dass dein Charakter robust ist und gut mit physischem Stress umgehen kann. Charaktere mit hoher Konstitution haben oft eine höhere Lebenspunktzahl und sind widerstandsfähiger gegenüber Krankheiten und Gift.",
     "constitution": "Konstitution steht für die Widerstandsfähigkeit, Gesundheit und Ausdauer deines Charakters. Ein hoher Konstitutionswert bedeutet, dass dein Charakter robust ist und gut mit physischem Stress umgehen kann. Charaktere mit hoher Konstitution haben oft eine höhere Lebenspunktzahl und sind widerstandsfähiger gegenüber Krankheiten und Gift.",
     "intelligence": "Intelligenz misst die geistige Schärfe, das logische Denkvermögen und die Lernfähigkeit deines Charakters. Ein hoher Intelligenzwert deutet auf eine gute Allgemeinbildung, Wissensdurst und analytische Fähigkeiten hin. Charaktere mit hoher Intelligenz sind oft Magier, Forscher oder Strategen.",
     "intelligence": "Intelligenz misst die geistige Schärfe, das logische Denkvermögen und die Lernfähigkeit deines Charakters. Ein hoher Intelligenzwert deutet auf eine gute Allgemeinbildung, Wissensdurst und analytische Fähigkeiten hin. Charaktere mit hoher Intelligenz sind oft Magier, Forscher oder Strategen.",
     "wisdom": "Weisheit repräsentiert die Wahrnehmung, Intuition und emotionale Intelligenz deines Charakters. Ein hoher Weisheitswert deutet auf eine gute Urteilsfähigkeit, Einsicht und innere Stärke hin. Charaktere mit hoher Weisheit sind oft Kleriker, Druiden oder Weise.",
     "wisdom": "Weisheit repräsentiert die Wahrnehmung, Intuition und emotionale Intelligenz deines Charakters. Ein hoher Weisheitswert deutet auf eine gute Urteilsfähigkeit, Einsicht und innere Stärke hin. Charaktere mit hoher Weisheit sind oft Kleriker, Druiden oder Weise.",
-    "charisma": "Charisma spiegelt die Ausstrahlung, Überzeugungskraft und soziale Fähigkeiten deines Charakters wider. Ein hoher Charismawert bedeutet, dass dein Charakter charmant, einnehmend und überzeugend ist. Charaktere mit hohem Charisma können oft besser mit anderen kommunizieren, überzeugen und Führungsaufgaben übernehmen. Charisma ist oft wichtig für Barden, Anführer oder Diplomaten."
+    "charisma": "Charisma spiegelt die Ausstrahlung, Überzeugungskraft und soziale Fähigkeiten deines Charakters wider. Ein hoher Charismawert bedeutet, dass dein Charakter charmant, einnehmend und überzeugend ist. Charaktere mit hohem Charisma können oft besser mit anderen kommunizieren, überzeugen und Führungsaufgaben übernehmen. Charisma ist oft wichtig für Barden, Anführer oder Diplomaten.",
+    "strengths": "Resistenzen und Verwundbarkeiten"
+  },
+  "resistances": {
+    "resistances": "Resistenzen",
+    "immunities": "Immunitäten",
+    "vulnerabilities": "Verwundbarkeiten"
   },
   },
   "skills": {
   "skills": {
     "acrobatics": "Akrobatik",
     "acrobatics": "Akrobatik",
@@ -330,7 +335,7 @@
     "performance": "Würfe auf Auftreten decken alle Versuche ab, ein Publikum zu unterhalten, sei es nun durch Musik, Tanzen, Schauspielerei oder andere Formen der Unterhaltung.",
     "performance": "Würfe auf Auftreten decken alle Versuche ab, ein Publikum zu unterhalten, sei es nun durch Musik, Tanzen, Schauspielerei oder andere Formen der Unterhaltung.",
     "persuasion": "Würfe auf Überreden decken alle Versuche ab, eine andere Person durch Überzeugung, Logik oder Argumentation zu beeinflussen.",
     "persuasion": "Würfe auf Überreden decken alle Versuche ab, eine andere Person durch Überzeugung, Logik oder Argumentation zu beeinflussen.",
     "religion": "Würfe auf Religion decken alle Versuche ab, religiöse Rituale zu verstehen, religiöse Symbole zu erkennen und religiöse Traditionen zu interpretieren.",
     "religion": "Würfe auf Religion decken alle Versuche ab, religiöse Rituale zu verstehen, religiöse Symbole zu erkennen und religiöse Traditionen zu interpretieren.",
-    "sleightOfHands": "Würfe auf Fingerfertigkeit decken alle Versuche ab, etwas zu stehlen, einen Trick zu vollführen oder eine Handlung zu vollführen, ohne dass es jemand bemerkt.",
+    "sleightOfHand": "Würfe auf Fingerfertigkeit decken alle Versuche ab, etwas zu stehlen, einen Trick zu vollführen oder eine Handlung zu vollführen, ohne dass es jemand bemerkt.",
     "stealth": "Würfe auf Heimlichkeit decken alle Versuche ab, sich zu verstecken, sich leise zu bewegen und sich zu verbergen.",
     "stealth": "Würfe auf Heimlichkeit decken alle Versuche ab, sich zu verstecken, sich leise zu bewegen und sich zu verbergen.",
     "survival": "Würfe auf Überleben decken alle Versuche ab, in der Wildnis zu überleben. Dies beinhaltet z.B. das Jagen und das Navigieren durch die Wildnis."
     "survival": "Würfe auf Überleben decken alle Versuche ab, in der Wildnis zu überleben. Dies beinhaltet z.B. das Jagen und das Navigieren durch die Wildnis."
   },
   },
@@ -354,6 +359,12 @@
     "stealth": "dexterity",
     "stealth": "dexterity",
     "survival": "wisdom"
     "survival": "wisdom"
   },
   },
+  "skillDetails": {
+    "title": "Permanente Vor- und Nachteile",
+    "advantage": "Vorteil",
+    "disadvantage": "Nachteil",
+    "none": "Keine"
+  },
   "savingThrow": {
   "savingThrow": {
     "subheading": "Rettungswurf",
     "subheading": "Rettungswurf",
     "content": " Ein Rettungswurf wird immer dann verlangt, wenn überprüft werden soll, ob ein Spieler einem Angriff oder äußeren Einfluss widerstehen kann. Durch das bestehen eines Rettungswurfes kann der Effekt verhindert, oder zumindest abgeschwächt werden."
     "content": " Ein Rettungswurf wird immer dann verlangt, wenn überprüft werden soll, ob ein Spieler einem Angriff oder äußeren Einfluss widerstehen kann. Durch das bestehen eines Rettungswurfes kann der Effekt verhindert, oder zumindest abgeschwächt werden."

+ 1 - 0
src/assets/icons/UIIcons/advantage.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><g class="" transform="translate(0,0)" style=""><path d="M138.798 35.342L28.73 114.268l95.777 29.095 111.305-87.09-97.014-20.93zm112.986 31.082l-118.047 89.96 51.07 131.102 8.534-7.455 4.23-15.708a18.338 13.102 76.863 0 1-9.08-20.45 18.338 13.102 76.863 0 1 10.997-13.727 18.338 13.102 76.863 0 1 3.62.53 18.338 13.102 76.863 0 1 3.113 1.544l7.94-29.48a9 9 0 0 1 .353-1.04 9 9 0 0 1 .058-.128 9 9 0 0 1 .32-.685 9 9 0 0 1 .09-.153 9 9 0 0 1 .37-.625 9 9 0 0 1 .534-.723 9 9 0 0 1 .066-.074 9 9 0 0 1 .54-.594 9 9 0 0 1 .65-.593 9 9 0 0 1 .004-.002 9 9 0 0 1 .46-.342 9 9 0 0 1 .266-.197 9 9 0 0 1 .502-.3 9 9 0 0 1 .27-.157 9 9 0 0 1 .44-.208 9 9 0 0 1 .38-.178 9 9 0 0 1 .437-.152 9 9 0 0 1 .41-.143 9 9 0 0 1 .404-.1 9 9 0 0 1 .47-.114 9 9 0 0 1 .51-.07 9 9 0 0 1 .37-.05 9 9 0 0 1 .01 0 9 9 0 0 1 .01-.003l33.624-2.873a18.338 13.102 76.863 0 1 10.326-9.777 18.338 13.102 76.863 0 1 3.622.53 18.338 13.102 76.863 0 1 8.527 7.327l13.043-1.113-39.442-123.783zM137.25 74.03a9.8 19.77 77.916 0 1 12.798 8.734 9.8 19.77 77.916 0 1-21.938 11.998 9.8 19.77 77.916 0 1-16.57-8.602 9.8 19.77 77.916 0 1 21.938-12 9.8 19.77 77.916 0 1 3.77-.13zm100.228 23.517a18.338 13.102 76.863 0 1 .002 0 18.338 13.102 76.863 0 1 3.62.53 18.338 13.102 76.863 0 1 12.112 21.94 18.338 13.102 76.863 0 1-14.617 13.196 18.338 13.102 76.863 0 1-12.114-21.94 18.338 13.102 76.863 0 1 10.998-13.726zM24.22 131.71l46.992 114.124 94.236 40.38-45.988-125.57-95.24-28.935zm147.886 17.43a18.338 13.102 76.863 0 1 3.622.528 18.338 13.102 76.863 0 1 12.11 21.94 18.338 13.102 76.863 0 1-14.616 13.197 18.338 13.102 76.863 0 1-12.112-21.94 18.338 13.102 76.863 0 1 10.996-13.726zm-75.123 13.016a19.454 9.134 59.254 0 1 16.955 15.078 19.454 9.134 59.254 0 1-.425 19.485A19.454 9.134 59.254 0 1 95.6 181.78a19.454 9.134 59.254 0 1 .424-19.48 19.454 9.134 59.254 0 1 .96-.144zm263.393 40.21l-112.102 9.577 113.762 79.926 113.598-16.956-115.258-72.55zM70.82 212.022A19.454 9.134 59.254 0 1 87.777 227.1a19.454 9.134 59.254 0 1-.425 19.484 19.454 9.134 59.254 0 1-17.913-14.938 19.454 9.134 59.254 0 1 .425-19.482 19.454 9.134 59.254 0 1 .96-.14zm157.378 7.813L186.66 374.023l115.616 99.454 47.147-168.47-121.225-85.17zm126.987 11.168a21.76 8.898 15.267 0 1 19.693 4.783 21.76 8.898 15.267 0 1 7.607 14.244 21.76 8.898 15.267 0 1-28.886-3.182 21.76 8.898 15.267 0 1-7.61-14.244 21.76 8.898 15.267 0 1 9.195-1.6zM487.78 291.3L366.9 309.343l-46.823 167.316 116.297-31.77L487.78 291.3zm-181.808 10.8a25.834 15.573 84.277 0 1 4.238.943 25.834 15.573 84.277 0 1 12.873 31.72 25.834 15.573 84.277 0 1-18.105 17.893 25.834 15.573 84.277 0 1-12.874-31.72 25.834 15.573 84.277 0 1 13.868-18.836zm154.086 11.636a13.237 21.96 28.62 0 1 7.673 4.13 13.237 21.96 28.62 0 1-6.176 28.435 13.237 21.96 28.62 0 1-21.287 3.878 13.237 21.96 28.62 0 1 6.175-28.434 13.237 21.96 28.62 0 1 13.616-8.008zM391.362 324.4a13.237 21.96 28.62 0 1 7.672 4.13 13.237 21.96 28.62 0 1-6.176 28.435 13.237 21.96 28.62 0 1-21.287 3.877 13.237 21.96 28.62 0 1 6.177-28.434 13.237 21.96 28.62 0 1 13.615-8.008zm-173.996 13.305a25.834 15.573 84.277 0 1 4.24.945 25.834 15.573 84.277 0 1 12.872 31.72 25.834 15.573 84.277 0 1-18.106 17.894 25.834 15.573 84.277 0 1-12.873-31.72 25.834 15.573 84.277 0 1 13.866-18.84zm212.278 60.87a13.237 21.96 28.62 0 1 7.67 4.13 13.237 21.96 28.62 0 1-6.174 28.434 13.237 21.96 28.62 0 1-21.287 3.876 13.237 21.96 28.62 0 1 6.175-28.434 13.237 21.96 28.62 0 1 13.616-8.008zm-70.332 19.488a13.237 21.96 28.62 0 1 7.67 4.132 13.237 21.96 28.62 0 1-6.174 28.434 13.237 21.96 28.62 0 1-21.287 3.874 13.237 21.96 28.62 0 1 6.176-28.434 13.237 21.96 28.62 0 1 13.616-8.007z" fill="#417505" fill-opacity="1"></path></g></svg>

+ 1 - 1
src/assets/icons/UIIcons/check.svg

@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><g class="" transform="translate(0,0)" style=""><path d="M17.47 250.9C88.82 328.1 158 397.6 224.5 485.5c72.3-143.8 146.3-288.1 268.4-444.37L460 26.06C356.9 135.4 276.8 238.9 207.2 361.9c-48.4-43.6-126.62-105.3-174.38-137z" fill="#264502" fill-opacity="1"></path></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"/></svg>

+ 1 - 0
src/assets/icons/UIIcons/disadvantage.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><g class="" transform="translate(0,0)" style=""><path d="M138.798 35.342L28.73 114.268l95.777 29.095 111.305-87.09-97.014-20.93zm112.986 31.082l-118.047 89.96 51.07 131.102 8.534-7.455 4.23-15.708a18.338 13.102 76.863 0 1-9.08-20.45 18.338 13.102 76.863 0 1 10.997-13.727 18.338 13.102 76.863 0 1 3.62.53 18.338 13.102 76.863 0 1 3.113 1.544l7.94-29.48a9 9 0 0 1 .353-1.04 9 9 0 0 1 .058-.128 9 9 0 0 1 .32-.685 9 9 0 0 1 .09-.153 9 9 0 0 1 .37-.625 9 9 0 0 1 .534-.723 9 9 0 0 1 .066-.074 9 9 0 0 1 .54-.594 9 9 0 0 1 .65-.593 9 9 0 0 1 .004-.002 9 9 0 0 1 .46-.342 9 9 0 0 1 .266-.197 9 9 0 0 1 .502-.3 9 9 0 0 1 .27-.157 9 9 0 0 1 .44-.208 9 9 0 0 1 .38-.178 9 9 0 0 1 .437-.152 9 9 0 0 1 .41-.143 9 9 0 0 1 .404-.1 9 9 0 0 1 .47-.114 9 9 0 0 1 .51-.07 9 9 0 0 1 .37-.05 9 9 0 0 1 .01 0 9 9 0 0 1 .01-.003l33.624-2.873a18.338 13.102 76.863 0 1 10.326-9.777 18.338 13.102 76.863 0 1 3.622.53 18.338 13.102 76.863 0 1 8.527 7.327l13.043-1.113-39.442-123.783zM137.25 74.03a9.8 19.77 77.916 0 1 12.798 8.734 9.8 19.77 77.916 0 1-21.938 11.998 9.8 19.77 77.916 0 1-16.57-8.602 9.8 19.77 77.916 0 1 21.938-12 9.8 19.77 77.916 0 1 3.77-.13zm100.228 23.517a18.338 13.102 76.863 0 1 .002 0 18.338 13.102 76.863 0 1 3.62.53 18.338 13.102 76.863 0 1 12.112 21.94 18.338 13.102 76.863 0 1-14.617 13.196 18.338 13.102 76.863 0 1-12.114-21.94 18.338 13.102 76.863 0 1 10.998-13.726zM24.22 131.71l46.992 114.124 94.236 40.38-45.988-125.57-95.24-28.935zm147.886 17.43a18.338 13.102 76.863 0 1 3.622.528 18.338 13.102 76.863 0 1 12.11 21.94 18.338 13.102 76.863 0 1-14.616 13.197 18.338 13.102 76.863 0 1-12.112-21.94 18.338 13.102 76.863 0 1 10.996-13.726zm-75.123 13.016a19.454 9.134 59.254 0 1 16.955 15.078 19.454 9.134 59.254 0 1-.425 19.485A19.454 9.134 59.254 0 1 95.6 181.78a19.454 9.134 59.254 0 1 .424-19.48 19.454 9.134 59.254 0 1 .96-.144zm263.393 40.21l-112.102 9.577 113.762 79.926 113.598-16.956-115.258-72.55zM70.82 212.022A19.454 9.134 59.254 0 1 87.777 227.1a19.454 9.134 59.254 0 1-.425 19.484 19.454 9.134 59.254 0 1-17.913-14.938 19.454 9.134 59.254 0 1 .425-19.482 19.454 9.134 59.254 0 1 .96-.14zm157.378 7.813L186.66 374.023l115.616 99.454 47.147-168.47-121.225-85.17zm126.987 11.168a21.76 8.898 15.267 0 1 19.693 4.783 21.76 8.898 15.267 0 1 7.607 14.244 21.76 8.898 15.267 0 1-28.886-3.182 21.76 8.898 15.267 0 1-7.61-14.244 21.76 8.898 15.267 0 1 9.195-1.6zM487.78 291.3L366.9 309.343l-46.823 167.316 116.297-31.77L487.78 291.3zm-181.808 10.8a25.834 15.573 84.277 0 1 4.238.943 25.834 15.573 84.277 0 1 12.873 31.72 25.834 15.573 84.277 0 1-18.105 17.893 25.834 15.573 84.277 0 1-12.874-31.72 25.834 15.573 84.277 0 1 13.868-18.836zm154.086 11.636a13.237 21.96 28.62 0 1 7.673 4.13 13.237 21.96 28.62 0 1-6.176 28.435 13.237 21.96 28.62 0 1-21.287 3.878 13.237 21.96 28.62 0 1 6.175-28.434 13.237 21.96 28.62 0 1 13.616-8.008zM391.362 324.4a13.237 21.96 28.62 0 1 7.672 4.13 13.237 21.96 28.62 0 1-6.176 28.435 13.237 21.96 28.62 0 1-21.287 3.877 13.237 21.96 28.62 0 1 6.177-28.434 13.237 21.96 28.62 0 1 13.615-8.008zm-173.996 13.305a25.834 15.573 84.277 0 1 4.24.945 25.834 15.573 84.277 0 1 12.872 31.72 25.834 15.573 84.277 0 1-18.106 17.894 25.834 15.573 84.277 0 1-12.873-31.72 25.834 15.573 84.277 0 1 13.866-18.84zm212.278 60.87a13.237 21.96 28.62 0 1 7.67 4.13 13.237 21.96 28.62 0 1-6.174 28.434 13.237 21.96 28.62 0 1-21.287 3.876 13.237 21.96 28.62 0 1 6.175-28.434 13.237 21.96 28.62 0 1 13.616-8.008zm-70.332 19.488a13.237 21.96 28.62 0 1 7.67 4.132 13.237 21.96 28.62 0 1-6.174 28.434 13.237 21.96 28.62 0 1-21.287 3.874 13.237 21.96 28.62 0 1 6.176-28.434 13.237 21.96 28.62 0 1 13.616-8.007z" fill="#7d0909" fill-opacity="1"></path></g></svg>

+ 0 - 0
src/assets/icons/damageIcons/ice.svg → src/assets/icons/damageIcons/cold.svg


+ 29 - 0
src/services/data/data.service.ts

@@ -44,6 +44,7 @@ export class DataService {
       attributesData,
       attributesData,
       characterData,
       characterData,
       combatStatsData,
       combatStatsData,
+      companionData,
       consumablesData,
       consumablesData,
       customSpellsData,
       customSpellsData,
       favoriteSpellsData,
       favoriteSpellsData,
@@ -52,9 +53,15 @@ export class DataService {
       hitPointsData,
       hitPointsData,
       imageData,
       imageData,
       kiPointsData,
       kiPointsData,
+      locationsData,
+      mapsData,
       miscellaneousData,
       miscellaneousData,
       moneyData,
       moneyData,
+      notesData,
+      npcsData,
       proficienciesData,
       proficienciesData,
+      questsData,
+      resistancesData,
       skillsData,
       skillsData,
       spellLevel0,
       spellLevel0,
       spellLevel1,
       spellLevel1,
@@ -71,6 +78,8 @@ export class DataService {
       weaponsAndArmorData,
       weaponsAndArmorData,
     ] = currentCharacterData.map((entry: any) => entry.data);
     ] = currentCharacterData.map((entry: any) => entry.data);
 
 
+    console.log(currentCharacterData);
+
     // Character Data
     // Character Data
     this.characterData = characterData;
     this.characterData = characterData;
 
 
@@ -140,6 +149,26 @@ export class DataService {
 
 
   // #endregion
   // #endregion
 
 
+  //////////////////////
+  // FUTURE DATA  //////
+  //////////////////////
+
+  private _companions: any = {};
+  private _notes: any = {};
+  private _quests: any = {};
+  private _npcs: any = {};
+  private _locations: any = {};
+  private _maps: any = {};
+  private _resistances: any = {};
+
+  public get resistances(): any {
+    return this._resistances;
+  }
+
+  public set resistances(resistances: any) {
+    this._resistances = resistances;
+    this.setData('resistances', resistances);
+  }
   // #region # Character and Image DATA
   // #region # Character and Image DATA
 
 
   private _image: any = {
   private _image: any = {

+ 0 - 1
src/services/translator/translator.service.ts

@@ -157,7 +157,6 @@ export class TranslatorService {
     'psychic',
     'psychic',
     'radiant',
     'radiant',
     'acid',
     'acid',
-    'thunder',
   ];
   ];
 
 
   areaTypes: string[] = [
   areaTypes: string[] = [