Fraser commited on
Commit
e3f93ae
·
1 Parent(s): cf131a8
src/lib/components/Piclets/AbilityDisplay.svelte CHANGED
@@ -1,13 +1,8 @@
1
  <script lang="ts">
2
- import type { BattleEffect, AbilityTrigger } from '$lib/types';
3
 
4
  interface Props {
5
- ability: {
6
- name: string;
7
- description: string;
8
- effects?: BattleEffect[];
9
- triggers?: AbilityTrigger[];
10
- };
11
  expanded?: boolean;
12
  }
13
 
@@ -71,27 +66,48 @@
71
  function formatEffectDescription(effect: BattleEffect): string {
72
  let desc = effect.type.charAt(0).toUpperCase() + effect.type.slice(1);
73
 
74
- if (effect.target !== 'self') {
 
75
  desc += ` (${effect.target})`;
76
  }
77
 
78
- if (effect.condition) {
 
79
  desc += ` when ${effect.condition}`;
80
  }
81
 
82
- if (effect.amount) {
83
- desc += ` - ${effect.amount}`;
84
- }
85
-
86
- if (effect.stats) {
87
- const statChanges = Object.entries(effect.stats).map(([stat, change]) =>
88
- `${stat}: ${change}`
89
- ).join(', ');
90
- desc += ` (${statChanges})`;
91
- }
92
-
93
- if (effect.status) {
94
- desc += ` - ${effect.status}`;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  }
96
 
97
  return desc;
 
1
  <script lang="ts">
2
+ import type { SpecialAbility, BattleEffect, Trigger } from '$lib/battle-engine/types';
3
 
4
  interface Props {
5
+ ability: SpecialAbility;
 
 
 
 
 
6
  expanded?: boolean;
7
  }
8
 
 
66
  function formatEffectDescription(effect: BattleEffect): string {
67
  let desc = effect.type.charAt(0).toUpperCase() + effect.type.slice(1);
68
 
69
+ // Handle target (most effects have target, but not all)
70
+ if ('target' in effect && effect.target !== 'self') {
71
  desc += ` (${effect.target})`;
72
  }
73
 
74
+ // Handle condition (common to many effects)
75
+ if ('condition' in effect && effect.condition) {
76
  desc += ` when ${effect.condition}`;
77
  }
78
 
79
+ // Handle type-specific properties
80
+ switch (effect.type) {
81
+ case 'damage':
82
+ if (effect.amount) desc += ` - ${effect.amount}`;
83
+ if (effect.formula) desc += ` (${effect.formula})`;
84
+ break;
85
+ case 'modifyStats':
86
+ const statChanges = Object.entries(effect.stats).map(([stat, change]) =>
87
+ `${stat}: ${change}`
88
+ ).join(', ');
89
+ desc += ` (${statChanges})`;
90
+ break;
91
+ case 'applyStatus':
92
+ desc += ` - ${effect.status}`;
93
+ if (effect.chance && effect.chance < 100) desc += ` (${effect.chance}%)`;
94
+ break;
95
+ case 'heal':
96
+ if (effect.amount) desc += ` - ${effect.amount}`;
97
+ break;
98
+ case 'manipulatePP':
99
+ desc += ` - ${effect.action}`;
100
+ if (effect.amount) desc += ` ${effect.amount}`;
101
+ break;
102
+ case 'counter':
103
+ desc += ` - ${effect.counterType} (${effect.strength})`;
104
+ break;
105
+ case 'removeStatus':
106
+ desc += ` - ${effect.status}`;
107
+ break;
108
+ case 'mechanicOverride':
109
+ desc += ` - ${effect.mechanic}`;
110
+ break;
111
  }
112
 
113
  return desc;
src/lib/components/Piclets/MoveDisplay.svelte CHANGED
@@ -1,10 +1,10 @@
1
  <script lang="ts">
2
  import type { BattleMove as DBBattleMove } from '$lib/db/schema';
3
- import type { BattleMove, BattleEffect } from '$lib/types';
4
 
5
  interface Props {
6
  move: DBBattleMove;
7
- enhancedMove?: { move: BattleMove; currentPp: number };
8
  expanded?: boolean;
9
  showPP?: boolean;
10
  }
@@ -84,27 +84,48 @@
84
  function formatEffectDescription(effect: BattleEffect): string {
85
  let desc = effect.type.charAt(0).toUpperCase() + effect.type.slice(1);
86
 
87
- if (effect.target !== 'self') {
 
88
  desc += ` (${effect.target})`;
89
  }
90
 
91
- if (effect.condition) {
 
92
  desc += ` when ${effect.condition}`;
93
  }
94
 
95
- if (effect.amount) {
96
- desc += ` - ${effect.amount}`;
97
- }
98
-
99
- if (effect.stats) {
100
- const statChanges = Object.entries(effect.stats).map(([stat, change]) =>
101
- `${stat}: ${change}`
102
- ).join(', ');
103
- desc += ` (${statChanges})`;
104
- }
105
-
106
- if (effect.status) {
107
- desc += ` - ${effect.status}`;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  }
109
 
110
  return desc;
 
1
  <script lang="ts">
2
  import type { BattleMove as DBBattleMove } from '$lib/db/schema';
3
+ import type { Move, BattleEffect } from '$lib/battle-engine/types';
4
 
5
  interface Props {
6
  move: DBBattleMove;
7
+ enhancedMove?: { move: Move; currentPp: number };
8
  expanded?: boolean;
9
  showPP?: boolean;
10
  }
 
84
  function formatEffectDescription(effect: BattleEffect): string {
85
  let desc = effect.type.charAt(0).toUpperCase() + effect.type.slice(1);
86
 
87
+ // Handle target (most effects have target, but not all)
88
+ if ('target' in effect && effect.target !== 'self') {
89
  desc += ` (${effect.target})`;
90
  }
91
 
92
+ // Handle condition (common to many effects)
93
+ if ('condition' in effect && effect.condition) {
94
  desc += ` when ${effect.condition}`;
95
  }
96
 
97
+ // Handle type-specific properties
98
+ switch (effect.type) {
99
+ case 'damage':
100
+ if (effect.amount) desc += ` - ${effect.amount}`;
101
+ if (effect.formula) desc += ` (${effect.formula})`;
102
+ break;
103
+ case 'modifyStats':
104
+ const statChanges = Object.entries(effect.stats).map(([stat, change]) =>
105
+ `${stat}: ${change}`
106
+ ).join(', ');
107
+ desc += ` (${statChanges})`;
108
+ break;
109
+ case 'applyStatus':
110
+ desc += ` - ${effect.status}`;
111
+ if (effect.chance && effect.chance < 100) desc += ` (${effect.chance}%)`;
112
+ break;
113
+ case 'heal':
114
+ if (effect.amount) desc += ` - ${effect.amount}`;
115
+ break;
116
+ case 'manipulatePP':
117
+ desc += ` - ${effect.action}`;
118
+ if (effect.amount) desc += ` ${effect.amount}`;
119
+ break;
120
+ case 'counter':
121
+ desc += ` - ${effect.counterType} (${effect.strength})`;
122
+ break;
123
+ case 'removeStatus':
124
+ desc += ` - ${effect.status}`;
125
+ break;
126
+ case 'mechanicOverride':
127
+ desc += ` - ${effect.mechanic}`;
128
+ break;
129
  }
130
 
131
  return desc;
src/lib/utils/battleConversion.ts CHANGED
@@ -49,8 +49,8 @@ export function picletInstanceToBattleDefinition(instance: PicletInstance): Picl
49
  name: instance.nickname || instance.typeId,
50
  description: instance.concept,
51
  tier,
52
- primaryType: convertPicletTypeToType(instance.primaryType),
53
- secondaryType: instance.secondaryType ? convertPicletTypeToType(instance.secondaryType) : undefined,
54
  baseStats,
55
  nature: instance.nature,
56
  specialAbility,
@@ -85,7 +85,7 @@ function convertBattleMoveToMove(battleMove: BattleMove, primaryType: PicletType
85
 
86
  return {
87
  name: battleMove.name,
88
- type: convertAttackTypeToType(battleMove.type),
89
  power: battleMove.power,
90
  accuracy: battleMove.accuracy,
91
  pp: battleMove.pp,
@@ -95,51 +95,6 @@ function convertBattleMoveToMove(battleMove: BattleMove, primaryType: PicletType
95
  };
96
  }
97
 
98
- /**
99
- * Convert PicletType to battle engine type
100
- */
101
- function convertPicletTypeToType(picletType: PicletType): 'beast' | 'bug' | 'aquatic' | 'flora' | 'mineral' | 'space' | 'machina' | 'structure' | 'culture' | 'cuisine' {
102
- const typeMap: Record<PicletType, any> = {
103
- [PicletType.BEAST]: 'beast',
104
- [PicletType.BUG]: 'bug',
105
- [PicletType.AQUATIC]: 'aquatic',
106
- [PicletType.FLORA]: 'flora',
107
- [PicletType.MINERAL]: 'mineral',
108
- [PicletType.SPACE]: 'space',
109
- [PicletType.MACHINA]: 'machina',
110
- [PicletType.STRUCTURE]: 'structure',
111
- [PicletType.CULTURE]: 'culture',
112
- [PicletType.CUISINE]: 'cuisine'
113
- };
114
-
115
- return typeMap[picletType] || 'beast';
116
- }
117
-
118
- /**
119
- * Convert AttackType to battle engine type
120
- */
121
- function convertAttackTypeToType(attackType: AttackType): 'beast' | 'bug' | 'aquatic' | 'flora' | 'mineral' | 'space' | 'machina' | 'structure' | 'culture' | 'cuisine' | 'normal' {
122
- // AttackType and PicletType should align, but handle the NORMAL case
123
- if (attackType === AttackType.NORMAL) {
124
- return 'normal';
125
- }
126
-
127
- // Map other attack types to piclet types
128
- const typeMap: Record<string, any> = {
129
- 'beast': 'beast',
130
- 'bug': 'bug',
131
- 'aquatic': 'aquatic',
132
- 'flora': 'flora',
133
- 'mineral': 'mineral',
134
- 'space': 'space',
135
- 'machina': 'machina',
136
- 'structure': 'structure',
137
- 'culture': 'culture',
138
- 'cuisine': 'cuisine'
139
- };
140
-
141
- return typeMap[attackType.toString()] || 'normal';
142
- }
143
 
144
  /**
145
  * Convert battle engine BattlePiclet back to PicletInstance for state updates
 
49
  name: instance.nickname || instance.typeId,
50
  description: instance.concept,
51
  tier,
52
+ primaryType: instance.primaryType,
53
+ secondaryType: instance.secondaryType,
54
  baseStats,
55
  nature: instance.nature,
56
  specialAbility,
 
85
 
86
  return {
87
  name: battleMove.name,
88
+ type: battleMove.type,
89
  power: battleMove.power,
90
  accuracy: battleMove.accuracy,
91
  pp: battleMove.pp,
 
95
  };
96
  }
97
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
 
99
  /**
100
  * Convert battle engine BattlePiclet back to PicletInstance for state updates