UNDERTALE is the indie RPG where no one has to die.
언더테일은 누구도 죽을 필요 없는 인디 RPG이다. 마더 2, 유메닛키, 동굴이야기 등의 영감을 받아, 찬사를 받는 흥미로운 캐릭터, 서로 연결된 사운드트랙을 만들었으며 일반적인 RPG의 틀을 꼬았다. 이 게임에 빠져든 팬들의 성원에 힘입어, 한동안 이 게임을 피하기란 힘들었다.
제발 온라인 상에 이런 큰 스프라이트 시트를 올리지 말아주세요.
왜냐하면 여기 있는 이상한 것들이 진짜로 사용되기 때문에, 이 게임의 맥락을 먼저 보여주고 싶거든요.
처음 1년처럼 기다려줘요...
그냥 보여주려고 가져오는 Spriter's resource나 그 외 뭔가 쉽게 하려고 해도 말이죠
이 문서는 조사가 더 필요합니다. 아이디어 및 발견한 것들을 토론 페이지에 올려주세요. 상세 정보: 이런 스프라이트 이름이 data.win에도 있나요?
언더테일과 같이 게임 메이커를 통해 만들어진 게임들은 스프라이트가 각각의 파일이 아닌, 큰 PNG 스프라이트 시트에 모든 스프라이트를 다 저장해놓는 형태이기에, 의도치 않게 스포일러성 스프라이트를 포함한 모든 스프라이트를 보기가 쉬워진다.
이 이상한 파일명은 알파벳순으로 정리했을 때 맨 위에 오도록 지정한 것이고, 좀 더 명확히 보이기 위해서...인데 별로 안좋은 것 같다. 파일 목록은 오직 스프라이트들이 외부 프로그램을 이용해 문자열 이름으로 구분되어 있을 때나 이렇게 보이기 때문이다. 근데 이런! 이후 버전에서는 이게 바뀌고 말았다.
내가 싫어하는 게 뭔지
알고 있니?
</div>
그건
bepis야
맛
향기
질감
이봐...
너
침흘ㄹ...
버전 1.001에서는 스프라이트 판에 대한 부탁 대신에 모호하게 'bepis'라는 성(性)적인 말로 적혀있다. 이 말은 팬으로서 토비 폭스가 언더테일 제작에 영감을 받은 마더 2의 주인공이 좋아하는 음식을 싫어하는 월면의 사람 이름을 따온 것이다. 'Bepis'는 펩시(Pepsi)의 스펠링을 우스꽝스럽게 비튼 것으로, 개발자가 이 단어가 웃기다고 생각해서 넣은 것이다.
이 글에는 진짜 의미가 빠져있는데, 그 의미는 앞서 했던 부탁을 철회하고, 스프라이트 판을 올리는 것을 허락한다는 사실이다. 처량해 보이는 이메일이 이 사실을 뒷받침한다.
Hello. He-he-he-he-have some respect and don't spoil the game. It's impossible to have mysteries nowadays, because of nosy people like you. Please keep all of this between us. If you post it online, I won't make any more secrets. No one will be impressed. It will be your fault! He-he-he-he-ha-he-he-ha-he-he.
번역
안녕. 이 게임을 존중 해해해해해주고 게임을 스포일러 하지 말아줘. 너같이 참견하기 좋아하는 사람들 때문에 요즘엔 미스터리를 즐기는게 불가능하단 말이지. 제발 우리끼리만 모든 내용을 갖고 있자. 만약 온라인에 올린다면, 난 더이상 비밀을 만들지 않을거야. 누구도 감명받지 못하게 될거라고. 그건 네 책임이 될거야! 헤헤헤헤하헤헤하헤헤.
이 사운드 파일은 게임의 비밀을 온라인에 올리지 말라고 하는 여덟 캐릭터의 텍스트 음성화 목소리이다. 그 캐릭터들이 누구냐ㅁ... 어 잠깐...
이 이상한 파일명은 알파벳 순서로 파일을 정렬했을 때 맨 위에 오도록 만들어놓은 것이고, 이 말을 명확히 하려고 한 것이다. 게임 폴더 안에 있는 다른 모든 OGG 포맷의 배경 및 효과음 파일들은 "mus_"나 "snd_"라는 접두어가 붙어있다.
이 파일은 버전 1.001에서 업데이트 되었는데, 원래 이 파일에 있던 내용을 대부분 없앴다.
Part of this game's charm is the mystery of how many options or secrets there are. If you are reading this, please don't post this message or this information anywhere. Or doing secrets will become pointless.
By the way, most of the seemingly unused text/files are used.
If you can find the in-game context for an asset, you can show it off. But if you can't, it probably means you haven't looked hard enough. Anything truly unused I'll probably post myself, later.
Living in a world like this, where people can simply cheat out the answers from the code... your impatience has REALLY damaged you, hasn't it?
번역
이 게임의 매력은 선택지와 비밀들에 대한 미스터리에 있습니다. 만약 이걸 읽는다면, 부디 메시지와 정보를 어디에도 올리지 말아주세요. 그렇지 않으면 비밀들은 의미 없게 되어버리고 말 것입니다.
그나저나, 사용하지 않은 것 같은 대부분의 텍스트나 파일들은 분명 어딘가엔 사용했습니다.
만약 당신이 돈을 위해 게임상 정보를 찾는다면, 자랑할 수는 있겠죠. 하지만 면밀히 보지 않았을 것이므로 그렇게 할 수 없을겁니다. 제가 정말로 나중에 밝힐 것들은 여기 없습니다.
만약 이 세계를 그런 식으로, 코드 분석을 통해 간단히 답을 알게되는 식으로... 그렇게 살게 된다면 당신의 성급함이 큰 피해를 줘왔을 겁니다, 그렇지 않을까요?
이 알림은 attention_hackerz_no_2 스크립트에 놓여져 있는데, 이것은 스트링 변수 demonx, demony, demonz, demond로써 설정되어 있다. 이 대사는 명백히 크래커들에게 경고를 하기 위해 사용되었다. 이 대사의 이름이 지어진 것으로 보아, 이 글을 읽을 기회를 늘리기 위해 내부 문자열 리스트 처음에 놓았다.
그런데 버전 1.001에는 다음과 같이 바뀌었다:
영어 원문
Greetings.
You have made yourself completely clear.
Understood.
I, your humble servant, will follow you to the utmost...
번역
발 쭉 뻗고 잘 살고 계신지요?
여러분들이 어떤 사람들인지 제게 똑똑히 보여주셨습니다.
이제 잘 알겠습니다.
여러분의 보잘것 없는 이 하인이 여러분을 극진히 모시겠습니다...
또한, 스트링 변수들도 demona, demonb, demonc, demond로 이름이 바뀌었다. 신기하게도, 버전 1.00 때 있던 메시지의 첫번째 줄은 그와 연관된 다른 변수에 여전히 존재하고 있는데, 이스터 에그를 이름붙이는 것과 관련된 문자열인 scr_namingscreen_check로 옮겨졌다.
Curiously, in 1.05, the copy in scr_namingscreen_check seems to have been changed.
v1.001
v1.05
Part of this game's charm is the mystery of how many options or secrets there are. If you are reading this, please don't post this message or this information anywhere. Or doing secrets will become pointless.
For some reason, this change appears to have been exclusive to the Mac and Windows versions, with the Linux version and the console ports still having the "Part of this game's charm" message. Version 1.06's Windows and Mac releases seem to blank out the message, although some versions of 1.08 Windows and Mac seem to have the message "..." instead, while others seemingly return to the "Part of this game's charm" message. In particular, the Mac non-DRM release seems to return to the original message, while the Windows Steam and non-DRM releases have "...".
* (It's a picture of a dog juggling several balls.) * (You feel satisfaction that your hard work reverse engineering the encryption of the Xbox One has paid off.)
gml_Object_obj_xbox_controller_connect_Create_0 in the Xbox One (v1.12X+) version contains this congratulation for dataminers, appropriately stored in a variable named unusedstring. Toby's foresight is appreciated, considering how difficult Xbox One's security was to crack.
Note that there's no new line after the first sentence in the original string.
(Source: luigiutmc, original TCRF research (actual location))
If the code "ball" is typed on the title screen, a jingle will play. The jingle itself is named snd_ballchime.ogg. In a 2025 interview with Famitsu, Toby would reveal that this jingle was originally made for a canceled, Panel de Pon-inspired project a friend of his was working on.
At the very end of the ACT menu strings is this yet again generic error message, a placeholder for the ACT options of the fight against Asriel's true form.
Gaster (who has 666 for an enemy ID) has a complete set of stats in the code, all ridiculously high (to the point an enemy given these stats is borderline impossible to damage and getting hit insta-kills Frisk) and consisting only of numerous 6s. His EXP and GOLD are set to negative numbers, meaning the player should actually lose EXP and GOLD if they somehow won. They are as follows:
Gaster also would have had a 666% chance to award an item with the ID 666 (which of course doesn't exist, as the item IDs only go up to 64) after battle... which would've worked if the item drop mechanic was even functional.
샌즈 전투는 몇가지 사용하지 않은 공격들이 있다. 사용한 공격들과 함께, obj_sansb_body 오브젝트에 의해 관리된다.
세로로 떨어지는 발판 - 이 공격은 obj_vplatgen가 맡고 있다. 뼈가 아래에 깔리고, 위에서 아래로 발판이 랜덤하게 배치된다. 어떤 발판은 좌우로 요동친다. 피하기 위해서는, 발판에 올라와 있어야 하고, 아래쪽 뼈로 떨어지면 안 된다. 이 공격은 3가지 변형이 있는데, obj_vplatgen의 (인덱스 0) type 변수로 조종하며, 타입 1 내지 2는 타입 0의 단순히 빠른 버전이다. 타입 2는 obj_sansb_body의 공격 타입(변수 a_type) 9로 직접 접근이 가능하다. 또한 생성자 오브젝트에 사용하지 않은 6번째 알람 이벤트가 있는데, 50프레임마다 피하기 위해 화면 가운데 뼈를 랜덤하게 생성한다. 발판의 크기와 위치가 랜덤하기 때문에, 맞을 수밖에 없기 때문이다.
가로세로 뼈다귀 - 고정된 뼈 패턴으로, 가로/세로 방향으로 나온다. 피하기 위해서는, 뼈 주위를 요리조리 움직여야 한다. obj_sansb_body의 공격 타입 10으로 접근 가능하다. 이 것도 역시 변형이 존재하는데, obj_sansb_body의 공격 타입 11로 접근하면, 더 빨라지고 다른 패턴을 보인다. 또한, 처음에 언급한 공격의 '지옥' 버전도 있는데, obj_sansb_body의 hell 변수를 'true'로 지정해서 접근 가능하며, 더 어렵다.
랜덤 가스터 블래스터 변형 - 블래스터 스프라이트는 최종판 때처럼 가늘게 좁혀졌는데, 생성되고 쏘는 것이 빨라졌다. 이 것은 obj_gasterbl_gen이 type 0으로 스폰되고, obj_sansb_body에서 코드를 집어넣어 변형시킬 수 없다.
최종 공격 변형 - 이것도 역시 마지막 공격들 중 일부의 '지옥' 변형판이다. 뼈 사이로 살짝 점프해야 하는 공격(공격 타입 1) 및 살짝 점프해야 하는 작은 흰 뼈와 그 뒤로 나오는 긴 파란 뼈 공격(공격 타입 3)은 obj_sansb_body의 hell 변수를 'true'로 지정하면 더 빨라진다. 화면 가로로 이동하는 뼈와 발판 패턴은 변형이 있는데, obj_3platgen의 타입 0에서 발판이 천천히 이동한다.
코드에 메갈로바니아(Megalovnia) 음악의 사용하지 않은 피치가 존재한다는 것도 특기할만 한데, skip이라는 디버그 변수 사용에 따른 결과를 보여준다. obj_sansb 생성 이벤트와 관련된 코드이다:
if (skip == true)
{
con = -1
with (mypart1)
bounce = 1
obj_borderparent.visible = true
global.msg[0] = scr_gettext("obj_sansb_90") // * 앞으로 스킵된다.
global.mnfight = 3
global.myfight = 0
global.faceemotion = 0
normalfight = 1
obj_heart.visible = true
global.flag[271] = 1
caster_loop(global.batmusic, 0.95, 0.95) // <-- 이 곳
}
scr_getvapordata contains a piece of ASCII pixel art of Toriel's death sprite, spr_torielboss_kneelsmile2, (mostly) composed of 0s (representing black) and 1s (representing white). Along with other data contained in the script, this was meant to be interpreted by an old version of the game's sprite duster, obj_vaporized, which produces dust particles according to it; the final game instead uses obj_vaporized_new like all monsters other than Undyne and Glad Dummy. (The following representation of the data cuts it to lines with 72 characters each, which is half of 144, the original sprite's width.)
Two events in the game attempt to rename or delete the game's executable undertale.exe, but fail because they target the save file directory (where file0 is) rather than the executable's folder. This can be proven by placing a duplicate undertale.exe in the save directory.
Firstly, the game's executable is attempted to be renamed to flowey.exe on the first Neutral Route playthrough after Flowey absorbs the six human souls when Asgore is defeated and crashes the game. The game renames itself back to undertale.exe once Flowey is defeated. It was likely to give an immersion that Flowey has conquered the game's world so much that he can even mess with your game's executable file.
In obj_asgore_lastcutscene:
if (global.osflavor == 1)
{
if (file_exists("undertale.exe"))
file_rename("undertale.exe", "flowey.exe");
}
In obj_flowey_master:
if (global.osflavor == 1)
{
if (file_exists("flowey.exe"))
file_rename("flowey.exe", "undertale.exe");
}
The game attempts to delete itself when the screen shakes at the end of a Genocide Route after Chara destroys the game's world. In addition to the game's INI and save files, the game tries to find various common name cases for the Undertale executable and tries to delete it.
In obj_gameshake:
if (global.osflavor == 1)
{
if (file_exists("undertale.exe"))
file_delete("undertale.exe");
if (file_exists("undertale.EXE"))
file_delete("undertale.EXE");
if (file_exists("Undertale.exe"))
file_delete("Undertale.exe");
if (file_exists("UNDERTALE.exe"))
file_delete("UNDERTALE.exe");
}
Hidden out of bounds in room_water11 is an unused alternate path to room_water12. The doors in this area take you to the inaccessible island with an echo flower that can be seen in that room.
메타톤 EX의 배틀 테마인 Death By Glamour는 전투 전 인트로 컷신에서는 0.95배속으로 재생되지만, 게임의 모든 대적 상황에서 정의되는 스크립트 scr_battlegroup에는 0.97배속으로 재생되도록 설정되어 있다. OST 버전은 게임상에서 1배속으로 재생될 때와 동일하다.
When you save in the Xbox One version, the game stores the value of flag 299 (the amount of coins you donated to the casino Dog Shrine) to global.xbox_coins_donated, then writes the latter into the save file. This appears to be completely unnecessary, as the game accesses flag 299 all the time, leaving the global variable unused.
The room in the Ruins where the Toy Knife can be found is internally called room_ruins18OLD. This is the only instance of a room labelled as old being used, and there's no non-old version of the room.
In the room of Hotland where you need to press 3 switches but Alphys calls you right before hitting the third switch, the variable that controls the dialog box moving with the player is named donkeykongismyfavoritemarvelsuperhero. This variable was referenced in the first 10th Anniversary livestream by the line "My Favorite M**vel Superhero's D**key Kong!" in a remixed version of the Wrong Number Song.
There are alternate file names for some sounds and music in the game's code, in the format music/*.ogg, from the phase of development where the game used GameMaker 8 and played external sounds and music through an extension. When the game was migrated to use GameMaker: Studio, it was changed to use GameMaker's native sound system for that instead. So to not change already existing code using the sound extension, compatibility scripts were made, one being caster_load, which converts the filenames that were originally used to pointers to GameMaker sounds by calling scr_getmusindex.
As with the demo, music/sound files have some metadata. The ENCODER field seems to be always overwritten by GameMaker: Studio, but there's still some information from FL Studio's LAME encoder.
(all OGG files, v1.08)
Name
encoder
(all OGG files, v1.11)
Name
encoder
(all WAV files, v1.08)
Name
ISFT
abc_123_a.ogg (v1.001+)
Name
encoded_by
TBPM
date
snd_ballchime.ogg
Name
encoded_by
TBPM
date
mus_computer.ogg
Name
SOFTWARE
mus_wrongworld.ogg ("Wrong Enemy ?!")
Name
encoded_by
TBPM
date
mus_mysteriousroom2.ogg ("Premonition")
Name
ENCODED BY
BPM (BEATS PER MINUTE)
DATE
mus_express_myself.ogg ("Last Goodbye")
Name
encoded_by
TBPM
date
snd_hit, snd_victor
Name
IART
ICRD
INAM
snd_spearappear
Name
ICRD
snd_wrongvictory
Name
ICRD
The "Snoopy, Come Home" metadata refers to the fact that both snd_hit and snd_victor are sampled from the song "Snoopy, Come Home", which is the title song for the 1972 movie with the same name. Toby seemingly took the song from an online rip of the original vinyl, without changing the metadata.
메타톤 EX는 에세이 질문을 주는데, 단어를 치면 그가 단어에 대한 코멘트를 해주는 식이다. 아쉽게도, "x"나 "z"를 누르게 되면 CTRL키를 누르고 있지 않는 이상 에세이를 꺼버리기 때문에 (대부분의 게임 플레이에서는) 입력할 수 없다. 플레이스테이션 4, 플레이스테이션 비타, 닌텐도 스위치 버전에서는 화면상 키보드를 사용하는 것으로 수정되었다.
sexy
foxy
tantaliz ("tantalizing"과 "tantalize"를 인식하기 위함)
PC
번역
콘솔
번역
* (There's an ant-sized frog in a crack in the wall...)
* (It waves at you.)
* (벽 틈 사이에 개미만한 개구리가 있다...)
* (당신에게 손을 흔든다.)
* (There's a small crack in the wall here.)
* (There's a frog inside...)
* (Wait! There are two!)
* (You had a wonderful, exclusive experience...)
* (... that only someone who saw two frogs could feel.)
* (벽에 작은 틈이 있다.)
* (개구리 한마리가 안에 있다...)
* (잠깐! 두마리다!)
* (당신은 놀랍고, 진귀한 경험을 했다...)
* (... 개구리 두마리를 본 사람만의 느낌을.)