
An educational serious game built for DIGITOPIA 2025 — Egypt's first nationwide digital innovation competition organised by the Ministry of Communications & Information Technology. Out of 25,000+ applicants nationwide, our six-person team placed 2nd overall. The game was built from scratch in 11 days (plus 2 days of polish) with no AI tooling, then showcased at ITI and Egypt Game Jam.
The concept: An IT employee is called in to repair a museum in Egypt 2030 — five hours before opening — after a cyberattack knocks all systems offline. Players journey through four wings (Pharaonic, Coptic, Islamic, Modern), solving culturally-rooted puzzles to restore each exhibit while learning both Egyptian history and digital-safety fundamentals.
void UTriviaComponent::EvaluateAnswer(int32 SelectedIndex)
{
const FTriviaQuestion& Q = Questions[CurrentIndex];
if (SelectedIndex == Q.CorrectIndex)
{
CorrectStreak++;
Score += BasePts * GetDifficultyMultiplier();
if (CorrectStreak >= 3)
RaiseDifficulty();
}
else
{
CorrectStreak = 0;
LowerDifficulty();
SpawnHintCollectible(Q.HintActorClass);
}
AdvanceQuestion();
}
float UTriviaComponent::GetDifficultyMultiplier() const
{
// Easy=1.0, Medium=1.5, Hard=2.0
return 1.0f + (static_cast<float>(DifficultyLevel) * 0.5f);
}void APuzzleManager::OnPuzzleSolved(UPuzzleBase* Puzzle)
{
SolvedCount++;
PlayCompletionFX(Puzzle->GetActorLocation());
if (SolvedCount >= RequiredToUnlock)
{
// All puzzles in this era cleared — unlock the exhibit door
BroadcastRoomCleared(CurrentEra);
TransitionToNextEra();
}
else
{
int32 Remaining = RequiredToUnlock - SolvedCount;
UpdateHUD_PuzzlesLeft(Remaining);
}
}EPhishingResult UPhishingPuzzle::ClassifyMessage(
const FPhishingEntry& Entry, bool bPlayerSaidPhishing)
{
const bool bCorrect = (Entry.bIsPhishing == bPlayerSaidPhishing);
if (bCorrect)
{
Score += Entry.PointValue;
ShowFeedback(Entry.EducationTip, /*bPositive=*/true);
return EPhishingResult::Correct;
}
ShowFeedback(Entry.EducationTip, /*bPositive=*/false);
return EPhishingResult::Wrong;
}