Index: components/roulette/BetModal.jsx
===================================================================
--- components/roulette/BetModal.jsx	(revision 9bd09b003e0450668a5ceb182fb4d9dfb5a2d704)
+++ components/roulette/BetModal.jsx	(revision b13f93b3ae8e02def0043ff767c69e28939b36ff)
@@ -52,8 +52,5 @@
                   betModal: false,
                 },
-                coinPlaced: {
-                  x: 0,
-                  y: 0
-                }
+                showCoin: false,
               }))
         }
@@ -64,5 +61,6 @@
                     ...styleState.roulette.displays,
                     betModal: false,
-                }
+                },
+                showCoin: true,
             }));
         }
@@ -70,5 +68,5 @@
 
     return (
-        <div className="rouletteBetModal" style={{display: styleState.roulette.displays.betModal ? 'flex' : 'none'}}>
+        <div className="rouletteBetModal" style={{display: styleState.roulette.displays.betModal && playerState.rouletteGame.timeToStart > 10 ? 'flex' : 'none'}}>
             <p>You have chosen to bet on: <span>{styleState.roulette.whichBets.map((bet, i) => `${bet} `)}</span><br/>Please select the amount you will bet</p>
             <div>
Index: components/roulette/BetsImage.jsx
===================================================================
--- components/roulette/BetsImage.jsx	(revision 9bd09b003e0450668a5ceb182fb4d9dfb5a2d704)
+++ components/roulette/BetsImage.jsx	(revision b13f93b3ae8e02def0043ff767c69e28939b36ff)
@@ -50,5 +50,5 @@
     return (
         <>
-            <img id="rouletteBetsImg" src="/images/roulette-bets.png" alt="Roulette bets" onClick={(e) => selectWhichBet(e)} style={{zIndex: 10}}/>
+            <img id="rouletteBetsImg" src="/images/roulette-bets.png" alt="Roulette bets" onClick={(e) => selectWhichBet(e)}/>
         </>
     )
Index: components/roulette/CoinOnTable.jsx
===================================================================
--- components/roulette/CoinOnTable.jsx	(revision 9bd09b003e0450668a5ceb182fb4d9dfb5a2d704)
+++ components/roulette/CoinOnTable.jsx	(revision b13f93b3ae8e02def0043ff767c69e28939b36ff)
@@ -8,5 +8,5 @@
     return (
         <>
-            {styleState.roulette.coinPlaced.x !== 0 && <img id="coinOnTable" src="/gold-coin.cur" alt="Gold coin" style={{zIndex: 20, position: 'absolute', left: `${styleState.roulette.coinPlaced.x}px`, top: `${styleState.roulette.coinPlaced.y}px`, transform: 'translate(-50%, -50%)'}}/>}
+            {styleState.roulette.showCoin && <img id="coinOnTable" src="/gold-coin.cur" alt="Gold coin" style={{zIndex: 20, position: 'absolute', left: `${styleState.roulette.coinPlaced.x}px`, top: `${styleState.roulette.coinPlaced.y}px`, transform: 'translate(-50%, -50%)'}}/>}
         </>
     )
Index: components/roulette/PlayersDisplay.jsx
===================================================================
--- components/roulette/PlayersDisplay.jsx	(revision 9bd09b003e0450668a5ceb182fb4d9dfb5a2d704)
+++ components/roulette/PlayersDisplay.jsx	(revision b13f93b3ae8e02def0043ff767c69e28939b36ff)
@@ -5,23 +5,48 @@
 const PlayersDisplay = () => {
     const playerState = useSelector(state => state.player);
+    const styleState = useSelector(state => state.style);
 
-    return (
-        <div className="roulettePlayersContainer">
-            <div>
-                <p>Online:</p>
-                <hr/>
-                {playerState.rouletteGame?.players.map((player, i) => (
-                    player.status.substr(1, 1) === '1' ? <p key={player + i}>{player.name}</p> : <span key={player + i}></span>
-                ))}
+    // See results.
+    if (playerState.rouletteGame.timeToStart > styleState.roulette.COUNTDOWN_FROM) {
+        return (
+            <div className="roulettePlayersContainer">
+                <div>
+                    <p>Winners:</p>
+                    <hr/>
+                    {playerState.rouletteGame?.players.map((player, i) => (
+                        player.betAmount > 0 && player.outcome === 'won' ? <p key={player + i}>{player.name} <span style={{color: '#ead24d'}}>[{player.whichBets.toString()}]</span></p> : <span key={player + i}></span>
+                    ))}
+                </div>
+                <div>
+                    <p>Losers:</p>
+                    <hr/>
+                    {playerState.rouletteGame?.players.map((player, i) => (
+                        player.betAmount > 0 && player.outcome === 'lost' ? <p key={player + i}>{player.name} <span style={{color: '#ead24d'}}>[{player.whichBets.toString()}]</span></p> : <span key={player + i}></span>
+                    ))}
+                </div>
             </div>
-            <div>
-                <p>Betted:</p>
-                <hr/>
-                {playerState.rouletteGame?.players.map((player, i) => (
-                    player.status.substr(1, 1) === '2' ? <p key={player + i}>{player.name} <span style={{color: '#ead24d'}}>[{player.whichBets.toString()}]</span> ${player.betAmount}</p> : <span key={player + i}></span>
-                ))}
+        )
+    }
+    // See who betted.
+    else {
+        return (
+            <div className="roulettePlayersContainer">
+                <div>
+                    <p>Online:</p>
+                    <hr/>
+                    {playerState.rouletteGame?.players.map((player, i) => (
+                        player.status.substr(1, 1) === '1' ? <p key={player + i}>{player.name}</p> : <span key={player + i}></span>
+                    ))}
+                </div>
+                <div>
+                    <p>Betted:</p>
+                    <hr/>
+                    {playerState.rouletteGame?.players.map((player, i) => (
+                        player.status.substr(1, 1) === '2' ? <p key={player + i}>{player.name} <span style={{color: '#ead24d'}}>[{player.whichBets.toString()}]</span></p> : <span key={player + i}></span>
+                    ))}
+                </div>
             </div>
-        </div>
-  )
+        )
+    }
 }
 
Index: components/roulette/Roulette.jsx
===================================================================
--- components/roulette/Roulette.jsx	(revision 9bd09b003e0450668a5ceb182fb4d9dfb5a2d704)
+++ components/roulette/Roulette.jsx	(revision b13f93b3ae8e02def0043ff767c69e28939b36ff)
@@ -22,5 +22,5 @@
       <Loading/>
 
-      <Alert/>
+      <Alert onTop="true"/>
 
       <Notification/>
Index: components/roulette/RouletteHeader.jsx
===================================================================
--- components/roulette/RouletteHeader.jsx	(revision 9bd09b003e0450668a5ceb182fb4d9dfb5a2d704)
+++ components/roulette/RouletteHeader.jsx	(revision b13f93b3ae8e02def0043ff767c69e28939b36ff)
@@ -49,5 +49,6 @@
                             chosenCredits: parseInt(res.data?.credits/2),
                         }
