Kembali ke Beranda

Portal Decipher

DECIPHER: The Missing Node | L.I.D Mainframe
PROYEK KONSEP · DALAM TAHAP PEMBANGUNAN AKTIF · BUILD 0.2A
Flutter · Supabase · Dart · In-Dev

DEKODE
ATAU HANCUR.

Permainan intelijen berbasis teks dengan Flutter & Supabase — retas satelit, manipulasi memori perangkat keras, dan interogasi target di bawah tekanan waktu. Setiap keputusan Direktur menentukan hidup dan mati agen di lapangan.

Flutter/Dart Supabase Provider State SharedPrefs
18
Grande
Missions
5
Agen
Aktif
3
Trinity
Pillars
10
Tipe
Enkripsi
BLACKOUT_OVERLAY: INTERVAL 8-15S RANDOM /// MATRIX_DECRYPT: 40 TICKS × 50MS = 2 DETIK /// M.I.A EMERGENCY: 180 DETIK COUNTDOWN /// SUPABASE UPSERT: AGENT STATUS SYNCED /// SHAREDPREFERENCES: OFFLINE FALLBACK AKTIF /// 👁 PROVIDER: MISSIONPROVIDER + AGENTPROVIDER /// STATIC_NOISE: INTENSITY 15-40% (DINAMIS) /// TRUST METER: PERFORMANCE DROP < 40% ///
BLACKOUT_OVERLAY: INTERVAL 8-15S RANDOM /// MATRIX_DECRYPT: 40 TICKS × 50MS = 2 DETIK /// M.I.A EMERGENCY: 180 DETIK COUNTDOWN /// SUPABASE UPSERT: AGENT STATUS SYNCED /// SHAREDPREFERENCES: OFFLINE FALLBACK AKTIF /// 👁 PROVIDER: MISSIONPROVIDER + AGENTPROVIDER /// STATIC_NOISE: INTENSITY 15-40% (DINAMIS) /// TRUST METER: PERFORMANCE DROP < 40% ///
Screen Navigation · Flutter MaterialApp

ARSITEKTUR SISTEM

Alur navigasi nyata dari main.dart — setiap layar sudah dikodekan lengkap. Navigator stack dikelola dengan pushReplacement agar tidak ada tumpukan layar yang tidak perlu.

dashboard_screen.dart
✓ DONE

MAIN TERMINAL

CircularProgressIndicator → Global Threat %
intelFunds dari MissionProvider
activeAgents / totalAgents counter
Menu: Inbox · Registry · Forensics · Profile
PAPAN BUKTIisLocked: true 🚧
Layar Pertama · Home Route
inbox_screen.dart
✓ DONE

SECURE INBOX

Grouping by OperationModel
OP_BLACK_OPS → hanya 00:00–03:00 WIB
Emergency Banner → triggerEmergency()
is-check safe cast: GrandeMission | Seasonal
Status: locked → hidden, completed → strikethrough
Fetch on initState via postFrameCallback
agent_selection_screen.dart
✓ DONE

FORMULIR TUGAS

Tap foto → AgentDetailScreen (Dossier)
isAgencyCollapsed → DIRECTORATE SHUTDOWN
Reset kampanye: semua agen active + trust 80
Perk label dari specialty string
pushReplacement → WorkspaceScreen
Paper/ink aesthetic · Authorization Form
workspace_screen.dart
🚧 WIP

WORKSPACE

Fase 1: preMissionLog TypewriterText
Fase 2: MatrixDecryptText animation
Fase 3: BlackoutOverlay + StaticNoise
Pilihan taktis → MissionResultScreen
Perk agen: TIME BOOST · TOUGHENED · dll
INTI GAMEPLAY · DALAM PEMBANGUNAN
registry_screen.dart
✓ DONE

REGISTRI PERSONEL

