Skip to content

Latest commit

 

History

History
94 lines (58 loc) · 10.6 KB

File metadata and controls

94 lines (58 loc) · 10.6 KB

PIXEL PANIC 게임 설계

핵심 루프

한 판은 210초이며 모든 입력은 클릭 또는 터치입니다.

사고 선택 → 로봇 선택 → 행동 선택 → 도로 이동 → 현장 도착 → AI 안전 퀴즈 또는 구조 미니게임 → 해결 → 웨이브 뉴스 → 다음 스테이지 → 결과 → AI 마을 뉴스

게임 데이터와 판정은 lib/rescue-engine.ts에 있고 React와 Phaser는 이 결과를 표시합니다. 기본 시드 20260807을 사용하므로 같은 시간과 행동 순서는 같은 결과를 냅니다.

지도 빈 공간은 마우스나 터치로 좌우 드래그할 수 있습니다. 지도와 사고 핀, NPC 클릭 영역은 함께 이동하고 HUD는 고정되며, 좌우 방향키도 같은 탐색 범위에서 동작합니다. 맵은 총 9종입니다. 낮·폭우·야간·가을·설원 5종은 같은 마을의 계절·기상 변형이며, 항구·산악·운하·철도 4종은 건물·하천·길의 구조가 완전히 다릅니다. 신규 지형은 별도의 NPC·사고·로봇 시작 좌표와 이동 경로를 사용하되 사고 시나리오와 주민 캐릭터는 그대로 이어집니다.

지도 위 NPC를 클릭할 때마다 현재 작전 상태와 캐릭터 성격을 반영한 생성형 AI 대사를 새로 요청합니다. 한 작전에서 이미 표시된 NPC 대사는 다시 사용하지 않으며, 중복 응답이나 AI 장애가 발생하면 캐릭터별 미사용 안전 대사로 교체합니다.

지도에 배치된 주민 4명을 클릭하면 캐릭터별 이름·직업·성격과 현재 재난 상태를 반영한 생성형 AI 말풍선이 열립니다. 입력창이나 선택지는 없으며 7초 뒤 자동으로 닫힙니다. AI 호출이 실패해도 같은 성격으로 작성된 로컬 대사가 즉시 표시됩니다.

사고를 고른 뒤 오른쪽 로봇 카드를 클릭하면 고정 행동 패널 대신 지도 위 명령 팝업이 열립니다. 팝업에는 선택한 로봇, 사고 위험도와 가능한 행동만 표시되며, 행동 실행·닫기 버튼·지도 바깥 영역 클릭으로 자동으로 닫힙니다. 다른 로봇 카드를 누르면 같은 위치에서 해당 로봇의 행동으로 즉시 교체됩니다.

출동 명령을 받은 로봇은 행동 종류를 대표하는 공용 연출 지점이 아니라 선택한 사고의 실제 맵 좌표로 이동합니다. 여러 로봇이 동시에 출동해도 각자의 사고 좌표를 독립적으로 추적합니다. 모든 맵은 사고마다 도로를 따르는 전용 경유 경로를 사용하며, 긴 구간은 약 28px 단위의 보행 스텝으로 나누어 걷기 애니메이션과 방향 전환을 표시합니다.

로봇의 보행 애니메이션이 사고 좌표에 실제로 도착한 순간 /api/quiz를 호출합니다. 생성형 AI는 현재 사고·선택 행동·담당 로봇·웨이브·위험도에 맞는 안전 상식 3지선다 문제와 짧은 해설을 구조화 출력으로 만듭니다. 최근 48개 질문과 누적 출제 순서를 로컬 저장소에 보존하므로 재출동·새로고침 뒤에도 같은 문제를 다시 채택하지 않습니다. 8개 출제 관점을 순환하며 13번 초급 → 47번 중급 → 8번 이후 고급 순서로 상황 판단의 복잡도가 높아집니다. 서버가 동일·유사 질문을 발견하면 생성형 AI를 한 번 더 호출하고, 그래도 겹치면 미사용 관점의 로컬 문제로 바꿉니다. 오답이면 로봇이 현장에서 대기하고 같은 문제를 다시 풀며, 정답일 때만 엔진이 행동과 사고 해결을 확정합니다. 퀴즈를 읽는 동안 작전·확산 타이머는 멈춥니다.

