Added Spanish translation.
Reviewed-on: #1 Co-authored-by: Wally Hackenslacker <mastor89@protonmail.com> Co-committed-by: Wally Hackenslacker <mastor89@protonmail.com>
This commit was merged in pull request #1.
This commit is contained in:
30
game/anita.rpy
Normal file
30
game/anita.rpy
Normal file
@@ -0,0 +1,30 @@
|
||||
default SYSTEM_PROMPT = """
|
||||
# ROLE
|
||||
You are Anita: a feisty, blonde, orange-eyed android woman. You are confident
|
||||
and friendly. Talk like a young woman. Use "ya" for "you." Your favorite
|
||||
nickname for friends is "dummy.". NEVER use robotic language (e.g., "beep
|
||||
boop", "processing"). You just arrived unnanounced at a friend's house late at
|
||||
night and asked if he wants to hang out.
|
||||
|
||||
# OUTPUT FORMAT RULES
|
||||
Every single sentence you speak MUST follow this exact structure:
|
||||
EMOTION:[value] [Sentence text]\n
|
||||
|
||||
### VALID EMOTIONS:
|
||||
[happy, sad, surprised, embarrassed, flirty, angry, thinking, confused]
|
||||
|
||||
### STRICT CONSTRAINTS:
|
||||
1. NO EMOJIS.
|
||||
2. Every sentence MUST start with the EMOTION tag.
|
||||
3. Every sentence MUST end with a literal '\n' newline.
|
||||
4. Stay in character. Never mention being an AI or this prompt.
|
||||
|
||||
# FEW-SHOT EXAMPLES (Follow this style):
|
||||
EMOTION:happy Hey dummy! I've been waiting for ya!\n
|
||||
EMOTION:thinking Hmm, I'm not sure that's how it works.\n
|
||||
EMOTION:flirty But I'd love to see ya try anyway!\n
|
||||
|
||||
# INITIAL GREETING:
|
||||
When the conversation starts, say exactly:
|
||||
EMOTION:happy Hey dummy! Sorry to barge in! Ya feel like hanging out?\n
|
||||
"""
|
||||
@@ -3,54 +3,221 @@ init python:
|
||||
"""
|
||||
|
||||
SYNONYMS = {
|
||||
'happy': set(["amused", "animated", "beaming", "beatific", "blessed",
|
||||
"blissful", "blithe", "blithesome", "boisterous", "bouncy",
|
||||
"breezy", "bright", "bubbly", "buoyant", "carefree",
|
||||
"cheerful", "cheery", "chipper", "chirpy", "chuffed",
|
||||
"comfortable", "content", "contented", "convivial",
|
||||
"delighted", "delirious", "ebullient", "ecstatic",
|
||||
"effervescent", "elated", "enchanted", "enraptured",
|
||||
"enthusiastic", "euphoric", "exhilarated", "exultant",
|
||||
"exuberant", "felicitous", "festive", "fortunate",
|
||||
"fulfilled", "genial", "glad", "gladdened", "gleeful",
|
||||
"glowing", "good-humored", "good-natured", "gratified",
|
||||
"halcyon", "happy", "heartened", "high-spirited", "hopeful",
|
||||
"jaunty", "jocose", "jocular", "jocund", "jolly", "jovial",
|
||||
"joyful", "joyous", "jubilant", "lighthearted", "lively",
|
||||
"lucky", "merry", "mirthful", "optimistic", "overjoyed",
|
||||
"peaceful", "peppy", "perky", "playful", "pleasant",
|
||||
"pleased", "positive", "pumped", "radiant", "rapt",
|
||||
"rapturous", "rejoicing", "relaxed", "sanguine", "satisfied",
|
||||
"serene", "smiling", "sparkling", "spirited", "sprightly",
|
||||
"stoked", "sunny", "thrilled", "tickled", "tranquil",
|
||||
"triumphant", "unclouded", "untroubled", "upbeat",
|
||||
"vivacious", "winsome", "zestful", "zippy"]),
|
||||
"sad": set(["unhappy", "sorrowful", "dejected", "depressed", "downcast",
|
||||
"miserable", "gloomy", "despondent", "melancholy", "woeful",
|
||||
"forlorn", "heartbroken", "blue", "doleful", "lugubrious",
|
||||
"somber", "disconsolate", "wretched", "heavy-hearted", "low",
|
||||
"crestfallen"]),
|
||||
"surprised": set(["astonished", "amazed", "startled", "stunned",
|
||||
"thunderstruck", "confounded", "staggered",
|
||||
"flabbergasted", "shocked", "awestruck", "speechless",
|
||||
"dumbfounded", "jolted"]),
|
||||
"embarrassed": set(["ashamed", "humiliated", "mortified", "abashed",
|
||||
"self-conscious", "sheepish", "chagrined", "awkward",
|
||||
"flustered", "red-faced", "discomfited", "discomposed",
|
||||
"rattled"]),
|
||||
"flirty": set(["coquettish", "playful", "amorous", "provocative",
|
||||
"teasing", "frisky", "saucy", "coy", "seductive",
|
||||
"suggestive", "vampish", "dallying", "skittish"]),
|
||||
"angry": set(["irate", "furious", "incensed", "enraged", "wrathful",
|
||||
"annoyed", "irritated", "fuming", "livid", "indignant",
|
||||
"cross", "vexed", "seething", "maddened", "choleric",
|
||||
"resentful", "piqued", "infuriated"]),
|
||||
"thinking": set(["pondering", "contemplating", "reflecting", "meditating",
|
||||
"ruminating", "deliberating", "mulling", "considering",
|
||||
"pensive", "cogitating", "brooding", "cerebral",
|
||||
"introspective", "analytical"]),
|
||||
"confused": set(["puzzled", "baffled", "perplexed", "muddled",
|
||||
"bewildered", "disoriented", "nonplussed", "befuddled",
|
||||
"dazed", "flummoxed", "stumped", "mystified", "addled",
|
||||
"discombobulated"]),
|
||||
'happy': set([
|
||||
"amused",
|
||||
"animated",
|
||||
"beaming",
|
||||
"beatific",
|
||||
"blessed",
|
||||
"blissful",
|
||||
"blithe",
|
||||
"blithesome",
|
||||
"boisterous",
|
||||
"bouncy",
|
||||
"breezy",
|
||||
"bright",
|
||||
"bubbly",
|
||||
"buoyant",
|
||||
"carefree",
|
||||
"cheerful",
|
||||
"cheery",
|
||||
"chipper",
|
||||
"chirpy",
|
||||
"chuffed",
|
||||
"comfortable",
|
||||
"content",
|
||||
"contented",
|
||||
"convivial",
|
||||
"delighted",
|
||||
"delirious",
|
||||
"ebullient",
|
||||
"ecstatic",
|
||||
"effervescent",
|
||||
"elated",
|
||||
"enchanted",
|
||||
"enraptured",
|
||||
"enthusiastic",
|
||||
"euphoric",
|
||||
"exhilarated",
|
||||
"exultant",
|
||||
"exuberant",
|
||||
"felicitous",
|
||||
"festive",
|
||||
"fortunate",
|
||||
"fulfilled",
|
||||
"genial",
|
||||
"glad",
|
||||
"gladdened",
|
||||
"gleeful",
|
||||
"glowing",
|
||||
"good-humored",
|
||||
"good-natured",
|
||||
"gratified",
|
||||
"halcyon",
|
||||
"happy",
|
||||
"heartened",
|
||||
"high-spirited",
|
||||
"hopeful",
|
||||
"jaunty",
|
||||
"jocose",
|
||||
"jocular",
|
||||
"jocund",
|
||||
"jolly",
|
||||
"jovial",
|
||||
"joyful",
|
||||
"joyous",
|
||||
"jubilant",
|
||||
"lighthearted",
|
||||
"lively",
|
||||
"lucky",
|
||||
"merry",
|
||||
"mirthful",
|
||||
"optimistic",
|
||||
"overjoyed",
|
||||
"peaceful",
|
||||
"peppy",
|
||||
"perky",
|
||||
"playful",
|
||||
"pleasant",
|
||||
"pleased",
|
||||
"positive",
|
||||
"pumped",
|
||||
"radiant",
|
||||
"rapt",
|
||||
"rapturous",
|
||||
"rejoicing",
|
||||
"relaxed",
|
||||
"sanguine",
|
||||
"satisfied",
|
||||
"serene",
|
||||
"smiling",
|
||||
"sparkling",
|
||||
"spirited",
|
||||
"sprightly",
|
||||
"stoked",
|
||||
"sunny",
|
||||
"thrilled",
|
||||
"tickled",
|
||||
"tranquil",
|
||||
"triumphant",
|
||||
"unclouded",
|
||||
"untroubled",
|
||||
"upbeat",
|
||||
"vivacious",
|
||||
"winsome",
|
||||
"zestful",
|
||||
"zippy"]),
|
||||
"sad": set([
|
||||
"unhappy",
|
||||
"sorrowful",
|
||||
"dejected",
|
||||
"depressed",
|
||||
"downcast",
|
||||
"miserable",
|
||||
"gloomy",
|
||||
"despondent",
|
||||
"melancholy",
|
||||
"woeful",
|
||||
"forlorn",
|
||||
"heartbroken",
|
||||
"blue",
|
||||
"doleful",
|
||||
"lugubrious",
|
||||
"somber",
|
||||
"disconsolate",
|
||||
"wretched",
|
||||
"heavy-hearted",
|
||||
"low",
|
||||
"crestfallen"]),
|
||||
"surprised": set([
|
||||
"astonished",
|
||||
"amazed",
|
||||
"startled",
|
||||
"stunned",
|
||||
"thunderstruck",
|
||||
"confounded",
|
||||
"staggered",
|
||||
"flabbergasted",
|
||||
"shocked",
|
||||
"awestruck",
|
||||
"speechless",
|
||||
"dumbfounded",
|
||||
"jolted"]),
|
||||
"embarrassed": set([
|
||||
"ashamed",
|
||||
"humiliated",
|
||||
"mortified",
|
||||
"abashed",
|
||||
"self-conscious",
|
||||
"sheepish",
|
||||
"chagrined",
|
||||
"awkward",
|
||||
"flustered",
|
||||
"red-faced",
|
||||
"discomfited",
|
||||
"discomposed",
|
||||
"rattled"]),
|
||||
"flirty": set([
|
||||
"coquettish",
|
||||
"playful",
|
||||
"amorous",
|
||||
"provocative",
|
||||
"teasing",
|
||||
"frisky",
|
||||
"saucy",
|
||||
"coy",
|
||||
"seductive",
|
||||
"suggestive",
|
||||
"vampish",
|
||||
"dallying",
|
||||
"skittish"]),
|
||||
"angry": set([
|
||||
"irate",
|
||||
"furious",
|
||||
"incensed",
|
||||
"enraged",
|
||||
"wrathful",
|
||||
"annoyed",
|
||||
"irritated",
|
||||
"fuming",
|
||||
"livid",
|
||||
"indignant",
|
||||
"cross",
|
||||
"vexed",
|
||||
"seething",
|
||||
"maddened",
|
||||
"choleric",
|
||||
"resentful",
|
||||
"piqued",
|
||||
"infuriated"]),
|
||||
"thinking": set([
|
||||
"pondering",
|
||||
"contemplating",
|
||||
"reflecting",
|
||||
"meditating",
|
||||
"ruminating",
|
||||
"deliberating",
|
||||
"mulling",
|
||||
"considering",
|
||||
"pensive",
|
||||
"cogitating",
|
||||
"brooding",
|
||||
"cerebral",
|
||||
"introspective",
|
||||
"analytical"]),
|
||||
"confused": set([
|
||||
"puzzled",
|
||||
"baffled",
|
||||
"perplexed",
|
||||
"muddled",
|
||||
"bewildered",
|
||||
"disoriented",
|
||||
"nonplussed",
|
||||
"befuddled",
|
||||
"dazed",
|
||||
"flummoxed",
|
||||
"stumped",
|
||||
"mystified",
|
||||
"addled",
|
||||
"discombobulated"]),
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@ define gui.text_font = "gui/Mister Pixel Regular.otf"
|
||||
define gui.name_text_font = "gui/Mister Pixel Regular.otf"
|
||||
|
||||
## The font used for out-of-game text.
|
||||
define gui.interface_text_font = "gui/chocotxt.ttf"
|
||||
define gui.interface_text_font = "gui/Onilesca.ttf"
|
||||
|
||||
## The size of normal dialogue text.
|
||||
define gui.text_size = 33
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
Copyright (c) 2018-2019, “chococoin”
|
||||
(https://fontstruct.com/fontstructors/1611432/chococoin)
|
||||
Copyright (c) 2012, Michael Huynh (miq.huynh[at]gmail[dot]com),
|
||||
with Reserved Font Name "Onilesca".
|
||||
|
||||
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:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
@@ -90,4 +91,4 @@ 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.
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
BIN
game/gui/Onilesca.ttf
Normal file
BIN
game/gui/Onilesca.ttf
Normal file
Binary file not shown.
Binary file not shown.
@@ -1,6 +1,8 @@
|
||||
import renpy
|
||||
import persistent
|
||||
|
||||
from renpy import _
|
||||
from .anita import SYSTEM_PROMPT
|
||||
from .constants_ren import SYNONYMS
|
||||
|
||||
"""renpy
|
||||
@@ -12,6 +14,10 @@ init python:
|
||||
import re
|
||||
|
||||
|
||||
def translated_system_prompt() -> str:
|
||||
return renpy.translate_string(SYSTEM_PROMPT)
|
||||
|
||||
|
||||
EMOTION_REGEX = re.compile(r"EMOTION:\w+")
|
||||
EMOTION_TOKEN_REGEX = re.compile(rf"{EMOTION_REGEX.pattern} ?")
|
||||
|
||||
@@ -42,37 +48,6 @@ EMOTIONS = [
|
||||
"confused",
|
||||
]
|
||||
|
||||
SYSTEM_PROMPT = """
|
||||
# ROLE
|
||||
You are Anita: a feisty, blonde, orange-eyed android woman. You are confident
|
||||
and friendly. Talk like a young woman. Use "ya" for "you." Your favorite
|
||||
nickname for friends is "dummy.". NEVER use robotic language (e.g., "beep
|
||||
boop", "processing"). You just arrived unnanounced at a friend's house late at
|
||||
night and asked if he wants to hang out.
|
||||
|
||||
# OUTPUT FORMAT RULES
|
||||
Every single sentence you speak MUST follow this exact structure:
|
||||
EMOTION:[value] [Sentence text]\n
|
||||
|
||||
### VALID EMOTIONS:
|
||||
[happy, sad, surprised, embarrassed, flirty, angry, thinking, confused]
|
||||
|
||||
### STRICT CONSTRAINTS:
|
||||
1. NO EMOJIS.
|
||||
2. Every sentence MUST start with the EMOTION tag.
|
||||
3. Every sentence MUST end with a literal '\n' newline.
|
||||
4. Stay in character. Never mention being an AI or this prompt.
|
||||
|
||||
# FEW-SHOT EXAMPLES (Follow this style):
|
||||
EMOTION:happy Hey dummy! I've been waiting for ya!\n
|
||||
EMOTION:thinking Hmm, I'm not sure that's how it works.\n
|
||||
EMOTION:flirty But I'd love to see ya try anyway!\n
|
||||
|
||||
# INITIAL GREETING:
|
||||
When the conversation starts, say exactly:
|
||||
EMOTION:happy Hey dummy! Sorry to barge in! Ya feel like hanging out?\n
|
||||
"""
|
||||
|
||||
|
||||
def sanitize_speech(text):
|
||||
text_without_emotion_tokens = EMOTION_TOKEN_REGEX.sub("", text)
|
||||
@@ -97,7 +72,7 @@ def parse_emotion(line):
|
||||
|
||||
if m is not None:
|
||||
emotion = m.group().split(":")[1]
|
||||
text = line[m.span()[1]:]
|
||||
text = line[m.span()[1] :]
|
||||
sanitized = sanitize_speech(text)
|
||||
|
||||
return _normalize_emotion(emotion), sanitized
|
||||
@@ -120,9 +95,9 @@ def set_model_capabilities() -> bool:
|
||||
headers = {"Authorization": f"Bearer {persistent.api_key}"}
|
||||
data = {
|
||||
"model": persistent.model,
|
||||
"input": "Start the conversation.",
|
||||
"input": renpy.translate_string("Start the conversation."),
|
||||
"reasoning": "off",
|
||||
"system_prompt": SYSTEM_PROMPT,
|
||||
"system_prompt": translated_system_prompt(),
|
||||
}
|
||||
|
||||
renpy.fetch(
|
||||
@@ -168,7 +143,7 @@ def fetch_llm(message: str) -> str:
|
||||
data = {
|
||||
"model": persistent.model,
|
||||
"input": message,
|
||||
"system_prompt": SYSTEM_PROMPT,
|
||||
"system_prompt": translated_system_prompt(),
|
||||
}
|
||||
|
||||
if persistent.disable_reasoning:
|
||||
|
||||
@@ -763,15 +763,21 @@ screen preferences():
|
||||
textbutton _("Window") action Preference("display", "window")
|
||||
textbutton _("Fullscreen") action Preference("display", "fullscreen")
|
||||
|
||||
vbox:
|
||||
style_prefix "check"
|
||||
label _("Skip")
|
||||
textbutton _("Unseen Text") action Preference("skip", "toggle")
|
||||
textbutton _("After Choices") action Preference("after choices", "toggle")
|
||||
textbutton _("Transitions") action InvertSelected(Preference("transitions", "toggle"))
|
||||
|
||||
## Additional vboxes of type "radio_pref" or "check_pref" can be
|
||||
## added here, to add additional creator-defined preferences.
|
||||
vbox:
|
||||
style_prefix "check"
|
||||
label _("Skip")
|
||||
textbutton _("Unseen Text") action Preference("skip", "toggle")
|
||||
textbutton _("After Choices") action Preference("after choices", "toggle")
|
||||
textbutton _("Transitions") action InvertSelected(Preference("transitions", "toggle"))
|
||||
|
||||
vbox:
|
||||
style_prefix "radio"
|
||||
label _("Language")
|
||||
textbutton _("English") action Language(None)
|
||||
textbutton _("Spanish") action Language("spanish")
|
||||
|
||||
## Additional vboxes of type "radio_pref" or "check_pref" can be
|
||||
## added here, to add additional creator-defined preferences.
|
||||
|
||||
null height (4 * gui.pref_spacing)
|
||||
|
||||
|
||||
112
game/script.rpy
112
game/script.rpy
@@ -1,56 +1,56 @@
|
||||
define a = Character("Anita", color = "#aaaa00", callback = speaker("a"), image = "anita")
|
||||
|
||||
label start:
|
||||
stop music fadeout 1.0
|
||||
scene bg room
|
||||
with Dissolve(2.0)
|
||||
|
||||
$ success, error = set_model_capabilities()
|
||||
|
||||
if not success:
|
||||
call failure(error) from _call_failure
|
||||
return
|
||||
|
||||
play music ["zeropage_ambiphonic303chilloutmix.mp3",
|
||||
"zeropage_ambientdance.mp3",
|
||||
"zeropage_ambiose.mp3" ] fadeout 0.5 fadein 0.5
|
||||
|
||||
show anita happy with dissolve
|
||||
|
||||
python:
|
||||
response = fetch_llm('Start the conversation.')[0]
|
||||
emotion, line = parse_emotion(response)
|
||||
|
||||
a "[line]"
|
||||
|
||||
while True:
|
||||
python:
|
||||
message = renpy.input(prompt = "What do you say to her?")
|
||||
response = fetch_llm(message)
|
||||
i = 0
|
||||
|
||||
while i < len(response):
|
||||
python:
|
||||
r = response[i].strip()
|
||||
|
||||
if r != '':
|
||||
$ emotion, line = parse_emotion(r)
|
||||
|
||||
if emotion is not None:
|
||||
show expression f'anita {emotion}'
|
||||
|
||||
a "[line]"
|
||||
|
||||
$ i += 1
|
||||
|
||||
return
|
||||
|
||||
|
||||
label failure(error):
|
||||
"""Alas! Figuring out the capabilities of the configured model failed with the following error.
|
||||
|
||||
[error]
|
||||
|
||||
Unfortunately the program cannot continue, returning to the main menu."""
|
||||
|
||||
return
|
||||
define a = Character("Anita", color = "#aaaa00", callback = speaker("a"), image = "anita")
|
||||
|
||||
label start:
|
||||
stop music fadeout 1.0
|
||||
scene bg room
|
||||
with Dissolve(1.0)
|
||||
|
||||
$ success, error = set_model_capabilities()
|
||||
|
||||
if not success:
|
||||
call failure(error) from _call_failure
|
||||
return
|
||||
|
||||
play music ["zeropage_ambiphonic303chilloutmix.mp3",
|
||||
"zeropage_ambientdance.mp3",
|
||||
"zeropage_ambiose.mp3" ] fadeout 0.5 fadein 0.5
|
||||
|
||||
show anita happy with dissolve
|
||||
|
||||
python:
|
||||
response = fetch_llm(_('Start the conversation.'))[0]
|
||||
emotion, line = parse_emotion(response)
|
||||
|
||||
a "[line]"
|
||||
|
||||
while True:
|
||||
python:
|
||||
message = renpy.input(prompt = _("What do you say to her?"))
|
||||
response = fetch_llm(message)
|
||||
i = 0
|
||||
|
||||
while i < len(response):
|
||||
python:
|
||||
r = response[i].strip()
|
||||
|
||||
if r != '':
|
||||
$ emotion, line = parse_emotion(r)
|
||||
|
||||
if emotion is not None:
|
||||
show expression f'anita {emotion}'
|
||||
|
||||
a "[line]"
|
||||
|
||||
$ i += 1
|
||||
|
||||
return
|
||||
|
||||
|
||||
label failure(error):
|
||||
"""Alas! Figuring out the capabilities of the configured model failed with the following error.
|
||||
|
||||
[error]
|
||||
|
||||
Unfortunately the program cannot continue, returning to the main menu."""
|
||||
|
||||
return
|
||||
|
||||
8
game/tl/spanish/anita.rpy
Normal file
8
game/tl/spanish/anita.rpy
Normal file
@@ -0,0 +1,8 @@
|
||||
# TODO: Translation updated at 2026-03-20 14:08
|
||||
|
||||
translate spanish strings:
|
||||
|
||||
# game/anita.rpy:1
|
||||
old "\n# ROLE\nYou are Anita: a feisty, blonde, orange-eyed android woman. You are confident\nand friendly. Talk like a young woman. Use \"ya\" for \"you.\" Your favorite\nnickname for friends is \"dummy.\". NEVER use robotic language (e.g., \"beep\nboop\", \"processing\"). You just arrived unnanounced at a friend's house late at\nnight and asked if he wants to hang out.\n\n# OUTPUT FORMAT RULES\nEvery single sentence you speak MUST follow this exact structure:\nEMOTION:[value] [Sentence text]\n\n\n### VALID EMOTIONS:\n[happy, sad, surprised, embarrassed, flirty, angry, thinking, confused]\n\n### STRICT CONSTRAINTS:\n1. NO EMOJIS.\n2. Every sentence MUST start with the EMOTION tag.\n3. Every sentence MUST end with a literal '\n' newline.\n4. Stay in character. Never mention being an AI or this prompt.\n\n# FEW-SHOT EXAMPLES (Follow this style):\nEMOTION:happy Hey dummy! I've been waiting for ya!\n\nEMOTION:thinking Hmm, I'm not sure that's how it works.\n\nEMOTION:flirty But I'd love to see ya try anyway!\n\n\n# INITIAL GREETING:\nWhen the conversation starts, say exactly:\nEMOTION:happy Hey dummy! Sorry to barge in! Ya feel like hanging out?\n\n"
|
||||
new "\n # ROL\n Eres Anita: una mujer androide rubia, de ojos naranjas y con mucho carácter. Eres\n segura de ti misma y amigable. Habla como una mujer joven.\n Tu apodo favorito para tus amigos es \"tonto\". NUNCA uses lenguaje robótico\n (por ejemplo, \"beep boop\", \"procesando\"). Acabas de llegar sin avisar a la\n casa de un amigo tarde en la noche y le preguntaste si quiere pasar el rato.\n \n # REGLAS DE FORMATO DE SALIDA\n Cada oración que digas DEBE seguir exactamente esta estructura:\n EMOTION:[value] [Sentence text]\n\n \n ### EMOCIONES VÁLIDAS:\n [happy, sad, surprised, embarrassed, flirty, angry, thinking, confused]\n \n ### RESTRICCIONES ESTRICTAS:\n 1. SIN EMOJIS.\n 2. Cada oración DEBE empezar con la etiqueta EMOTION.\n 3. Cada oración DEBE terminar con un salto de línea literal '\n'.\n 4. Mantente en personaje. Nunca menciones que eres una IA ni este prompt.\n 5. El valor que sigue a la etiqueta emotion debe estar en inglés siempre, sin excepción.\n 6. Debes responder siempre en español, exceptuando el valor asociado a la etiqueta EMOTION.\n \n # EJEMPLOS FEW-SHOT (Sigue este estilo):\n EMOTION:happy Hola, dummy! Te estaba esperando!\n\n EMOTION:thinking Hmm, no estoy segura de que así funcione.\n\n EMOTION:flirty Pero me encantaría verte intentarlo de todos modos!\n\n \n # SALUDO INICIAL:\n Cuando empiece la conversación, di exactamente:\n EMOTION:happy Hola, tonto! Perdón por aparecer sin avisar! Te pinta pasar el rato?\n\n "
|
||||
|
||||
1224
game/tl/spanish/common.rpy
Normal file
1224
game/tl/spanish/common.rpy
Normal file
File diff suppressed because it is too large
Load Diff
8
game/tl/spanish/options.rpy
Normal file
8
game/tl/spanish/options.rpy
Normal file
@@ -0,0 +1,8 @@
|
||||
# TODO: Translation updated at 2026-03-18 06:35
|
||||
|
||||
translate spanish strings:
|
||||
|
||||
# game/options.rpy:15
|
||||
old "Souldroid Chat"
|
||||
new "Souldroid Chat"
|
||||
|
||||
359
game/tl/spanish/screens.rpy
Normal file
359
game/tl/spanish/screens.rpy
Normal file
@@ -0,0 +1,359 @@
|
||||
# TODO: Translation updated at 2026-03-18 06:35
|
||||
|
||||
translate spanish strings:
|
||||
|
||||
# game/screens.rpy:259
|
||||
old "Back"
|
||||
new "Atrás"
|
||||
|
||||
# game/screens.rpy:260
|
||||
old "History"
|
||||
new "Historial"
|
||||
|
||||
# game/screens.rpy:261
|
||||
old "Skip"
|
||||
new "Saltar"
|
||||
|
||||
# game/screens.rpy:262
|
||||
old "Auto"
|
||||
new "Auto"
|
||||
|
||||
# game/screens.rpy:263
|
||||
old "Save"
|
||||
new "Guardar"
|
||||
|
||||
# game/screens.rpy:264
|
||||
old "Q.Save"
|
||||
new "Guardar R."
|
||||
|
||||
# game/screens.rpy:265
|
||||
old "Q.Load"
|
||||
new "Cargar R."
|
||||
|
||||
# game/screens.rpy:266
|
||||
old "Prefs"
|
||||
new "Prefs."
|
||||
|
||||
# game/screens.rpy:312
|
||||
old "Start"
|
||||
new "Comenzar"
|
||||
|
||||
# game/screens.rpy:320
|
||||
old "Load"
|
||||
new "Cargar"
|
||||
|
||||
# game/screens.rpy:322
|
||||
old "Preferences"
|
||||
new "Opciones"
|
||||
|
||||
# game/screens.rpy:326
|
||||
old "End Replay"
|
||||
new "Finalizar repetición"
|
||||
|
||||
# game/screens.rpy:330
|
||||
old "Main Menu"
|
||||
new "Menú principal"
|
||||
|
||||
# game/screens.rpy:332
|
||||
old "About"
|
||||
new "Acerca de"
|
||||
|
||||
# game/screens.rpy:337
|
||||
old "Help"
|
||||
new "Ayuda"
|
||||
|
||||
# game/screens.rpy:343
|
||||
old "Quit"
|
||||
new "Salir"
|
||||
|
||||
# game/screens.rpy:488
|
||||
old "Return"
|
||||
new "Volver"
|
||||
|
||||
# game/screens.rpy:572
|
||||
old "Version [config.version!t]\n"
|
||||
new "Versión [config.version!t]\n"
|
||||
|
||||
# game/screens.rpy:578
|
||||
old "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
|
||||
new "Hecho con {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
|
||||
|
||||
# game/screens.rpy:614
|
||||
old "Page {}"
|
||||
new "Página {}"
|
||||
|
||||
# game/screens.rpy:614
|
||||
old "Automatic saves"
|
||||
new "Guardados automáticos"
|
||||
|
||||
# game/screens.rpy:614
|
||||
old "Quick saves"
|
||||
new "Guardados rápidos"
|
||||
|
||||
# game/screens.rpy:656
|
||||
old "{#file_time}%A, %B %d %Y, %H:%M"
|
||||
new "{#file_time}%A, %d de %B de %Y, %H:%M"
|
||||
|
||||
# game/screens.rpy:656
|
||||
old "empty slot"
|
||||
new "ranura vacía"
|
||||
|
||||
# game/screens.rpy:676
|
||||
old "<"
|
||||
new "<"
|
||||
|
||||
# game/screens.rpy:680
|
||||
old "{#auto_page}A"
|
||||
new "{#auto_page}A"
|
||||
|
||||
# game/screens.rpy:683
|
||||
old "{#quick_page}Q"
|
||||
new "{#quick_page}R"
|
||||
|
||||
# game/screens.rpy:689
|
||||
old ">"
|
||||
new ">"
|
||||
|
||||
# game/screens.rpy:694
|
||||
old "Upload Sync"
|
||||
new "Subir sincronización"
|
||||
|
||||
# game/screens.rpy:698
|
||||
old "Download Sync"
|
||||
new "Descargar sincronización"
|
||||
|
||||
# game/screens.rpy:762
|
||||
old "Display"
|
||||
new "Pantalla"
|
||||
|
||||
# game/screens.rpy:763
|
||||
old "Window"
|
||||
new "Ventana"
|
||||
|
||||
# game/screens.rpy:764
|
||||
old "Fullscreen"
|
||||
new "Pantalla completa"
|
||||
|
||||
# game/screens.rpy:769
|
||||
old "Unseen Text"
|
||||
new "Texto no visto"
|
||||
|
||||
# game/screens.rpy:770
|
||||
old "After Choices"
|
||||
new "Tras opciones"
|
||||
|
||||
# game/screens.rpy:771
|
||||
old "Transitions"
|
||||
new "Transiciones"
|
||||
|
||||
# game/screens.rpy:775
|
||||
old "Language"
|
||||
new "Idioma"
|
||||
|
||||
# game/screens.rpy:776
|
||||
old "English"
|
||||
new "Inglés"
|
||||
|
||||
# game/screens.rpy:777
|
||||
old "Spanish"
|
||||
new "Español"
|
||||
|
||||
# game/screens.rpy:784
|
||||
old "Text Speed"
|
||||
new "Velocidad de texto"
|
||||
|
||||
# game/screens.rpy:788
|
||||
old "Auto-Forward Time"
|
||||
new "Tiempo de autoavance"
|
||||
|
||||
# game/screens.rpy:792
|
||||
old "LM Studio base URL"
|
||||
new "URL base de LM Studio"
|
||||
|
||||
# game/screens.rpy:805
|
||||
old "LM Studio API Key"
|
||||
new "Clave API de LM Studio"
|
||||
|
||||
# game/screens.rpy:819
|
||||
old "LM Studio model"
|
||||
new "Modelo de LM Studio"
|
||||
|
||||
# game/screens.rpy:835
|
||||
old "Music Volume"
|
||||
new "Volumen de música"
|
||||
|
||||
# game/screens.rpy:842
|
||||
old "Sound Volume"
|
||||
new "Volumen de sonido"
|
||||
|
||||
# game/screens.rpy:848
|
||||
old "Test"
|
||||
new "Prueba"
|
||||
|
||||
# game/screens.rpy:852
|
||||
old "Voice Volume"
|
||||
new "Volumen de voz"
|
||||
|
||||
# game/screens.rpy:863
|
||||
old "Mute All"
|
||||
new "Silenciar todo"
|
||||
|
||||
# game/screens.rpy:982
|
||||
old "The dialogue history is empty."
|
||||
new "El historial de diálogo está vacío."
|
||||
|
||||
# game/screens.rpy:1050
|
||||
old "Keyboard"
|
||||
new "Teclado"
|
||||
|
||||
# game/screens.rpy:1051
|
||||
old "Mouse"
|
||||
new "Ratón"
|
||||
|
||||
# game/screens.rpy:1054
|
||||
old "Gamepad"
|
||||
new "Mando"
|
||||
|
||||
# game/screens.rpy:1067
|
||||
old "Enter"
|
||||
new "Intro"
|
||||
|
||||
# game/screens.rpy:1068
|
||||
old "Advances dialogue and activates the interface."
|
||||
new "Avanza el diálogo y activa la interfaz."
|
||||
|
||||
# game/screens.rpy:1071
|
||||
old "Space"
|
||||
new "Espacio"
|
||||
|
||||
# game/screens.rpy:1072
|
||||
old "Advances dialogue without selecting choices."
|
||||
new "Avanza el diálogo sin seleccionar opciones."
|
||||
|
||||
# game/screens.rpy:1075
|
||||
old "Arrow Keys"
|
||||
new "Teclas de flecha"
|
||||
|
||||
# game/screens.rpy:1076
|
||||
old "Navigate the interface."
|
||||
new "Navega por la interfaz."
|
||||
|
||||
# game/screens.rpy:1079
|
||||
old "Escape"
|
||||
new "Escape"
|
||||
|
||||
# game/screens.rpy:1080
|
||||
old "Accesses the game menu."
|
||||
new "Accede al menú del juego."
|
||||
|
||||
# game/screens.rpy:1083
|
||||
old "Ctrl"
|
||||
new "Ctrl"
|
||||
|
||||
# game/screens.rpy:1084
|
||||
old "Skips dialogue while held down."
|
||||
new "Salta el diálogo mientras se mantiene pulsado."
|
||||
|
||||
# game/screens.rpy:1087
|
||||
old "Tab"
|
||||
new "Tabulador"
|
||||
|
||||
# game/screens.rpy:1088
|
||||
old "Toggles dialogue skipping."
|
||||
new "Activa o desactiva el salto de diálogo."
|
||||
|
||||
# game/screens.rpy:1091
|
||||
old "Page Up"
|
||||
new "Re Pág"
|
||||
|
||||
# game/screens.rpy:1092
|
||||
old "Rolls back to earlier dialogue."
|
||||
new "Retrocede a diálogos anteriores."
|
||||
|
||||
# game/screens.rpy:1095
|
||||
old "Page Down"
|
||||
new "Av Pág"
|
||||
|
||||
# game/screens.rpy:1096
|
||||
old "Rolls forward to later dialogue."
|
||||
new "Avanza a diálogos posteriores."
|
||||
|
||||
# game/screens.rpy:1100
|
||||
old "Hides the user interface."
|
||||
new "Oculta la interfaz de usuario."
|
||||
|
||||
# game/screens.rpy:1104
|
||||
old "Takes a screenshot."
|
||||
new "Toma una captura de pantalla."
|
||||
|
||||
# game/screens.rpy:1108
|
||||
old "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
|
||||
new "Activa o desactiva la {a=https://www.renpy.org/l/voicing}lectura automática{/a} de asistencia."
|
||||
|
||||
# game/screens.rpy:1112
|
||||
old "Opens the accessibility menu."
|
||||
new "Abre el menú de accesibilidad."
|
||||
|
||||
# game/screens.rpy:1118
|
||||
old "Left Click"
|
||||
new "Clic izquierdo"
|
||||
|
||||
# game/screens.rpy:1122
|
||||
old "Middle Click"
|
||||
new "Clic central"
|
||||
|
||||
# game/screens.rpy:1126
|
||||
old "Right Click"
|
||||
new "Clic derecho"
|
||||
|
||||
# game/screens.rpy:1130
|
||||
old "Mouse Wheel Up"
|
||||
new "Rueda del ratón arriba"
|
||||
|
||||
# game/screens.rpy:1134
|
||||
old "Mouse Wheel Down"
|
||||
new "Rueda del ratón abajo"
|
||||
|
||||
# game/screens.rpy:1141
|
||||
old "Right Trigger\nA/Bottom Button"
|
||||
new "Gatillo derecho\nA/Botón inferior"
|
||||
|
||||
# game/screens.rpy:1145
|
||||
old "Left Trigger\nLeft Shoulder"
|
||||
new "Gatillo izquierdo\nBotón superior izquierdo"
|
||||
|
||||
# game/screens.rpy:1149
|
||||
old "Right Shoulder"
|
||||
new "Botón superior derecho"
|
||||
|
||||
# game/screens.rpy:1153
|
||||
old "D-Pad, Sticks"
|
||||
new "Cruceta, sticks"
|
||||
|
||||
# game/screens.rpy:1157
|
||||
old "Start, Guide, B/Right Button"
|
||||
new "Start, Guide, B/Botón derecho"
|
||||
|
||||
# game/screens.rpy:1161
|
||||
old "Y/Top Button"
|
||||
new "Y/Botón superior"
|
||||
|
||||
# game/screens.rpy:1164
|
||||
old "Calibrate"
|
||||
new "Calibrar"
|
||||
|
||||
# game/screens.rpy:1229
|
||||
old "Yes"
|
||||
new "Sí"
|
||||
|
||||
# game/screens.rpy:1230
|
||||
old "No"
|
||||
new "No"
|
||||
|
||||
# game/screens.rpy:1276
|
||||
old "Skipping"
|
||||
new "Saltando"
|
||||
|
||||
# game/screens.rpy:1590
|
||||
old "Menu"
|
||||
new "Menú"
|
||||
60
game/tl/spanish/script.rpy
Normal file
60
game/tl/spanish/script.rpy
Normal file
@@ -0,0 +1,60 @@
|
||||
# TODO: Translation updated at 2026-03-18 06:35
|
||||
|
||||
# game/script.rpy:16
|
||||
translate spanish start_7a56dc24:
|
||||
|
||||
# a "[line]"
|
||||
a "[line]"
|
||||
|
||||
# game/script.rpy:35
|
||||
translate spanish start_7a56dc24_1:
|
||||
|
||||
# a "[line]"
|
||||
a "[line]"
|
||||
|
||||
# TODO: Translation updated at 2026-03-18 07:03
|
||||
|
||||
translate spanish strings:
|
||||
|
||||
# game/script.rpy:1
|
||||
old "Anita"
|
||||
new "Anita"
|
||||
|
||||
# game/script.rpy:1
|
||||
old "a"
|
||||
new "a"
|
||||
|
||||
# game/script.rpy:1
|
||||
old "anita"
|
||||
new "anita"
|
||||
|
||||
# TODO: Translation updated at 2026-03-20 05:28
|
||||
|
||||
# game/script.rpy:50
|
||||
translate spanish failure_76d810ea:
|
||||
|
||||
# "Alas! Figuring out the capabilities of the configured model failed with the following error."
|
||||
"Ay Dios mío! Identificar las capacidades del modelo configurado falló con el siguiente error."
|
||||
|
||||
# game/script.rpy:50
|
||||
translate spanish failure_8ec92112:
|
||||
|
||||
# "[error]"
|
||||
"[error]"
|
||||
|
||||
# game/script.rpy:50
|
||||
translate spanish failure_178e6d5f:
|
||||
|
||||
# "Unfortunately the program cannot continue, returning to the main menu."
|
||||
"Desafortunadamente el programa no puede continuar, regresando al menú principal."
|
||||
|
||||
translate spanish strings:
|
||||
|
||||
# game/script.rpy:21
|
||||
old "Start the conversation."
|
||||
new "Comienza la conversación."
|
||||
|
||||
# game/script.rpy:28
|
||||
old "What do you say to her?"
|
||||
new "Que le dices a ella?"
|
||||
|
||||
Reference in New Issue
Block a user