Heal agent: -50F → status active
Tap kartu → AgentDetailScreen
Trust bar: merah jika < 40%
M.I.A: card greyscale + strikethrough
Intel Funds header dari MissionProvider
GestureDetector → Dossier navigation
profile_screen.dart
✓ DONE

MANIFES DIREKTUR

Biometrik live feed (animasi scan line)
Log: misi grande selesai · taktis selesai
M.I.A counter → merah jika > 0
Threat level → critical color coding
Clearance: LEVEL 5 (OMNISCIENT) 🔒
Dhimas W.N.Z · SEKTOR PURWOKERTO
🚧
WorkspaceScreen: Inti Gameplay — Masih Dibangun

Layar ini adalah pusat semua mekanik — dekripsi real-time, pilihan bercabang naratif, perk agen, dan integrasi semua overlay (Blackout, Static Noise, Matrix Decrypt). Layar lain (Dashboard, Inbox, Registry, Profile, AgentDetail, MissionResult, AgentSelection) sudah selesai dan fungsional penuh.

Dart · Provider Pattern · Supabase

KODE SISTEM

Potongan kode nyata dari berkas yang sudah dikodekan. Bukan prototipe — ini produksi.

mission_provider.dart
TRINITY ENGINE
// TRINITY PILAR A: GLOBAL THREAT
int _threatLevel = 25;
void modifyThreat(int delta) {
_threatLevel = (_threatLevel + delta).clamp(0, 100);
notifyListeners();
}

// TRINITY PILAR B: INTEL FUNDS
int _intelFunds = 150; // 50F heal agent
void modifyFunds(int amount) {
_intelFunds = (_intelFunds + amount).clamp(0, 99999);
}

// SISTEM M.I.A EMERGENCY (180 detik)
void triggerEmergency(String agentId) {
_emergencySeconds = 180;
_emergencyTimer = Timer.periodic(
const Duration(seconds: 1), (t) {
_emergencySeconds--;
if (_emergencySeconds <= 0) {
t.cancel(); modifyThreat(25);
}
});
}

// SharedPreferences offline fallback
await _loadLocalProgress(); // sebelum fetch
await _saveLocalProgress(); // setelah upsert
blackout_overlay.dart
GAMEPLAY OVERLAY
// Random interval: 8–15 detik antar blackout
int _randomBetween(int min, int max) =>
min + _random.nextInt(max - min + 1);

// 3 fase: normal → flash → dark → flash → normal
enum _BlackoutPhase { normal, flash, dark }

// Blackout duration: 2–4 detik random
final darkDuration = _randomBetween(
widget.minBlackoutSeconds, // default: 2
widget.maxBlackoutSeconds); // default: 4

// Teks berkedip saat layar gelap
final messages = ['SIGNAL LOST',
'JAMMING DETECTED', 'ENCRYPTING...'];
matrix_decrypt_text.dart
DECRYPT ANIM
// 40 ticks × 50ms = 2 detik total efek
const int maxTicks = 40;
_timer = Timer.periodic(
const Duration(milliseconds: 50), (t) {
int revealLength =
(cleanText.length * progress).floor();
// karakter terungkap satu per satu
if (ticks >= maxTicks) {
widget.onComplete(); // callback!
}
});
final _chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#\$%&*<>?';
agent_model.dart
DATA MODEL
enum AgentStatus { active, injured, mia }

// Null-safety: trust_level bisa null dari Supabase
trustLevel: (json['trust_level'] as num?)?.toInt() ?? 80,

// Status parse dengan orElse fallback
status: AgentStatus.values.firstWhere(
(e) => e.toString().split('.').last ==
json['status'],
orElse: () => AgentStatus.active,
),

// copyWith: hanya mutable fields yang bisa diubah
AgentModel copyWith({String? name, String? bio,
int? trustLevel, AgentStatus? status, ...})
// id, callsign, specialty → immutable
static_noise_overlay.dart
NOISE ENGINE
// Intensitas noise NAIK seiring waktu habis
double _noiseIntensity() {
final ratio = secondsRemaining / timeLimitSeconds;
if (ratio <= 0.3) return 0.40; // 40% korupsi
if (ratio <= 0.6) return 0.25; // 25%
return 0.15; // awal: 15%
}