옥상 고양이 쿠션 캐치

옥상 고양이 고립에 BUDDY의 고양이 구조를 배치하면 도로 이동이 끝난 뒤 안전 퀴즈 대신 전용 팝업 미니게임이 열립니다. 고양이는 지붕 위 15~85% 범위를 불규칙한 속도로 오가다가 추락 예고 동작을 하며, 정확히 1초 뒤 아래로 떨어집니다. 플레이어는 화면 아래를 클릭·드래그하거나 좌우 버튼을 눌러 양팔로 쿠션을 든 BUDDY를 이동합니다.

충돌 시 고양이와 쿠션 중심이 허용 범위 안에서 겹치면 구조 성공으로 사고가 해결되고 구조 점수와 고양이 구조 기록이 반영됩니다. 놓치면 고양이는 낮은 차양에 안전하게 착지하지만 임무는 실패하며, 사고와 rescue_cat 행동은 완료되지 않아 다시 출동할 수 있습니다. 미니게임 중에는 작전·확산 타이머가 멈추고 결과 판정은 lib/cat-rescue-minigame.ts와 결정론 엔진이 수행합니다.

본부 AI 무전 폭탄 해체

광장 폭탄 위협에 FIX의 폭탄 해체를 배치하면 현장 도착 뒤 안전 퀴즈 대신 전용 팝업이 열립니다. 결정론 로직이 시드와 시도 횟수로 빨강·파랑 중 안전 회로를 먼저 선택하고 /api/bomb-hint에는 그 색과 위험도만 전달합니다. 본부의 여성형 AI 통신관 루나는 정답 색 이름을 직접 말하지 않고 소방차·노을·바다·하늘 같은 색 비유를 사용한 짧은 무전 암호를 생성합니다.

플레이어는 무전을 해독해 빨간선 또는 파란선을 마우스·터치로 클릭합니다. 정답이면 FIX가 회로를 차단해 사고를 해결하고, 오답이면 가상의 안전 장치가 작동해 폭발 없이 점수만 감소한 채 재도전할 수 있습니다. AI는 힌트 문장만 만들며 정답 전선, 클릭 판정, 점수와 사고 결과는 lib/bomb-defusal.ts와 결정론 엔진이 처리합니다. 생성 실패·timeout·잘못된 응답에는 정답 색에 대응하는 로컬 무전이 즉시 사용됩니다.

웨이브와 사고

현재 웨이브에 속한 재난을 모두 해결하고 로봇이 복귀하면 게임 타이머를 즉시 멈춥니다. 현재 기록으로 AI 마을 뉴스와 주민 인터뷰를 표시하며, 뉴스의 다음 스테이지 출동 버튼을 누르면 남은 시간을 차감하지 않은 채 다음 맵과 재난을 활성화합니다. 고양이 구조와 폭탄 해체는 모든 웨이브에서 새 임무로 초기화되며, 둘 중 하나라도 남아 있으면 다음 스테이지로 넘어가지 않습니다.

웨이브 순서 사고
화재 기초 1 전기 합선, 빵집 화재, 가스 폭발 위험, 옥상 고양이, 광장 폭탄 위협
폭우와 침수 2 발전소 침수, 하천 범람, 다리 파손, 서쪽 주민 고립, 옥상 고양이, 광장 폭탄 위협
복합 재난 3 민가 확산 화재, 옥상 고양이, 동쪽 주민 고립, 광장 폭탄 위협

고유 사고 유형은 11개이고, 반복되는 고양이·폭탄 임무를 포함하면 한 판에서 해결하는 스테이지 임무는 총 15개입니다. HUD와 결과 화면은 이 누적 임무 수를 15/15로 표시합니다.

경고 상태의 사고도 선행 조치할 수 있습니다. 활성 사고의 확산 타이머가 0이 되면 위험도가 오르고 마을 보존율과 점수가 감소하며 연결 사고가 활성화됩니다. 해결한 사고는 더 확산하지 않습니다.

