diff --git a/UnityGoesBruh/Assets/Prefabs/Keypad.prefab b/UnityGoesBruh/Assets/Prefabs/Keypad.prefab
index a67c4857f27560b9616cbf3f287a83bde11498d3..0e024b372d5426107244514a72ee00dace9eaeef 100644
--- a/UnityGoesBruh/Assets/Prefabs/Keypad.prefab
+++ b/UnityGoesBruh/Assets/Prefabs/Keypad.prefab
@@ -355,6 +355,7 @@ GameObject:
   m_Component:
   - component: {fileID: 2722893037708101250}
   - component: {fileID: 8632890440510610421}
+  - component: {fileID: 588660922915349861}
   m_Layer: 0
   m_Name: Keypad
   m_TagString: Untagged
@@ -406,6 +407,20 @@ MonoBehaviour:
   - {fileID: 3482867445416918529}
   - {fileID: 5754608069352820703}
   _keypadDisplay: {fileID: 4481403863638409276}
+  password: 
+--- !u!114 &588660922915349861
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4653712199150427758}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 579b512c0c704466ab9d58e0baf1f695, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  _tmpText: {fileID: 0}
 --- !u!1 &7662858605974259763
 GameObject:
   m_ObjectHideFlags: 0
diff --git a/UnityGoesBruh/Assets/Prefabs/Simon Say.prefab b/UnityGoesBruh/Assets/Prefabs/Simon Say.prefab
index 7741f472a581b9666d5322c402ec6f9048f68023..2a309e916e4c319f9dd976485e002157951e5620 100644
--- a/UnityGoesBruh/Assets/Prefabs/Simon Say.prefab	
+++ b/UnityGoesBruh/Assets/Prefabs/Simon Say.prefab	
@@ -13,6 +13,7 @@ GameObject:
   - component: {fileID: 2345042}
   - component: {fileID: 6409752}
   - component: {fileID: 5950614561479544485}
+  - component: {fileID: 784747489321478113}
   m_Layer: 0
   m_Name: Simon Say
   m_TagString: Untagged
@@ -119,6 +120,19 @@ MonoBehaviour:
   - {fileID: 269945082084186345}
   - {fileID: 5491014912397346879}
   - {fileID: 650034429797036525}
+  _numberOfRound: 6
+--- !u!114 &784747489321478113
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 153876}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: e01673d84ffc4e45a919df6a1a39e814, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
 --- !u!1 &269945082084186345
 GameObject:
   m_ObjectHideFlags: 0
diff --git a/UnityGoesBruh/Assets/Scenes/TestConcept.unity b/UnityGoesBruh/Assets/Scenes/TestConcept.unity
index 59a7bc60b3f096e2b3c8d44d7aec6476cfd8c61c..55e48fd4dfced61a5ccb9a442af19226c08d5a59 100644
--- a/UnityGoesBruh/Assets/Scenes/TestConcept.unity
+++ b/UnityGoesBruh/Assets/Scenes/TestConcept.unity
@@ -180,6 +180,247 @@ PrefabInstance:
       objectReference: {fileID: 0}
     m_RemovedComponents: []
   m_SourcePrefab: {fileID: 100100000, guid: 46b4a6d1f34c0b2b080e60d07dac1000, type: 3}
