Retour en haut

Nuketown Zombies Minecraft Project - Recréation du mode Zombies de Call of Duty

Un projet complexe et fonctionnel, entièrement ré-imaginé du mode Zombies de Call of Duty dans Minecraft, démarré en 2014 sur ma PS3.

2025 (21ans)

1/ Réalisations Graphiques et Modélisations


1.1/ Packs de textures et personnalisés

Pour recréer l'ambiance de Call of Duty (COD), j'ai créé deux packs de textures qui remplace celles de Minecraft. Le premier est un pack dans la résolution par défaut du jeu (16x16) et le second est un pack en haute résolution (128x128) pour les joueurs ayant déjà des packs en haute résolution d'installés.

Pack de textures personnalisé pour la carte Nuketown Zombies Minecraft

3 textures différentes de Zombies

Avec les yeux bleus, les yeux oranges et une version gore avec du sang.

Texture de zombie avec les yeux bleus Texture de zombie avec les yeux oranges Texture de zombie gore avec du sang

Les textures sont gérées aléatoirement et sont compatibles avec les mods Entity Model Features et Entity Texture Features sous Fabric qui me permettent de gérer l'aléatoire sans avoir besoin d'une version Forge de Minecraft avec Optifine mais aussi d'avoir des animations améliorées pour les zombies.

Texture des armes achetables aux murs dessinées à la craie

Texture d'arme achetable au mur dessinée à la craie 1 Texture d'arme achetable au mur dessinée à la craie 2

1.2/ Sound Design custom

J'ai récupéré à l'aide d'un outil, les fichiers sons en .flac de Call of Duty Black Ops 2 des zombies puis les ai convertis en .ogg le format pris en charge par Minecraft.

Sons des Zombies

Grâce aux sound design de Black Ops 2 récupéré, les zombies produisent les mêmes cris dans Minecraft que dans COD Zombies. Il y a plusieurs sons différents pour les zombies : hit, hurt, death et say, dont chacun ont plusieurs variations pour éviter la répétitivité.

Sons de gameplay

J'ai aussi intégré les sons de gameplay comme les sons de fin et de début de manche, le son de fin de partie. Les sons liés aux actions comme l'achat d'une arme, le refus quand on n'a pas assez d'argent, l'ouverture de porte, le dégagement de débris, sons lorsque l'on boit un atout etc.

Musiques officielles du Zombie de COD

Les musiques mytiques émises par les différents atouts sont présentes avec un système de proximité. Les musiques de thèmes et de trailers sont également présentes et jouables via les CD et jukebox de Minecraft.

Sons de base de Minecraft modifiés

J'ai également édité les sons de base avec mon propre pack de son et celui de Black Ops 2 pour que les sons d'ambiance, de dégats, de pas, du feu, des explosions, des sons météos et de l'interface HUD aient une ambiance plus horrifique, en accord avec l'univers de COD Zombies.

1/ Architecture technique le coeur du système du mode Zombie


Système de la carte Nuketown Zombies Minecraft

1.0/ Fonctionnement de Minecraft

Tout d'abord, Minecraft est un jeu de type Bac à sable, développé en Java et qui permet au joueur de construire et de créer un monde virtuel avec des blocs.

L'équivalent de l'électricité dans Minecraft est appelé la "Redstone". Certains blocs s'alimentent en Redstone, d'autres émettent des signaux et avec ces principes on peut créer des portes logiques et des conditions.

Un bloc très spécial et très important nommé "Commands Block" permet d'exécuter des commandes misent à dispositions par le jeu et qui intéragissent directement avec le code de celui-ci. C'est avec ce bloc que j'ai réalisé la grande majorité de mon système in-game.
Ces blocs peuvent s'executer en mode chain, repeat ou via impulsion.

1.1/ Système de manches de Zombies

Le système de manches fonctionne comme un algorithme. Algorithme que j'ai décidé de représenter sur un schéma.

Schéma de l'algorithme du système de manches

Variables dans Minecraft

Dans Minecraft on peut réaliser des variables/tableaux avec ce que l'on appelle des "scoreboards". Pour réaliser mon algorithme, j'ai créé ces scoreboards :

