Award Site Teardowns
中文

No Mercy Michel

No Mercy Michel is a browser arm-wrestling game that the Paris studio Merci-Michel made for itself. The studio's trade is turning what brands want to say into games, and this time it used the same method to introduce itself, putting its staff in the ring as the visitor's opponents in place of a team photo. The match tests nothing but who clicks fastest, yet the camera, the crowd, the music and the colour of the picture all react to the score, turning a few seconds of clicking into a televised boxing bout.

The game's title swaps the Merci (French for thank you) in the studio's name for No Mercy, while its opening line is You thought we were nice people. It won FWA of the Day on the awards site The FWA.

Home page: two cartoon arms arm-wrestling in front of a blue boxing ring under NO MERCY
On the home page two cartoon arms lock hands in front of a blue boxing ring, one dark-skinned with a red bandana and a chain, the other light-skinned with I'M TIRED tattooed on it, under the orange 3D lettering NO MERCY and Michel written in neon, with the nickname field holding REVIEWER and the orange Fight button below and the TOP 10 Winstreak card at the bottom right.

01Concept

Merci-Michel is a Paris studio founded at the end of 2012 by Adrien Pin, Antoine Ménard and Pierre Hagège. It makes gamified digital work, meaning it turns what a brand wants to say into a game people can play. After years of making games for clients, the studio made one for itself.

Merci-Michel introduces itself through this game, putting its people in the ring one by one instead of in a team photo. There are 28 opponents, each with a name, a nickname, a difficulty level, an arm skin tone and a set of accessories and tattoos, across four levels of easy, intermediate, hard and expert, with eight each at easy and expert. Most of the tattoos are small personal motifs, from people's own names to a Game Boy, dice and a moustache. Michel, the studio's namesake, is an opponent too, and appears twice, once as Merci Michel and once as Nomercy Michel. Each new match brings in a staff member the visitor has not yet faced, until everyone has been beaten once.

Visitors pass through four steps before the fight starts. The first screen holds only an orange Enter the arena button in the middle of a dark blue background, and the home page appears only after a click, a click that also lets the browser play the site's sound. On the home page the visitor types a nickname and presses Fight, and an empty name turns the field's outline red, with a line underneath reading IT TAKES A NAME TO BE A CHAMPION. After Fight, the game first searches online for a real person playing at the same moment, and when none turns up within ten to twenty-odd seconds, the system sends in a staff member instead. Before the bout, the screen sets the two players' names and win streaks side by side, and the site gives the visitor's name a random nickname as well, such as Savage or Super.

The only rule is clicking. Every mouse click, space bar press or tap on a phone screen adds a point to the visitor's arm. The gap between the two scores decides which way the arms lean, a round ends when the gap reaches a fixed amount, and the best of three rounds wins. To stop a round dragging on, each press is worth more as time passes, rising from 1 point to 3 after 2 seconds and to 4 after 6 seconds.

The staff opponents have their own rhythm too. The code gives each one a base interval between clicks by difficulty, and each click then varies by up to a tenth at random, so their speed comes in bursts. Six seconds into a round the opponent starts to tire and the interval slowly stretches. An intermediate opponent clicks 6.6 times a second at the start and drops to just over 3 after 20 seconds, so a visitor who survives the opening can still turn the score around.

The game keeps visitors coming back by making their arm worth more with every win. Each win earns one prize from a roulette, out of 12 kinds that range from a ring, a Rolex and a crown to a bandana, nail polish and tattoos. The prize goes straight onto the visitor's own arm and is still there on the next visit. But each loss makes the site take back part of what is on the arm at random, sometimes wiping the tattoos too. The TOP 10 Winstreak board at the bottom right of the home page lists only the top ten, and the leader has won 214 matches in a row.

The copy after a match keeps up the mockery of the opening line. When a visitor loses with nothing on the arm, the screen reads LOL and we are not surprised at all, and when something is taken away it switches to YOU SUCK and give us back all your stuff!. A win brings VICTORY and the win streak. A FREE STICKERS banner scrolls across the top of the home page and opens a sign-up form whose subscribers can win Merci-Michel stickers.

02Design

All of No Mercy Michel happens on a 3D boxing ring. The canvas floor, the ropes and a corner stool with a towel are all there, a spotlight shines down with dust drifting in its beam, and the background is a field of out-of-focus blue lights like a packed arena. The two arms are cartoons shaped like soft vinyl toys, with rounded surfaces and gentle highlights and tattoos printed on the skin like stickers. The Fight button on the home page is a thick orange dome in the same family of material as the arms.

