Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
79416ed
docs: revise GAME_DESIGN floors 2-4 to as-built design
SilverSupplier Jun 12, 2026
293410d
feat: playtest log analysis tool, SUS, behavioral comprehension measure
SilverSupplier Jun 12, 2026
213b8e5
test: EditMode coverage for hint escalator and mentor profiles
SilverSupplier Jun 12, 2026
fffb21a
feat: visual overhaul - bundled Korean font, real character sprites, …
SilverSupplier Jun 13, 2026
c2a47ae
fix: clean title screen - opaque overlay, centered tower backdrop
SilverSupplier Jun 13, 2026
64ed4f7
fix: codex tab/text overlap and full-screen ending report
SilverSupplier Jun 13, 2026
663c143
feat: overhaul Magic Exam Hall presentation
SilverSupplier Jun 13, 2026
4bc077a
merge: consolidate game design as-built updates
SilverSupplier Jun 13, 2026
b677e70
merge: consolidate HCI experiment tooling
SilverSupplier Jun 13, 2026
0326fe7
merge: consolidate HCI experiment upgrades
SilverSupplier Jun 13, 2026
93ae9de
merge: consolidate hint escalator tests
SilverSupplier Jun 13, 2026
bae5b18
merge: consolidate mentor hint tests
SilverSupplier Jun 13, 2026
fd6095a
merge: consolidate visual overhaul pass
SilverSupplier Jun 13, 2026
e09152e
fix: align visual assets with runtime checks
SilverSupplier Jun 13, 2026
f4fd2c8
test: protect bundled visual asset integration
SilverSupplier Jun 13, 2026
4f71ee3
merge: sync latest main before final release
SilverSupplier Jun 13, 2026
00a9848
fix: polish release HUD and ending presentation
SilverSupplier Jun 13, 2026
7c8349b
fix: refine options slider layout
SilverSupplier Jun 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions docs/CREDITS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,11 @@

| 자산 | 작가 | 출처 | 라이선스 | 사용 위치 |
| --- | --- | --- | --- | --- |
| 기본 32×32 도트 sprite pack | 프로젝트 내부 제작 | `Assets/MagicExamHall/Resources/Sprites` | 프로젝트 라이선스 | 시험장 배경, 플레이어, 설치물, 룬, 원소 문양 |
| 기본 32×32 도트 sprite pack | 프로젝트 내부 제작 | `Assets/MagicExamHall/Resources/Sprites` | 프로젝트 라이선스 | 시험장 배경, 설치물, 룬, 원소 문양 |
| Zelda-like tilesets and sprites (캐릭터 시트) | ArMM1998 | <https://opengameart.org/content/zelda-like-tilesets-and-sprites> | CC0 | 플레이어 4방향 idle/walk/cast 프레임, 멘토 NPC 15종 (`scripts/import-character-pack.py`로 슬라이스·리컬러) |
| Procedural fallback sprite | 프로젝트 내부 제작 | `PixelArtFactory.cs` | 프로젝트 라이선스 | PNG 누락 시 fallback |
| 고문서 UI fallback pack | 프로젝트 내부 제작 | `MagicExamUiTheme.cs` | 프로젝트 라이선스 | 타이틀 로고, 책/두루마리 패널, 버튼, 노트, 체크박스, 슬라이더 |
| `TitleLogo.png` | 프로젝트 내부 제작 | `Resources/Sprites/UI/TitleLogo.png` | 프로젝트 라이선스 | 타이틀 화면 마법탑 룬 문장 |

## 사운드

Expand All @@ -22,7 +25,8 @@

| 자산 | 작가 | 출처 | 라이선스 | 사용 위치 |
| --- | --- | --- | --- | --- |
| Unity 기본 Arial | — | Unity 번들 | — | HUD, 룬 라벨, 노트 |
| Galmuri11 / Galmuri14 (한글 비트맵 폰트) | Lee Minseo (quiple) | <https://github.com/quiple/galmuri> | SIL Open Font License 1.1 | HUD, 룬 라벨, 노트, 멘토 대사 등 모든 UI 텍스트 (`Resources/Fonts/`) |
| Unity 기본 Arial | — | Unity 번들 | — | Galmuri 로드 실패 시 fallback |

## 자산 추가 시 작성 규칙

