Droidtale

What is Droidtale?

Droidtale (Android + Undertale, get it?) is a very "hacky" Undertale port for Android devices.

This is possible due to the way games made with GameMaker: Studio works, when you create a game in GameMaker: Studio and export it, GameMaker: Studio creates a bytecode that is compatible with every YoYo Runner (YoYo Runner is YoYo Games' virtual machine) so, what we do? Exploit this to our advantage so we can "port" Undertale to Android! (And yes, this works with every GameMaker: Studio game as long as it isn't compiled with YYC!)

Deltarune

http://milesthecreator.wixsite.com/offical-website/deltarune-android-port

Requirements

Undertale for Windows (Mac OSX and Linux also works, but this tutorial is mainly Windows-focused) (Piracy is FOREBODEN )

) A MTT BRANDED CELLPHONE(TM) (Buy one here) (a Android phone, sorry iOS users, you can blame Apple for this ;P)

50MB free on your MTT BRANDED CELLPHONE(TM) (135MB if you want music)

Windows PC. (Mac OSX and Linux also works if you use your DETERMINATION)

Any ZIP manipulation software, I will use 7zip, but WinRAR also works.

Undertale v1.05a

DETERMINATION to learn new things.

Issues

[Undertale v1.05a] This uses an GameMaker: Studio game package because I do not have enough money to buy GameMaker: Studio 1, if you have it (with the Android export) please contact me!

[Undertale v1.00+] Music randomly stops. (Restarting Undertale fixes the issue) This is unfixable since this requires the Undertale source code, something that I do not have.

Where can I get help?

