While I am new to Ren'Py specifically and Python generally I am used to object orientated programming, so naturally I applied my knowledge to a little project.
Everything compiles fine, but the rollback feature, which I really want to use, creates some undesireable outcomes.
At a base level, variable values aren't rolled back.
The 'exact' code, that causes my distress is:
Code: Select all
$ story.relationship_circle.face.negative.minor()
#...
chars.circle "sometext"
Code: Select all
def minor(self):
self._minor += 1
The whole construct is initialised as
Code: Select all
define chars.circle = Character("a name", kind=nvl, color="#ffaaaa") #bonus initialisation for completeness
# ...
define story.relationship_circle = AvoidableMeter()
EDIT: I am also able to reproduce the behaviour on each call of a method of a Meter instance, e.i. each time "I step" to the function call, it will get performed, not matter if basic continue, rollback or rollforward
On a side notice, the function call and the say statement above are separated by a call and an if-else construct, although I don't think that it affects the situation.
The relevant class definition is this:
Code: Select all
init -100 python:
class Meter:
def __init__(self):
self._trivial = 0
self._minor = 0
self._major = 0
self._key = 0
self._critical = 0
self._keyevents = []
self._criticalevents = []
def trivial(self):
self._trivial += 1
def minor(self):
self._minor += 1
def major(self):
self._major += 1
def key(self, eventname):
self._key += 1
self._keyevents.append(eventname)
def critical(self, eventname):
self._critical += 1
self._criticalevents.append(eventname)
class FacettableMeter:
def __init__(self):
self.positive = Meter()
self.negative = Meter()
class AvoidableMeter:
def __init__(self):
self.avoid = FacettableMeter()
self.face = FacettableMeter()