File size: 34,183 Bytes
48dad4f
 
 
4257ecf
 
 
 
48dad4f
 
4257ecf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
---
license: mit
---


# crocobras

![Crocobras](http://www.image-heberg.fr/files/1770022577917744739.jpg)

Le cœur logique du jeu "Le bras d'un mec", un jeu où vous combattez des crocodiles pour protéger un bras !
Ce package Node.js fournit toutes les règles, la logique, et la gestion d'état nécessaires pour construire votre propre version du jeu. **Il ne contient PAS de graphiques, de sons ou de logique d'interface utilisateur (UI)**. C'est à vous, le développeur, de construire l'expérience visuelle et sonore !

Développé par [nekoclem](https://github.com/nekoclem).

## Fonctionnalités principales

* Gestion des niveaux et de la progression.
* Calcul du nombre de crocodiles par niveau.
* Gestion de la vie du bras et du "Game Over".
* Détection des événements clés du jeu (coup de feu, crocodile tué, bras mangé, changement de niveau).
* Options de personnalisation pour adapter le jeu à votre vision.

### Fonctionnalités v1.1.0
* **Système de power-ups personnalisés** avec `crocopow`
* **Système de boosts temporaires** avec `crocoboost`
* **Système de points de vie pour crocodiles** avec `crocolife`
* **Système d'armure/force des crocodiles** avec `crocoarmure`
* **Personnalisation de la vitesse des crocodiles** avec `crocorap`
* **Système de danse/esquive** avec `crocopop`
* **Explosions de crocodiles** avec `crocoexplose`

### Fonctionnalités v1.2.0
* **Système de combos** avec `crocom` pour des effets spéciaux en chaîne
* **Modes de jeux personnalisés** avec `crocomode` pour créer des défis uniques
* **Armures spécialisées** avec `crocorpes` aux propriétés avancées
* **Système de dialogues** avec `crocodial` pour des interactions narratives
* **Missions et quêtes** avec `crocomise` avec récompenses personnalisées
* **Système économique complet** avec `crocomons` (monnaie et boutique)
* **Environnements dynamiques** avec `crocodym` pour des changements de terrain
* **Personnalisation d'assets** avec `crocopay` pour les apparences
* **IA avancée des crocodiles** avec `crocia` pour des comportements intelligents
* **Collectibles et succès** avec `crocohab` pour la progression
* **Messages créatifs** avec `crocotive` pour des dialogues immersifs
* **Personnages personnalisés** avec `croconage` pour enrichir l'univers

### 🆕 Nouveautés v1.3.0
* **Quêtes dynamiques adaptatives** avec `crocojom` - Missions qui s'adaptent aux choix des joueurs
* **Système climatique interactif** avec `crocera` - Climat qui affecte le comportement des crocodiles et du bras
* **Événements spéciaux conditionnels** avec `crocogiw` - Crocodiles/événements rares selon des conditions
* **IA avancée avec prise de décision** avec `crocorin` - Comportements IA personnalisés et adaptatifs
* **Analyse de données de jeu** avec `crocomp` - Système d'analytics personnalisé
* **Fonctions JavaScript personnalisées** avec `crocotina` - Créez vos propres fonctions intégrées
* **Mini-jeux de quiz créatifs** avec `crocofaf` - Quiz pour gagner points/monnaie/kills
* **Messages temporaires personnalisés** avec `crocojup` - Notifications temporaires configurables
* **Power-ups temporaires avancés** avec `crocodae` - System de buffs temporaires personnalisés
* **Logs personnalisés créatifs** avec `crocolog` - Système de logging avec formes et couleurs
* **Clonage et invocation de crocodiles** avec `crocojust` - Duplication et invocation de crocodiles
* **Crocodiles rares spéciaux** avec `crocorare` - Crocodiles légendaires avec comportements uniques
* **Tutoriels interactifs** avec `crocomd` - Mini-tutoriels de démarrage par dialogues
* **Personnalisation comportementale** avec `crocoglop` - Comportements et messages spéciaux par crocodile
* **Système de bébés crocodiles** avec `crocofarm` - Naissance et croissance de jeunes crocodiles
* **Système d'envies des crocodiles** avec `crocenvie` - Motivations complexes au-delà de manger le bras

## Installation

```bash
npm install crocobras
```

Assurez-vous d'avoir également nekomaths installé, car crocobras en dépend :

```bash
npm install nekomaths
```

## Utilisation de base

crocobras exporte une classe CrocobrasGame. Vous devez instancier cette classe pour commencer à utiliser la logique du jeu.

```javascript
const CrocobrasGame = require('crocobras');

// Créez une nouvelle instance du jeu.
const game = new CrocobrasGame({
    initialArmHealth: 200, // Le bras est plus résistant !
    crocoDamage: 20,       // Moins de dégâts par croco
    crocoPerLevel: 2,      // Plus de crocos par niveau
    levelUpThreshold: 10   // 10 crocos pour passer de niveau
});

// Écoutez les événements du jeu
game.on('gameStarted', (data) => {
    console.log(`Partie démarrée ! Niveau: ${data.level}, Vie du bras: ${data.armHealth}`);
});

game.on('crocoKilled', (data) => {
    console.log(`Un croco tué ! Restant : ${data.remainingCount}/${data.killedCount + data.remainingCount}`);
});

// Démarrer le jeu
game.startGame();
```

## 🆕 Nouvelles fonctionnalités v1.3.0

### `crocojom(questId, questData, questLogic)` - Quêtes dynamiques adaptatives

Créez des quêtes qui s'adaptent aux choix des joueurs en temps réel.

```javascript
// Quête qui change selon les choix du joueur
game.crocojom('adaptive_quest', {
    title: 'Le Mystère du Marécage',
    branches: {
        start: { text: 'Vous entrez dans le marécage...', choices: ['explorer', 'fuir'] },
        explorer: { text: 'Vous découvrez une grotte mystérieuse', choices: ['entrer', 'contourner'] },
        fuir: { text: 'Vous rebroussez chemin mais...', choices: ['courage', 'panic'] }
    },
    rewards: { coins: 100, experience: 50 }
}, function(questData, progress, action, choice) {
    if (action === 'choice') {
        if (choice.action === 'explorer') {
            // Augmenter la difficulté mais aussi les récompenses
            this.settings.crocoPerLevel += 1;
            questData.rewards.coins *= 1.5;
            return { newBranch: 'explorer', difficulty: 'increased' };
        } else if (choice.action === 'fuir') {
            // Chemin plus sûr mais moins récompensé
            questData.rewards.coins *= 0.8;
            return { newBranch: 'fuir', difficulty: 'reduced' };
        }
    }
});

// Démarrer la quête
game.startDynamicQuest('adaptive_quest');

// Faire un choix
game.makeDynamicQuestChoice('adaptive_quest', { action: 'explorer' });
```

### `crocera(weatherId, weatherData, weatherLogic)` - Système climatique interactif

Créez des conditions météorologiques qui influencent le gameplay.

```javascript
// Tempête qui rend les crocodiles plus agressifs mais ralentit le joueur
game.crocera('storm', {
    name: 'Tempête Électrique',
    duration: 30000, // 30 secondes
    intensity: 0.8,
    crocodileEffects: { speed: 1.3, aggression: 1.5 },
    armEffects: { visibility: 0.6, movement: 0.7 }
}, function(weatherData, gameState) {
    console.log(`⛈️ ${weatherData.name} activée !`);
    
    // Effet sur les crocodiles existants
    if (this.crocodileSpeeds) {
        Object.keys(this.crocodileSpeeds).forEach(crocoId => {
            const currentSpeed = this.crocodileSpeeds[crocoId].currentSpeed;
            this.crocodileSpeeds[crocoId].currentSpeed = currentSpeed * weatherData.crocodileEffects.speed;
        });
    }
    
    // Réduire la visibilité du joueur
    this.emit('weatherEffect', {
        type: 'visibility',
        value: weatherData.armEffects.visibility
    });
    
    // Éclairs aléatoires
    const lightningInterval = setInterval(() => {
        if (this.currentWeather === 'storm') {
            if (Math.random() < 0.2) {
                // Éclair aide le joueur (tue un crocodile)
                this.crocokill();
                console.log('⚡ Un éclair élimine un crocodile !');
            }
        } else {
            clearInterval(lightningInterval);
        }
    }, 3000);
});

// Activer la tempête
game.activateWeather('storm');
```

### `crocogiw(specialId, specialData, specialLogic)` - Événements spéciaux conditionnels

Créez des crocodiles ou événements rares qui n'apparaissent que dans certaines conditions.

```javascript
// Crocodile boss qui n'apparaît qu'au niveau 5+ avec moins de 50% de vie
game.crocogiw('boss_croco', {
    type: 'crocodile',
    rarity: 'legendary',
    triggerConditions: {
        minLevel: 5,
        maxArmHealthPercent: 0.5
    },
    rewards: { coins: 500, experience: 200 }
}, function(specialData, gameState) {
    const healthPercent = gameState.armHealth / this.settings.initialArmHealth;
    const meetsConditions = gameState.currentLevel >= specialData.triggerConditions.minLevel &&
                           healthPercent <= specialData.triggerConditions.maxArmHealthPercent;
    
    if (meetsConditions && Math.random() < 0.1) { // 10% de chance
        console.log('👑 BOSS CROCODILE LÉGENDAIRE APPARAÎT !');
        
        // Créer un super crocodile
        this.crocolife(999, 300); // 300 HP
        this.crocoarmure(999, 50); // Armure élevée
        this.crocia(999, 'legendary_boss', (aiData) => {
            return { action: 'ultimate_attack', newState: 'berserker' };
        });
        
        return true; // Déclencher l'événement
    }
    
    return false;
});

// Vérifier les événements spéciaux à chaque kill
game.on('crocoKilled', () => {
    game.checkSpecialElements();
});
```

### `crocorin(crocoId, aiConfig, decisionLogic)` - IA avancée avec prise de décision

Créez des IA qui apprennent et s'adaptent au comportement du joueur.

```javascript
// IA qui apprend les patterns de tir du joueur
game.crocorin(1, {
    learningRate: 0.15,
    memorySize: 30,
    personalityTraits: { patience: 0.7, cunning: 0.9 },
    decisionFrequency: 2000
}, function(aiData) {
    const { crocoId, memory, gameState, situation, learningData } = aiData;
    
    // Analyser les patterns de tir du joueur
    const recentShots = memory.filter(m => m.type === 'decision' && m.timestamp > Date.now() - 10000);
    const shotPattern = recentShots.length > 0 ? recentShots.reduce((acc, shot) => {
        const interval = shot.timestamp - (recentShots[recentShots.indexOf(shot) - 1]?.timestamp || shot.timestamp);
        acc.push(interval);
        return acc;
    }, []) : [];
    
    const avgShotInterval = shotPattern.length > 0 ? 
        shotPattern.reduce((a, b) => a + b, 0) / shotPattern.length : 3000;
    
    // Décision basée sur l'apprentissage
    if (avgShotInterval < 1500) {
        // Joueur tire rapidement -> être plus défensif
        return {
            action: 'defensive_pattern',
            strategy: 'zigzag',
            confidence: 0.8
        };
    } else if (gameState.armHealth < 30) {
        // Bras faible -> attaque coordonnée
        return {
            action: 'final_assault',
            strategy: 'aggressive_rush',
            confidence: 0.95
        };
    } else {
        // Comportement adaptatif
        return {
            action: 'adaptive_hunt',
            strategy: 'patient_stalking',
            confidence: 0.6
        };
    }
});

// Mettre à jour l'IA régulièrement
setInterval(() => {
    if (game.isGameRunning) {
        game.executeAdvancedAIDecision(1, { 
            playerActivity: 'shooting',
            timeElapsed: Date.now() 
        });
    }
}, 2000);
```

### `crocomp(analysisId, analysisConfig, analysisLogic)` - Analyse de données de jeu

Analysez les performances et comportements des joueurs.

```javascript
// Système d'analyse de la performance du joueur
game.crocomp('player_performance', {
    dataPoints: ['accuracy', 'survival_time', 'level_progression', 'death_causes'],
    updateInterval: 10000, // Toutes les 10 secondes
    reportFormat: 'detailed'
}, function(analysisData) {
    const { gameState, analyticsData, previousReports } = analysisData;
    
    // Calculer la précision
    const totalShots = this.totalShots || 0;
    const totalKills = this.killedCrocodilesThisLevel || 0;
    const accuracy = totalShots > 0 ? (totalKills / totalShots) * 100 : 0;
    
    // Temps de survie
    const survivalTime = this.gameStartTime ? Date.now() - this.gameStartTime : 0;
    
    // Analyser les tendances
    const report = {
        timestamp: Date.now(),
        accuracy: accuracy,
        survivalTime: survivalTime,
        currentLevel: gameState.currentLevel,
        armHealth: gameState.armHealth,
        recommendations: []
    };
    
    // Recommandations basées sur les performances
    if (accuracy < 50) {
        report.recommendations.push('Améliorer la précision de tir');
    }
    if (gameState.armHealth < 50) {
        report.recommendations.push('Jouer plus défensivement');
    }
    if (gameState.currentLevel > 3 && accuracy > 80) {
        report.recommendations.push('Excellent ! Continuez ainsi !');
    }
    
    console.log(`📊 Rapport de performance: Précision ${accuracy.toFixed(1)}%, Niveau ${gameState.currentLevel}`);
    
    return report;
});

// Lancer l'analyse automatique
setInterval(() => {
    if (game.isGameRunning) {
        game.runGameAnalysis('player_performance');
    }
}, 10000);
```

### `crocotina(functionName, customFunction, options)` - Fonctions JavaScript personnalisées

Intégrez vos propres fonctions directement dans le moteur de jeu.

```javascript
// Fonction personnalisée pour calculer des bonus de score
game.crocotina('calculateScoreBonus', function(baseScore, multiplier, levelBonus) {
    const bonus = baseScore * multiplier + (this.currentLevel * levelBonus);
    this.emit('scoreBonusCalculated', { baseScore, multiplier, levelBonus, bonus });
    return Math.floor(bonus);
}, {
    description: 'Calcule les bonus de score avec multiplicateurs',
    parameters: ['baseScore', 'multiplier', 'levelBonus'],
    category: 'scoring'
});

// Fonction de téléportation d'urgence du bras
game.crocotina('emergencyArmTeleport', function(safetyThreshold = 20) {
    if (this.armHealth <= safetyThreshold) {
        const oldHealth = this.armHealth;
        this.armHealth = Math.min(this.armHealth + 30, this.settings.initialArmHealth);
        
        console.log(`🚨 Téléportation d'urgence ! Vie: ${oldHealth} → ${this.armHealth}`);
        this.emit('emergencyTeleport', { oldHealth, newHealth: this.armHealth });
        
        return { success: true, healthRestored: this.armHealth - oldHealth };
    }
    
    return { success: false, reason: 'Seuil de sécurité non atteint' };
}, {
    description: 'Téléporte le bras en sécurité si la vie est critique',
    parameters: ['safetyThreshold'],
    category: 'emergency'
});

