npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

crocobras

v1.3.0

Published

Noyau logique du jeu « Le bras d'un mec », où les joueurs combattent des crocodiles pour protéger un bras.

Readme

crocobras

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.

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

npm install crocobras

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

npm install nekomaths

Utilisation de base

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

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.

// 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.

// 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.

// 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.

// 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.

// 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.

// 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.

// 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.

// 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.

// 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.

// 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.

// 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 :

// É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

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/