Expand Down
5 changes: 3 additions & 2 deletions docs/FINAL_REPORT.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,14 +128,15 @@ stroke session(다획 입력 버퍼 0.8초) → 특징 추출 → family 판정
| family별 첫 시도 성공률 | base family별 첫 attempt 성공 비율 분포 | RQ3 | attempts.csv |
| 실패 유형 분포 | invalid/incomplete/dependency/detached/no-seal | RQ2 | attempts.csv |
| assist level 도달률 | 힌트 단계 1/2/3 사용 횟수 | RQ2 | attempts.csv |
| 피드백 이해도 | 실패 후 다음 행동을 말로 설명 가능한지 + 발화대로 다음 시도가 변했는지 로그 대조 | RQ2 | 인터뷰 + attempts.csv |
| 피드백 이해도 (자기보고) | 실패 후 다음 행동을 말로 설명 가능한지 | RQ2 | 인터뷰 |
| 피드백 이해도 (행동) | 발화한 교정 방향과 다음 시도의 실제 변화 일치율 | RQ2 | 인터뷰 + attempts.csv 대조 |
| 막힘 지점 | 2분 이상 정체 또는 동일 목표 3회 이상 실패 | RQ1 | 관찰 |
| 세션 내 학습 곡선 | 시도 순서 rolling 성공률의 기울기 (양수 = 플레이만으로 향상) | RQ1 | attempts.csv 분석 |
| 힌트 전후 성공률 | 목표 단위 첫 힌트 노출 이전 vs 이후 성공률 비교 (escalator 효과의 준-인과 증거) | RQ2 | attempts.csv 분석 |
| 설문 5점 척도 | 명확성·공정성·피드백 도움·조작감·몰입감 | 전체 | 설문 |
| SUS | System Usability Scale 10문항, 표준 채점 0~100 (기준선 68) | 전체 | 설문 |

학습 곡선·힌트 전후·family 공정성 분석은 `scripts/playtest-attempts-analysis.py`가 자동 산출한다 (합성 데이터 자가 검증 포함). 단일 조건 관찰 연구의 한계는 §6.2에 명시하되, 힌트 전후 비교가 RQ2의 준-인과적 증거를 제공한다.
광범위한 실패 유형·혼동 행렬·막힘 지점·SUS 채점은 `scripts/analyze-playtest-attempts.py`산출한다. RQ1 학습 곡선, RQ2 힌트 전후, RQ3 family 공정성의 재현 가능한 집중 분석은 합성 데이터 self-test를 포함한 `scripts/playtest-attempts-analysis.py`로 교차 확인한다. 단일 조건 관찰 연구의 한계는 §6.2에 명시한다.

### 5.3 사전 수집: stroke 데이터

Expand Down
141 changes: 53 additions & 88 deletions docs/GAME_DESIGN.md

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/PHASE5_6_CODE_INSPECTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,11 @@

| # | 항목 | 판정 | 증거 |
| --- | --- | --- | --- |
| 1 | 트리거 6종 | **부분** | 5분 침묵(300s) ✓ (`firstFloorLongSilenceShown`, 5343행). 실패 escalator ✓ (PlayMode `FailedBaseCastsEscalateMagicNoteHints`). **1층 8초 침묵 트리거는 코드에서 발견 못 함** |
| 1 | 트리거 6종 | **부분** | 5분 침묵(300s) ✓ (`firstFloorLongSilenceShown`, 5343행). 실패 escalator ✓ (PlayMode `FailedBaseCastsEscalateMagicNoteHints`). 1층 8초 침묵 ✓ — **정정(2026-06-12): `firstFloorGhostShown` 8초 트리거가 구현돼 있음** (ExamGameController 5331행, ghost gesture + 노트). 초기 검수의 grep 누락이었음 |
| 2 | 의도적 미등장 | 빌드 검증 필요 | 코드 구조상 모순 없음, 전수 확인은 플레이 필요 |
| 3 | 대사 풀 트리거당 3~5변주 ≈ 25줄 | **부분** | `MentorPresentationController`에 층별 멘토 프로필 5종(벽화 연구원·균열 감시자 등) 구현. 변주 수 전수 카운트는 미실시 |
| 4 | 등장 연출 (페이드인+머리 위 룬+`npc_appear`, 4층 가장자리 윈도우) | **부분** | `npc_appear` SFX ✓, 멘토 프레젠테이션 ✓. 4층 가장자리 윈도우는 4층 디자인 자체가 변경돼 스펙 재정의 필요 |
| 5 | EditMode 테스트 (쿨다운·1회성·풀 무작위) | **미구현** | EditMode 테스트 5클래스 중 멘토 트리거 테스트 없음 (CustomShape/Gesture/PlayerMovement/StageDefinition/StrokeInput뿐) |
| 5 | EditMode 테스트 (쿨다운·1회성·풀 무작위) | **부분 (2026-06-12 갱신)** | `HintAssistanceTests` 추가 — escalator 단계 상승·캡·assisted 플래그·체크리스트·멘토 프로필을 EditMode로 검증. 단 "쿨다운·풀 무작위"는 **대사 풀/쿨다운 시스템 자체가 미구현**이라 테스트 대상이 없음 (스펙 §13 잔여 기능) |