// Utiliser les fonctions personnalisées
const scoreBonus = game.executeCustomFunction('calculateScoreBonus', 100, 1.5, 10);
const teleportResult = game.executeCustomFunction('emergencyArmTeleport', 25);

console.log(`Bonus calculé: ${scoreBonus}`);
console.log(`Téléportation: ${teleportResult.success ? 'Réussie' : 'Échouée'}`);
```

### `crocofaf(quizId, quizData, quizLogic)` - Mini-jeux de quiz créatifs

Créez des quiz pour gagner des récompenses en tuant des crocodiles.

```javascript
// Quiz sur les crocodiles pour gagner des kills bonus
game.crocofaf('croco_quiz', {
    title: 'Quiz des Crocodiles',
    questions: [
        {
            question: 'Combien de dents a un crocodile adulte ?',
            answers: ['24', '64', '80', '32'],
            correct: 2, // Index de la bonne réponse
            killReward: 3
        },
        {
            question: 'Dans quel milieu vivent les crocodiles ?',
            answers: ['Désert', 'Forêt', 'Zones humides', 'Montagne'],
            correct: 2,
            killReward: 2
        },
        {
            question: 'Quelle est la vitesse maximale d\'un crocodile sur terre ?',
            answers: ['15 km/h', '25 km/h', '35 km/h', '45 km/h'],
            correct: 1,
            killReward: 4
        }
    ],
    timeLimit: 15000, // 15 secondes par question
    rewards: { coins: 50, experience: 25 }
}, function(quizData, action, context) {
    if (action === 'start') {
        console.log(`🧠 ${quizData.title} commence !`);
        this.emit('quizQuestionReady', {
            question: quizData.questions[0],
            timeLimit: quizData.timeLimit
        });
    } else if (action === 'answer') {
        const question = quizData.questions[context.currentQuestion];
        const isCorrect = context.answer === question.correct;
        
        if (isCorrect) {
            console.log(`✅ Bonne réponse ! ${question.killReward} crocodiles éliminés !`);
            
            // Tuer des crocodiles comme récompense
            for (let i = 0; i < question.killReward; i++) {
                this.crocokill();
            }
            
            return { 
                correct: true, 
                points: question.killReward,
                message: `${question.killReward} crocodiles éliminés !`
            };
        } else {
            console.log(`❌ Mauvaise réponse... La bonne réponse était: ${question.answers[question.correct]}`);
            return { 
                correct: false, 
                points: 0,
                message: 'Aucune récompense cette fois.'
            };
        }
    }
});

