diff --git a/assets/objects/fingerprint_kit.png b/assets/objects/fingerprint_kit.png new file mode 100644 index 0000000..db802b0 Binary files /dev/null and b/assets/objects/fingerprint_kit.png differ diff --git a/assets/rooms/room_office.json b/assets/rooms/room_office.json index bad8649..b79f272 100644 --- a/assets/rooms/room_office.json +++ b/assets/rooms/room_office.json @@ -316,7 +316,43 @@ "width":48, "x":100.927703875072, "y":101.732793522267 - }], + }, + { + "height":48, + "id":15, + "name":"fingerprint_kit", + "rotation":0, + "type":"", + "visible":true, + "width":48, + "x":390, + "y":144 + }, + { + "height": 48, + "id": 16, + "name": "spoofing_kit", + "rotation": 0, + "type": "", + "visible": true, + "width": 48, + "x": 340, + "y": 144 + }, + { + "height": 48, + "id": 17, + "name": "lockpick", + "rotation": 0, + "type": "", + "visible": true, + "width": 48, + "x": 330, + "y": 144 + } + + + ], "opacity":1, "type":"objectgroup", "visible":true, @@ -324,7 +360,7 @@ "y":0 }], "nextlayerid":12, - "nextobjectid":15, + "nextobjectid":18, "orientation":"orthogonal", "renderorder":"right-down", "tiledversion":"1.11.0", diff --git a/assets/scenarios/ceo_exfil.json b/assets/scenarios/ceo_exfil.json index 005560b..bf5be26 100644 --- a/assets/scenarios/ceo_exfil.json +++ b/assets/scenarios/ceo_exfil.json @@ -38,7 +38,6 @@ "locked": true, "lockType": "bluetooth", "mac": "00:11:22:33:44:55", - "range": 2, "observations": "A locked tablet device that requires Bluetooth pairing" }, { @@ -63,7 +62,10 @@ "name": "Office Computer", "takeable": false, "requires": "password", - "observations": "A computer with a cybersecurity alert on screen" + "hasFingerprint": true, + "fingerprintOwner": "ceo", + "fingerprintQuality": 0.9, + "observations": "A computer with a cybersecurity alert on screen. There might be fingerprints on the keyboard." }, { "type": "notes", @@ -72,6 +74,18 @@ "readable": true, "text": "URGENT: Multiple unauthorized access attempts detected from CEO's office IP address", "observations": "A concerning IT department memo" + }, + { + "type": "fingerprint_kit", + "name": "Fingerprint Kit", + "takeable": true, + "observations": "A kit used for collecting fingerprints from surfaces" + }, + { + "type": "spoofing_kit", + "name": "Fingerprint Spoofing Kit", + "takeable": true, + "observations": "A specialized kit containing silicone, gelatin, and other materials for creating artificial fingerprints" } ] }, @@ -127,6 +141,12 @@ "readable": true, "text": "Large data transfers detected to unknown external IPs - All originating from CEO's office", "observations": "Suspicious network activity logs" + }, + { + "type": "lockpick", + "name": "Lock Pick Kit", + "takeable": true, + "observations": "A professional lock picking kit with various picks and tension wrenches" } ] }, @@ -139,6 +159,7 @@ "locked": true, "lockType": "key", "requires": "ceo_office_key", + "difficulty": "easy", "objects": [ { "type": "pc", @@ -153,6 +174,7 @@ "locked": true, "lockType": "key", "requires": "briefcase_key", + "difficulty": "medium", "observations": "An expensive leather briefcase with a sturdy lock", "contents": [ { @@ -198,6 +220,7 @@ "locked": true, "lockType": "key", "requires": "safe_key", + "difficulty": "hard", "observations": "A well-hidden wall safe behind a painting", "contents": [ { diff --git a/assets/sounds/lockpick_binding.mp3 b/assets/sounds/lockpick_binding.mp3 new file mode 100644 index 0000000..bdf479b Binary files /dev/null and b/assets/sounds/lockpick_binding.mp3 differ diff --git a/assets/sounds/lockpick_click.mp3 b/assets/sounds/lockpick_click.mp3 new file mode 100644 index 0000000..bdf479b Binary files /dev/null and b/assets/sounds/lockpick_click.mp3 differ diff --git a/assets/sounds/lockpick_overtension.mp3 b/assets/sounds/lockpick_overtension.mp3 new file mode 100644 index 0000000..bdf479b Binary files /dev/null and b/assets/sounds/lockpick_overtension.mp3 differ diff --git a/assets/sounds/lockpick_reset.mp3 b/assets/sounds/lockpick_reset.mp3 new file mode 100644 index 0000000..bdf479b Binary files /dev/null and b/assets/sounds/lockpick_reset.mp3 differ diff --git a/assets/sounds/lockpick_set.mp3 b/assets/sounds/lockpick_set.mp3 new file mode 100644 index 0000000..bdf479b Binary files /dev/null and b/assets/sounds/lockpick_set.mp3 differ diff --git a/assets/sounds/lockpick_success.mp3 b/assets/sounds/lockpick_success.mp3 new file mode 100644 index 0000000..bdf479b Binary files /dev/null and b/assets/sounds/lockpick_success.mp3 differ diff --git a/assets/sounds/lockpick_tension.mp3 b/assets/sounds/lockpick_tension.mp3 new file mode 100644 index 0000000..bdf479b Binary files /dev/null and b/assets/sounds/lockpick_tension.mp3 differ diff --git a/assets/sounds/lockpick_wrong.mp3 b/assets/sounds/lockpick_wrong.mp3 new file mode 100644 index 0000000..bdf479b Binary files /dev/null and b/assets/sounds/lockpick_wrong.mp3 differ diff --git a/index.html b/index.html index 6c02819..93820bb 100644 --- a/index.html +++ b/index.html @@ -27,6 +27,284 @@ display: none; } + /* Notification System */ + #notification-container { + position: fixed; + top: 20px; + right: 20px; + width: 300px; + max-width: 80%; + z-index: 2000; + font-family: Arial, sans-serif; + pointer-events: none; + } + + .notification { + background-color: rgba(0, 0, 0, 0.8); + color: white; + padding: 15px 20px; + margin-bottom: 10px; + border-radius: 5px; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3); + transition: all 0.3s ease; + opacity: 0; + transform: translateY(-20px); + pointer-events: auto; + position: relative; + overflow: hidden; + } + + .notification.show { + opacity: 1; + transform: translateY(0); + } + + .notification.info { + border-left: 4px solid #3498db; + } + + .notification.success { + border-left: 4px solid #2ecc71; + } + + .notification.warning { + border-left: 4px solid #f39c12; + } + + .notification.error { + border-left: 4px solid #e74c3c; + } + + .notification-title { + font-weight: bold; + margin-bottom: 5px; + font-size: 16px; + } + + .notification-message { + font-size: 14px; + line-height: 1.4; + } + + .notification-close { + position: absolute; + top: 10px; + right: 10px; + cursor: pointer; + font-size: 16px; + color: #aaa; + } + + .notification-close:hover { + color: white; + } + + .notification-progress { + position: absolute; + bottom: 0; + left: 0; + height: 3px; + background-color: rgba(255, 255, 255, 0.5); + width: 100%; + } + + /* Notes Panel */ + #notes-panel { + position: fixed; + bottom: 80px; + right: 20px; + width: 350px; + max-height: 500px; + background-color: rgba(0, 0, 0, 0.9); + color: white; + border-radius: 5px; + box-shadow: 0 2px 15px rgba(0, 0, 0, 0.5); + z-index: 1999; + font-family: Arial, sans-serif; + display: none; + overflow: hidden; + transition: all 0.3s ease; + border: 1px solid #444; + } + + #notes-header { + background-color: #222; + padding: 12px 15px; + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 1px solid #444; + } + + #notes-title { + font-weight: bold; + font-size: 18px; + color: #3498db; + } + + #notes-close { + cursor: pointer; + font-size: 18px; + color: #aaa; + transition: color 0.2s; + } + + #notes-close:hover { + color: white; + } + + #notes-search-container { + padding: 10px 15px; + background-color: #333; + border-bottom: 1px solid #444; + } + + #notes-search { + width: 100%; + padding: 8px 10px; + border: none; + border-radius: 3px; + background-color: #222; + color: white; + font-size: 14px; + } + + #notes-search:focus { + outline: none; + box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.5); + } + + #notes-categories { + display: flex; + padding: 5px 15px; + background-color: #2c2c2c; + border-bottom: 1px solid #444; + } + + .notes-category { + padding: 5px 10px; + margin-right: 5px; + cursor: pointer; + border-radius: 3px; + font-size: 12px; + transition: all 0.2s; + } + + .notes-category.active { + background-color: #3498db; + color: white; + } + + .notes-category:hover:not(.active) { + background-color: #444; + } + + #notes-content { + padding: 15px; + overflow-y: auto; + max-height: 350px; + } + + .note-item { + margin-bottom: 15px; + padding-bottom: 15px; + border-bottom: 1px solid #444; + cursor: pointer; + transition: background-color 0.2s; + padding: 10px; + border-radius: 3px; + } + + .note-item:hover { + background-color: #333; + } + + .note-item:last-child { + margin-bottom: 0; + padding-bottom: 0; + border-bottom: none; + } + + .note-title { + font-weight: bold; + margin-bottom: 5px; + font-size: 14px; + color: #3498db; + display: flex; + justify-content: space-between; + align-items: center; + } + + .note-icons { + display: flex; + gap: 5px; + } + + .note-icon { + font-size: 12px; + color: #aaa; + } + + .note-text { + font-size: 13px; + line-height: 1.4; + white-space: pre-wrap; + max-height: 80px; + overflow: hidden; + transition: max-height 0.3s; + } + + .note-item.expanded .note-text { + max-height: 1000px; + } + + .note-timestamp { + font-size: 11px; + color: #888; + margin-top: 5px; + text-align: right; + } + + #notes-toggle { + position: fixed; + bottom: 20px; + right: 20px; + width: 60px; + height: 60px; + background-color: #3498db; + color: white; + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3); + z-index: 1998; + font-size: 28px; + transition: all 0.3s ease; + } + + #notes-toggle:hover { + background-color: #2980b9; + transform: scale(1.1); + } + + #notes-count { + position: absolute; + top: -5px; + right: -5px; + background-color: #e74c3c; + color: white; + border-radius: 50%; + width: 24px; + height: 24px; + font-size: 14px; + display: flex; + justify-content: center; + align-items: center; + font-weight: bold; + } + #laptop-popup { display: none; position: fixed; @@ -112,20 +390,6 @@ background: rgba(0, 0, 0, 0.5); z-index: 999; } - - #bluetooth-scanner-ui { - position: absolute; - top: 10px; - right: 10px; - display: none; - } - - .scanner-display { - background: rgba(0, 0, 0, 0.8); - color: white; - padding: 10px; - font-family: sans-serif; - } @@ -134,13 +398,31 @@
Loading...
- -
-
- Bluetooth Scanner Active + + +
+ + +
+
+
Notes & Information
+
×
+
+ +
+
+
All
+
Important
+
Unread
+
+
- +
+ 📝 +
0
+
+