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)
Sommaire
- 1/ Modélisations et Réalisations Graphiques
- 1.1/ Modélisation et ajout de blocs moddés 3D
- Mastodonte
- Réanimation Rapide
- Rechargement rapide
- Double Coup
- Courir vite
- Texture et effets des boissons
- La machine Pack a Punch
- La boîte mystère animée
- 1.2/ Ajout d'armure Hazmat moddée
- Texture des items designés
- Texture du modèle d'armure Hazmat
- 1.3/ Ajout d'armes de mélées moddés
- Textures et stats des armes
- Modèle 3D pour le poing taser
- 1.4/ Packs de textures personnalisés
- Textures des Zombies
- Texture des armes aux murs
- GUI customisée et modernisée
- Particules personnalisées
- Peintures de du mode zombie
- Splash texts personnalisé
- 1.5/ Sound Design custom
- Sons des Zombies
- Sons de gameplay
- Musiques officielles du Zombie de COD
- Sons de base de Minecraft modifiés
- 2/ Architecture technique le coeur du système du mode Zombie
- 2.0/ Fonctionnement de Minecraft
- 1.1/ Système de manches de Zombies
- Variables dans Minecraft
- Wave
- NextWave
- ZombiesToKill
- KilledZombiesByWave
- 1.2/ Apparition des zombies
- Points d'apparition
- Apparitions à proximité du joueur
- Suivi du joueur
1/ Modélisations et Réalisations Graphiques
1.1/ Modélisation et ajout de blocs moddés 3D
Le mode Zombies de COD, possède de nombreux éléments de gameplay d'amélioration, je me suis donc essayé à modéliser et texturer un maximum de blocs en 3D en reproduisant les différentes machines le plus fidèlement possible dans un style Minecraft.
Mastodonte (Juggernog)
L'atout incontournable pour améliorer la santé du joueur, j'ai modélisé et texturé une machine de Mastodonte en 3D pour la faire apparaître dans la carte.
Modélisation sur Blockbench
Rendu en jeu de la machine
Réanimation Rapide (Quick Revive)
Cet atout permet au joueur de réanimer plus vite ses alliés ou de s'auto-réanimer 3 fois en solo.
Modélisation sur Blockbench
Rendu en jeu de la machine
Rechargement rapide (Speed Cola)
L'atout Rechargement rapide permet au joueur ici dans Minecraft d'avoir l'effet de "Haste" afin de pouvoir frapper beaucoup plus rapidement avec les armes de coprs à corps notamment.
Modélisation sur Blockbench
Rendu en jeu de la machine
Double Coup (Double Tap)
Cet atout rajoute l'effet de force et décuple notamment les dégâts à la mélée sur ce projet.
Modélisation sur Blockbench
Rendu en jeu de la machine
Courir vite (Stamin Up)
L'atout permettant d'améliorer la vitesse de déplacement du joueur, j'ai modélisé et texturé la machine "Courir vite" en 3D pour la faire apparaître dans la carte.
Modélisation sur Blockbench
Rendu en jeu de la machine
Texture et effets des boissons à boires
Chaque machine distribue ses boissons à boire à un prix différent, voici les textures que j'ai réalisées pour chacune d'entre elles.
La machine Pack a Punch
C'est la machine permettant d'améliorer les armes du joueur, pour le moment, elle n'est encore qu'a l'état de modélisation et de texturing, elle n'est pas encore fonctionnelle dans la carte.
Modélisation sur Blockbench
Rendu en jeu de la machine
La boîte mystère animée
La boîte mystère est la plus iconique du mode Zombies permettant de donner aléatoirement des armes aux joueurs avec une animation
Modélisation sur Blockbench
Rendu en jeu de la Boîte mystère
J'ai réalisé une animation de rotation sur Blockbench pour la boîte mystère ainsi qu'une texture en 128x128 pour une boîte mystère plus détaillée.
Modélisation sur Blockbench
Rendu en jeu de la Boîte mystère
1.2/ Ajout d'armure Hazmat moddée
Texture des items designés
Texture du modèle d'armure Hazmat
Rendu en jeu de l'armure Hazmat
Texture color map de l'armure
Texture de la normal map
Texture de l'ambient occlusion map
1.3/ Ajout d'armes de mélées moddés
Textures et statistiques des armes
| Couteau de combat | Couteau Bowie | Poing américain taser |
|---|---|---|
![]() |
![]() |
![]() |
| 1.6 speed attack | 1.3 speed attack | 1 speed attack |
| 12(+2) attack damage | 23(+2) attack damage | 33(+2) attack damage |
| 18 critical damage | 34,5 critical damage | 49,5 critical damage |
Modèle 3D pour le poing taser
J'ai modélisé le poing américain taser en 3D pour lui donner une meilleure forme et un meilleur rendu que les autres armes de mélées qui sont des items avec une texture uniquement. Voici la POV, poing taser tenu en main :
POV du poing américain taser
1.4/ Packs de textures 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.
3 textures différentes de Zombies
Avec les yeux bleus, les yeux oranges et une version 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
Il s'agit en réalité de la texture d'un panneau Minecraft sur lequel j'ai pu y afficher le prix et le rendre clickable grâce aux commands blocs.
GUI customisée et modernisée
GUI pour Graphical User Interface, J'ai redesigné l'inventaire/les conteneurs, les icons, widgets, et menus.
Image du fond de base
Image du fond retouchée avec zombie ajouté à droite
Particules personnalisées
J'ai réalisé les particules d'explosions vert pour l'arme miracle "Pistolet laser" car le pistolet utilisait les explosions de bases.
J'ai aussi modifié les particules de lave pour réaliser les tornades de feu du mode Zombies en dehors de la carte.
Tornades de feu (de nuit).
Tornades de feu (de jour).
Particules de lave modifiés.
Peintures de l'univers du mode zombie
Splash texts personnalisé (aléatoire)
1.5/ 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.
2/ Architecture technique le coeur du système du mode Zombie
2.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.
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.
Ligne pour check la manche et alimenter au bon endroit
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
fichierinsé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.
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.
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.