// Démarrer le quiz
game.startMiniGame('croco_quiz');

// Répondre à une question
game.answerQuizQuestion('croco_quiz', 2); // Réponse C
```

### `crocojup(messageId, messageData, messageLogic)` - Messages temporaires personnalisés

Affichez des notifications temporaires personnalisées.

```javascript
// Message de félicitations pour les level ups
game.crocojup('levelup_celebration', {
    text: 'NIVEAU SUPÉRIEUR !',
    duration: 3000,
    style: { color: 'gold', size: 'large', effect: 'glow' },
    position: 'center',
    animation: 'bounce'
}, function(messageData, context) {
    const level = context.level || this.currentLevel;
    const customText = `🎉 NIVEAU ${level} ATTEINT ! 🎉`;
    
    this.emit('celebrationMessage', {
        text: customText,
        style: messageData.style,
        position: messageData.position,
        animation: messageData.animation
    });
    
    // Animation de bonus
    if (level % 5 === 0) {
        // Tous les 5 niveaux, message spécial
        setTimeout(() => {
            this.showTemporaryMessage('milestone_bonus', { level });
        }, 1500);
    }
    
    return { enhanced: true, bonusMessage: level % 5 === 0 };
});

// Message de bonus de milestone
game.crocojup('milestone_bonus', {
    text: 'BONUS MILESTONE !',
    duration: 4000,
    style: { color: 'rainbow', size: 'huge', effect: 'sparkle' },
    animation: 'explosion'
}, function(messageData, context) {
    const bonusReward = context.level * 10;
    
    // Ajouter des pièces bonus
    if (this.economy && this.economy.currencies.gold) {
        this.economy.currencies.gold.amount += bonusReward;
    }
    
    console.log(`💰 Bonus milestone: ${bonusReward} pièces d'or !`);
    
    return { coinsAwarded: bonusReward };
});