-                    }
+                    },
+                    showCoin: false,
                 }));
 
@@ -56,14 +57,4 @@
                     displayLoadingScreen: false,
                 }))
-
-
-                if (parseInt(res.data?.game.status.toString().substr(1, 1)) == 3) {
-                }
-
-                if (parseInt(res.data?.game.status.toString().substr(1, 1)) == 2) {
-                }
-
-                if (parseInt(res.data?.game.status.toString().substr(1, 1)) == 1) {
-                }
             }
             else {
Index: components/roulette/Sections.jsx
===================================================================
--- components/roulette/Sections.jsx	(revision 9bd09b003e0450668a5ceb182fb4d9dfb5a2d704)
+++ components/roulette/Sections.jsx	(revision b13f93b3ae8e02def0043ff767c69e28939b36ff)
@@ -17,5 +17,5 @@
         <CoinOnTable/>
 
-        <img id="rouletteWheelImg" src="/images/roulette-wheel.png" alt="Roulette wheel"/>
+        <img id="rouletteWheelImg" src="/images/roulette-wheel.png" alt="Roulette wheel" style={{transform: 'translate(-50%, -50%)'}}/>
 
         <PlayersDisplay/>
Index: components/roulette/Timer.jsx
===================================================================
--- components/roulette/Timer.jsx	(revision 9bd09b003e0450668a5ceb182fb4d9dfb5a2d704)
+++ components/roulette/Timer.jsx	(revision b13f93b3ae8e02def0043ff767c69e28939b36ff)
@@ -3,7 +3,8 @@
 import { useEffect } from 'react';
 import { useDispatch, useSelector } from 'react-redux'
-import { setRouletteGame } from '../../redux/reducers/playerSlice';
+import { setPlayer, setRouletteGame } from '../../redux/reducers/playerSlice';
 
 import axios from 'axios';
+import { setRoulette, setStyle } from '../../redux/reducers/styleSlice';
 
 const Timer = () => {
@@ -11,4 +12,5 @@
 
     const playerState = useSelector(state => state.player);
+    const styleState = useSelector(state => state.style);
 
     useEffect(() => {
@@ -19,6 +21,60 @@
             }))
 
-            if (playerState.rouletteGame.timeToStart == 0) {
-                
+            if (playerState.rouletteGame.timeToStart === 0) {
+                axios.get(`/api/roulette?action=timer_done&session_id=${localStorage.CAESSINO_SESSION_ID}`).then(res => {
+                    if (res.data?.success) {
+                        document.getElementById('rouletteWheelImg').classList.add('spin');
+
+                        setTimeout(() => {
+                            document.getElementById('rouletteWheelImg').classList.remove('spin');
+
+                            const extraSpin = ( 5 + numbersOfWheel.indexOf(res.data?.magicNumber) * (360 / 37.0) ) + 'deg';
+                            document.getElementById('rouletteWheelImg').style.transform = `translate(-50%, -50%) rotateZ(${extraSpin})`;
+
+                            setTimeout(() => {
+                                dispatch(setStyle({
+                                    ...styleState.style,
+                                    alert: {
+                                        show: true,
+                                        title: `Winning number: ${res.data?.magicNumber}`,
+                                        subtitle: `Winning bets: [${res.data?.winningBets.join(', ')}]`,
+                                        button: {
+                                            text: 'Continue',
+                                            action: '',
+                                        }
+                                    }
+                                }))
+                                
+                                dispatch(setPlayer({
+                                    ...playerState.player,
+                                    credits: res.data?.credits,
+                                }))
+
+                                dispatch(setRouletteGame(res.data?.game));
+                            }, 600);
+                        }, 4000);
+                    }
+                });
+            }
+            else if (playerState.rouletteGame.timeToStart === 10) {
+                dispatch(setRoulette({
+                    ...styleState.roulette,
+                    displays: {
+                        ...styleState.roulette.displays,
+                        betModal: false,
+                    }
+                }))
+            }
+            else if (playerState.rouletteGame.timeToStart === styleState.roulette.COUNTDOWN_FROM) {
+                axios.get(`/api/roulette?action=reset_game&session_id=${localStorage.CAESSINO_SESSION_ID}`).then(res => {
+                    if (res.data?.success) {
+                        dispatch(setRouletteGame(res.data?.game));
+
+                        dispatch(setRoulette({
+                            ...styleState.roulette,
+                            showCoin: false,
+                        }))
+                    }
+                });
             }
         }, 1000);