// Spasi & tanda baca TIDAK dikotori
if (char == ' ' || char == '.' || char == ',') {
buffer.write(char); // preserve structure
} else if (_random.nextDouble() < intensity) {
buffer.write(_noiseChars[...]); // korupsi
}

// Interval 1500ms · blink indicator 800ms
AgentModel · AgentProvider · AgentDetailScreen

DOSSIER & PERKS

Setiap agen tersimpan di Supabase dengan fallback lokal. Specialty diterjemahkan ke Perk pasif yang aktif di WorkspaceScreen. Trust di bawah 40% — performa menurun drastis.

A001 · INFILTRATOR
AGEN KALA
CS: CHRONOS
🕵️
PERK: TOUGHENED 4 LIVES
Paling tahan banting terhadap penalti kegagalan dekripsi. Ideal untuk misi Grande dengan Blackout aktif.
Trust:
85%
A002 · CRYPTOGRAPHER
AGEN BIMA
CS: ENIGMA
🧮
PERK: TIME BOOST +15 DETIK
Menambahkan 15 detik ke time_limit_seconds. Krusial untuk Seasonal Mission batas waktu 45 detik.
Trust:
92%
A003 · PROFILER
AGEN SITA
CS: ORACLE
🧠
PERK: IDENTIFIED TRUTH FILTER
Memilah kebohongan interogasi otomatis. Sangat berguna di modul Linguistik & puzzle text replace.
Trust:
78%
A004 · SIGNAL OPERATOR
AGEN BAYU
CS: WRAITH
📡
PERK: SIGNAL STABILITY NOISE -50%
Mengurangi intensitas StaticNoiseController saat Threat Level tinggi. Noise 40% → 20%.
Trust:
70%
A005 · HARDWARE SPECIALIST
AGEN RAKA
CS: SPARK
🔌
PERK: HARDWARE BYPASS I2C MASTER
Wajib saat misi pembongkaran server — bypass I2C (VCC·GND·SDA·SCL) dan Hexadecimal port hack.
Trust:
65%
STATUS: MISSING IN ACTION
REDACTED
CS: UNKNOWN
💀
STATUS: M.I.A LIVES: 0
Nyawa habis → agen gugur permanen. Data ter-update di Supabase via upsert(agent.toJson()). Tidak bisa pulih tanpa reset kampanye.
DIRECTORATE SHUTDOWN: Semua Agen Gugur

Jika semua agen berstatus mia atau injured, AgentSelectionScreen mendeteksi isAgencyCollapsed dan merender layar SHUTDOWN merah dengan opsi reset kampanye — semua agen di-set active dan trust kembali ke 80%.

evidence_board (Supabase table) · attachment_url

PAPAN BUKTI FORENSIK

Setelah misi Grande selesai, attachment_url dari GrandeMissionModel otomatis di-insert ke tabel evidence_board Supabase bersama user_id. Fitur ini terkunci di Dashboard — masih dalam pembangunan.

GM-02
CCTV_PLATFORM_A.PNG
attachment_type: 'image'
"PRIA DI PERON"
prerequisiteId: GM-01 · Caesar +3
GM-04
CCTV_MALL_ATRIUM.PNG
choices: [RuteA, RuteB]
payout_funds: 0
"WANITA DI MALL"
Bypass HEX I2C · Kunci: A3FF4E
EVIDENCE
> INSERT INTO evidence_board
  (user_id, grande_mission_id,
   title, image_url)
> VALUES (auth.uid, 'GM-04',
  'Forensik: Wanita di Mall',
  attachment_url);