The match screen borrows the layout of a TV broadcast. The two players' names sit at the top left and top right, each under a handwritten nickname and over an orange live clicks-per-second count, and two small circles beside each name record the rounds won, one filling for each. A half-hidden gauge stands at the bottom centre, and its needle points to whoever has the upper hand. Two finger-shaped cursors are on screen at once, the visitor's and the opponent's, so the visitor can see how fast the other side is clicking. A thin rounded frame runs around the edge of the whole picture, as if the match were seen through a TV screen.

A match in the blue ring, with click-rate counters and the score gauge
A frame from a match, where the visitor's orange arm and the opponent's light arm with a red bandana lock hands in the middle of the blue ring, with Smooth REVIEWER and a clicks-per-second count at the top left, the opponent 3D DAN at the top right, the half-hidden gauge at the bottom centre, the visitor's finger cursor by the hands and HAHAHA floating at the bottom right.

The type comes from sport as well. The big words, from nicknames and round numbers to READY, FIGHT and VICTORY, are set in an extra-bold compressed cut of United Sans, like shirt numbers and fight posters, while the nicknames, Winstreak and the closing Wanna play again? use a handwritten face called Cetary. The type scales with the window, at about 30 pixels for body text on desktop and about 14 on an upright phone, so the same layout fits both screens.