+--- !u!1 &563843910 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 153876, guid: 46b4a6d1f34c0b2b080e60d07dac1000, type: 3}
+  m_PrefabInstance: {fileID: 483858791}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1 &672619412
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 672619416}
+  - component: {fileID: 672619415}
+  - component: {fileID: 672619414}
+  - component: {fileID: 672619413}
+  m_Layer: 5
+  m_Name: Canvas
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &672619413
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 672619412}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+--- !u!114 &672619414
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 672619412}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 0
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 800, y: 600}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 0
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+  m_PresetInfoIsWorld: 1
+--- !u!223 &672619415
+Canvas:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 672619412}
+  m_Enabled: 1
+  serializedVersion: 3
+  m_RenderMode: 2
+  m_Camera: {fileID: 1971942597}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 0
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_AdditionalShaderChannelsFlag: 25
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0
+--- !u!224 &672619416
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 672619412}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 4.3978424}
+  m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 937493569}
+  m_Father: {fileID: 0}
+  m_RootOrder: 7
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 2.003, y: 2.624}
+  m_SizeDelta: {x: 10, y: 10}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &937493568
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 937493569}
+  - component: {fileID: 937493571}
+  - component: {fileID: 937493570}
+  m_Layer: 5
+  m_Name: Text (TMP)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &937493569
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 937493568}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 672619416}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 56.9}
+  m_SizeDelta: {x: 200, y: 50}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &937493570
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 937493568}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_text: 
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+  m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 36
+  m_fontSizeBase: 36
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 0
+  m_HorizontalAlignment: 1
+  m_VerticalAlignment: 256
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: -100.060684, y: 0, z: -192.84155, w: -75.40981}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &937493571
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 937493568}
+  m_CullTransparentMesh: 1
 --- !u!1 &1249762039
 GameObject:
   m_ObjectHideFlags: 0
@@ -479,6 +720,131 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 4acf37e0a57dd8803900614ec32ff2a6, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+--- !u!1 &1906089658
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1906089661}
+  - component: {fileID: 1906089660}
+  - component: {fileID: 1906089659}
+  m_Layer: 0
+  m_Name: EventSystem
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1906089659
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1906089658}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_SendPointerHoverToParent: 1
+  m_HorizontalAxis: Horizontal
+  m_VerticalAxis: Vertical
+  m_SubmitButton: Submit
+  m_CancelButton: Cancel
+  m_InputActionsPerSecond: 10
+  m_RepeatDelay: 0.5
+  m_ForceModuleActive: 0
+--- !u!114 &1906089660
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1906089658}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_FirstSelected: {fileID: 0}
+  m_sendNavigationEvents: 1
+  m_DragThreshold: 10
+--- !u!4 &1906089661
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1906089658}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 8
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!20 &1971942597 stripped
+Camera:
+  m_CorrespondingSourceObject: {fileID: 4298483534289572133, guid: c734a74a53239c312bd0365490ad11b2, type: 3}
+  m_PrefabInstance: {fileID: 4298483536253286233}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1 &1981658349
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1981658351}
+  - component: {fileID: 1981658350}
+  m_Layer: 0
+  m_Name: ScriptHolder
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1981658350
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1981658349}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: ac0e9c5a4cf28dbd284752636f496de1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  _miniGames:
+  - {fileID: 2042556004}
+  - {fileID: 563843910}
+--- !u!4 &1981658351
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1981658349}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 6
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &2042556004 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 4653712199150427758, guid: 4ecd379a6157d530cabeb8e314dc48b7, type: 3}
+  m_PrefabInstance: {fileID: 2128998794}
+  m_PrefabAsset: {fileID: 0}
 --- !u!1001 &2128998794
 PrefabInstance:
   m_ObjectHideFlags: 0
@@ -486,6 +852,10 @@ PrefabInstance:
   m_Modification:
     m_TransformParent: {fileID: 0}
     m_Modifications:
+    - target: {fileID: 588660922915349861, guid: 4ecd379a6157d530cabeb8e314dc48b7, type: 3}
+      propertyPath: _tmpText
+      value: 
+      objectReference: {fileID: 937493570}
     - target: {fileID: 2722893037708101250, guid: 4ecd379a6157d530cabeb8e314dc48b7, type: 3}
       propertyPath: m_RootOrder
       value: 2
@@ -538,6 +908,10 @@ PrefabInstance:
       propertyPath: m_Name
       value: Keypad
       objectReference: {fileID: 0}
+    - target: {fileID: 8632890440510610421, guid: 4ecd379a6157d530cabeb8e314dc48b7, type: 3}
+      propertyPath: password
+      value: 
+      objectReference: {fileID: 0}
     - target: {fileID: 8632890440510610421, guid: 4ecd379a6157d530cabeb8e314dc48b7, type: 3}
       propertyPath: _password
       value: 5555
