Hi, I can try to help a bit.
1) You need to keep the android.keystore and bundle.keystore in the same directory as the rest of the game, so next to 'NastyLand.exe". When you are ready for release, use the 'Build Distributions' button to make the Desktop versions. This does not package the keystore files.
2) When compiling the android build, you should NOT change the name of the package. You currently do 'nastylandpublic.v01.nov24.apk' but this is the NAME of your project. Thus when you change it the next time to 'nastylandpublic.v01.5.dec24.apk', the entire app is considered a different app. I'd recommend something like "nastyzeus.nastyland'. Renpy will still give you an apk named 'nastyzeus.nastyland-1.1-<randomNumbers>-release.apk'
3)You should not have to move everything to a new folder when you want to release. Renpy will create the distributions for you, like so:
Win/Linux: "NastyLand-Public.V0.1.1.Nov24-pc.zip"
Android: "nastyzeus.nastyland-1.1-<randomNumbers>-release.apk"
Mac: "NastyLand-Public.V0.1.1.Nov24-mac.zip"
AlexL1204
Recent community posts
Alright, I double checked, and I had saved and quit on the "this is worse than being a medium" text, which is why I didn't unlock the black soul entry. My bad. The talents entry exists and is added to the book at the beginning of day 4, but the link to talents is still in the Mediums page, thus my initial confusion. Sorry for the misunderstanding lol.
(One small thing, the text for the black soul is, well, black, which doesn't show until you hover over it. Except on android, you can't easily hover like that. Would changing the base color of the text to the dark gray that is used when hovering over it instead be possible/desired? Then changing the hover color to a slightly lighter color?)
Can confirm, white souls get added, as does the section on talents, but black souls do not. I bring up talents because when you get the book, the 'medium' entry is unlocked, but it has a link to the 'talents' page, which isn't unlocked.
Another thing, atleast on mobile, you cant access the book from in game, only the main menu, which feels a bit off, but other than that, I enjoyed it. Maybe a notification in the corner telling you when you've unlocked a new entry, or one has been updated, would be nice, as I honestly didn't think to check again, but that could just be me.
👁️❤️➡️🆕⬆️📅• 🐯🥺•
(I don't know why we're talking in emoji, but the other 2 comments are, and I'm trying to blend in. Loved the update, loved the moments between Patrice and she who will not be named. Loved the new soul type, had been wondering about it, definitely wasn't what I had guessed, but is more interesting anyways. Ryan was a bit different, but I suppose that's down to what happened in the gym, and Patrice and Ryan's friendship. The book was a great addition, although the 1 entry is missing, I think it was talents. The little doodles were hilarious, mostly Ryan's. I forgot to check if white and black souls were added to the book afterwards, guess I'm redownloading the game now.)
Why did Itch have to ruin the formatting?
Exact Additions to make:
gui.rpy:
===================
Line 76
## The font used for naff's text. define gui.naff_text_font = gui.preference("naff_text_font", "fonts/beer_money.ttf") ## The font used for naff's name. define gui.naff_name_font = gui.preference("naff_name_font", "fonts/beer_money_names.ttf")
===================
This is to add a hide button to the game.
screens.rpy in the 2 quick menu sections. the first is for desktop users, who can press h or middle mouse button already, but the option is here. the second is for mobile users.:
Line 262: textbutton _("Hide") action HideInterface() Line 1437: textbutton _("Hide") action HideInterface()
===================
Exact Changes to make:
gui.rpy:
===================
Line69: define gui.text_font = gui.preference("text_font", "fonts/dum1.ttf") Line72: define gui.name_text_font = gui.preference("name_text_font", "fonts/KELMSCOT.TTF") Line75: define gui.interface_text_font = gui.preference("interface_text_font", "fonts/KELMSCOT.TTF") Line 176: define gui.button_text_font = gui.preference("button_text_font", "fonts/Zamolxis-V.ttf")
This allows the button font to be changed too.
I changed these to have more descriptive names, to make managing them easier.
===================
screens.rpy:
===================
Line740: style_prefix "radio" Line742: textbutton _("Default") action [gui.SetPreference("text_font", "fonts/dum1.ttf"), gui.SetPreference("name_text_font", "fonts/KELMSCOT.TTF"), gui.SetPreference("interface_text_font", "fonts/KELMSCOT.TTF"), gui.SetPreference("button_text_font", "fonts/Zamolxis-V.ttf"), gui.SetPreference("naff_text_font", "fonts/beer_money.ttf"), gui.SetPreference("naff_name_font", "fonts/beer_money_names.ttf")] Line743: textbutton _("OpenDyslexic") action [ gui.SetPreference("text_font", "OpenDyslexic.otf"), gui.SetPreference("name_text_font", "OpenDyslexic.otf"), gui.SetPreference("interface_text_font", "OpenDyslexic.otf"), gui.SetPreference("button_text_font", "OpenDyslexic.otf"), gui.SetPreference("naff_text_font", "OpenDyslexic.otf"), gui.SetPreference("naff_name_font", "OpenDyslexic.otf")]
I used OpenDyslexic as an example font here, as it is what was being changed to, but it should work for other fonts too.
I also included changes to allow for the button font to be changed too.
===================
Character_names.rpy:
===================
In all of the naff charater definitions, replace all
what_font="fonts/beer_money.ttf", who_font="fonts/beer_money_names.ttf"
with
what_prefix="{font=[gui.naff_text_font]}", who_prefix="{font=[gui.naff_name_font]}"
Exact Additions to make:
gui.rpy:
===================
Line 76
## The font used for naff's text. define gui.naff_text_font = gui.preference("naff_text_font", "fonts/beer_money.ttf") ## The font used for naff's name. define gui.naff_name_font = gui.preference("naff_name_font", "fonts/beer_money_names.ttf")
===================
This is to add a hide button to the game.
screens.rpy in the 2 quick menu sections. the first is for desktop users, who can press h or middle mouse button already, but the option is here. the second is for mobile users.:
=================== Line 262: textbutton _("Hide") action HideInterface() Line 1437: textbutton _("Hide") action HideInterface()
===================
Exact Changes to make:
gui.rpy:
===================
Line69: define gui.text_font = gui.preference("font_1", "fonts/dum1.ttf") changes to define gui.text_font = gui.preference("text_font", "fonts/dum1.ttf") Line72: define gui.name_text_font = gui.preference("font_2", "fonts/KELMSCOT.TTF") changes to define gui.name_text_font = gui.preference("name_text_font", "fonts/KELMSCOT.TTF") Line75: define gui.interface_text_font = gui.preference("font_3", "fonts/KELMSCOT.TTF") changes to define gui.interface_text_font = gui.preference("interface_text_font", "fonts/KELMSCOT.TTF") Line 176: define gui.button_text_font = "fonts/Zamolxis-V.ttf" changes to define gui.button_text_font = gui.preference("button_text_font", "fonts/Zamolxis-V.ttf")
This allows the button font to be changed too.
I changed these to have more descriptive names, to make managing them easier.
===================
screens.rpy:
===================
Line740: style_prefix "check" changes to style_prefix "radio" Line742: textbutton _("Default") action [gui.SetPreference("font_1", "fonts/dum1.ttf"), gui.SetPreference("font_2", "fonts/KELMSCOT.TTF"), gui.SetPreference("font_3", "fonts/KELMSCOT.TTF")] changes to textbutton _("Default") action [gui.SetPreference("text_font", "fonts/dum1.ttf"), gui.SetPreference("name_text_font", "fonts/KELMSCOT.TTF"), gui.SetPreference("interface_text_font", "fonts/KELMSCOT.TTF"), gui.SetPreference("button_text_font", "fonts/Zamolxis-V.ttf"), gui.SetPreference("naff_text_font", "fonts/beer_money.ttf"), gui.SetPreference("naff_name_font", "fonts/beer_money_names.ttf")] Line743: textbutton _("OpenDyslexic") action [ gui.SetPreference("font_1", "OpenDyslexic.otf"), gui.SetPreference("font_2", "OpenDyslexic.otf"), gui.SetPreference("font_3", "OpenDyslexic.otf")] changes to textbutton _("OpenDyslexic") action [ gui.SetPreference("text_font", "OpenDyslexic.otf"), gui.SetPreference("name_text_font", "OpenDyslexic.otf"), gui.SetPreference("interface_text_font", "OpenDyslexic.otf"), gui.SetPreference("button_text_font", "OpenDyslexic.otf"), gui.SetPreference("naff_text_font", "OpenDyslexic.otf"), gui.SetPreference("naff_name_font", "OpenDyslexic.otf")]
I used OpenDyslexic as an example font here, as it is what was being changed to, but it should work for other fonts too.
I also included changes to allow for the button font to be changed too.
===================
Character_names.rpy:
===================
In all of the naff charater definitions:
what_font="fonts/beer_money.ttf", who_font="fonts/beer_money_names.ttf" changes to what_prefix="{font=[gui.naff_text_font]}", who_prefix="{font=[gui.naff_name_font]}"
===================
A few things, first thank you for adding a font selector, it'll makes things a lot easier to read. Second, while on the topic, could you add a 'Hide' button? Desktop users can middle mouse click or press H, but mobile users can't. To add one, add this to line 1437 in screens.rpy:
textbutton _("Hide") action HideInterface()
I'm including some changes you can make to change naff's font, as well as some other changes:
1) Change style prefix of font selector from check to radio 2) Change names of fonts in gui preferences from font_1, font_2 to more descriptive names. Make the same changes in the actions of the font selector. 3) Add 2 fonts to gui.preferences for naff's text and naff's name. 4) Change the gui.button_text_font definition to allow for it's font to be changed too. 4) Add the actions to change these 3 new fonts to the font selector buttons in options. 5) Change naff's character definition from what_font, who_font to what_prefix and who_prefix
If I may, the current weapon system has some maintainability issues. Code-wise at least. This battle test has 5 weapons total: The sword, the knife, the twigs, the wooden sticks, raw bones and technically bare handed too, so kind of 6. Each of these weapons are checked individually in 25 different places throughout the script, and each additional weapon actually adds more checks. If you add a new weapon, and forget any of these places, it'll create a bug that might be rare, and hard to track down.
I'd be willing to lend a hand in refactoring the code to be more maintainable if you'd like? The idea would be to condense the number of checks by abstracting them, so instead of checking each weapon individually, it checks a list of weapons instead. You can message me on discord at 'rachel02048' to talk further if you want.
I found a bug during testing. If you have tried equipping the sword and failed, still have the knife, and equip a stick (or bone) if it's the last one, the option to switch weapons disappears, and the game will say that you're now barehanded and have to rely on your claws. The game will still use the weapon you chose though. The bug also appears when you enter battle and select the stick. I think this is caused because on line 540 of 'battle.rpy', you check if all of the weapons are == 0. However, you don't check for the knife, and the player might have something equipped already.
So basically there are 3 bugs:
1) You don't currently check for the knife on line 540 of 'battle.rpy'. This causes the game to show a message saying that the player has no weapons, even if they have a knife. ("现在的你赤手空拳,只能依靠自己的爪子了")
2) You again don't check for the knife on line 327 of 'battle.rpy', this stops the menu option to switch weapons from showing. ("选择武器")
3) You again don't check for the knife on lines 341, 361, 387 and 544.
4) These checks don't consider the currently equipped item either.
For a suggestion, I would move the 'Skill' button to it's own category. Basically it's currently like this:
>Choose weapon
>Battle
>>Skill
>>Attack
>Items
>Run
I'd change it to:
>Choose weapon
>Skill
>Attack
>Items
>Run
Thoroughly enjoyed this hidden gem of a work in progress visual novel. I would like to thank the itch.io furry tag for bringing me here.
To the team behind it: The premise is interesting, the characters are fun and interesting, the music choices were nice, and of course the sprites and cgs were really good. Rare for a version 0.2 to have diverse emotive sprites for their characters, as well as the cgs present too.
All in all, enjoyed it, and look forward to what you'll all make next.
Hey, If you still need help with making an android version, here's the main steps you'd need to follow:
1) Download RAPT from renpy's website for the renpy version you use, in the public release you used 7.4.9, so the link is: https://www.renpy.org/dl/7.4.9/renpy-7.4.9-rapt.zip
2) Download version 8 of the Adoptium JDK: https://adoptium.net/en-GB/temurin/archive/?version=8
3) Launch Renpy, and Click on 'Android' in the actions category, underneath build distributions. Then install the SDK and create keys. Keep the keys you create safe.
4) Go back to the `Android` section, and click `Configure`, and follow the prompts.
This sets up your environment to build android versions, but there are some code changes needed for the full experience. Basically any graphical changes you've made, need to have a mobile variant declared. To do this, you copy the style, and add `variant "small"` or `variant "touch"`, depending on the context, to it.
Things that need to be changed:
-The textbox needs the new sprite. You can just remove the `phone/` part in the `style window`, under mobile variants.
-Choices menu needs to be changed. They currently go way to the right. Duplicate the choice screen, add
variant "touch"
Then you can replace the area parameter with
ysize 0.6 align (0.5, 0.5)
This gives a more scalable, and less hard coded variant for mobile.
-You'll probably want to add a 'Hide' button for mobile users, as they can't middle mouse button. Adding this code to `screen quick_menu` will add it:
`textbutton _("Hide") action HideInterface()`
I don't know if there's any other screens that don't work on mobile, but these are the main ones.
After this, you can build the android version. You'll want to build a universal apk, not the playstore version. It'll take a while, but afterwards, you'll have an apk. You can install this on your phone to test, or with an android emulator.
Edit: Sorry for the wall of text lol. Let me know if you need any more help, or if I was unclear with something.
I agree with the other comment fully. The quality has been really, really good. Something you might consider, could be to make a dev log in between builds. This could highlight anything really, like something new you've learned about the Game Dev process - this could be renpy related, storytelling related, etc. - or touch on aspects of the world building that may not end up in the final game, etc. This gives insight into the game and it's development, while giving the audience something to interact with, and keeping your game 'alive' to the itch algo. Ultimately, you choose what you think is best for the game and your team. I look forward to what comes next!
Also, the missing translations are mostly caused by what seems to have been lines that were changed after the translations were generated. You need to use renpy to regenerate/update the translations, then at the bottom of the translation files, it'll have a section headed with
# TODO: Translation updated at xxxx-xx-xx xx:xx
The translations that need to be fixed are below this heading. Do note that the original broken translations will still be in the translation files, and should be removed at some point.
The following lines need updated translations:
"Пройдя внутрь академии, вайб которого очень сильно напоминал какие-то стариные замки, я замечаю, что в холле есть несколько человек, которые о чём-то разговаривают." "Барс смеётся над моей реакцией и взъерошивает мех на моей голове." "Снова вернувшись в холл, я обращаю внимание на Роберту.{w} Уже выстраилась приличная очередь." a "Я посмотрю как половник и суп из жабы и с растениями поможет тебе в драке с монстром." "Я прокашливаюсь, пока мы садимся на один из диванчиков в этом холле." "Лицо Вильмара сразу становится расстроенным." "Сейчас время уже завалило за полдень." "Она всё ещё с неким недоверием смотрит на Вильмара." "Там... есть какая-та специальная формулу для расчёта её веса." "Но я её не помню. Пока она выполянет свои функции, это всё, что мне от неё нужно." "Мне она досталась от мамы. Она привезла её, когда ездила в одну из командировок." "Так или иначе... Я начинаю доставать свои вещи." "Я не совсем знаю, как мне к нему относится." "Забравшись в кровать и накрывшись одеялом, я начинаю по-немногу проваливаться в сон, смотря одним взглядом на свет луны, падающего из окна на пол моей комнаты."
Additionally, The following translations are missing, or incomplete.
"Эти книжные полки поднимались вверх, прямо в крону дерева." - Missing Translation. Is located in assestdefine. "И... Когда я увидел тебя, я знал, что ты будешь встревожен." - First character is not translated. "Хээй! Я не толстый! Ты даже не представляешь, как в этой рубашке тесно." - Missing Translation.
Hey, I'm writing in case you still need help with the English translation not showing up on Android. In screens.rpy, you need to un-indent the language selection radio box by 1, as it is currently in the pc or web variant section, that is used for the full screen/windowed buttons. In the pc release, this is in the screen preferences() section, around line 700.
By unindent, I mean this:
vbox: style_prefix "radio" label _("Язык") textbutton _("Русский") action Language(None) textbutton _("Английский") action Language("english")
becomes
vbox: style_prefix "radio" label _("Язык") textbutton _("Русский") action Language(None) textbutton _("Английский") action Language("english")
Which JDK version do you have installed? JDK8u332? Additionally, did you get it from adoptium or elsewhere?
A few last things before I head to bed:
Did you download version 8 of the JDK?
Did you download the JDK and not the JRE?
Is the JDK in the PATH? If you're not sure, you can run the installer or modify from add or remove programs, and click repair to make sure.
Do you have any other java installations that might be conflicting with it?
Did you update from an older version of renpy, and if so did you update RASP with it?
I'm sorry for all the questions, they're currently all I can think of that might be causing the problem, as it isn't a problem with the project itself as I was able to build it. Renpy asking you to install the JDK likely means that it for some reason cannot find it, so that's what I based these off of. If you still can't get it to work I can try help you out again later if you want.
I was able to compile an android build on my end, it works on both emulator and my own device. I am going to playtest it to ensure the game is fully functional now. You do need to change the line in screens.py for style main_menu_frame under the mobile variants to have the title screen show up on android. In the public released version this is line 1470.
Edit 1: The glossary needs to be edited to fit the scrollable items in width wise, as well as the longer entries like Daramulum.
Edit 2: The following lines might not render properly on android phones: NOTE: These are the line numbers in the public build. These go up until the route split.
174, 257, 283, 287, 297, 313, 315, 329, 333, 346, 361, 398, 406, 502, 504, 524, 589, 607, 665, 848, 1347, 1367, 1383, 1513, 1558, 1606, 1658, 1752, 1830.
Hey don't know if you're still doing this, but this is what I've got so far, I'm not entirely sure they're correct of course, but figured might as well post them:
"Eth nohewo lliw veren niw trenursot ghift ganai." - First Dream
The one who will never win returns to fight again.
Obviously:
"Thaed semco rof lla." - First Dream
Death comes for all.
"Nekle erefob emand pyar rof latisavno." - First Dream
Kneel before me and pray for salvation
"Meco otem." - Dream in class.
Come to me.
Edit: I think I solved the first one.