> INSERT 1 ✓
"KANTOR YANG KOSONG"
successReport → Supabase persisted
Tabel: grande_missions
id, title, operation_id
puzzle_type, time_limit_seconds
raw_message, clean_message
noise_character, translated_word
choices[] (JSONB), prerequisite_id
attachment_url, attachment_type
success_report, fail_report
pre_mission_log, briefing
Tabel: seasonal_missions
id, title, operation_id
puzzle_type, time_limit_seconds
payout_funds (Dana Intel)
raw_message, translated_word
clues[] (array)
pre_mission_log, briefing
— batas waktu 45 detik —
— tidak ada choices —
Tabel: user_progress
user_id (FK auth.users)
grande_mission_id
seasonal_mission_id
status: 'completed'
completed_at timestamp
+ SharedPreferences fallback
local_completed_grande
local_completed_seasonal
MissionProvider · Global State · ChangeNotifier

TRINITY PILLARS

Tiga variabel global yang mengontrol seluruh alur permainan. Dikelola oleh MissionProvider dengan ChangeNotifier dan di-watch oleh semua layar via context.watch().

💎
TRINITY A

INTEL FUNDS

Mulai: 150F · Clamp(0, 99999)
Seasonal mission selesai → +payoutFunds
Heal injured agent → -50F
Beli clue rahasia → cost varies
Saldo Aktif 150 F
⚔️
TRINITY B

THREAT LEVEL

Mulai: 25% · Clamp(0, 100)
Gagal dekripsi → +threat
M.I.A timeout → +25 otomatis
>= 80% → StaticNoise aktif penuh
Level Saat Ini 75%
🤝
TRINITY C

TRUST METER

Per-agen 0–100 · Clamp via copyWith
Misi sukses → +trustDelta
Misi gagal/bunuh diri → -trust
< 40% → performa lapangan turun
CHRONOS Trust 85%

GRANDE MISSIONS

18 TOTAL · STORY MODE

Misi kampanye utama dengan prerequisite_id dan sistem choices JSONB. Menyelesaikan misi GM-04 membuka dua rute: GM-05A atau GM-05B via _unlockedBranchMissions.

preMissionLog: teks naratif TypewriterText
cleanMessage: target dekripsi final
noiseCharacter: karakter noise BlackoutMode
successReport / failReport: debriefing teks
attachmentUrl → evidence_board insert

SEASONAL MISSIONS

45 DETIK · TAKTIS

Misi sampingan tanpa pilihan naratif, murni kecepatan dekripsi dengan payout_funds sebagai reward. Agen Bima (TIME BOOST +15s) sangat vital di sini. Dapat di-retry terus, tidak ada prerequisite.

payoutFunds: dana intel yang didapat
timeLimitSeconds: umumnya 45 detik
puzzleType: lockdown / caesar / hex / dll
translatedWord: jawaban dekripsi
→ Tidak ada attachmentUrl / choices
⚡ MIDNIGHT PROTOCOL
OP_BLACK_OPS hanya muncul di InboxScreen antara jam 00:00–03:00 WIB. Deteksi via DateTime.now().hour. Banner: "UNAUTHORIZED ACCESS DETECTED. NO LOGS KEPT." — Easter egg untuk pemain notturnal.
Gameplay Overlays · Visual Mechanics · Dart Widgets

MODUL OVERLAY

Empat widget Dart kustom yang membentuk lapisan visual gameplay. Semua sudah selesai dikodekan — menunggu integrasi penuh di WorkspaceScreen.

BlackoutOverlay
blackout_overlay.dart · StatefulWidget
✓ DONE

BLACKOUT ANOMALY

3 fase: normal → flashdark → flash → normal
Flash: AnimationController 120ms · white overlay
Gelap: 2–4 detik random · HapticFeedback.heavy
Interval: 8–15 detik random antar kejadian
Teks berkedip: 'SIGNAL LOST' · 'JAMMING DETECTED'
Callback: onBlackoutStart + onBlackoutEnd
BlackoutOverlay(isActive: _timerActive, minIntervalSeconds: 8, maxBlackoutSeconds: 4)
@#$
MatrixDecryptText
matrix_decrypt_text.dart · StatefulWidget
✓ DONE

