summaryrefslogtreecommitdiff
path: root/game/03_init.rpy
diff options
context:
space:
mode:
Diffstat (limited to 'game/03_init.rpy')
-rw-r--r--game/03_init.rpy313
1 files changed, 313 insertions, 0 deletions
diff --git a/game/03_init.rpy b/game/03_init.rpy
new file mode 100644
index 0000000..1125462
--- /dev/null
+++ b/game/03_init.rpy
@@ -0,0 +1,313 @@
+########################################################################################
+# This file is part of Spheres.
+# Copyright (C) 2019 Jesusalva
+
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+########################################################################################
+# Definitions
+############################################################################
+# This is the JSON data formatter
+init python:
+ def logindata():
+ global password
+ # TODO: Obtain user id based on device
+ return """{
+ "passwd": "%s",
+ "version": "%s"
+ }""" % (password, config.version)
+
+
+ def recruitdata(t, a):
+ return """{
+ "tavern": %d,
+ "amount": %d
+ }""" % (t, a)
+
+
+ def questdata(q, p):
+ return """{
+ "quest_id": %d,
+ "party_id": %d
+ }""" % (q, p)
+
+
+ def battledata(u, s):
+ return """{
+ "unit": %s,
+ "sphere": %s
+ }""" % (json.dumps(u), json.dumps(s))
+
+ def card_composite(cid, path):
+ # We need to try to get rarity
+ try:
+ r=allunits[int(cid)]["rare"]
+ except:
+ r=4 # FIXME
+
+ # We need to try to get the element
+ try:
+ e=allunits[int(cid)]["attribute"]
+ print str(e)
+ except:
+ e=0
+
+ return Composite(
+ (640, 960),
+ (0, 0), "gfx/cards/bg.png",
+ (0, 0), path,
+ (0, 0), "gfx/cards/"+str(r)+".png",
+ (0, 0), "gfx/cards/ele/"+str(e)+".png")
+ # size,)
+
+ # TODO: square_ and gfx/square/units
+ # Converts regular image filepaths to displayables names and vice-versa
+ def img_regex(name, reverse=False):
+ if not reverse:
+ # Extension is ommited, add them yourself!
+ if name.startswith("unit_"):
+ return "gfx/units/%s" % name.replace("unit_")
+ elif name.startswith("mob_"):
+ return "gfx/mobs/%s" % name.replace("mob_")
+ elif name.startswith("dialog_"):
+ return "gfx/dialog/%s" % name.replace("dialog_")
+ elif name.startswith("bg "):
+ return "gfx/bg/%s" % name.replace("bg ")
+ elif name.startswith("summon_"):
+ return "gfx/summons/%s" % name.replace("summon_")
+ else:
+ print("ERROR: Not a regular filename")
+ return name
+ else:
+ if name.startswith("gfx/units/"):
+ return "unit_%s" % name
+ elif name.startswith("gfx/mobs/"):
+ return "mob_%s" % name
+ elif name.startswith("gfx/dialog/"):
+ return "dialog_%s" % name
+ elif name.startswith("gfx/bg/"):
+ return "bg %s" % name
+ elif name.startswith("gfx/summons/"):
+ return "summon_%s" % name
+ else:
+ print("ERROR: Not a regular display name")
+ return name
+
+ # Loads a sound called VAL
+ def get_sfx(val, ext):
+ # Search for the sound
+ show_img(val, False, ext=ext)
+
+ valb=dl_search(persistent.allfiles, 0, val)[1]
+ if valb == ERR_INVALID:
+ print ("Invalid Sound: %s (%s)" % (path, val))
+ return "sfx/regnum.mp3" # FIXME
+ return valb
+
+ # Load sprite images: "unit"
+ for file in renpy.list_files():
+ fn=file.replace('gfx/units/','').replace('/', ' ').replace('.png','')
+ if file.startswith('gfx/units/'):
+ if file.endswith('.png') or file.endswith('.webp'):
+ name = "unit_"+fn
+ #renpy.image(name, Image(file, yanchor=1.0))
+ renpy.image(name, card_composite(fn, file))
+
+ dl=dl_search(persistent.allfiles, 0, name)
+ if dl is not ERR_INVALID:
+ persistent.allfiles.append((name, file))
+ allfiles.append(name)
+ continue
+ continue
+
+ # Load sprite images: "mob"
+ for file in renpy.list_files():
+ fn=file.replace('gfx/mobs/','').replace('/', ' ').replace('.png','')
+ if file.startswith('gfx/mobs/'):
+ if file.endswith('.png') or file.endswith('.webp'):
+ name = "mob_"+fn
+ renpy.image(name, Image(file, yanchor=1.0))
+ if not name in persistent.allfiles:
+ persistent.allfiles.append((name, file))
+ allfiles.append(name)
+ continue
+ continue
+
+
+ # Load sprite images: "dialog"
+ for file in renpy.list_files():
+ fn=file.replace('gfx/dialog/','').replace('/', ' ').replace('.png','').replace('.webp','')
+ if file.startswith('gfx/dialog/'):
+ if file.endswith('.png') or file.endswith('.webp'):
+ name = "dialog_"+fn
+ renpy.image(name, Image(file, yanchor=1.0))
+ dl=dl_search(persistent.allfiles, 0, name)
+ if dl is not ERR_INVALID:
+ persistent.allfiles.append((name, file))
+ allfiles.append(name)
+ continue
+ continue
+
+
+ # Load background images: "bg"
+ for file in renpy.list_files():
+ fn=file.replace('gfx/bg/','').replace('/', ' ').replace('.png','').replace('.webp','')
+ if file.startswith('gfx/bg/'):
+ if file.endswith('.png') or file.endswith('.webp'):
+ name = "bg "+fn
+ renpy.image(name, Frame(file, 0, 0))
+ dl=dl_search(persistent.allfiles, 0, name)
+ if dl is not ERR_INVALID:
+ persistent.allfiles.append((name, file))
+ allfiles.append(name)
+ continue
+ continue
+
+
+ # Load summon images: "summon"
+ for file in renpy.list_files():
+ fn=file.replace('gfx/summons/','').replace('/', ' ').replace('.png','').replace('.webp','')
+ if file.startswith('gfx/summons/'):
+ if file.endswith('.png') or file.endswith('.webp'):
+ name = "summon_"+fn
+ renpy.image(name, Image(file, yanchor=1.0))
+ dl=dl_search(persistent.allfiles, 0, name)
+ if dl is not ERR_INVALID:
+ persistent.allfiles.append((name, file))
+ allfiles.append(name)
+ continue
+ continue
+
+ def star_write(am):
+ i, st = 0, ""
+ while i < am:
+ i+=1
+ st+="★"
+ return st
+
+
+ # Overrides renpy.image() method
+ def new_img(name, where):
+ # d: Downloaded path
+ if not isinstance(name, tuple):
+ name = tuple(name.split())
+
+ #d = renpy.renpy.easy.displayable(where)
+ if renpy.android:
+ d=ExtraImage(where)
+ else:
+ d = renpy.renpy.easy.displayable(where)
+ renpy.renpy.display.image.register_image(name, d)
+ return
+
+ # Retrieves Ren'Py displayable name associated to PATH
+ def get_img(path):
+ # Search for the image name
+ val=img_regex(path, True)
+ show_img(val, False)
+
+ valb=dl_search(persistent.allfiles, 0, val)[1]
+ if valb == ERR_INVALID:
+ print ("Invalid Image: %s (%s)" % (path, val))
+ return "gfx/spinner.png"
+ return valb
+
+ # Overrides renpy.show() and renpy.image() methods
+ # Missing: transient=False, munge_name=True
+ def show_img(img, show=True, at_list=[ ], tag=None, zorder=None, behind=[ ], atl=None, what=None, layer=None, ext=".png"):
+ global tr_loading
+ # Image exists, display it
+ if img in allfiles:
+ if show:
+ renpy.show(img, at_list=at_list, tag=tag, zorder=zorder, behind=behind, atl=atl, what=what, layer=layer)
+ return
+
+ # Have we downloaded this image previously?
+ path=dl_search(persistent.allfiles, 0, img)
+ print str(path)
+
+ # Image doesn't exists, we must download it
+ while (path == ERR_INVALID):
+ tr_loading=True
+ # Latest version converts these formats to WebP
+ if ext in [".png", ".jpg", ".jpeg"]:
+ ext=".webp"
+ # Otherwise, preserve extension.
+ if renpy.android:
+ addr="extra_%s%s" % (img.replace(" ", "_"), ext)
+ else:
+ addr="extra/%s%s" % (img.replace(" ", "_"), ext)
+
+ f=open(get_path(addr), "w")
+ stdout("Downloading additional file: %s" % img.replace(" ", "_"))
+ x=requests.get("http://%s:%d/%s?token=%s" % (HOST, UPDP, img.replace(" ", "_"), get_token())) # , timeout=8.0 → Need to handle sudden death
+ if x.status_code == 200:
+ f.write(x.content)
+ f.close()
+ # Android needs paths to be saved by full
+ if renpy.android:
+ addr=get_path(addr)
+ path=((img, addr))
+ persistent.allfiles.append(path)
+ else:
+ try:
+ retry=renpy.call_screen("confirm", "Error downloading file.\nError Code: %d\n\nRetry?" % x.status_code, Return(True), Return(False))
+ if not retry:
+ if tag is None:
+ tag=img
+ path=None
+ if show:
+ renpy.show("spinner", at_list=at_list, tag=tag, zorder=zorder, behind=behind, atl=atl, what=what, layer=layer) # TODO Show error
+ return
+ # TODO: “Retry?”
+ except:
+ print("Failed, trying again")
+
+ # Image exists, but wasn't loaded yet
+ if (path != ERR_INVALID and path is not None):
+ print "Detected not loaded image"
+ # Valid Image Extensions: PNG, JPG, JPEG, GIF, WEBP
+ if ext in [".png", ".jpg", ".jpeg", ".gif", ".webp"]:
+ # Maybe it is an unit
+ if img.startswith("unit_"):
+ new_img(img, card_composite(img.replace("unit_", ""), path[1]))
+ else:
+ new_img(img, path[1])
+
+ stdout("registered image: "+path[1])
+ allfiles.append(img)
+ if show:
+ renpy.show(img, at_list=at_list, tag=tag, zorder=zorder, behind=behind, atl=atl, what=what, layer=layer)
+ tr_loading=False
+ return
+
+ # Something went wrong
+ stdout("show_img reached abnormal ending")
+ return
+
+ ##########################################################
+ # Other Music
+ MUSIC_BATTLE=RetString("sfx/bgm03.mp3")
+ MUSIC_BOSS=RetString("sfx/bgm04.mp3")
+ MUSIC_PARTY=RetString("sfx/bgm02.mp3")
+ #MUSIC_PARTY=ExecuteOnCall(get_sfx, "sfx_bgm05", ".mp3")#"sfx/bgm05.mp3"
+ MUSIC_VICTORY=RetString("sfx/bgm06.mp3")
+ MUSIC_WORLDMAP=RetString("sfx/bgm02.mp3")
+ #MUSIC_WORLDMAP=ExecuteOnCall(get_sfx, "sfx_bgm07", ".mp3")#"sfx/bgm07.mp3"
+ MUSIC_PROLOGUE01=RetString("sfx/regnum.mp3")
+ MUSIC_PROLOGUE02=RetString("sfx/prologue.mp3")
+ MUSIC_PROLOGUE03=RetString("sfx/shining.mp3")
+
+ ws = None
+