Scoreboard Utilisation
Wave Stocke la valeur actuelle de la manche.
NextWave Est utilisé ici, comme un Booléen, il sera défini sur 1 ou 0 pour indiquer si le système de changement de manche doit procéder ou non.
ZombiesToKill Enregistre le nombre de zombie à tuer chaque manche.
KilledZombiesByWave Enregistre le nombre de Zombies tués par le joueur cette manche. Minecraft permet une fonction enregistrant cela

Wave

Wave permet donc de calculer le nombre de zombies à faire apparaître chaque manche.
Une boucle de quelques secondes en redstone vérifie à chaque itération (ligne de commands blocks verte) le numéro de la manche et alimente pendant une demi-seconde les bons commands blocks (violet) correspondant à la bonne manche.

Chaque manche +5 Zombies et toutes les 2 manches la santé (+5 coeurs) et vitesse de déplacement (+0.2 speed) des zombies est améliorée.

Système de manche 1

Ligne pour check la manche et alimenter au bon endroit

Système de manche 2

Ligne qui fait apparaître les zombies selon là ou elle est alimentée

NextWave

Si NextWave vaut 1 alors tout ce qui sera engendré par cette condition sera :

  • => Passer la manche en gros Wave = Wave + 1
  • => Jouer un son au joueur grâce à un fichier inséré dans un pack
  • => Rajouter 5 Zombies pour la prochaine manche ZombiesToKill = ZombiesToKill + 5
  • => Remettre le compteur de zombies tués à 0 KilledZombiesByWave = 0
  • => Remettre NextWave = 0

ZombiesToKill

Défini au lancement de la partie à 10, chaque manche terminée rajoutera 5 zombies à tuer comme défini dans la condition de NextWave.

KilledZombiesByWave

KilledZombiesByWave est le scoreboard qui compte le nombre de zombies tués par manche.

Par une vérification en mode "repeat" : /execute as @a if score @s KilledZombiesByWave >= @s ZombiesThisWave run scoreboard players add @a NextWave 1, c'est ce qui permet de vérifier si la condition : KilledZombiesByWave >= ZombiesToKill est vérifiée pour lancer la manche suivante en mettant NextWave = 1.

Système de comptage de zombies tués et vérification pour lancer la manche suivante

1.2/ Apparition des zombies

Points d'apparition

Sur la carte, les points d'apparition sont définis à des emplacements précis comme dans Call of Duty mais aussi pour des raisons liés à des contraintes de Minecraft.

L'idée était d'utiliser des "portes armures" donc des mannequins invisibles et indestructibles par le joueur avec un tag spécific "Spawn". Vous allez comprendre pourquoi ce choix.

Spawn de zombies avec des mannequins invisibles

Apparitions à proximité du joueur

Dans Call of Duty, les zombies peu importe où se situe le joueur sur la map, apparaissent toujours à proximité et connaissent toujours la position du joueur.

Minecraft ne fonctionne pas comme ça, les zombies arrêtent de suivre au bout de 20 blocs et ne voient pas les joueurs à travers les obstacles. Ce qui est très contraignant du côté de la fluidité du gameplay.

La seule commande réalisable permmettant de reproduire le fonctionnement de COD est celle-ci : execute as @r[team=Survivors] at @s if score @s ZombiesToSpawn matches 1.. run execute positioned as @e[type=minecraft:armor_stand,sort=random,limit=1,distance=..17,tag=Spawn] run summon minecraft:zombie ~ ~ ~

Dans Minecraft, on peut calculer la distance entre un joueur (une entité donc) avec une autre entité. Mais on ne peut pas directement faire apparaitre un zombie à une distance précise du joueur. Par contre on peut aussi faire apparaitre exactement une entité sur une autre entité.

C'est pour cela que l'unique moyen était de faire en sorte qu'un "spawn" soit considéré comme une entité (fixe) permettant de détecter les "spawns" situés dans la zone autour du joueur. On réalise donc avec cette commande l'opération :
On sélectionne tous les joueurs dans la team "Survivors" traduit par @s, on vérifie si ZombiesToSpawn vaut au moins 1, si oui alors on recherche de manière aléatoire si un armor stand avec le tag "Spawn", se situe à moins de 17 blocs des joueurs. Si oui, alors on fait apparaitre le zombie à l'emplacement de l'armor stand choisit aléatoirement.

Suivi du joueur