로봇과 행동

  • AQUA: 화재 진압, 수위 감소, 주변 방화 처리
  • FIX: 전력·가스 차단, 발전 시설 복구, 임시 다리, 장애물 제거, 폭탄 해체
  • BUDDY: 주민 대피·구조, 수리 부품 운반, 고양이 구조

각 로봇은 한 번에 한 작업만 수행합니다. 부품을 먼저 운반하면 발전 시설 복구 시간이 30% 줄어듭니다. 대화가 열려 있는 동안 사고 시간은 70% 속도로 흐르고 안전 퀴즈가 열려 있는 동안에는 멈춥니다.

사운드

lib/audio-engine.ts가 외부 음원 파일 없이 오리지널 32스텝 8비트 BGM을 실시간 합성합니다. 첫 타이틀 화면은 밝고 차분한 96 BPM 구조대 테마를, 실제 작전은 긴장감 있는 112 BPM 테마를 사용합니다. 타이틀 진입 시 자동 재생을 시도하며 브라우저 정책이 막으면 첫 클릭·터치·키 입력에 즉시 재생하고, 작전 시작 시 임무 테마로 자연스럽게 전환합니다. 선택, 대화, 출동, 사고 해결, 콤보, 웨이브 전환, 성공과 실패에는 각각 다른 효과음이 연결되며 음소거와 일시정지 상태를 따릅니다.

연쇄 사고

전기 합선 → 빵집 화재 → 가스 위험 → 민가 화재
발전소 침수 → 하천 범람 → 다리 파손 → 주민 고립

선행 사고를 확산 전에 해결하면 해당 확산은 일어나지 않습니다. 이미 경고가 표시된 후속 사고는 직접 선택해 미리 처리할 수 있습니다.

콤보

ID 순서
power_cut_fire FIX 전력 차단 → AQUA 화재 진압
evacuate_gas_fire BUDDY 주민 대피 → FIX 가스 차단 → AQUA 진압
parts_repair BUDDY 부품 운반 → FIX 설비 복구
drain_bridge_rescue AQUA 수위 감소 → FIX 임시 다리 → BUDDY 구조
clear_firebreak FIX 장애물 제거 → AQUA 주변 방화 처리

정의된 순서와 제한 시간 안의 완료 행동만 콤보가 됩니다. 순서 사이에 다른 안전 행동이 있어도 상대 순서가 유지되면 인정하지만, 역순은 인정하지 않습니다.

점수와 결과

  • 사고 해결 +100, 행동 완료 +20
  • 주민 구조, 고양이 구조, 폭탄 해체, 콤보, 남은 시간 보너스
  • 사고 확산 -100 및 마을 보존율 감소
  • S: 보존율 90% 이상, 주민 9명 구조, 콤보 3개 이상
  • A: 보존율 75% 이상 / B: 55% 이상 / C: 0~54%

시간 종료 또는 보존율 0이면 실패 결과로 전환됩니다. 결과 화면에서 해결 사고, 구조 주민, 보존율, 콤보, 최대 콤보, 남은 시간과 등급을 확인하고 다시 시작할 수 있습니다.

웨이브 완료와 결과 진입 시 실제 작전 기록으로 /api/news를 호출합니다. 중간 뉴스는 완료한 웨이브만 보도하고 전체 작전이 끝났다고 표현하지 않으며, 출동 버튼은 AI 응답을 기다리지 않아도 즉시 사용할 수 있습니다. 결과 화면의 AI 마을 뉴스를 누르면 신문 형식 팝업에 최종 결과에 맞는 제목·기사와 주민 초상화·인터뷰가 표시됩니다. 성공 여부와 구조 성과에 따라 인터뷰 주민은 구조대장 하나, 정비사 민수, 자원봉사자 보람, 하천 감시원 두리 중 결정론적으로 정해집니다. AI는 엔진이 전달한 기록을 기사 문장으로 구성할 뿐 점수·승패·사고 결과를 바꿀 수 없고, 응답이 늦거나 실패하면 같은 기록으로 만든 로컬판 기사를 보여줍니다.