@@ -551,6 +925,10 @@ PrefabInstance:
   m_Modification:
     m_TransformParent: {fileID: 0}
     m_Modifications:
+    - target: {fileID: 4298483534289572133, guid: c734a74a53239c312bd0365490ad11b2, type: 3}
+      propertyPath: m_CullingMask.m_Bits
+      value: 247
+      objectReference: {fileID: 0}
     - target: {fileID: 4298483535738884810, guid: c734a74a53239c312bd0365490ad11b2, type: 3}
       propertyPath: m_RootOrder
       value: 3
diff --git a/UnityGoesBruh/Assets/Scripts/Game.meta b/UnityGoesBruh/Assets/Scripts/Game.meta
new file mode 100644
index 0000000000000000000000000000000000000000..92135c77a8fe3d2e851d5c1056279fb731f81b4e
--- /dev/null
+++ b/UnityGoesBruh/Assets/Scripts/Game.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 92114d009c965005c8cf705dfccb3065
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/UnityGoesBruh/Assets/Scripts/Game/Logic.cs b/UnityGoesBruh/Assets/Scripts/Game/Logic.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8f864296fe1f5f9c946249edcdeb85e7bc4c88f2
--- /dev/null
+++ b/UnityGoesBruh/Assets/Scripts/Game/Logic.cs
@@ -0,0 +1,44 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class Logic : MonoBehaviour, MiniGameObserver
+{
+    private MiniGame _curMiniGame;
+    [SerializeField]
+    private GameObject[] _miniGames;
+    // Start is called before the first frame update
+    void Start()
+    {
+        foreach (GameObject gameObject in _miniGames)
+        {
+            gameObject.GetComponent<MiniGame>().AddObserver(this);
+        }
+        ChooseRandomMiniGame();
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        
+    }
+
+    public void OnWin(MiniGame miniGame)
+    {
+        _curMiniGame.enabled = false;
+        ChooseRandomMiniGame();
+    }
+
+    public void OnLose(MiniGame miniGame)
+    {
+        _curMiniGame.enabled = false;
+        //Quit Game / Lose Condition
+    }
+
+    private void ChooseRandomMiniGame()
+    {
+        _curMiniGame = _miniGames[Random.Range(0, _miniGames.Length)].GetComponent<MiniGame>();
+        _curMiniGame.enabled = true;
+        _curMiniGame.StartScript();
+    }
+}
diff --git a/UnityGoesBruh/Assets/Scripts/Game/Logic.cs.meta b/UnityGoesBruh/Assets/Scripts/Game/Logic.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..608156eddab20648282b53dbbdded4903d8cf6b4
--- /dev/null
+++ b/UnityGoesBruh/Assets/Scripts/Game/Logic.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ac0e9c5a4cf28dbd284752636f496de1
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/UnityGoesBruh/Assets/Scripts/Game/MiniGameObserver.cs b/UnityGoesBruh/Assets/Scripts/Game/MiniGameObserver.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b5c4f12941dcd970da2c82beba2713c4c62ece00
--- /dev/null
+++ b/UnityGoesBruh/Assets/Scripts/Game/MiniGameObserver.cs
@@ -0,0 +1,9 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public interface MiniGameObserver
+{
+    void OnWin(MiniGame miniGame);
+    void OnLose(MiniGame miniGame);
+}
diff --git a/UnityGoesBruh/Assets/Scripts/Game/MiniGameObserver.cs.meta b/UnityGoesBruh/Assets/Scripts/Game/MiniGameObserver.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..55b3528c9acbb2d8271abfd08781a444e6ffcf31
--- /dev/null
+++ b/UnityGoesBruh/Assets/Scripts/Game/MiniGameObserver.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e4121f7189bc8a84dbf9391317e23b2a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/UnityGoesBruh/Assets/Scripts/Game/MinigameScript.meta b/UnityGoesBruh/Assets/Scripts/Game/MinigameScript.meta
new file mode 100644
index 0000000000000000000000000000000000000000..106516bc81488203946e26ada699f50c9eaa3b7a
--- /dev/null
+++ b/UnityGoesBruh/Assets/Scripts/Game/MinigameScript.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: f4639841ee3244979ed8a745c7e2aad8
+timeCreated: 1674124625
\ No newline at end of file
diff --git a/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/Keypad.cs b/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/Keypad.cs
new file mode 100644
index 0000000000000000000000000000000000000000..90d100fff24da7026fdc795aa83a9d8420576b34
--- /dev/null
+++ b/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/Keypad.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using TMPro;
+using UnityEngine;
+using Random = UnityEngine.Random;
+
+namespace Game.MinigameScript
+{
+    public class Keypad : MiniGame
+    {
+        private keypadController _keypadController;
+        [SerializeField]
+        private TMP_Text _tmpText;
+
+        private Dictionary<String, int> _quiz;
+
+        void Start()
+        {
+            _keypadController = gameObject.GetComponent<keypadController>();
+            _keypadController.OnCorrect(OnWin);
+            _quiz = new Dictionary<string, int>();
+            _quiz.Add("Début de la première guerre mondial", 1914);
+            _quiz.Add("Fin de la première guerre mondial", 1918);
+            _quiz.Add("Début de la deuxième guerre mondial", 1939);
+            _quiz.Add("Fin de la deuxième guerre mondial", 1945);
+            _quiz.Add("154 * 10 - 457", 1083);
+            _quiz.Add("2^10", 1024);
+            _quiz.Add("Réponse à la vie", 42);
+            _quiz.Add("Combien de Fast and Furious sont sortie\n1: 9\n2: 12\n3: 11", 2);
+            _quiz.Add("Qui est caroline dans Portal2\n1: Le petit robot qui nous accompagne\n2: Le personnage principal\n3: L'assistant personnel du PDG de Aperture Science", 3);
+            _quiz.Add("Date de sortie du premier Mario\n1: 1983\n2: 1991\n3: 1985", 1);
+            _quiz.Add("Quand est sortie le premier fps\n1: 1974\n2: 1993\n3: 1996", 1);
+            _quiz.Add("Quand est sortie la première version de l'editeur Unity", 2005);
+        }
+
+        public override void StartScript()
+        {
+            KeyValuePair<String, int> question = _quiz.ElementAt(Random.Range(0, _quiz.Count));
+            _keypadController.password = question.Value.ToString();
+            _keypadController.enabled = true;
+            _tmpText.text = question.Key;
+        }
+
+        public override void OnWin()
+        {
+            _keypadController.enabled = false;
+            _tmpText.text = "";
+            NotifyWin();
+        }
+
+        public override void OnLose()
+        {
+            NotifyLose();
+        }
+    }
+}
\ No newline at end of file
diff --git a/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/Keypad.cs.meta b/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/Keypad.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a5e86e46e0c4d5d45d3d0fbfd5a705fefb004580
--- /dev/null
+++ b/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/Keypad.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 579b512c0c704466ab9d58e0baf1f695
+timeCreated: 1674124653
\ No newline at end of file
diff --git a/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/MiniGame.cs b/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/MiniGame.cs
new file mode 100644
index 0000000000000000000000000000000000000000..9c7417c1f01ea9f2dba06452547f2d924927ed62
--- /dev/null
+++ b/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/MiniGame.cs
@@ -0,0 +1,36 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public abstract class MiniGame : MonoBehaviour
+{
+    private List<MiniGameObserver> _observers = new List<MiniGameObserver>();
+    // Start is called before the first frame update
+
+    public void AddObserver(MiniGameObserver miniGameObserver)
+    {
+        _observers.Add(miniGameObserver);
+    }
+
+    public abstract void StartScript();
+
+    public abstract void OnWin();
+
+    public void NotifyWin()
+    {
+        foreach (MiniGameObserver miniGameObserver in _observers)
+        {
+            miniGameObserver.OnWin(this);
+        }
+    }
+
+    public void NotifyLose()
+    {
+        foreach (MiniGameObserver miniGameObserver in _observers)
+        {
+            miniGameObserver.OnLose(this);
+        }
+    }
+
+    public abstract void OnLose();
+}
diff --git a/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/MiniGame.cs.meta b/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/MiniGame.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a5dbed79ae06a8d6117700a677b3fbe8d4bc8fdf
--- /dev/null
+++ b/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/MiniGame.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3df9ac4116330d82e9ccd3cf448fc28a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/SimonSay.cs b/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/SimonSay.cs
new file mode 100644
index 0000000000000000000000000000000000000000..11d83501a24cb4949b3094fabbf427a50f7b91f3
--- /dev/null
+++ b/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/SimonSay.cs
@@ -0,0 +1,32 @@
+using System;
+
+namespace Game.MinigameScript
+{
+    public class SimonSay : MiniGame
+    {
+        private SimonSayController _simonSayController;
+
+        private void Start()
+        {
+            _simonSayController = this.GetComponent<SimonSayController>();
+            _simonSayController.OnSuccess(OnWin);
+        }
+
+        public override void StartScript()
+        {
+            _simonSayController.enabled = true;
+            _simonSayController.Reset();
+        }
+
+        public override void OnWin()
+        {
+            _simonSayController.enabled = false;
+            NotifyWin();
+        }
+
+        public override void OnLose()
+        {
+            NotifyLose();
+        }
+    }
+}
\ No newline at end of file
diff --git a/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/SimonSay.cs.meta b/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/SimonSay.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..2bd1c495544d39469ef27d8492939f61f62f4688
--- /dev/null
+++ b/UnityGoesBruh/Assets/Scripts/Game/MinigameScript/SimonSay.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: e01673d84ffc4e45a919df6a1a39e814
+timeCreated: 1674132928
\ No newline at end of file
diff --git a/UnityGoesBruh/Assets/Scripts/Keypad/keypadController.cs b/UnityGoesBruh/Assets/Scripts/Keypad/keypadController.cs
index a1ed927f354fc3a6021365baf2ee750a4e753a69..232f58d86ce2bcfb5e5c857dd3e26a4d73a2dfdf 100644
--- a/UnityGoesBruh/Assets/Scripts/Keypad/keypadController.cs
+++ b/UnityGoesBruh/Assets/Scripts/Keypad/keypadController.cs
@@ -1,7 +1,9 @@
+using System;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using TMPro;
+using UnityEngine.Serialization;
 
 public class keypadController : MonoBehaviour
 {
@@ -10,8 +12,12 @@ public class keypadController : MonoBehaviour
     [SerializeField]
     private GameObject _keypadDisplay;
     private TMP_Text _textMeshProText;
-    [SerializeField]
-    public string _password;
+
+    [FormerlySerializedAs("_password")] [SerializeField]
+
+    private Action onCorrect;
+
+    public string password;
     // Start is called before the first frame update
     void Start()
     {
@@ -29,6 +35,11 @@ public class keypadController : MonoBehaviour
         
     }
 
+    public void OnCorrect(Action onCorrect)
+    {
+        this.onCorrect = onCorrect;
+    }
+
     void OnButtonPressed(string buttonName)
     {
         StartCoroutine(checkInput(buttonName));
@@ -46,14 +57,14 @@ public class keypadController : MonoBehaviour
         }
         else if (buttonName == "V")
         {
-            if (_textMeshProText.text == _password)
+            if (_textMeshProText.text == password)
             {
                 _textMeshProText.text = "Correct";
                 _textMeshProText.color = Color.green;
                 yield return new WaitForSeconds(1);
                 _textMeshProText.text = "";
                 _textMeshProText.color = Color.white;
-
+                onCorrect();
             }
             else
             {
diff --git a/UnityGoesBruh/Assets/Scripts/Player/InteractionController.cs b/UnityGoesBruh/Assets/Scripts/Player/InteractionController.cs
index ebb07f164d605083f5ea2dff68c2bf185de62cc5..593f8351e0568f1235a88efaef562520c1622ee2 100644
--- a/UnityGoesBruh/Assets/Scripts/Player/InteractionController.cs
+++ b/UnityGoesBruh/Assets/Scripts/Player/InteractionController.cs
@@ -30,16 +30,24 @@ public class InteractionController : MonoBehaviour
         _textMeshProText = _cursor.GetComponent<TMP_Text>();
     }
 
+    void DropCurrentObject()
+    {
+        _currentHoldedObjectRigidbody.freezeRotation = false;
+        _currentHoldedObjectRigidbody.useGravity = true;
+        _currentHoldedObject.layer = _layer;
+        _currentHoldedObject = null;
+        _justDropped = true;
+    }
     // Update is called once per frame
     void Update()
     {
+        if (_currentHoldedObject != null && Vector3.Distance(this.transform.position, _currentHoldedObject.transform.position) > 5)
+        {
+            
+        }
         if (_currentHoldedObject != null && Input.GetKeyDown(KeyCode.E))
         {
-            _currentHoldedObjectRigidbody.freezeRotation = false;
-            _currentHoldedObjectRigidbody.useGravity = true;
-            _currentHoldedObject.layer = _layer;
-            _currentHoldedObject = null;
-            _justDropped = true;
+            DropCurrentObject();
         }
         if(!_justDropped){
         Ray ray = _camera.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0));
diff --git a/UnityGoesBruh/Assets/Scripts/Simon Say/simonSayController.cs b/UnityGoesBruh/Assets/Scripts/Simon Say/SimonSayController.cs
similarity index 85%
rename from UnityGoesBruh/Assets/Scripts/Simon Say/simonSayController.cs
rename to UnityGoesBruh/Assets/Scripts/Simon Say/SimonSayController.cs
index f242945653f0d5797c2bdaf86d7071ef32572457..b26e55164839bc75113d1dbd337fc71426e3efe8 100644
--- a/UnityGoesBruh/Assets/Scripts/Simon Say/simonSayController.cs	
+++ b/UnityGoesBruh/Assets/Scripts/Simon Say/SimonSayController.cs	
@@ -1,10 +1,12 @@
+using System;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using TMPro;
 using Assets.Scripts.Simon_Say;
+using Random = UnityEngine.Random;
 
-public class simonSayController : MonoBehaviour
+public class SimonSayController : MonoBehaviour
 {
     [SerializeField]
     private GameObject[] _buttons;
@@ -12,6 +14,8 @@ public class simonSayController : MonoBehaviour
     [SerializeField]
     private int _numberOfRound = 6;
 
+    private Action onSuccess;
+
     private List<string> _orders = new List<string>();
     private List<string> _currentInput = new List<string>();
     // Start is called before the first frame update
@@ -34,6 +38,12 @@ public class simonSayController : MonoBehaviour
         StartCoroutine(checkInput(buttonName));
     }
 
+    public void Reset()
+    {
+        _orders.Clear();
+        _currentInput.Clear();
+    }
+
     IEnumerator PlayOrders()
     {
         foreach (var order in _orders)
@@ -67,7 +77,8 @@ public class simonSayController : MonoBehaviour
             {
                 if(_numberOfRound == _currentInput.Count)
                 {
-                    OnSuccess();
+                    Reset();
+                    onSuccess();
                 }
                 AddAleatoryInput();
             }
@@ -77,9 +88,9 @@ public class simonSayController : MonoBehaviour
         }
     }
 
-    void OnSuccess()
+    public void OnSuccess(Action onSuccess)
     {
-        
+        this.onSuccess = onSuccess;
     }
 
     void AddAleatoryInput()
diff --git a/UnityGoesBruh/Assets/Scripts/Simon Say/simonSayController.cs.meta b/UnityGoesBruh/Assets/Scripts/Simon Say/SimonSayController.cs.meta
similarity index 100%
rename from UnityGoesBruh/Assets/Scripts/Simon Say/simonSayController.cs.meta
rename to UnityGoesBruh/Assets/Scripts/Simon Say/SimonSayController.cs.meta