// Déclencher automatiquement lors des level ups
game.on('levelUp', (data) => {
    game.showTemporaryMessage('levelup_celebration', { level: data.newLevel });
});
```

### `crocodae(powerUpId, powerUpData, powerUpLogic)` - Power-ups temporaires avancés

Créez des power-ups temporaires avec des effets complexes.

```javascript
// Power-up "Temps Ralenti" qui affecte tout le jeu
game.crocodae('bullet_time', {
    name: 'Temps Ralenti',
    duration: 8000,
    effects: {
        timeMultiplier: 0.5,
        playerSpeedBoost: 1.5,
        crocodileSlowDown: 0.3
    },
    cooldown: 20000,
    rarity: 'epic'
}, function(powerUpData, context, action) {
    if (action === 'activate') {
        console.log('⏰ TEMPS RALENTI ACTIVÉ !');
        
        // Ralentir tous les crocodiles
        if (this.crocodileSpeeds) {
            Object.keys(this.crocodileSpeeds).forEach(crocoId => {
                const croco = this.crocodileSpeeds[crocoId];
                croco.originalSpeed = croco.currentSpeed;
                croco.currentSpeed *= powerUpData.effects.crocodileSlowDown;
            });
        }
        
        // Effet visuel
        this.emit('bulletTimeStart', {
            timeMultiplier: powerUpData.effects.timeMultiplier,
            duration: powerUpData.duration
        });
        
        // Son ralenti
        this.emit('playSound', { sound: 'bullet_time_start', pitch: 0.7 });
        
    } else if (action === 'deactivate') {
        console.log('⏰ Temps normal rétabli.');
        
        // Restaurer la vitesse normale des crocodiles
        if (this.crocodileSpeeds) {
            Object.keys(this.crocodileSpeeds).forEach(crocoId => {
                const croco = this.crocodileSpeeds[crocoId];
                if (croco.originalSpeed) {
                    croco.currentSpeed = croco.originalSpeed;
                    delete croco.originalSpeed;
                }
            });
        }
        
        this.emit('bulletTimeEnd');
    }
});

