valtech-components 4.0.532 → 4.0.533
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/organisms/mini-games/bubble-blitz-game.component.mjs +3 -3
- package/esm2022/lib/components/organisms/mini-games/chessimals-challenge-progress.service.mjs +6 -45
- package/esm2022/lib/components/organisms/mini-games/chessimals-engine.mjs +1 -18
- package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +731 -634
- package/esm2022/lib/components/organisms/mini-games/christianity-card.component.mjs +9 -5
- package/esm2022/lib/components/organisms/mini-games/christianity-game.component.mjs +201 -36
- package/esm2022/lib/components/organisms/mini-games/memory-game.component.mjs +3 -3
- package/esm2022/lib/components/organisms/mini-games/mini-games-menu.component.mjs +3 -3
- package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +9 -91
- package/esm2022/lib/components/organisms/mini-games/retro-audio.service.mjs +1 -27
- package/esm2022/lib/components/organisms/mini-games/simon-game.component.mjs +3 -3
- package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/mini-games/public-api.mjs +2 -2
- package/fesm2022/valtech-components-mini-games.mjs +1 -1
- package/fesm2022/valtech-components-mini-games.mjs.map +1 -1
- package/fesm2022/valtech-components.mjs +958 -856
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/user-avatar/user-avatar.component.d.ts +1 -1
- package/lib/components/molecules/features-list/features-list.component.d.ts +1 -1
- package/lib/components/molecules/media-object/media-object.component.d.ts +1 -1
- package/lib/components/molecules/phone-display/phone-display.component.d.ts +1 -1
- package/lib/components/organisms/mini-games/chessimals-challenge-progress.service.d.ts +0 -4
- package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +1 -23
- package/lib/components/organisms/mini-games/christianity-game.component.d.ts +15 -1
- package/lib/components/organisms/mini-games/memory-game.component.d.ts +1 -1
- package/lib/components/organisms/mini-games/retro-audio.service.d.ts +0 -2
- package/lib/components/organisms/mini-games/types.d.ts +0 -2
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/lib/assets/games/README.md +0 -149
- package/src/lib/assets/games/chessimals/brand/README.md +0 -23
- package/src/lib/assets/games/chessimals/brand/chessimals-app-icon-192.png +0 -0
- package/src/lib/assets/games/chessimals/brand/chessimals-app-icon-512.png +0 -0
- package/src/lib/assets/games/chessimals/brand/chessimals-app-icon-capacitor.png +0 -0
- package/src/lib/assets/games/chessimals/brand/chessimals-app-icon.png +0 -0
- package/src/lib/assets/games/chessimals/brand/chessimals-emblem.png +0 -0
- package/src/lib/assets/games/chessimals/brand/chessimals-favicon.png +0 -0
- package/src/lib/assets/games/chessimals/brand/chessimals-wordmark.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/ambusher.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/endgame.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/explorer.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/guardian.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/hunter.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/impulsive.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/jumper.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/locksmith.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/matriarch.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/oracle.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/predator.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/runner.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/sentinel.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/sprinter.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/storm.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/strategist.png +0 -0
- package/src/lib/assets/games/chessimals/powers/README.md +0 -12
- package/src/lib/assets/games/chessimals/powers/bull-power.png +0 -0
- package/src/lib/assets/games/chessimals/powers/eagle-power.png +0 -0
- package/src/lib/assets/games/chessimals/powers/kangaroo-power.png +0 -0
- package/src/lib/assets/games/chessimals/powers/lion-power.png +0 -0
|
@@ -39,7 +39,7 @@ export declare class UserAvatarComponent {
|
|
|
39
39
|
/** Iniciales — 1-2 chars derivados de name (preferred) o email prefix. */
|
|
40
40
|
readonly initials: import("@angular/core").Signal<string>;
|
|
41
41
|
readonly sizeClass: import("@angular/core").Signal<"small" | "xsmall" | "medium" | "large" | "xlarge">;
|
|
42
|
-
readonly shapeClass: import("@angular/core").Signal<"
|
|
42
|
+
readonly shapeClass: import("@angular/core").Signal<"circle" | "square">;
|
|
43
43
|
/** Background — explicito o derivado deterministicamente del user. */
|
|
44
44
|
readonly bgColor: import("@angular/core").Signal<string>;
|
|
45
45
|
readonly ariaLabel: import("@angular/core").Signal<string>;
|
|
@@ -43,7 +43,7 @@ export declare class FeaturesListComponent {
|
|
|
43
43
|
mode: "horizontal" | "vertical";
|
|
44
44
|
gap: "small" | "medium" | "large";
|
|
45
45
|
alignment: "start" | "center";
|
|
46
|
-
imageShape: "
|
|
46
|
+
imageShape: "circle" | "square";
|
|
47
47
|
maxVisible: number;
|
|
48
48
|
showMoreLabel?: string;
|
|
49
49
|
showLessLabel?: string;
|
|
@@ -30,7 +30,7 @@ export declare class MediaObjectComponent {
|
|
|
30
30
|
/** Emitted when the inline link is clicked */
|
|
31
31
|
onLinkClick: EventEmitter<string>;
|
|
32
32
|
/** Merged configuration with defaults */
|
|
33
|
-
config: import("@angular/core").Signal<MediaObjectMetadata & Required<Pick<MediaObjectMetadata, "
|
|
33
|
+
config: import("@angular/core").Signal<MediaObjectMetadata & Required<Pick<MediaObjectMetadata, "rounded" | "circle" | "mediaWidth" | "reversed" | "align">>>;
|
|
34
34
|
getColor(): string;
|
|
35
35
|
handleLinkClick(event: MouseEvent): void;
|
|
36
36
|
static ɵfac: i0.ɵɵFactoryDeclaration<MediaObjectComponent, never>;
|
|
@@ -6,7 +6,7 @@ export declare class PhoneDisplayComponent {
|
|
|
6
6
|
props: PhoneDisplayMetadata;
|
|
7
7
|
onClick: EventEmitter<string>;
|
|
8
8
|
protected rawPhone: import("@angular/core").Signal<string>;
|
|
9
|
-
protected mode: import("@angular/core").Signal<"button" | "
|
|
9
|
+
protected mode: import("@angular/core").Signal<"button" | "link" | "text">;
|
|
10
10
|
protected formatted: import("@angular/core").Signal<string>;
|
|
11
11
|
protected href: import("@angular/core").Signal<string>;
|
|
12
12
|
protected ariaLabel: import("@angular/core").Signal<string>;
|
|
@@ -32,11 +32,7 @@ export declare class ChessimalsChallengeProgressService {
|
|
|
32
32
|
private runsPath;
|
|
33
33
|
private readLocalActiveRun;
|
|
34
34
|
private writeLocalActiveRun;
|
|
35
|
-
private clearLocalActiveRun;
|
|
36
35
|
private localActiveRunKey;
|
|
37
|
-
private newestActiveRun;
|
|
38
|
-
private runProgressScore;
|
|
39
|
-
private runTime;
|
|
40
36
|
private withoutUndefined;
|
|
41
37
|
static ɵfac: i0.ɵɵFactoryDeclaration<ChessimalsChallengeProgressService, never>;
|
|
42
38
|
static ɵprov: i0.ɵɵInjectableDeclaration<ChessimalsChallengeProgressService>;
|
|
@@ -114,7 +114,7 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
114
114
|
readonly botProfiles: ChessimalsBotProfile[];
|
|
115
115
|
readonly challengeLadder: ChessimalsChallengeBot[];
|
|
116
116
|
readonly animals: ChessimalsAnimalView[];
|
|
117
|
-
readonly valtechComponentsVersion = "4.0.
|
|
117
|
+
readonly valtechComponentsVersion = "4.0.533";
|
|
118
118
|
readonly screen: import("@angular/core").WritableSignal<"home" | "challenge" | "path" | "game">;
|
|
119
119
|
readonly selectedBoardSize: import("@angular/core").WritableSignal<ChessimalsBoardSize>;
|
|
120
120
|
readonly selectedLocalMode: import("@angular/core").WritableSignal<ChessimalsLocalMode>;
|
|
@@ -138,7 +138,6 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
138
138
|
readonly isRulesModalOpen: import("@angular/core").WritableSignal<boolean>;
|
|
139
139
|
readonly isSettingsModalOpen: import("@angular/core").WritableSignal<boolean>;
|
|
140
140
|
readonly isAboutModalOpen: import("@angular/core").WritableSignal<boolean>;
|
|
141
|
-
private pendingAboutFeedbackNavigation;
|
|
142
141
|
readonly tutorialMode: import("@angular/core").WritableSignal<boolean>;
|
|
143
142
|
readonly isBoardOrienting: import("@angular/core").WritableSignal<boolean>;
|
|
144
143
|
readonly movingPiece: import("@angular/core").WritableSignal<ChessimalsMovingPieceView>;
|
|
@@ -179,7 +178,6 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
179
178
|
readonly selectedBotProfile: import("@angular/core").Signal<ChessimalsBotProfile>;
|
|
180
179
|
readonly gameBotProfile: import("@angular/core").Signal<ChessimalsBotProfile>;
|
|
181
180
|
readonly activeChallengeBot: import("@angular/core").Signal<ChessimalsChallengeBot>;
|
|
182
|
-
readonly resumableChallengeRun: import("@angular/core").Signal<ChessimalsChallengeRun>;
|
|
183
181
|
set onlineGameId(value: string | null | undefined);
|
|
184
182
|
miniGamesRoute: string;
|
|
185
183
|
projectionMode: boolean;
|
|
@@ -257,17 +255,12 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
257
255
|
private shortUserId;
|
|
258
256
|
private rangeValueToNumber;
|
|
259
257
|
startChallenge(): void;
|
|
260
|
-
requestNewChallenge(): void;
|
|
261
258
|
openChallengeView(): void;
|
|
262
259
|
backToHome(): void;
|
|
263
|
-
private cancelActiveGameplayFeedback;
|
|
264
260
|
private createNewChallengeRun;
|
|
265
|
-
private resetChallengeSessionState;
|
|
266
261
|
resumeChallenge(run?: ChessimalsChallengeRun): void;
|
|
267
262
|
continueChallenge(): void;
|
|
268
263
|
private startChallengeRound;
|
|
269
|
-
private enterChallengeRound;
|
|
270
|
-
private isResumableChallengeRun;
|
|
271
264
|
startGame(): void;
|
|
272
265
|
private handleChallengeRoundFinished;
|
|
273
266
|
private abandonChallengeIfNeeded;
|
|
@@ -279,7 +272,6 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
279
272
|
restartGame(): void;
|
|
280
273
|
exitTutorial(): void;
|
|
281
274
|
resetToModeSetup(): void;
|
|
282
|
-
private returnChallengeToMenu;
|
|
283
275
|
resetToGamesMenu(): void;
|
|
284
276
|
private resetFinishedLocalGameForNextVisit;
|
|
285
277
|
requestRestartGame(): void;
|
|
@@ -297,10 +289,6 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
297
289
|
openPathView(): void;
|
|
298
290
|
openAboutModal(): void;
|
|
299
291
|
closeAboutModal(): void;
|
|
300
|
-
handleAboutModalDismissed(): void;
|
|
301
|
-
handleAboutAction(event: {
|
|
302
|
-
action?: ButtonMetadata;
|
|
303
|
-
}): void;
|
|
304
292
|
setMusicVolume(value: number | RangeValue): void;
|
|
305
293
|
setSfxVolume(value: number | RangeValue): void;
|
|
306
294
|
private tutorialExpectedMove;
|
|
@@ -318,9 +306,6 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
318
306
|
private isPromotionMove;
|
|
319
307
|
private animateMove;
|
|
320
308
|
private applyAnimatedMove;
|
|
321
|
-
private activeGameForRun;
|
|
322
|
-
private persistActiveChallengeGame;
|
|
323
|
-
private cloneChallengeGame;
|
|
324
309
|
private playPowerUnlockSound;
|
|
325
310
|
private queueBotTurnIfNeeded;
|
|
326
311
|
private playBotTurn;
|
|
@@ -412,14 +397,10 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
412
397
|
botProfileDescription(profile: ChessimalsBotProfile): string;
|
|
413
398
|
botProfileTendency(profile: ChessimalsBotProfile): string;
|
|
414
399
|
botProfileAvatar(profileId: ChessimalsBotProfileId): string;
|
|
415
|
-
botProfileAvatarSrc(profileId: ChessimalsBotProfileId): string;
|
|
416
400
|
challengeBotProfile(bot: ChessimalsChallengeBot): ChessimalsBotProfile | undefined;
|
|
417
401
|
challengeOpeningBot(): ChessimalsChallengeBot;
|
|
418
402
|
challengeMenuBot(): ChessimalsChallengeBot;
|
|
419
403
|
challengeMenuRoundLabel(): string;
|
|
420
|
-
challengeMenuLivesLabel(): string;
|
|
421
|
-
challengeMenuClearedRound(): number;
|
|
422
|
-
private challengeMenuRun;
|
|
423
404
|
challengeBotName(bot: ChessimalsChallengeBot): string;
|
|
424
405
|
challengeBotDifficultyLabel(bot: ChessimalsChallengeBot): string;
|
|
425
406
|
challengeBotStyleLine(bot: ChessimalsChallengeBot): string;
|
|
@@ -431,7 +412,6 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
431
412
|
showChallengeIntro(): void;
|
|
432
413
|
dismissChallengeIntro(): void;
|
|
433
414
|
challengeLiveAvatar(): string;
|
|
434
|
-
challengeLiveAvatarSrc(): string;
|
|
435
415
|
challengeLiveRivalName(): string;
|
|
436
416
|
challengeLiveRivalLine(): string;
|
|
437
417
|
challengeLiveStreakLabel(): string;
|
|
@@ -442,12 +422,10 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
442
422
|
challengeOutcomeTitle(): string;
|
|
443
423
|
challengeOutcomeBody(): string;
|
|
444
424
|
challengeSummaryAvatar(): string;
|
|
445
|
-
challengeSummaryAvatarSrc(): string;
|
|
446
425
|
challengeRoundStageLabel(): string;
|
|
447
426
|
challengeRivalVoiceLabel(): string;
|
|
448
427
|
challengeRivalVoiceTitle(): string;
|
|
449
428
|
challengeRivalVoiceBody(): string;
|
|
450
|
-
private challengeVoiceText;
|
|
451
429
|
challengeNextRivalLabel(): string;
|
|
452
430
|
challengeContinueLabel(): string;
|
|
453
431
|
challengeNextRivalHint(): string;
|
|
@@ -10,7 +10,7 @@ interface ChristianityCardPreview {
|
|
|
10
10
|
meta: string;
|
|
11
11
|
body: string;
|
|
12
12
|
cardId?: string;
|
|
13
|
-
source?: 'hand' | 'board' | 'pile' | 'history' | 'offerings' | 'gallery' | 'leader-choice';
|
|
13
|
+
source?: 'hand' | 'board' | 'pile' | 'history' | 'offerings' | 'place' | 'gallery' | 'leader-choice';
|
|
14
14
|
seat?: ChristianitySeat;
|
|
15
15
|
offeringInstanceId?: string;
|
|
16
16
|
}
|
|
@@ -104,6 +104,7 @@ export declare class ChristianityGameComponent {
|
|
|
104
104
|
protected readonly draggingAttackerInstanceId: import("@angular/core").WritableSignal<string>;
|
|
105
105
|
protected readonly historyPulse: import("@angular/core").WritableSignal<boolean>;
|
|
106
106
|
protected readonly showHistory: import("@angular/core").WritableSignal<boolean>;
|
|
107
|
+
protected readonly showPlace: import("@angular/core").WritableSignal<boolean>;
|
|
107
108
|
protected readonly showGallery: import("@angular/core").WritableSignal<boolean>;
|
|
108
109
|
protected readonly offeringsSeat: import("@angular/core").WritableSignal<ChristianitySeat>;
|
|
109
110
|
protected readonly impactEvents: import("@angular/core").WritableSignal<ChristianityImpactEvent[]>;
|
|
@@ -144,6 +145,12 @@ export declare class ChristianityGameComponent {
|
|
|
144
145
|
protected readonly previewCarouselItems: import("@angular/core").Signal<({
|
|
145
146
|
kind: 'history';
|
|
146
147
|
cardId: string;
|
|
148
|
+
} | {
|
|
149
|
+
kind: 'hand';
|
|
150
|
+
cardId: string;
|
|
151
|
+
} | {
|
|
152
|
+
kind: 'place';
|
|
153
|
+
cardId: string;
|
|
147
154
|
} | {
|
|
148
155
|
kind: 'offering';
|
|
149
156
|
offering: ChristianityOfferingInstance;
|
|
@@ -222,8 +229,12 @@ export declare class ChristianityGameComponent {
|
|
|
222
229
|
protected attackTargetDropIds(): string[];
|
|
223
230
|
protected opponentTargetDropId(card: ChristianityCharacterInstance): string;
|
|
224
231
|
protected topHistoryCard(): ChristianityCardDefinition | null;
|
|
232
|
+
protected historyStack(): string[];
|
|
225
233
|
protected topOffering(seat: ChristianitySeat): ChristianityOfferingInstance | null;
|
|
234
|
+
protected offeringStack(seat: ChristianitySeat): ChristianityOfferingInstance[];
|
|
226
235
|
protected activePlaceCard(): ChristianityCardDefinition | null;
|
|
236
|
+
protected placeStack(): string[];
|
|
237
|
+
protected zoneStackTransform(index: number, total: number): string;
|
|
227
238
|
protected isOpponentLeaderTarget(): boolean;
|
|
228
239
|
protected isOpponentCharacterTarget(card: ChristianityCharacterInstance): boolean;
|
|
229
240
|
protected hiddenHandCards(count: number): unknown[];
|
|
@@ -300,7 +311,9 @@ export declare class ChristianityGameComponent {
|
|
|
300
311
|
protected closeInfo(): void;
|
|
301
312
|
protected openOfferings(seat: ChristianitySeat): void;
|
|
302
313
|
protected openHistory(): void;
|
|
314
|
+
protected openPlace(): void;
|
|
303
315
|
protected closeHistory(): void;
|
|
316
|
+
protected closePlace(): void;
|
|
304
317
|
protected closeOfferings(): void;
|
|
305
318
|
protected openGallery(): void;
|
|
306
319
|
protected closeGallery(): void;
|
|
@@ -345,6 +358,7 @@ export declare class ChristianityGameComponent {
|
|
|
345
358
|
private canUsePreviewAbility;
|
|
346
359
|
protected inspectDeck(): void;
|
|
347
360
|
protected inspectPlaceZone(): void;
|
|
361
|
+
protected inspectPlaceCard(cardId: string): void;
|
|
348
362
|
protected inspectHowToPlay(): void;
|
|
349
363
|
protected inspectHandCard(cardId: string, fromHand?: boolean): void;
|
|
350
364
|
protected inspectGalleryCard(cardId: string): void;
|
|
@@ -58,7 +58,7 @@ export declare class MemoryGameComponent implements OnDestroy {
|
|
|
58
58
|
readonly playerName: import("@angular/core").Signal<string>;
|
|
59
59
|
readonly activePlayerAvatar: import("@angular/core").Signal<string>;
|
|
60
60
|
readonly activePlayerColor: import("@angular/core").Signal<string>;
|
|
61
|
-
readonly timeLabel: import("@angular/core").Signal<"
|
|
61
|
+
readonly timeLabel: import("@angular/core").Signal<"time" | "timeLeft">;
|
|
62
62
|
readonly formattedTime: import("@angular/core").Signal<string>;
|
|
63
63
|
readonly resultMedal: import("@angular/core").Signal<MemoryMedal>;
|
|
64
64
|
readonly resultSeconds: import("@angular/core").Signal<number>;
|
|
@@ -10,7 +10,6 @@ export declare class RetroAudioService {
|
|
|
10
10
|
private pausedMelody?;
|
|
11
11
|
private suspendTimer?;
|
|
12
12
|
private readonly activeSamples;
|
|
13
|
-
private readonly activeBufferSources;
|
|
14
13
|
private sampleMusic?;
|
|
15
14
|
private sampleMusicConfig?;
|
|
16
15
|
private sampleMusicSource?;
|
|
@@ -92,7 +91,6 @@ export declare class RetroAudioService {
|
|
|
92
91
|
private sampleMusicVolume;
|
|
93
92
|
private sampleVolume;
|
|
94
93
|
private applyActiveSampleVolumes;
|
|
95
|
-
private stopActiveSamples;
|
|
96
94
|
private connectSampleMusic;
|
|
97
95
|
private disconnectSampleMusicGraph;
|
|
98
96
|
private tone;
|
|
@@ -58,7 +58,6 @@ export interface ChessimalsBotProfile {
|
|
|
58
58
|
id: ChessimalsBotProfileId;
|
|
59
59
|
difficulty: ChessimalsBotDifficulty;
|
|
60
60
|
avatar: string;
|
|
61
|
-
avatarSrc?: string;
|
|
62
61
|
labelKey: string;
|
|
63
62
|
descriptionKey: string;
|
|
64
63
|
}
|
|
@@ -108,7 +107,6 @@ export interface ChessimalsChallengeRun {
|
|
|
108
107
|
currentStreak: number;
|
|
109
108
|
botLadder: string[];
|
|
110
109
|
roundResults: ChessimalsChallengeRoundResult[];
|
|
111
|
-
activeGame?: ChessimalsGameState;
|
|
112
110
|
startedAt: string;
|
|
113
111
|
lastEventAt?: string;
|
|
114
112
|
updatedAt: string;
|
package/lib/version.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
# Game Art Assets
|
|
2
|
-
|
|
3
|
-
Guia breve para generar, limpiar y guardar arte raster para mini juegos.
|
|
4
|
-
|
|
5
|
-
## Cuando usar este flujo
|
|
6
|
-
|
|
7
|
-
Usar `image_gen` para assets visuales de juego que deban sentirse hechos a medida:
|
|
8
|
-
|
|
9
|
-
- avatares de rivales o jugadores;
|
|
10
|
-
- cartas, fichas, piezas, power-ups o insignias;
|
|
11
|
-
- fondos, escenas, tableros decorativos o banners internos;
|
|
12
|
-
- sprites o sprite sheets simples.
|
|
13
|
-
|
|
14
|
-
No usar este flujo para iconos que ya pertenezcan al sistema visual, SVGs deterministas, diagramas simples o UI que pueda resolverse mejor con CSS/HTML.
|
|
15
|
-
|
|
16
|
-
## Flujo recomendado
|
|
17
|
-
|
|
18
|
-
1. Generar el asset con `image_gen`.
|
|
19
|
-
2. Si se necesita transparencia, pedir fondo chroma plano.
|
|
20
|
-
3. Copiar el resultado desde `$CODEX_HOME/generated_images/...` al workspace.
|
|
21
|
-
4. Remover chroma localmente.
|
|
22
|
-
5. Recortar, centrar y normalizar tamanos.
|
|
23
|
-
6. Revisar sobre fondo claro y oscuro.
|
|
24
|
-
7. Guardar solo los assets finales usados por la app.
|
|
25
|
-
8. Conectar el asset con fallback textual o emoji si aplica.
|
|
26
|
-
|
|
27
|
-
## Prompt base para transparencia
|
|
28
|
-
|
|
29
|
-
```text
|
|
30
|
-
Create the requested game asset on a perfectly flat solid #00ff00 chroma-key background for background removal.
|
|
31
|
-
The background must be one uniform color with no shadows, gradients, texture, reflections, floor plane, or lighting variation.
|
|
32
|
-
Keep the subject fully separated from the background with crisp edges and generous padding.
|
|
33
|
-
Do not use #00ff00 anywhere in the subject.
|
|
34
|
-
No cast shadow, no contact shadow, no reflection, no watermark, and no text unless explicitly requested.
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
Para sujetos verdes, usar otro chroma improbable, por ejemplo `#ff00ff`.
|
|
38
|
-
|
|
39
|
-
## Remover chroma
|
|
40
|
-
|
|
41
|
-
Preferir el helper instalado por Codex:
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
python "${CODEX_HOME:-$HOME/.codex}/skills/.system/imagegen/scripts/remove_chroma_key.py" \
|
|
45
|
-
--input <source.png> \
|
|
46
|
-
--out <final.png> \
|
|
47
|
-
--auto-key border \
|
|
48
|
-
--soft-matte \
|
|
49
|
-
--transparent-threshold 12 \
|
|
50
|
-
--opaque-threshold 220 \
|
|
51
|
-
--despill
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
Si el borde queda con halo, reintentar una vez con:
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
python "${CODEX_HOME:-$HOME/.codex}/skills/.system/imagegen/scripts/remove_chroma_key.py" \
|
|
58
|
-
--input <source.png> \
|
|
59
|
-
--out <final.png> \
|
|
60
|
-
--auto-key border \
|
|
61
|
-
--soft-matte \
|
|
62
|
-
--transparent-threshold 12 \
|
|
63
|
-
--opaque-threshold 220 \
|
|
64
|
-
--edge-contract 1 \
|
|
65
|
-
--despill
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Sprite sheets
|
|
69
|
-
|
|
70
|
-
Para varios personajes, suele funcionar mejor pedir una sprite sheet consistente:
|
|
71
|
-
|
|
72
|
-
```text
|
|
73
|
-
Create 8 cute pixel art rival avatar portraits in a single 4x2 sprite sheet.
|
|
74
|
-
Each cell must have the same size, consistent outline thickness, same lighting and generous padding.
|
|
75
|
-
No text, no letters, no numbers, no watermark.
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
Despues recortar cada celda, remover chroma, centrar en un canvas cuadrado y exportar cada item con nombre semantico:
|
|
79
|
-
|
|
80
|
-
```text
|
|
81
|
-
explorer.png
|
|
82
|
-
guardian.png
|
|
83
|
-
hunter.png
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## Ubicacion
|
|
87
|
-
|
|
88
|
-
Guardar assets finales en:
|
|
89
|
-
|
|
90
|
-
```text
|
|
91
|
-
frontend/valtech-components/src/lib/assets/games/<game-id>/
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Ejemplo:
|
|
95
|
-
|
|
96
|
-
```text
|
|
97
|
-
frontend/valtech-components/src/lib/assets/games/chessimals/challenge-avatars/explorer.png
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
Para marcas oficiales de un juego, usar un subdirectorio `brand`:
|
|
101
|
-
|
|
102
|
-
```text
|
|
103
|
-
frontend/valtech-components/src/lib/assets/games/chessimals/brand/chessimals-emblem.png
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
No dejar archivos fuente temporales, hojas generadas o variantes descartadas en el repo salvo que sean necesarios para mantenimiento.
|
|
107
|
-
|
|
108
|
-
## Validacion visual
|
|
109
|
-
|
|
110
|
-
Antes de conectar el asset:
|
|
111
|
-
|
|
112
|
-
- revisar esquinas transparentes;
|
|
113
|
-
- revisar que no exista halo del chroma;
|
|
114
|
-
- probar sobre fondo claro y oscuro;
|
|
115
|
-
- verificar que se lea bien al tamano real de UI;
|
|
116
|
-
- comprobar que no se pueda arrastrar desde la interfaz (`draggable="false"` y CSS anti-drag si aplica);
|
|
117
|
-
- mantener `alt=""` cuando el asset sea decorativo y ya exista texto visible con el nombre.
|
|
118
|
-
|
|
119
|
-
## Conexion en Angular
|
|
120
|
-
|
|
121
|
-
Preferir rutas relativas servidas como assets:
|
|
122
|
-
|
|
123
|
-
```ts
|
|
124
|
-
avatarSrc: 'assets/games/chessimals/challenge-avatars/explorer.png'
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
En template, mantener fallback:
|
|
128
|
-
|
|
129
|
-
```html
|
|
130
|
-
@if (avatarSrc; as src) {
|
|
131
|
-
<img [src]="src" alt="" draggable="false" />
|
|
132
|
-
} @else {
|
|
133
|
-
{{ fallbackAvatar }}
|
|
134
|
-
}
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
## Caso de referencia
|
|
138
|
-
|
|
139
|
-
Chessimals usa este flujo para los avatares pixel art del modo Desafio:
|
|
140
|
-
|
|
141
|
-
```text
|
|
142
|
-
frontend/valtech-components/src/lib/assets/games/chessimals/challenge-avatars/
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
Documentacion ampliada:
|
|
146
|
-
|
|
147
|
-
```text
|
|
148
|
-
docs/frontend/mini-games-art-assets.md
|
|
149
|
-
```
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# Chessimals Brand Assets
|
|
2
|
-
|
|
3
|
-
Assets oficiales de marca para Chessimals.
|
|
4
|
-
|
|
5
|
-
## Archivos
|
|
6
|
-
|
|
7
|
-
- `chessimals-wordmark.png`: palabra CHESSIMALS transparente. Usar cuando ya exista otro elemento visual fuerte cerca.
|
|
8
|
-
- `chessimals-emblem.png`: escudo transparente con las cuatro caritas. Usar como icono, card de selector, about o marca compacta.
|
|
9
|
-
- `chessimals-app-icon.png`: icono maestro 1024x1024 para app stores, PWA o superficies grandes.
|
|
10
|
-
- `chessimals-app-icon-capacitor.png`: fuente 1024x1024 RGB, opaca y sin borde transparente para generar assets con Capacitor.
|
|
11
|
-
- `chessimals-app-icon-512.png`: icono 512x512 para manifiestos PWA.
|
|
12
|
-
- `chessimals-app-icon-192.png`: icono 192x192 para manifiestos PWA.
|
|
13
|
-
- `chessimals-favicon.png`: favicon PNG 64x64.
|
|
14
|
-
|
|
15
|
-
## Reglas
|
|
16
|
-
|
|
17
|
-
- No volver a usar `logo.jpg` o `menu-logo.jpg` para superficies nuevas.
|
|
18
|
-
- Componer emblema y wordmark en HTML/CSS cuando se necesite una portada o splash.
|
|
19
|
-
- Usar `chessimals-app-icon.png` como fuente maestra si se necesitan nuevos tamanos de icono.
|
|
20
|
-
- Usar `chessimals-app-icon-capacitor.png` para `@capacitor/assets`; no usar PNGs transparentes como fuente de iconos nativos.
|
|
21
|
-
- Mantener `alt=""` cuando el logo acompane texto visible de Chessimals.
|
|
22
|
-
- Usar `draggable="false"` o CSS anti-drag si aparece en superficies interactivas.
|
|
23
|
-
- Si se genera una nueva version, preservar estos nombres solo cuando se reemplace oficialmente el asset.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Chessimals Power Assets
|
|
2
|
-
|
|
3
|
-
Official UI assets for the animal power cards.
|
|
4
|
-
|
|
5
|
-
- `eagle-power.png`: diagonal flight power.
|
|
6
|
-
- `bull-power.png`: straight charge power.
|
|
7
|
-
- `kangaroo-power.png`: jump power.
|
|
8
|
-
- `lion-power.png`: wide board power.
|
|
9
|
-
|
|
10
|
-
Each asset is a transparent 512x512 PNG generated from the current Chessimals
|
|
11
|
-
brand direction. Keep new power assets text-free so labels can remain localized
|
|
12
|
-
in the Angular UI.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|