@@ -27,8 +83,8 @@
     }, [dispatch, playerState.rouletteGame.timeToStart, playerState.rouletteGame]);
 
-    function updateTimer() {
+    function getTimer() {
         const timer = playerState.rouletteGame.timeToStart;
 
-        const timeString = (timer < 0 || timer > 90) ? '00:00' : '0' + parseInt(timer/60) + ':' + (timer%60 < 10 ? '0' : '') + (timer%60);
+        const timeString = (timer < 0 || timer > styleState.roulette.COUNTDOWN_FROM - 2) ? '00:00' : '0' + parseInt(timer/60) + ':' + (timer%60 < 10 ? '0' : '') + (timer%60);
 
         return timeString;
@@ -37,8 +93,20 @@
     return (
         <div className="rouletteTimer">
-            <span>{updateTimer()}</span>
+            {playerState.rouletteGame.timeToStart > 0 && playerState.rouletteGame.timeToStart <= styleState.roulette.COUNTDOWN_FROM - 2 && <span style={{fontSize: '1rem'}}>Wheel will spin in:</span>}
+            
+            <span>{getTimer()}</span>
+
+            {playerState.rouletteGame.timeToStart > 10 && playerState.rouletteGame.timeToStart <= styleState.roulette.COUNTDOWN_FROM - 2 && <span style={{fontSize: '1rem'}}>Make your bets.</span>}
+
+            {playerState.rouletteGame.timeToStart <= 10 && <span style={{fontSize: '1rem'}}>Betting time is over.</span>}
+
+            {playerState.rouletteGame.timeToStart > styleState.roulette.COUNTDOWN_FROM && <span style={{fontSize: '1rem'}}>Time to see who won :)</span>}
+            {playerState.rouletteGame.timeToStart > styleState.roulette.COUNTDOWN_FROM && <span style={{fontSize: '.7rem'}}>(And prepare, you can bet again soon.)</span>}
         </div>
     )
 }
 
+// 10 starts from 5deg
+const numbersOfWheel = [10, 23, 8, 30, 11, 36, 13, 27, 6, 34, 17, 25, 2, 21, 4, 19, 15, 32, 0, 26, 3, 35, 12, 28, 7, 29, 18, 22, 9, 31, 14, 20, 1, 33, 16, 24, 5];
+
 export default Timer