// Power-up "Berserker" qui augmente tout
game.crocodae('berserker_mode', {
    name: 'Mode Berserker',
    duration: 12000,
    effects: {
        damageMultiplier: 3,
        speedBoost: 2,
        killsToWin: 0.5 // Divise par 2 le nombre de kills nécessaires
    },
    stackable: false,
    cooldown: 30000
}, function(powerUpData, context, action) {
    if (action === 'activate') {
        console.log('🔥 MODE BERSERKER ACTIVÉ !');
        
        // Stocker les valeurs originales
        this.originalSettings = {
            levelUpThreshold: this.settings.levelUpThreshold
        };
        
        // Réduire le nombre de crocodiles nécessaires pour level up
        this.settings.levelUpThreshold = Math.ceil(this.settings.levelUpThreshold * powerUpData.effects.killsToWin);
        
        this.emit('berserkerModeStart', {
            effects: powerUpData.effects,
            visualEffect: 'red_aura'
        });
        
    } else if (action === 'deactivate') {
        console.log('🔥 Mode Berserker terminé.');
        
        // Restaurer les paramètres
        if (this.originalSettings) {
            this.settings.levelUpThreshold = this.originalSettings.levelUpThreshold;
            delete this.originalSettings;
        }
        
        this.emit('berserkerModeEnd');
    }
});