## P6-2. 결정적 모먼트 검수

Expand Down
56 changes: 33 additions & 23 deletions docs/RESEARCH_PROTOCOL.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,30 +37,37 @@
| overlay별 실패 유형 | invalid, incomplete, dependency, detached, no seal | attempts.csv |
| assist level 도달률 | assistLevel 1/2/3 사용 횟수 | attempts.csv |
| 막힘 지점 | 2분 이상 진행 정체 또는 같은 목표 3회 이상 실패 | 관찰 |
| 피드백 이해도 | 실패 후 다음 행동을 말로 설명 가능한지 | 인터뷰 |
| 피드백 이해의 행동 검증 | 참가자가 말한 교정 방향대로 다음 시도가 실제로 변했는지 (발화 ↔ attempts.csv 대조 코딩) | 인터뷰 + attempts.csv |
| 피드백 이해도 (자기보고) | 실패 후 다음 행동을 말로 설명 가능한지 | 인터뷰 |
| 피드백 이해도 (행동) | 참가자가 말한 교정 방향대로 다음 시도가 실제로 변했는지 (일치/불일치 코딩) | 인터뷰 발화 + attempts.csv 대조 |
| 학습 곡선 | 세션 내 시도 순서에 따른 성공률 이동 평균 (전반부 vs 후반부) | attempts.csv |
| 힌트 효과 | 힌트 노출 전후 성공률 변화 (창 5회) — 관찰 경향 | attempts.csv |
| 몰입감 | 직접 마법을 시전한다는 느낌 | 설문 |
| SUS 점수 | System Usability Scale 10문항 (0~100) | 설문 |
| SUS | 표준 사용성 점수 (68 이상 = 평균 이상) | SUS 설문 |

## 사후 설문 구성
### 피드백 이해도(행동) 코딩 절차

1. 커스텀 5문항 (5점 척도): 명확성, 공정성, 피드백 도움, 조작감, 몰입감 + 자유 의견
2. SUS 10문항 (5점 척도, 표준 채점: 홀수 문항 점수-1, 짝수 문항 5-점수, 합계 ×2.5)
1. 실패 직후 진행자가 "다음에 무엇을 바꿔 볼 건가요?"를 묻고 발화를 기록한다 (10초 이내, 게임은 일시정지하지 않음).
2. 분석 시 해당 발화와 바로 다음 attempt의 변화(family 변경 / 위치 이동 / 도형 교정 / seal 먼저 생성 등)를 대조해 일치=1, 불일치=0으로 코딩한다.
3. 일치율을 세션·실패 유형별로 집계한다. 자기보고("이해했다")와 행동(실제 교정)의 이중 측정이 목적이다.

SUS 문항 (한국어 번안, "이 시스템" = 이 게임의 드로잉 입력):
### SUS 설문 (사후 설문에 추가, 10문항 5점 척도)

1. 이 게임을 자주 하고 싶다.
2. 이 게임의 조작이 불필요하게 복잡하다고 느꼈다.
3. 이 게임의 조작이 쉬웠다.
4. 이 게임을 하려면 누군가의 도움이 필요할 것 같다.
5. 이 게임의 여러 기능이 잘 어우러져 있었다.
6. 이 게임의 동작이 일관되지 않다고 느꼈다.
7. 대부분의 사람들이 이 게임의 조작을 빨리 익힐 것 같다.
8. 이 게임의 조작이 매우 번거로웠다.
9. 게임을 하는 동안 자신감을 느꼈다.
10. 이 게임을 시작하기 전에 알아야 할 것이 많았다.
표준 SUS 문항의 한국어 번안. "이 시스템" 대신 "이 게임의 드로잉 입력"으로 묻는다.

기준선: SUS 68점이 통상적 평균. 68 이상이면 평균 이상의 사용성으로 보고한다.
1. 이 게임의 드로잉 입력을 자주 사용하고 싶다.
2. 드로잉 입력이 불필요하게 복잡하다고 느꼈다.
3. 드로잉 입력이 사용하기 쉬웠다.
4. 드로잉 입력을 쓰려면 누군가의 도움이 필요할 것 같다.
5. 드로잉 입력의 여러 기능이 잘 통합되어 있었다.
6. 드로잉 입력의 동작이 일관되지 않다고 느꼈다.
7. 대부분의 사람들이 드로잉 입력을 빠르게 배울 수 있을 것이다.
8. 드로잉 입력이 다루기 매우 번거로웠다.
9. 드로잉 입력을 쓰는 동안 자신감이 있었다.
10. 드로잉 입력을 쓰기 전에 많은 것을 익혀야 했다.

