What about generating a log-like file of some sort to track achievements?
It's one of the worse approach for this kind of task. Every time you'll want to know what happened, and every time you'll want to update the log, you'll have to parse all its content. And whatever if you make the log "computer readable only", it will make the parsing easier, but it will still happen.
It's a trend actually with Ren'Py games ; people tend to copy bad habits way faster than good ones. People use a
list
to store any important decisions. It's good and all,
list
s have methods to facilitate this, but there's three problems:
Firstly they should use a
set
; a
set
being a
list
that will automatically take care of its content to avoid duplicated entries.
Secondly even if it don't looks like it at first, something like,
if "whatever" in progressList and "whatever else" in progressList and ( not "this thing" in progressList ):
, is worse than it's boolean equivalent,
if progressList.whatever and progressList.whatever_else and (not progressList.this_thing ):
.
You can read the first one better if you use full sentence (by opposition of the nickname used for the variables), but using full sentences also mean that you'll have more risk to make a typo and break the game because of this.
Plus, except for
persistent
values that are particular, if you write the name of the variable wrong, Ren'Py will insult you, so you'll learn it very fast and be able to correct this. This will never happen with the list approach, because Ren'Py have no way to know that you wrongly wrote one of the word in the string.
Thirdly, while it feel easier to read a list of fully descriptive sentences, for debug purpose by example, it isn't once the list effectively start to grow. Quickly you'll lost your ability to focus, and pass the whole list without noticing that what you search is effectively in it ; nor noticing the typo you are searching for.
A set of boolean will always be easier to deal with on a long run. Especially if you organize them correctly, starting by a reference to the update ("ch3whatever") or in game day ("d05whatever"), by example. You'll only have to browse through a small portion of your variables, what will always be better than a list of hundred of sentences.