// Activer les power-ups selon certaines conditions
game.on('crocoKilled', (data) => {
    if (data.killedCount % 10 === 0) { // Tous les 10 kills
        if (Math.random() < 0.3) { // 30% de chance
            game.activateTemporaryPowerUp('bullet_time');
        }
    }
    
    if (this.armHealth < 30 && Math.random() < 0.2) { // 20% si vie critique
        game.activateTemporaryPowerUp('berserker_mode');
    }
});
```

### `crocolog(logId, logConfig, logLogic)` - Logs personnalisés créatifs

Créez un système de logging avec des formes et des couleurs.

```javascript
// Système de log avec formes ASCII et couleurs
game.crocolog('ascii_logger', {
    prefix: '🐊',
    colors: {
        info: '\x1b[36m',    // Cyan
        warning: '\x1b[33m', // Jaune
        error: '\x1b[31m',   // Rouge
        success: '\x1b[32m', // Vert
        reset: '\x1b[0m'     // Reset
    },
    shapes: {
        box: '█',
        triangle: '▲',
        diamond: '◆',
        star: '★',
        heart: '♥'
    },
    format: 'creative'
}, function(logConfig, logEntry) {
    const { colors, shapes, prefix } = logConfig;
    const { message, data, level, timestamp } = logEntry;
    
    // Créer un motif selon le niveau
    let pattern = '';
    let color = colors[level] || colors.info;
    
    switch (level) {
        case 'success':
            pattern = shapes.star.repeat(3);
            break;
        case 'error':
            pattern = shapes.triangle.repeat(5);
            break;
        case 'warning':
            pattern = shapes.diamond.repeat(4);
            break;
        default:
            pattern = shapes.box.repeat(2);
    }
    
    // Format créatif avec timestamp
    const timeStr = new Date(timestamp).toLocaleTimeString();
    const formattedMessage = `${color}${pattern} ${prefix} [${timeStr}] ${message} ${pattern}${colors.reset}`;
    
    // Ajouter des données supplémentaires si présentes
    if (data.shape) {
        const customShape = shapes[data.shape] || '?';
        return formattedMessage + `\n${color}${customShape.repeat(10)}${colors.reset}`;
    }
    
    return formattedMessage;
});

// Logger de combat avec statistiques visuelles
game.crocolog('combat_stats', {
    prefix: '⚔️',
    format: 'stats',
    shapes: {
        health: '♥',
        kill: '💀',
        level: '⭐'
    }
}, function(logConfig, logEntry) {
    const { message, data } = logEntry;
    const { shapes } = logConfig;
    
    if (data.type === 'combat_summary') {
        const healthBar = shapes.health.repeat(Math.floor(data.armHealth / 10));
        const killCount = shapes.kill.repeat(Math.min(data.kills, 10));
        const levelStars = shapes.level.repeat(data.level);
        
        return `
╔══════════════════════════════════╗
║ ${message.padEnd(32)} ║
║ Vie: ${healthBar.padEnd(20)} ║
║ Kills: ${killCount.padEnd(18)} ║
║ Niveau: ${levelStars.padEnd(15)} ║
╚══════════════════════════════════╝`;
    }
    
    return `⚔️ ${message}`;
});

// Utiliser les logs personnalisés
game.writeCustomLog('ascii_logger', 'Crocodile éliminé !', { level: 'success', shape: 'star' });
game.writeCustomLog('ascii_logger', 'Attention, bras en danger !', { level: 'warning' });

