########################################################################################
# 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
########################################################################################
# Units upgrade and evolution
init python:
def evocheck(level, unit):
# Does an evolved form exist?
#print("evocheck lv %d" % level)
try:
nu=unit["unit_id"]+1
#print("nu is: %d" % int(nu))
next_name=allunits[nu]["name"]
#print("next name: %s" % next_name)
except:
return False
# Level requeriment
return level == unit["max_level"]
screen upgrade_char():
vbox:
xalign 0.5
yalign 0.3
# The unit
hbox:
add unitsquare(unit["unit_id"], czoom_70)
null width 10
label _("{size=32}{color=#fff}%s{/color}{/size}" % (unit["name"]))
null height 20
$i=0
hbox:
for ignored in enumerate(material):
if i < 4:
imagebutton:
if material[i] >= 0:
idle unitsquare(Player["inv"][material[i]]["unit_id"], czoom_70)
else:
idle At("gfx/square/bg.png", czoom_70)
action Return(i)
$i+=1
null height 20
hbox:
for ignored in enumerate(material):
if i < 8:
imagebutton:
if material[i] >= 0:
idle unitsquare(Player["inv"][material[i]]["unit_id"], czoom_70)
else:
idle At("gfx/square/bg.png", czoom_70)
action Return(i)
$i+=1
null height 80
# The close button returns -1 and comes last (TODO)
hbox:
textbutton _("Merge") action Return(-2)
null width 80
textbutton _("Leave") action Return(-1)
screen evolve_char():
vbox:
xalign 0.5
yalign 0.3
# The unit
hbox:
add unitsquare(unit["unit_id"], czoom_70)
null width 10
add At("gfx/evol.png", czoom_70)
null width 10
add unitsquare(next["unit_id"], czoom_70)
#label _("{size=32}{color=#fff}%s\n↓\n%s{/color}{/size}" % (unit["name"], next["name"]))
null height 120
$i=0
hbox:
xalign 0.5
spacing 150
for ignored in enumerate(material):
if i < 2:
imagebutton:
if material[i] >= 0:
idle unitsquare(Player["inv"][material[i]]["unit_id"], czoom_70)
else:
idle At("gfx/square/bg.png", czoom_70)
action Return(i)
$i+=1
null height 80
# The close button returns -1 and comes last (TODO)
hbox:
xalign 0.5
spacing 80
textbutton _("Evolve") action [SensitiveIf(material[0]>=0 and material[1]>=0), Return(-2)]
textbutton _("Cancel") action Return(-1)
label upgrade_pre:
# who -> index. Set beforehand
if who < 0:
call screen msgbox("Error: Invalid upgrade parameters passed")
return
$ unit = allunits[Player["inv"][who]["unit_id"]]
$ material = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
# Try to update inventory
$ inv=get_inventory()
python:
try:
renpy.call_screen("msgbox", "Error: %d" % int(inv))
except:
Player["inv"]=dlist()
for a in inv:
Player["inv"].append(a)
jump upgrade
label upgrade:
call screen upgrade_char()
$message=_return
if (message == -1):
$who=-1
return
#jump restore
if (message == -2):
# TODO
python:
mats=list(set(material))
mats.insert(0, who)
if -1 in mats:
mats.remove(-1)
stdout(str(mats))
ret=None
ret=renpy.call_screen("confirm", "Are you sure you want to merge these units?", Return(True), Return(False))
if ret:
# TODO: DISPLAY ANIMATION
message=send_packet("upgrade", str(mats))
message=json_decode(message)
try:
lv=Player["inv"][who]["level"]
narrator("Level up! %d -> %d" % (lv, int(message)+lv))
except:
narrator("An error occured.\n\nError code: %s" % str(message))
renpy.jump("upgrade_pre")
else:
$ cand=renpy.call_screen("inventory", True)
if cand in material and cand >= 0:
"This unit is already to be merged!"
elif cand == who:
"Cannot merge unit with itself!"
else:
# TODO: Check for party
#"Trying to fuse [cand], must check if in party, duplicate, etc."
$ material[message]=cand
$ del cand
# WIP
jump upgrade
label evolve_pre:
# who -> index. Set beforehand
if who < 0:
call screen msgbox("Error: Invalid upgrade parameters passed")
return
$ unit = allunits[Player["inv"][who]["unit_id"]]
$ next = allunits[Player["inv"][who]["unit_id"]+1]
$ material = [-1, -1]
# Try to update inventory
$ inv=get_inventory()
python:
try:
renpy.call_screen("msgbox", "Error: %d" % int(inv))
except:
Player["inv"]=dlist()
for a in inv:
Player["inv"].append(a)
#$renpy.call_screen("msgbox", "Feature not yet available\n%s" % next["name"])
$renpy.hide("unit_"+str(unit["unit_id"]))
jump evolve
label evolve:
call screen evolve_char()
$message=_return
if (message == -1):
$who=-1
return
#jump restore
if (message == -2):
# TODO
python:
mats=list(set(material))
mats.insert(0, who)
stdout(str(mats))
ret=None
ret=renpy.call_screen("confirm", "Are you sure you want to evolve this units?\nReagents will be lost forever!", Return(True), Return(False))
if ret:
message=send_packet("evolve", str(mats))
message=json_decode(message)
if message in ["200", 200]:
# TODO: DISPLAY ANIMATION
narrator("Evolution SUCCESS!")
else:
narrator("Error code: 101!\n\n%s" % str(message))
renpy.jump("inventory")
else:
$ cand=renpy.call_screen("inventory", True, 'alu["rare"] == %d and\
(\
(alu["unit_id"] == %s) or\
(alu["flags"] & UF_EVOMAT and alu["attribute"] == %d) or\
(alu["flags"] & UF_SUPEREVO) )' % (unit["rare"], unit["unit_id"], unit["attribute"]))
if cand in material and cand >= 0:
"This unit is already to be used as material!"
elif cand == who:
"That's the unit being evolved!"
else:
# TODO: Check for party
#"Trying to fuse [cand], must check if in party, duplicate, etc."
$ material[message]=cand
$ del cand
# WIP
jump evolve