응답은 `outputs/playtest-*/sus.csv`(`participantId,q1..q10`)로 저장하고 `python scripts/analyze-playtest-attempts.py --sus <파일>`로 채점한다 (홀수 문항 응답-1, 짝수 문항 5-응답, 합계 ×2.5).

사후 설문은 위 SUS 10문항과 명확성·공정성·피드백 도움·조작감·몰입감의 커스텀 5문항, 자유 의견으로 구성한다. SUS 68점을 통상적 평균 기준선으로 사용한다.

## 입력 버퍼 A/B

Expand All @@ -76,14 +83,17 @@ SUS 문항 (한국어 번안, "이 시스템" = 이 게임의 드로잉 입력):

1. `attempts.csv`를 session 단위로 모은다.
2. 직접 식별 정보가 없는지 확인한다.
3. `python scripts/playtest-attempts-analysis.py <세션폴더...> --out outputs/playtest-1/analysis`를 실행한다. 산출:
3. `python scripts/analyze-playtest-attempts.py <세션폴더...> -o outputs/playtest-1/analysis`를 실행해 실패 유형, 혼동 행렬, assist 도달, 막힘 지점을 산출한다.
4. `python scripts/playtest-attempts-analysis.py <세션폴더...> --out outputs/playtest-1/rq-analysis`를 실행한다. 산출:
- RQ1: 세션 내 학습 곡선(rolling 성공률 기울기), 층별 첫 성공까지 시도 수
- RQ2: 목표 단위 힌트 노출 전후 성공률 비교, assist level별 직후 성공률
- RQ3: family별 첫 시도 성공률 분포와 편차
4. floor, phase, recognizedFamily, worldEffect, success, assistLevel을 pivot한다.
5. 상위 오인식/막힘 3개를 Phase 4/5 백로그로 옮긴다.
6. 입력 버퍼 D3 결정을 `docs/FINAL_COMPLETION_PLAN.md` 결정 로그에 기록한다.
7. SUS를 표준 채점해 세션별 점수와 평균을 기록한다.
5. `python scripts/playtest-attempts-analysis.py --self-test`로 집중 분석 로직을 합성 데이터에서 검증한다.
6. SUS를 `python scripts/analyze-playtest-attempts.py --sus outputs/playtest-1/sus.csv`로 채점한다.
7. 피드백 이해도(행동) 코딩을 수행하고 일치율을 기록한다.
8. floor, phase, recognizedFamily, worldEffect, success, assistLevel을 pivot한다.
9. 상위 오인식/막힘 3개를 Phase 4/5 백로그로 옮긴다.
10. 입력 버퍼 D3 결정을 `docs/FINAL_COMPLETION_PLAN.md` 결정 로그에 기록한다.

## 보고 산출물

Expand Down
93 changes: 93 additions & 0 deletions docs/asset-licenses/fonts/Galmuri-LICENSE.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
Copyright (c) 2019–2025 Lee Minseo (quiple@quiple.dev)

This font software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://openfontlicense.org


-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------

PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.

The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.

DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.

"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).

"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).

"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.

"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.

PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:

1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.

2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.

3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.

4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.

5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.

TERMINATION
This license becomes null and void if any of the above conditions are
not met.

DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
15 changes: 15 additions & 0 deletions docs/asset-licenses/fonts/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Font Asset Notes

추가일: 2026-06-13

## Galmuri (SIL Open Font License 1.1)

| 파일 | 원본 | 작가 | 출처 | 라이선스 |
| --- | --- | --- | --- | --- |
| `Resources/Fonts/Galmuri11.ttf` | Galmuri11 v2.40.3 | Lee Minseo (quiple) | <https://github.com/quiple/galmuri> | SIL OFL 1.1 |
| `Resources/Fonts/Galmuri11-Bold.ttf` | Galmuri11 Bold | Lee Minseo (quiple) | 〃 | SIL OFL 1.1 |
| `Resources/Fonts/Galmuri14.ttf` | Galmuri14 | Lee Minseo (quiple) | 〃 | SIL OFL 1.1 |

- 선정 사유: 게임 UI 전반의 한글 텍스트를 OS 폰트(Malgun Gothic) 의존 없이 모든 머신에서 동일하게 픽셀 단위로 또렷하게 렌더링하기 위함. 픽셀 아트 톤과도 맞는 비트맵 스타일.
- 로더: `ExamGameController.LoadGameFont`가 `Resources/Fonts/Galmuri11`을 우선 로드하고, 없으면 Malgun Gothic/Arial OS 폰트로 fallback.
- OFL 전문은 `Galmuri-LICENSE.txt` 참조. OFL은 폰트 번들·임베드를 허용하며, 폰트 파일 자체를 판매하지 않는 한 게임에 포함 가능.
Loading
Loading