// Log automatique des statistiques de combat
game.on('levelUp', (data) => {
    game.writeCustomLog('combat_stats', 'NIVEAU SUPÉRIEUR !', {
        type: 'combat_summary',
        armHealth: game.armHealth,
        kills: game.killedCrocodilesThisLevel,
        level: data.newLevel
    });
});
```

### `crocojust(cloneId, cloneData, cloneLogic)` - Clonage et invocation de crocodiles

Permettez aux crocodiles de se dupliquer ou d'invoquer des alliés.

```javascript
// Système de clonage pour crocodiles alpha
game.crocojust('alpha_cloning', {
    maxClones: 2,
    cloneCooldown: 8000,
    cloneConditions: { minLevel: 3, healthThreshold: 0.5 },
    cloneProperties: { health: 0.7, speed: 1.2, lifespan: 15000 },
    invocationRules: { maxInvocations: 3 }
}, function(cloneData, context) {
    const { sourceCrocoId, gameState, context: cloneContext } = context;
    
    // Vérifier si les conditions de clonage sont remplies
    const canClone = gameState.currentLevel >= cloneData.cloneConditions.minLevel;
    const sourceHealth = this.crocodileHealths && this.crocodileHealths[sourceCrocoId] ? 
                        this.crocodileHealths[sourceCrocoId].currentHealth : 100;
    const healthOk = sourceHealth >= 50; // Santé minimale pour cloner
    
    if (canClone && healthOk && Math.random() < 0.3) { // 30% de chance
        const cloneId = Date.now() + Math.random();
        
        // Créer le clone avec propriétés réduites
        this.crocolife(cloneId, Math.floor(sourceHealth * cloneData.cloneProperties.health));
        this.crocorap(cloneId, 1.0 * cloneData.cloneProperties.speed);
        
        console.log(`🧬 Crocodile ${sourceCrocoId} se clone ! Clone ID: ${cloneId}`);
        
        // Le clone disparaît automatiquement après un délai
        setTimeout(() => {
            if (this.crocodileHealths && this.crocodileHealths[cloneId]) {
                delete this.crocodileHealths[cloneId];
                this.emit('cloneExpired', { cloneId, sourceId: sourceCrocoId });
                console.log(`💨 Clone ${cloneId} disparaît.`);
            }
        }, cloneData.cloneProperties.lifespan);
        
        return { 
            success: true, 
            cloneId: cloneId,
            properties: {
                health: Math.floor(sourceHealth * cloneData.cloneProperties.health),
                speed: cloneData.cloneProperties.speed,
                temporary: true
            }
        };
    }
    
    return { success: false, reason: 'Conditions non remplies' };
});

// Invocation de crocodiles minions
game.crocojust('necro_summoning', {
    maxClones: 5,
    cloneCooldown: 12000,
    invocationRules: {
        minionType: 'skeleton_croco',
        minionHealth: 30,
        minionCount: 3
    }
}, function(cloneData, context) {
    const { sourceCrocoId } = context;
    const summonedMinions = [];
    
    console.log(`🧙‍♂️ Crocodile nécromancien ${sourceCrocoId} invoque des squelettes !`);
    
    for (let i = 0; i < cloneData.invocationRules.minionCount; i++) {
        const minionId = Date.now() + i;
        
        // Créer un minion squelette
        this.crocolife(minionId, cloneData.invocationRules.minionHealth);
        this.crocoarmure(minionId, 10); // Fragile
        this.crocorap(minionId, 0.8); // Lent
        
        // Comportement spécial des minions
        this.crocia(minionId, 'minion', (aiData) => {
            return { action: 'swarm_attack', newState: 'swarming' };
        });
        
        summonedMinions.push(minionId);
    }
    
    return { 
        success: true, 
        cloneId: 'multiple',
        summonedMinions: summonedMinions,
        properties: { type: 'necromancy', count: summonedMinions.length }
    };
});

// Déclencher le clonage automatiquement
game.on('crocoKilled', (data) => {
    // Chance de clonage pour les crocodiles survivants
    if (Math.random() < 0.15) { // 15% de chance
        game.cloneCrocodile('alpha_cloning', 1);
    }
    
    // Invocation nécromantique si beaucoup de crocodiles morts
    if (data.killedCount > 10 && data.killedCount % 7 === 0) {
        game.cloneCrocodile('necro_summoning', 666); // ID du nécromancien
    }
});
```

### Et 6 autres fonctionnalités innovantes...

Les fonctionnalités restantes (`crocorare`, `crocomd`, `crocoglop`, `crocofarm`, `crocenvie`) offrent des possibilités infinies pour créer des expériences de jeu uniques avec des crocodiles rares, des tutoriels interactifs, des personnalisations comportementales, des systèmes de reproduction et des motivations complexes pour vos crocodiles.

## Événements v1.3.0

Les nouvelles fonctionnalités émettent de nombreux nouveaux événements :

```javascript
// Événements des quêtes dynamiques
game.on('dynamicQuestStarted', (data) => {
    console.log(`Quête dynamique ${data.questId} démarrée !`);
});

