Add new character classes to the card battle game. Covers class data definition, initial deck configuration, and class-specific mechanic implementation. Use for "add new class", "implement character" requests. 使用時: 「character-class-creatorを使用します」
Workflow for adding new character classes to the game.
Confirm class design
Update the following files
src/domain/characters/type/baseTypes.ts - Add to CharacterClass typesrc/domain/cards/data/{className}Cards.ts - Create class-specific cardssrc/domain/battles/data/initialDeckConfig.ts - Initial deck setupsrc/domain/characters/player/data/CharacterClassData.ts - Class infosrc/domain/battles/managements/useBattleOrchestrator.ts - getCardDataByClass(If unique mechanic exists)
src/domain/characters/player/logic/{mechanic}System.tssrc/domain/characters/type/classAbilityTypes.ts// src/domain/characters/type/baseTypes.ts
export type CharacterClass = "swordsman" | "mage" | "summoner" | "newclass";
// src/domain/cards/data/newclassCards.ts
import type { Card } from "../type/cardType";
export const NEWCLASS_CARDS: Record<string, Card> = {
"newclass_basic_attack": {
id: "newclass_basic_attack",
cardTypeId: "newclass_basic_attack",
name: "基本攻撃",
description: "敵に10ダメージを与える",
characterClass: "newclass", // Also update CardCharacterClass type
cost: 1,
category: "atk",
rarity: "common",
useCount: 0,
masteryLevel: 0,
gemLevel: 0,
tags: ["attack"],
baseDamage: 10,
},
// ... more cards (minimum 15 for starter deck)
};
// src/domain/battles/data/initialDeckConfig.ts
export const INITIAL_DECK_BY_CLASS: Record<CharacterClass, Record<string, number>> = {
// ... existing classes
newclass: {
"newclass_basic_attack": 4,
"newclass_basic_defend": 4,
// ... total ~15 cards
},
};
// src/domain/characters/player/data/CharacterClassData.ts
// Import card data
import { NEWCLASS_CARDS } from "../../../cards/data/newclassCards";
// Add starter deck creator
function createNewclassStarterDeck(): Card[] {
return createStarterDeckFromCounts(
INITIAL_DECK_BY_CLASS.newclass,
NEWCLASS_CARDS
);
}
// Add to CHARACTER_CLASS_DATA
export const CHARACTER_CLASS_DATA: Record<CharacterClass, CharacterClassInfo> = {
// ... existing classes
newclass: {
class: "newclass",
name: "NewClass",
japaneseName: "新クラス",
description: "クラスの説明文...",
uniqueMechanic: "Mechanic Name",
mechanicDescription: "メカニクスの説明...",
stats: {
hp: 80,
ap: 25,
speed: 50,
cardActEnergy: 3,
},
starterDeck: createNewclassStarterDeck(),
isAvailable: true, // false to hide during development
themeColor: "#8b5cf6",
icon: "icon-name",
},
};
// src/domain/battles/managements/useBattleOrchestrator.ts
function getCardDataByClass(classType: CharacterClass): Record<string, Card> {
switch (classType) {
// ... existing cases
case "newclass":
return NEWCLASS_CARDS;
default:
return SWORDSMAN_CARDS;
}
}
| Class | Mechanic | System File |
|---|---|---|
| Swordsman | Sword Energy | swordEnergySystem.ts |
| Mage | Elemental Resonance | elementalSystem.ts |
| Summoner | Summon System | summonSystem.ts |
| Stat | Low | Medium | High |
|---|---|---|---|
| HP | 60 | 80 | 100 |
| AP | 20 | 25 | 30 |
| Speed | 40 | 50 | 60 |
| cardActEnergy | 3 | 3 | 3 |
deck.ts and deckReducter.ts (immutable)CardCharacterClass type also needs updatingisAvailable: false to hide during testingCharacter design: .claude/docs/card_document/NEW_CHARACTER_SYSTEM_DESIGN.md