If you are having issues with this tutorial, please comment in this Reddit thread or send a message to me on /r/Undertale Discord Server (My Discord Account: MrPowerGamerBR#4185)

The Tutorial

Before we start, can I ask you a favor?

If you do this tutorial, can you promise you will never share the full APK to anyone who doesn't have Undertale? Sharing the full APK is piracy, and you don't want to see a cute white dog called "Toby Fox" cry, right?

I shouldn't even warn you about this, because this is common sense, but, there is some people that... really doesn't understand this... so, please, don't do that, me and Toby Fox appreciate it.

So, let's get started!

Core

First, download this APK, this APK is a "stub" that contains the bare minimum needed for our purpose, we will use that APK to move the Undertale assets to it!

After downloading it, open the "UndertaleWrapper.apk" on your favorite ZIP manipulation software, I'm using 7zip, but any other ZIP manipulation software will work. (Tip: If you aren't able to open the APK, try renaming the extension from "apk" to "zip"! If you do that, don't forget to change it back later!)

Cool, huh? This is what we have inside the "UndertaleWrapper.apk".

Now, open the "assets" folder.

This is... kinda empty I guess, but don't worry, we are going to fill this up in a few minutes. 😉

Now, go to your Undertale installation (but don't close the 7zip/WinRAR window!), on my PC, it is "C:\Program Files (x86)\Steam\steamapps\common\Undertale", maybe on your PC it will be same (If you have the Humble Bundle version, it will be on another folder).

Wow, so many files... Anyway, find the "data.win" file (if your Undertale version is for Mac OSX/Linux it may be a different name, anyway, just find the biggest file in the folder) and copy it to somewhere safe.

that will do it

Now, rename the "data.win" file to "game.droid" file.

Yeah, that wasn't that hard. 😛

Now, move the "game.droid" file to the open 7zip window, if it asks you to "overwrite" or to "add file into the compressed archive", click "Yes".

And that's it! You already "installed" the game core files, so you can already play it! Skip the next section if you don't care about music (but you really should care about it, Undertale's soundtrack is 🔥)

Assets (Music)

Undertale isn't the same without having Music, so, let's add some music to the APK!

"Just" adding the music files inside the APK won't work, we will need to use a program called "aapt" from the Android SDK.

I will mirror the "aapt.exe" here, so you don't need to download the entire Android SDK just for a small program ;)

After downloading the "aapt.exe", move the "UndertaleWrapper.apk" and the "aapt.exe" to somewhere safe (use a empty folder to be more organized)

You have the two files on the same folder? Great! You are progressing very fast on this tutorial!

Now, create a folder called "assets" in the same folder where "UndertaleWrapper.apk" and the "aapt.exe" is located.

Now, go to your Undertale folder again.

Are you seeing those ".ogg" files? That's the music files for Undertale, we will need those.

Select all the ".ogg" files (and the "credits.txt", don't forget about it!) and copy and paste it to the "assets" folder.

After pasting it on the "assets" folder, go back to the folder where the "UndertaleWrapper.apk", "aapt.exe" and the "assets" folder is located.

Now we are going to get your hands a bit "dirty".

NO NOT THAT KIND OF DIRTY TEMMIE

You will need to mess around a thing called... the "command prompt".

WHAT THE HECK IS THIS SCREEN IT IS FORMATTING MY PC HELPPPPP!

That's the command prompt... back in the day or you used it (actually MS-DOS was just the command prompt...) or you don't used it.

But hey! We aren't here to discuss about old Microsoft shenanigans, let's get back to the tutorial.

Go to your somewhere safe folder again, where the "UndertaleWrapper.apk", "aapt.exe" and the "assets" is located, click the folder path and copy the path.

After copying it, go to your command prompt screen, write "cd " (with the space!), right click on the command prompt and click "paste".

Now press "ENTER"

Now comes the fun part! Copy the following command:

aapt add -f -v UndertaleWrapper.apk assets/credits.txt assets/mus_a2.ogg assets/mus_alphysfix.ogg assets/mus_amalgam.ogg assets/mus_ambientwater.ogg assets/mus_anothermedium.ogg assets/mus_bad.ogg assets/mus_barrier.ogg assets/mus_battle1.ogg assets/mus_battle2.ogg assets/mus_bergentruckung.ogg assets/mus_bgflameA.ogg assets/mus_birdnoise.ogg assets/mus_birdsong.ogg assets/mus_boss1.ogg assets/mus_cast_1.ogg assets/mus_cast_2.ogg assets/mus_cast_3.ogg assets/mus_cast_4.ogg assets/mus_cast_5.ogg assets/mus_cast_6.ogg assets/mus_cast_7.ogg assets/mus_chokedup.ogg assets/mus_churchbell.ogg assets/mus_computer.ogg assets/mus_confession.ogg assets/mus_coolbeat.ogg assets/mus_core.ogg assets/mus_coretransition.ogg assets/mus_core_ambience.ogg assets/mus_creepy_ambience.ogg assets/mus_crickets.ogg assets/mus_cymbal.ogg assets/mus_dance_of_dog.ogg assets/mus_date.ogg assets/mus_date_fight.ogg assets/mus_date_tense.ogg assets/mus_deeploop2.ogg assets/mus_disturbing.ogg assets/mus_dogappear.ogg assets/mus_dogmeander.ogg assets/mus_dogroom.ogg assets/mus_dogsong.ogg assets/mus_dontgiveup.ogg assets/mus_doorclose.ogg assets/mus_dooropen.ogg assets/mus_drone.ogg assets/mus_dummybattle.ogg assets/mus_dununnn.ogg assets/mus_elevator.ogg assets/mus_elevator_last.ogg assets/mus_endarea_parta.ogg assets/mus_endarea_partb.ogg assets/mus_endingexcerpt1.ogg assets/mus_endingexcerpt2.ogg assets/mus_express_myself.ogg assets/mus_fallendown2.ogg assets/mus_fearsting.ogg assets/mus_flowey.ogg assets/mus_f_6s_1.ogg assets/mus_f_6s_2.ogg assets/mus_f_6s_3.ogg assets/mus_f_6s_4.ogg assets/mus_f_6s_5.ogg assets/mus_f_6s_6.ogg assets/mus_f_alarm.ogg assets/mus_f_destroyed.ogg assets/mus_f_destroyed2.ogg assets/mus_f_destroyed3.ogg assets/mus_f_finale_1.ogg assets/mus_f_finale_1_l.ogg assets/mus_f_finale_2.ogg assets/mus_f_finale_3.ogg assets/mus_f_intro.ogg assets/mus_f_newlaugh.ogg assets/mus_f_newlaugh_low.ogg assets/mus_f_part1.ogg assets/mus_f_part2.ogg assets/mus_f_part3.ogg assets/mus_f_saved.ogg assets/mus_f_wind1.ogg assets/mus_f_wind2.ogg assets/mus_gameover.ogg assets/mus_ghostbattle.ogg assets/mus_harpnoise.ogg assets/mus_hereweare.ogg assets/mus_hotel.ogg assets/mus_hotel_battle.ogg assets/mus_house1.ogg assets/mus_house2.ogg assets/mus_intronoise.ogg assets/mus_kingdescription.ogg assets/mus_lab.ogg assets/mus_leave.ogg assets/mus_menu0.ogg assets/mus_menu1.ogg assets/mus_menu2.ogg assets/mus_menu3.ogg assets/mus_menu4.ogg assets/mus_menu5.ogg assets/mus_menu6.ogg assets/mus_mettafly.ogg assets/mus_mettatonbattle.ogg assets/mus_mettaton_ex.ogg assets/mus_mettaton_neo.ogg assets/mus_mettaton_pretransform.ogg assets/mus_mettmusical1.ogg assets/mus_mettmusical2.ogg assets/mus_mettmusical3.ogg assets/mus_mettmusical4.ogg assets/mus_mettsad.ogg assets/mus_mett_applause.ogg assets/mus_mett_cheer.ogg assets/mus_mode.ogg assets/mus_mtgameshow.ogg assets/mus_muscle.ogg assets/mus_musicbox.ogg assets/mus_myemeow.ogg assets/mus_mysteriousroom2.ogg assets/mus_mystery.ogg assets/mus_napstachords.ogg assets/mus_napstahouse.ogg assets/mus_news.ogg assets/mus_news_battle.ogg assets/mus_ohyes.ogg assets/mus_oogloop.ogg assets/mus_operatile.ogg assets/mus_options_fall.ogg assets/mus_options_summer.ogg assets/mus_options_winter.ogg assets/mus_papyrus.ogg assets/mus_papyrusboss.ogg assets/mus_piano.ogg assets/mus_prebattle1.ogg assets/mus_predummy.ogg assets/mus_race.ogg assets/mus_rain.ogg assets/mus_rain_deep.ogg assets/mus_repeat_1.ogg assets/mus_repeat_2.ogg assets/mus_reunited.ogg assets/mus_rimshot.ogg assets/mus_ruins.ogg assets/mus_ruinspiano.ogg assets/mus_sansdate.ogg assets/mus_sfx_a_grab.ogg assets/mus_sfx_chainsaw.ogg assets/mus_sfx_hypergoner_charge.ogg assets/mus_sfx_hypergoner_laugh.ogg assets/mus_sfx_rainbowbeam_hold.ogg assets/mus_shop.ogg assets/mus_sigh_of_dog.ogg assets/mus_silence.ogg assets/mus_smallshock.ogg assets/mus_smile.ogg assets/mus_snoresymphony.ogg assets/mus_snowwalk.ogg assets/mus_snowy.ogg assets/mus_spider.ogg assets/mus_spoopy.ogg assets/mus_spoopy_holiday.ogg assets/mus_spoopy_wave.ogg assets/mus_star.ogg assets/mus_sticksnap.ogg assets/mus_story.ogg assets/mus_story_stuck.ogg assets/mus_st_happytown.ogg assets/mus_st_him.ogg assets/mus_st_meatfactory.ogg assets/mus_st_troubledingle.ogg assets/mus_temshop.ogg assets/mus_temvillage.ogg assets/mus_tension.ogg assets/mus_tone2.ogg assets/mus_tone3.ogg assets/mus_toomuch.ogg assets/mus_toriel.ogg assets/mus_town.ogg assets/mus_tv.ogg assets/mus_undyneboss.ogg assets/mus_undynefast.ogg assets/mus_undynepiano.ogg assets/mus_undynescary.ogg assets/mus_undynetheme.ogg assets/mus_undynetruetheme.ogg assets/mus_vsasgore.ogg assets/mus_waterfall.ogg assets/mus_waterquiet.ogg assets/mus_wawa.ogg assets/mus_whoopee.ogg assets/mus_wind.ogg assets/mus_woofenstein.ogg assets/mus_woofenstein_loop.ogg assets/mus_wrongnumbersong.ogg assets/mus_wrongworld.ogg assets/mus_xpart.ogg assets/mus_xpart_2.ogg assets/mus_xpart_a.ogg assets/mus_xpart_b.ogg assets/mus_xpart_back.ogg assets/mus_x_undyne.ogg assets/mus_x_undyne_pre.ogg assets/mus_yourbestfriend_3.ogg assets/mus_zzz_c.ogg assets/mus_zzz_c2.ogg assets/mus_zz_megalovania.ogg assets/mus_z_ending.ogg assets/snd_ballchime.ogg assets/snd_bombfall.ogg assets/snd_bombsplosion.ogg assets/snd_buzzing.ogg assets/snd_curtgunshot.ogg assets/snd_fall2.ogg assets/snd_flameloop.ogg assets/snd_heavydamage.ogg assets/snd_mushroomdance.ogg assets/mus_dogshrine_1.ogg assets/mus_dogshrine_2.ogg

and paste it on the command line screen (by right clicking and clicking "paste"), after pasting, press "ENTER".

Now, go back where the "UndertaleWrapper.apk" (and the other files) are located again and see the APK size.

If the file is between 130MB - 136MB, then you are fine!

Now, the APK is ready! Congratulations! But, before we install it on our device, we will need to sign the APK, if you don't sign it, the APK will fail to install.

Installing the Game

Because we edited the APK file, we can't just install the APK before signing it (due to security) so now we are going to sign the APK!

We are going to use a app from the Play Store called "ZipSigner", here is the link for it: https://play.google.com/store/apps/details?id=kellinwood.zipsigner2

Download it from the Play Store and wait until it installs on your device.

Now you will need to move the APK to your device, there is a tons of ways to do it, so, if you don't know how, then search on Google!

The most common one is via MTP, which requires only just a USB cable.

Connect your device to your PC using the device cable, and, if it has a lock screen, unlock it so it will appear on Windows, after connecting, open the "My Computer".

Now, double click on your device (In this case: "Moto G 2014")

Maybe your device will be a bit different, because I have a SD Card, but anyways, double click on the "Internal Storage". (Tip: If nothing shows up when you click on your device, try unlocking your phone, pull down the notification panel and change from "Only charging" to "File transfer")

Open the "Download" folder (If it doesn't exist, create one!)

Again, maybe this screen will be a bit different to you, anyway, copy the "UndertaleWrapper.apk" to this folder.

Done? Yay! Now open the "ZipSigner" app on your device!

Now, click on "Choose In/Out..."

Click on the "Download" folder (depends on the folder you saved the "UndertaleWrapper.apk")

Select the "UndertaleWrapper.apk"

Now click to "Sign the File"!

It takes a while, trust me, sometimes it looks that it just crashed, but it is actually doing shenanigans.

When it comes back to the main screen, that means that it ended signed, yay!

Now, open any file explorer (In this tutorial I will use Solid Explorer) and go to the "Download" folder and click on the "UndertaleWrapper-signed.apk"

Installing...

Installed, yay! Now, click to "Open".

Now you have "TITLE SCREEN SIMULATOR: UNDERTALE EDITION"

Well, now we need to configure the virtual (or maybe real 👀) gamepad!

Virtual Gamepad

There is two gamepads you can use, one is paid (GameKeyboard+) and the other one is free (Modded Gamepad).

The paid one is way more stable and has way more features than the free one.

GameKeyboard+ (recommended):

While GameKeyboard+ is paid, it is the best app for remapping external bluetooth controllers and creating virtual gamepads for games, so I prefer this one instead of the Modded Gamepad

You can buy GameKeyboard+ from the Play Store here!

After downloading GameKeyboard+ and configuring the soft keyboard for it (open the app, it will explain how to configure it), download this profile and import it on GameKeyboard+

If you don't know how to import, go "Settings" and click on "Import Profile".

Remember how did you copy the "UndertaleWrapper.apk" to your phone? Yes? Then do the same thing for the downloaded profile!

Mapping "C" is a bit difficult, but not impossible! Go back to the main settings and go to the "Macro Editor"

Now, select "Macro 1"

On the input box, enter this:

Macro 1|17,100,0

After importing, the gamepad can be opened by pressing "Volume Up", so, open Undertale, press "Volume Up" and have fun!

Modded Gamepad:

Download this APK:

http://lori.mrpowergamerbr.com/Modded_GamePad.apk

Install the APK

Open the GamePad settings and disable "Xbox mode".

Activate the GamePad keyboard on the Android configuration.

Open any text box, change the input to the "GamePad" input method and press any button on the gamepad, this will cause a notification to appear, now, open Undertale.

Click on the notification, the GamePad will appear, now, just play and have fun!

PlayStation 3/4 Controller Mapping with Sixaxis:

Fefeland made a great remapping tutorial using Sixaxis, check it out!

USB OTG/Bluetooth Gamepad/Keyboard/Joystick Mapping:

If you want to experience Undertale 100% on your phone, then you want to use your gamepad to play with it!

...but then you find out that Undertale is not responding to touch presses :(

But, do not be afraid! I, the Great Papyrus, can help you!

We are going to use GameKeyboard+ to remap our gamepad keys.

While GameKeyboard+ is paid, it is the best app for remapping external bluetooth controllers and creating virtual gamepads for games, so I prefer this one instead of the Modded Gamepad

You can buy GameKeyboard+ from the Play Store here!

If you don't want to pay, you can try using Tincore Keymapper, but, just a little tip, I spent 1 hour trying to configure Tincore Keymapper and I couldn't get it to remap anything, with GameKeyboard+ I remapped my controller in less than 5 minutes, also, Tincore Keymapper requires root + SELinux permissive, GameKeyboard+ doesn't need.

Now, ENOUGH messing around! It's time to configure this gamepad once and for ALL!

(Quick tip: If you have a Ipega gamepad, pair it using Keyboard mode instead of Joystick mode! To pair using Keyboard Mode, hold "HOME" and "A"!)

Now, click on "Settings" and click on "Hardkey Mappings"

After opening, click on "Mapping 1", it will open a popup.

Now, press the key on your gamepad that you want to use as "Z"

See that the titlebar of the Popup changed? That means that it is working! Yay!

Now, on the list, select "6"

After doing that, do the same thing for the "X" button, but select "Mapping 2" and, instead of selecting "6", select "9"

Mapping "C" is a bit difficult, but not impossible! Go back to the main settings and go to the "Macro Editor"

Now, select "Macro 1"

On the input box, enter this:

Macro 1|17,100,0

Now, go back to the "Hardkey Mappings", click on "Mapping 3", select the button you want to use as "C" and, in the list, select "[M] Macro 1"

Open Undertale and have fun!

Credits

MrPowerGamerBR - Me!

/u/calio - The first who tried this (I only knew about this after I done the test 3 days after him, whoops!), some tips, Linux port.

/u/PurpleMadness - Music and "credits.txt" fix.

/u/SubredditReddit - Testing, ZipSigner suggestion.

/u/bdick21 - Open Inventory Key.

/u/CoolDude1564 - Testing, talks about funny things in /r/Undertale (Annoying Dog is Gaster confirmed)

Toby Fox - Creator of Undertale.

Temmie - Temmie