// Événements climatiques
game.on('weatherActivated', (data) => {
    console.log(`Climat ${data.weatherId} activé !`);
});

// Événements IA avancée
game.on('advancedAIDecision', (data) => {
    console.log(`IA ${data.crocoId}: ${JSON.stringify(data.decision)}`);
});

// Et plus de 50 nouveaux événements...
```

## Exemple complet v1.3.0

```javascript
const CrocobrasGame = require('crocobras');
const game = new CrocobrasGame();

// Configuration complète avec les nouvelles fonctionnalités
function setupAdvancedGame() {
    // 1. Quête adaptative
    game.crocojom('main_quest', {
        title: 'La Grande Chasse',
        branches: { start: { choices: ['brave', 'careful'] } }
    }, (questData, progress, action, choice) => {
        if (choice?.action === 'brave') {
            game.activateWeather('storm');
        }
    });
    
    // 2. Climat dynamique
    game.crocera('fog', {
        duration: 20000,
        crocodileEffects: { stealth: 1.5 }
    }, (weatherData) => {
        console.log('🌫️ Brouillard épais !');
    });
    
    // 3. IA avancée
    game.crocorin(1, { learningRate: 0.2 }, (aiData) => {
        return { action: 'adaptive_hunt', confidence: 0.8 };
    });
    
    // 4. Messages temporaires
    game.crocojup('achievement', {
        text: 'SUCCÈS DÉBLOQUÉ !',
        duration: 2000
    }, (data) => ({ enhanced: true }));
    
    // 5. Logs créatifs
    game.crocolog('game_logger', {
        colors: { info: '\x1b[36m' },
        shapes: { star: '★' }
    }, (config, entry) => {
        return `${config.colors.info}★ ${entry.message} ★\x1b[0m`;
    });
}

setupAdvancedGame();
game.startGame();

// Démarrer une quête dynamique
game.startDynamicQuest('main_quest');

console.log('🚀 Jeu Crocobras v1.3.0 avec toutes les fonctionnalités avancées !');
```

## Contribution

Toutes les idées et contributions sont les bienvenues ! N'hésitez pas à ouvrir des issues ou à soumettre des pull requests sur le dépôt GitHub.

## Changelog v1.3.0

- ✨ Ajout de `crocojom()` pour les quêtes dynamiques adaptatives
- ✨ Ajout de `crocera()` pour le système climatique interactif
- ✨ Ajout de `crocogiw()` pour les événements spéciaux conditionnels
- ✨ Ajout de `crocorin()` pour l'IA avancée avec prise de décision
- ✨ Ajout de `crocomp()` pour l'analyse de données de jeu
- ✨ Ajout de `crocotina()` pour les fonctions JavaScript personnalisées
- ✨ Ajout de `crocofaf()` pour les mini-jeux de quiz créatifs
- ✨ Ajout de `crocojup()` pour les messages temporaires personnalisés
- ✨ Ajout de `crocodae()` pour les power-ups temporaires avançés
- ✨ Ajout de `crocolog()` pour les logs personnalisés créatifs
- ✨ Ajout de `crocojust()` pour le clonage et l'invocation de crocodiles
- ✨ Ajout de `crocorare()` pour les crocodiles rares spéciaux
- ✨ Ajout de `crocomd()` pour les tutoriels interactifs
- ✨ Ajout de `crocoglop()` pour la personnalisation comportementale
- ✨ Ajout de `crocofarm()` pour le système de bébés crocodiles
- ✨ Ajout de `crocenvie()` pour le système d'envies des crocodiles
- 📡 Plus de 50 nouveaux événements pour toutes les nouvelles fonctionnalités
- 🎮 Possibilités créatives infinies pour les développeurs
- 🧠 IA et systèmes adaptatifs révolutionnaires
- 🌟 Gameplay dynamique et évolutif

**Lien de notre documentation officielle** :

https://croco-combat-arena.lovable.app/