MATRIX DECRYPT

40 ticks × 50ms = 2 detik total animasi
Progress: karakter terungkap kiri ke kanan
Noise chars: ABCDE...@#$%<>?£¥
HapticFeedback: medium per 3 ticks · heavy selesai
onComplete() → callback ke WorkspaceScreen
didUpdateWidget: re-trigger saat isDecrypting berubah
MatrixDecryptText(rawText: '...', cleanText: target, isDecrypting: true)

STC
StaticNoiseController
static_noise_overlay.dart · InheritedWidget pattern
✓ DONE

STATIC NOISE

Builder pattern: render terserah widget induk
Intensitas dinamis: 15% → 25% → 40% seiring waktu
Spasi & tanda baca tidak dikotori (preserve structure)
Interval refresh: 1500ms (configurable)
Agen BAYU WRAITH: noise -50% (20% maks)
StaticModeIndicator: blink 800ms di header
StaticNoiseController(cleanText: msg, isActive: blackoutMode, secondsRemaining: t)
TypewriterText
typewriter_text.dart · StatefulWidget
✓ DONE

TYPEWRITER

30ms per karakter → natural typing speed
Fase 1 WorkspaceScreen: preMissionLog narrative
MissionResultScreen: debriefText (success/fail)
didUpdateWidget: re-trigger jika teks induk berubah
_currentIndex track · Timer cleanup di dispose()
Kompatibel dengan StaticNoiseController output
TypewriterText(text: preMissionLog, style: TextStyle(fontFamily: 'Courier'))
Stack Overlay di WorkspaceScreen (Target Integrasi):
Stack(children: [
_buildDecodingPhase(mission, agent), // Fase 1-3 konten
// Fase 3 kondisi (blackout mode + misi Grande):
StaticNoiseController(cleanText: mission.cleanMessage, isActive: isBlackoutMode, ...),
BlackoutOverlay(isActive: _timerActive, onBlackoutStart: ..., onBlackoutEnd: ...),
MatrixDecryptText(isDecrypting: _isDecrypting, onComplete: _handleDecryptComplete),
])
Progress Report · Build 0.2A

STATUS PEMBANGUNAN

✓ DONE
main.dart · Supabase init · MultiProvider setup · DashboardScreen root
✓ DONE
MissionProvider: Trinity Pillars · M.I.A Emergency · SharedPrefs fallback · Supabase sync
✓ DONE
AgentProvider: fetch · fallback[3] · updateStatus · updateTrust · upsert Supabase
✓ DONE
AgentModel + MissionModel (Base/Grande/Seasonal) + OperationModel — null-safe fromJson/toJson
✓ DONE
DashboardScreen · InboxScreen · RegistryScreen · ProfileScreen · AgentDetailScreen · AgentSelectionScreen
✓ DONE
MissionResultScreen (BaseMissionModel generalized) · TypewriterText · BlackoutOverlay · MatrixDecryptText · StaticNoiseController
🚧 WIP
WorkspaceScreen — integrasi semua overlay + fase gameplay + perk agen aktif + pilihan bercabang
🔒 LOCKED
Papan Bukti Forensik (Dashboard) · puzzle types lengkap · Supabase Auth flow · OP_BLACK_OPS missions
Overall Build Progress ~68%
● Foundation & screens selesai ⚠ Gameplay core WIP ○ Auth & advanced
L·I·D
LINGUIST INTELLIGENCE DIVISION · BUILD 0.2A
© 2026 Dhimas Wildan Nur Zakariya · Purwokerto, Indonesia
Engine: Flutter/Dart · Backend: Supabase · gcjmuwgbktaemwmiopmp
PROYEK DALAM PEMBANGUNAN
Diskusi

Belum ada komentar. Jadilah yang pertama! 👋

Tulis komentar…