No Mercy Michel's interface rests on four main colours, with three more that appear only at particular moments. The scene and background are a deep navy (#0A2945), the buttons, numbers and the 3D title lettering are orange (#F89953), the handwritten nicknames are a neon cyan (#00F0F0), and the big words and score bars are white. Against the blue scene, orange and cyan are the two strongest contrasts, orange marking what can be pressed and the score, cyan marking the players' nicknames. The other three follow the state of the match, with a blue (#469DCE) for secondary numbers, a golden yellow (#FED062) for victory and prizes, and a red (#DB0202) used only for a win streak dropping to zero.

The scene's colour changes with the state of the match, staying deep blue the rest of the time. When the visitor is ahead, a red glow rises along the bottom of the screen, flames spring up beneath the gauge and the middle of the picture wavers as if in a heat haze. When the visitor is behind, the bottom of the screen darkens, the whole picture loses some of its colour and the vignette closes in. A visitor who wins the match sees the whole ring turn golden, and a visitor who loses sees the scene fade to a washed-out pink and then sink into a dark red.

The camera behind the visitor's arm as it presses the opponent down, with flames by the gauge
With the visitor well ahead, the camera has moved round behind the visitor's side, where the orange arm fills the left half of the frame pressing the opponent's arm down, a red glow lines the bottom of the screen and flames rise beside the gauge, while the opponent's clicks per second have dropped to 2.20.

Merci-Michel turns the crowd's voice into words floating around the ring. Lines of slanted white text keep rising during a match, some cheering, such as SMASH HIM, GO GO GO, KEEP IT UP and MONSTER, and some booing, such as HAHAHA, PFFFFF and STOP WHINING. They rise from behind the players and slowly fade, giving the visitor the pressure of being watched from the stands.

The game reframes itself upright on phones. The arms and title on the home page grow to fill the tall screen, the nickname field and the Fight button move to the bottom, and the leaderboard folds into a TOP 10 Winstreak card at the bottom that can be pulled open. During a match the two names shrink into the top corners, the arms take the middle, the gauge stays at the bottom centre, and the visitor taps the screen repeatedly to push.

Three phone screens: the home page, the waiting porthole and a match
On the left the phone home page, with enlarged arms and the NO MERCY title filling the upright screen and the nickname field, Fight button and TOP 10 Winstreak drawer below, in the middle the round porthole while waiting for an opponent, under TAP TAP TAP AS IF YOUR LIFE DEPENDED ON IT, and on the right a match on the phone with the two names in the top corners, THAT'S IT ? floating above the arms and the gauge at the bottom centre

03Motion

Every screen of the game is brought in by a moving camera. The site gives the camera seven shots, for the home page, the wait, the introduction, the match, victory, defeat and a defeat close-up. On every change the camera dollies from far away into the new shot over a second or so, slow at the start and the end and fast in the middle, and some shots end with a light shake as the camera lands. After a visitor clicks Enter the arena, the button fades within 0.2 seconds and the dark blue cover clears over about a second. The camera then pushes in on the two locked arms over 1.6 seconds, and the sticker banner slides down from the top of the screen.

After Fight, the home page interface folds away and the picture shrinks into a round porthole. The top banner slides off screen within 0.3 seconds, a small game logo drops in from above, the porthole shows the visitor's own arm, and a huge translucent line of type spelling the visitor's name runs behind it. When an opponent is found, the porthole first closes to a dot and then opens to the full screen in about a second and a half, while the camera pulls back from close on the visitor's arm to a view of the whole ring.

The introduction lasts about 5 seconds before the countdown. The screen first shows ROUND 1 in big 3D letters, then READY 2 seconds later and FIGHT a second after that. Each of those two words arrives with a white shockwave and a jolt of the camera, and the visitor can start clicking a second after FIGHT. After each round the screen holds for 2 seconds and then shows ROUND 2 and the same READY and FIGHT.

All the motion in a match amplifies the feedback of each click. The arms' angle follows the score gap, but rather than jumping there, each frame closes only part of the distance, so a fast clicker sees their arm push the other down little by little while both arms tremble with effort. The camera moves round behind whoever is winning, further and closer the bigger the lead, and with a large lead it sits low beside the visitor's own arm with the picture enlarged by half. The camera does not jitter with the score, because it moves only in a few fixed steps, at most one step a second, gliding between them. The bigger the gap, the harder the gauge needle shakes and the more often the photographers' flashes go off at ringside, and the longer a match runs, the more sweat beads on both arms and trickles down the skin.

When a visitor wins the match, a white light first swallows the whole screen. As it clears, the ring has turned golden, the camera pushes in on a single arm, VICTORY is set slanting in front of it in huge letters, and the win streak under it ticks from 0 to 1. A few seconds later a yellow flash covers the screen again, and a yellow circle opens in the middle with the outlined word REWARD sliding behind it. Inside the circle the prizes roll down like the reel of a slot machine, past watches, a chain and a crown, and stop on one of them in 2.7 seconds, fast at first and slow at the end. The circle then shrinks into the visitor's arm, the arm flashes, and the prize appears on it.

VICTORY screen with the visitor's arm raised in a golden ring
The VICTORY screen, with the ring turned golden, the visitor's single arm raised in the middle and the slanted white VICTORY across it, with WINSTREAK under the word
Reward roulette rolling a red bandana across a yellow circle
A frame from the roulette as it rolls, with a yellow circle in the middle of the golden ring holding a red bandana rolling past, and the outlined word REWARD behind it

When a visitor loses the match, the camera holds behind the opponent's huge arm as it presses the visitor's arm all the way down, and then the screen goes black for about a second. When it lights up again, the ring has faded to a dull pink and the visitor's arm hangs alone in the middle, swaying weakly, with a spark flying off wherever an item is taken away. A few seconds later the arm drops, LOL or YOU SUCK slams in in slanted capitals, the taunt under it pops up word by word, and the win streak is struck out back to 0. Finally the big words fade and a yellow neon sign reads Wanna play again?, with YES and NO below.

Losing screen: a pale arm sinking into the dark under the word LOL
After a lost match with nothing on the arm, a pale arm sinks into the dark on the faded ring under the slanted white capitals LOL, with give us back all your stuff! underneath and WINSTREAK: 0 at the top

The sound also follows the score in real time. When the visitor is ahead, the crackle of fire and a rising tone grow louder, a falling tone takes over when the visitor is behind, and the crowd's support swells as the gap widens either way. The background music has three layers, the first two playing together on the home page, and only the first remains once the visitor enters matchmaking, so the music suddenly thins out and the wait feels tenser.

On desktop the camera also turns slightly with the mouse, leaning whichever way the mouse moves, and even at rest the picture rises and falls slowly, like a handheld camera. Phones skip this following, and tapping the screen repeatedly works the same as clicking a mouse on desktop. The whole match, from the home page to victory and the roulette, holds 60 frames per second, even with a big lead and flames and heat haze on screen.

04Engineering

Every broadcast effect in No Mercy Michel reads from the same score gap, and the arms, the camera, the colour of the picture and the sound each turn it into their own movement. The arms' movement is taken from an animation made in advance inside the model. Each arm is a rigged glb model holding one arm-wrestling animation that runs from pressed down on one side to pressed down on the other, and the game converts the smoothed score into a position in that animation and jumps straight to it every frame. The score itself is smoothed with exponential damping, so the arms always follow it with a slight lag. The trembling is two additive animations layered on top, and flexing after a win or dropping after a loss are further animations played on their own.

Diagram of how the score gap drives the camera, colour grade and gauge
A diagram of what the score gap drives, from −1 far behind to +1 far ahead, with every threshold taken from the site's code. The camera changes pose in steps of 0.2 and at most once a second, the colour grade darkens from −0.25 to −0.75 and heats up from 0.2 to 0.55, and the gauge needle turns up to 81 degrees either way and, when the visitor is ahead, shakes from 0.35 and hardest from 0.7. The crowd's volume follows the size of the gap, the fire and the rising tone follow the lead, and the falling tone follows the deficit

The camera is run by a small state machine. Each of the seven shots stores a distant starting pose and a landing pose, and entering a shot dollies the camera from one to the other with an exponential ease over 1.2 to 1.6 seconds. The match shot instead uses a quintic ease that starts even slower and takes 1.4 seconds. During a match the camera blends between centre, right and left landing poses by the score. The score is first rounded to steps of 0.2, may change step at most once a second and is then eased towards, so the camera moves in steps and never shakes with each click. Every landing pose also has a phone version of its position and field of view, 70 degrees on phones against 55 on desktop, interpolated by device.

Every change of picture when the visitor is ahead or behind happens in the final post-processing pass. Once the visitor is more than a fifth ahead, the shader starts using a noise texture to distort the sampling coordinates in the middle of the screen for the heat haze and blends red into the bottom edge. Once the visitor is more than a quarter behind, the shader darkens the bottom edge, lowers the saturation and tightens the vignette. The same pass also handles the round porthole while waiting and its opening, full-screen white flashes like photographers' flashguns, the pink tone after a loss, blue-noise dithering and the thin rounded frame around the edge of the screen. The porthole is just a circular mask in this pass, and changing its radius shrinks the whole 3D scene into a circle or lets it out again.

All sound goes through Web Audio from a single 142 second sound sprite that holds dozens of effects in one file, each taken by its time range. During a match five loops play continuously with their volume set directly by the score. The fire and the rising tone play at the volume of the visitor's lead, the falling tone at the volume of the deficit and the crowd's support at the absolute size of the gap. The three music layers are three separate files, all looping every 32 seconds and started together, so any layer can be added or removed at any moment and still land on the beat.

The arms' material changes as the match goes on. The game draws the tattoos into a texture, while the strength of the shadow in the crook of the elbow follows the elbow's angle, so the more the arm bends, the darker the crease. The sweat is generated procedurally in the fragment shader with the same family of technique as the familiar raindrops-on-glass effect, where several layers of random drops appear and trickle down and are then used to perturb the surface normal. A value called effort rises slowly during a match, reaching over 60 percent after about 50 seconds, and the amount of sweat follows it, with the lower quality tiers computing the drops' normals by a cheaper method.

Nearly all of the arena's atmosphere is faked in shaders. The scene is lit by a 318 KB HDR environment map, and the spotlight's beam is only a flat triangle on which a shader paints edges fading from bright to dark, ripples along the beam and a layer of rising smoke. The dust in the beam is a set of particles that the shader shows only where they fall inside the beam. The crowd lights in the background are blinking sprites, the ropes' vertex shader makes them sway slightly, and the shadow under the arms is a separately rendered contact shadow.

The gauge, the flames and the glows on screen are drawn in a separate interface scene with an orthographic camera, layered above the 3D scene. The gauge is assembled from three textures for its base, needle and pivot, and the needle turns up to 81 degrees and starts to shake once the gap passes 35 percent, shaking hardest from 70 percent on. The flames are three sets of flipbook sprites that rise only when the visitor is ahead.

Live matches between two real players use Google's Firebase to manage rooms, the leaderboard and win streaks, while the data sent during a match travels over a WebRTC peer-to-peer data channel. A visitor is given an anonymous identity on arrival and, after pressing Fight, joins a waiting area in the Firebase Realtime Database, and once a match is made Firebase only helps the two browsers set up a direct connection. The two sides exchange only a few kinds of message, the score, the cursor position and the match state. One side acts as host, deciding when the countdown starts and when a round ends, and sends that state to the other. The opponent's pointing-finger cursor arrives from the other browser this way, and when a staff member is sent in as the opponent, the code simulates a cursor clicking on screen too.

The prize system is built on the arm's accessories. Each of the 12 prizes is a small finished model, and when a visitor wins one, the game merges its geometry into the arm mesh and fires a flash in the shader to show it has just been put on. The arm's state is saved in the browser's local storage along with the nickname and win streak, and the save also holds a copy encrypted with the browser's built-in cryptography interface, so the arm looks the same on the next visit. After a loss the game removes a few accessories at random, with a 40 percent chance of clearing the tattoos too, and each removed item bursts into a cloud of sparks where it sat before disappearing from the arm.

The quality is first set by the code from the graphics card's model and then adjusted up or down by the actual frame rate. The site starts by creating two throwaway WebGL contexts, one of which asks the browser to fail outright if only software rendering is available, to tell whether the device has a real graphics card. There are six tiers, from verylow to ultra, and each caps how many pixels the canvas may render, from 1080p for the lowest two to 3K for the highest two. A frame rate held above 58 raises the tier by one and below 52 lowers it by one, and the resulting tier is saved in the browser's local storage, so a returning visitor starts straight at that tier.

The game may well have been finished several years ago. It uses three.js r146, a 2022 release, and the project's name on its back-end data service is mm-10years, which suggests it was made for the studio's tenth anniversary and only won FWA of the Day this year. The studio was founded at the end of 2012, which puts that anniversary in 2022. The interface is written in Vue and bundled with Vite, with three.js wrapped in a WebGL framework of Merci-Michel's own.

No Mercy Michel downloads a lot, about 11.4 MB on the first visit to the home page, at a point when the visitor still sees only one button. The largest single file is the 1.6 MB sound sprite, followed by the three PNG textures for the arms at about 3.2 MB together, the largest a 1.5 MB normal map, and all 178 PNG files add up to about 6.6 MB. After two matches the total reaches 13.6 MB, and most of the extra is the three layers of background music at about 380 KB each. The first screen itself arrives quickly, as the server sends its first byte in 0.04 to 0.22 seconds and the first content appears at 0.15 to 0.34 seconds, with nothing shifting while it loads. The trouble comes in the preparation that follows, when the page freezes for nearly a second during loading and does not respond to a click anywhere.

Phones and tablets download exactly the same 11.4 MB as desktop and get the same 3D scene, and the differences lie only in the framing, the layout and the sharpness of the canvas. On a phone the canvas renders at no more than twice the pixel density, so even a phone with a triple-density screen is not used to the full. The match listens to mouse presses, the space bar and touches alike, and each press has to be released before the next one counts, so holding down does not repeat.

The game can be played with the keyboard alone, but screen reader users and visitors who are sensitive to motion are shut out. Tab moves through the entry button, the nickname field and the Fight button, Enter starts a match and the space bar pushes, yet the entry button shows no change at all when it takes keyboard focus, so visitors cannot see where the focus is. The whole match is drawn on a canvas with no text description, so a screen reader user cannot hear the score or find out who the opponent is. Neither the scripts nor the stylesheet read the reduced motion setting, so the camera moves, shakes, flashes and close-ups play the same under every setting.

05Scores and Team

Award Source Date Score
FWA of the Day The FWA 2026-09-26 85 POINTS, DAYS 2

Merci-Michel's game scored 85 points at The FWA, which filed it under Fun & Playable, Game and Personal/Portfolio. The FWA does not publish category scores, so there is no telling where the jury scored it highest.

Credit Role Record
Merci-Michel Paris digital gamification studio FWA 80 (FOTD 64, FOTM 8, FOTY 1)

The only credit is the studio Merci-Michel, and the 28 opponents in the game are its own members, so the people who made the game are the people being beaten in it. Merci-Michel's FWA profile describes it as a digital production house for cutting-edge interactive work. This game is the studio's 80th FWA award, including 64 FWA of the Day and 8 FWA of the Month wins, and the studio also won FWA of the Year in 2017. At the first Three.js Conference in Paris in September 2026, co-founder Antoine Ménard described the studio's steady process for building worlds: prototype early, experiment with composition and interaction, then build the world around the experience. Antoine Ménard also argued that real-time 3D does not have to look like 3D and can instead be a way to stage an experience around the visitor.

06Archive

Award date
2026-09-26
Awards
The FWA FOTD 2026-09-26
Site
https://no.merci-michel.com/
Credits
Merci-Michel
Design
interface
Build
realtime
The FWA
85 POINTS, DAYS 2. https://legacy.thefwa.com/cases/no-mercy-michel
Stack
Vue, Vite, three.js r146, Firebase Realtime Database and anonymous auth, WebRTC data channel, Web Audio sound sprite
Total assets
About 11.4 MB on first load, the same on phones and tablets, of which PNG textures make up about 6.6 MB and the sound sprite 1.6 MB. 13.6 MB after two matches
Speed
FCP 0.15 to 0.34 s, CLS 0. Home page, match, victory and roulette at 60 fps