Skip to content

Commit

Permalink
Merge pull request #3 from DRincs-Productions/2-relaction-class-impro…
Browse files Browse the repository at this point in the history
…vement

2 relaction class improvement
  • Loading branch information
BlackRam-oss committed Jul 24, 2022
2 parents f6962a6 + c76a566 commit 80584c2
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 108 deletions.
20 changes: 20 additions & 0 deletions .vscode/NQTR-CharacterInfo.code-snippets
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"DRincs Get Relation Name By Character": {
"scope": "renpy",
"prefix": "DR_RelationGet",
"body": [
"$ ${1:relaction} = ${2:mc}I.getRelationNameByCharacter(${3:friend})",
"",
],
"description": "Get Relation Name By Character"
},
"DRincs Set Relation Name By Character": {
"scope": "renpy",
"prefix": "DR_RelationSetOrAdd",
"body": [
"$ ${1:mc}I.setRelationNameByCharacter(character= ${2:friend})",
"",
],
"description": "Set Relation Name By Character"
},
}
4 changes: 2 additions & 2 deletions game/screens.rpy
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,7 @@ style return_button:

## About screen ################################################################
##
## This screen gives credit and copyright information about the game and Ren'Py.
## This screen gives credit and copyright CharacterInfo about the game and Ren'Py.
##
## There's nothing special about this screen, and hence it also serves as an
## example of how to make a custom screen.
Expand Down Expand Up @@ -966,7 +966,7 @@ style history_label_text:

## Help screen #################################################################
##
## A screen that gives information about key and mouse bindings. It uses other
## A screen that gives CharacterInfo about key and mouse bindings. It uses other
## screens (keyboard_help, mouse_help, and gamepad_help) to display the actual
## help.

Expand Down
49 changes: 31 additions & 18 deletions game/script.rpy
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,22 @@ image bg blue = "#b1e3ff"
# Declare characters used by this game. The color argument colorizes the
# name of the character.

default mcI = Information(name = "Liam", sname = "Johnson", age = 20, active = True, rel_status = rel.get('engaged'), rel_partner = girl)
default mcI = CharacterInfo(name = "Liam", sname = "Johnson", age = 20, relationships = {
girl : relactions["girlfriend"],
friend : relactions["friend"],
})
define mc = Character("{b}[mcI.name]{/b}", color="#37b3f3", who_outlines=[(2,"#000000")], what_prefix="\"", what_suffix="\"", what_outlines=[(2,"#000000")])

default friendI = Information(name = "Nick", sname = "Valentine", age = 26, active = True)
define friend = Character("{b}[friendI.name]{/b}", color="#37c68f", who_outlines=[(2,"#000000")], what_prefix="\"", what_suffix="\"", what_outlines=[(2,"#000000")])
default friendR = Relationship("friend", "friend", active = True)
default friendI = CharacterInfo(name = "Nick", sname = "Valentine", age = 26, relationships = {
mc : relactions["friend"],
})
define friend = Character("{b}[friendI.name] C.J.{/b}", color="#37c68f", who_outlines=[(2,"#000000")], what_prefix="\"", what_suffix="\"", what_outlines=[(2,"#000000")])
image friend normal = "/friend.webp"

default girlI = Information(name = "Eileen", sname = "Fisher", age = 18, active = True, rel_status = rel.get('engaged'), rel_partner = mc, story = __("She has always been before class."))
default girlI = CharacterInfo(name = "Eileen", sname = "Fisher", age = 18, story = __("She has always been before class."), relationships = {
mc : relactions["boyfriend"],
})
define girl = Character("{b}[girlI.name]{/b}", color="#f337ba", who_outlines=[(2,"#000000")], what_prefix="\"", what_suffix="\"", what_outlines=[(2,"#000000")])
default girlR = Relationship("girlfriend", "boyfriend", active = True)

# Clothes
default girl_dress = "-homesuit"
Expand Down Expand Up @@ -72,26 +77,34 @@ label character:
"Her name is:"
$ girlI.changeName()
"She is my:"
$ girlR.changeNPClabel()
$ girlI.setRelationNameByCharacter(character= mc)
"I'm [girl]'s:"
$ girlR.changeMClabel()
girl "Hi my [girlR.MClabel]"
mc "Hi my [girlR.NPClabel]"
$ mcI.setRelationNameByCharacter(character= girl)
$ relaction = mcI.getRelationNameByCharacter(girl)
girl "Hi my [relaction]"
$ relaction = mcI.getRelationNameByCharacter(girl)
mc "Hi my [relaction]"
"Speaks [girl]":
girl "Hi my [girlR.MClabel]"
mc "Hi my [girlR.NPClabel]"
$ relaction = mcI.getRelationNameByCharacter(girl)
girl "Hi my [relaction]"
$ relaction = mcI.getRelationNameByCharacter(girl)
mc "Hi my [relaction]"
"Change label [friend]":
"His name is:"
$ friendI.changeName()
"He is my:"
$ friendR.changeNPClabel()
$ friendI.setRelationNameByCharacter(character= mc)
"I'm [friend]'s:"
$ friendR.changeMClabel()
friend "Hi my [friendR.MClabel]"
mc "Hi my [friendR.NPClabel]"
$ mcI.setRelationNameByCharacter(character= friend)
$ relaction = mcI.getRelationNameByCharacter(friend)
friend "Hi my [relaction]"
$ relaction = friendI.getRelationNameByCharacter(mc)
mc "Hi my [relaction]"
"Speaks [friend]":
friend "Hi my [friendR.MClabel]"
mc "Hi my [friendR.NPClabel]"
$ relaction = mcI.getRelationNameByCharacter(friend)
friend "Hi my [relaction]"
$ relaction = friendI.getRelationNameByCharacter(mc)
mc "Hi my [relaction]"
if (stats["friend"].is_friend()):
friend "We are friends"
else:
Expand Down
147 changes: 59 additions & 88 deletions game/tool/characters_handler.rpy
Original file line number Diff line number Diff line change
@@ -1,30 +1,46 @@
# Wiki: https://github.com/DRincs-Productions/DS-toolkit/wiki/Relaction
define relactions = {
"mom": __("Mom"),
"dad": __("Dad"),
"son": __("Son"),
"daughter": __("Daughter"),
"brother": __("Brother"),
"sister": __("Sister"),
"uncle": __("Uncle"),
"aunt": __("Aunt"),
"cousin": __("Cousin"),
"friend": __("Friend"),
"girlfriend": __("Girlfriend"),
"boyfriend": __("Boyfriend"),
}

init python:
# Multi Game Persistent Character Names
# Recommended: male_fname, male_sname, female_fname, female_sname, futa_fname, futa_sname, other_fname or other_sname (or any, or all of these).
# Other recommendations: bigsis_fname, lilsis_fname, bigbro_fname, lilbro_fname, mom_fname, dad_fname, malebff_fname or femalebff_fname. (Again, use any or use none).
mp_ndata = MultiPersistent("namedata.f95zone.to")

class Information():
"""Information about a character
to use: default ... = Information("NPC name", age)
from typing import Optional

class CharacterInfo():
"""CharacterInfo about a character
to use: default ... = CharacterInfo("NPC name", age)
exemple:
default girlI = Information("Eileen", 18, "university student" [or job.university_student if it is a registered job], rel.get('engaged'), mc,
default girlI = CharacterInfo("Eileen", 18, "university student" [or job.university_student if it is a registered job], rel.get('engaged'), mc,
"she has always been before class. as a child they made fun of her because she had the appliance. ...")
default boyI = Information("Unknown Boy")"""
default boyI = CharacterInfo("Unknown Boy")"""

def __init__(self,
name,
sname = None,
age = None,
active = True,
rel_status = None,
rel_partner = None,
story = None,
other_values = {}):
name,
sname=None,
age=None,
story=None,
relationships=None,
other_values={}):
# I use a dictionary because it is the best solution for compatibility and not to create variables that may not be used.
self.memory = {}
self.memory.update(other_values)
# Great for reporting that a character has not yet been discovered
self.active = active

self.name = name
self.sname = sname
Expand All @@ -34,116 +50,71 @@ init python:
self.set("sname_default", sname)
self.set("age_default", age)
# default values
self.set("rel_status", rel_status)
self.set("rel_partner", rel_partner)
self.relationships = relationships
self.set("story", story)

def changeName(self):
"""Rename character name"""
self.name = renpy.input("{i}(Default: " + self.get("name_default") + "){/i}")
self.name = renpy.input(
"{i}(Default: " + self.get("name_default") + "){/i}")
self.name = self.name.strip() or self.get("name_default")
if (self.get("name_default") == "Unknown"):
self.set("name_default", self.name)

def changeSurname(self):
"""Rename the character's last name"""
self.sname = renpy.input("{i}(Default: " + self.get("sname_default") + "){/i}")
self.sname = renpy.input(
"{i}(Default: " + self.get("sname_default") + "){/i}")
self.sname = self.sname.strip() or self.get("sname_default")
if (self.get("sname_default") == "Unknown"):
self.set("sname_default", self.sname)

def changeAge(self):
"""Age changes"""
self.age = renpy.input("{i}(Default: " + str(self.get("age_default")) + "){/i}")
self.age = renpy.input(
"{i}(Default: " + str(self.get("age_default")) + "){/i}")
self.age = self.age.strip() or self.get("age_default")
if (self.get("age_default") == "Unknown"):
self.set("age_default", self.age)

def get(self, text):
"""Returns the value "text", in case it does not exist returns \"Unknown\""""
if text in self.memory:
return self.memory[text]
else:
return "Unknown"

def set(self, text, value):
"""Function to set or add a new value"""
if (text != None and text != ""):
self.memory[text] = value
else:
remove(text)
self.remove(text)

def remove(self, text):
"""Delete the text value"""
del memory[text]
del self.memory[text]

def setActive(self, amt):
"""Cabia the active value according to the parameter (Tip: True/False)"""
self.active = amt
def getRelStatus(self, amt):
"""Returns the state of the character relationship (I recommend using rel values)"""
return self.get("rel_status")
def getRelPartner(self, amt):
"""It recalls the name of the character with whom it has a relationship"""
return self.get("rel_partner")
def is_engaged(self):
"""Return True if the character is currently in a romantic relationship with someone"""
return (rel_status == rel.get('engaged') or rel_status == rel.get('married'))

class Relationship():
"""Type fi relationship between you (MClabel) and NPC NPClabel
to use: default ... = Relationship("type of relationship that NCP has with MC",
"type of relationship that MC has with NCP", boolean (if this relationship is active))
exemple:
default girlR = Relationship("girlfriend", "boyfriend", True)"""
def __init__(self,
NPClabel = None,
MClabel = None,
active = True):

self.memory = {}
# nickname by which MC calls NCP
self.NPClabel = NPClabel
# nickname by which NCP calls MC
self.MClabel = MClabel
# default values
self.set("NPClabel_default", NPClabel)
self.set("MClabel_default", MClabel)

self.active = active
def changeNPClabel(self):
"""Change the nickname of the PCN"""
self.NPClabel = renpy.input("{i}(Default: " + self.get("NPClabel_default") + "){/i}")
self.NPClabel = self.NPClabel.strip() or self.get("NPClabel_default")
if (self.get("NPClabel_default") == "Unknown"):
self.set("NPClabel_default", self.NPClabel)
def changeMClabel(self):
"""Edit the nickname of the MC"""
self.MClabel = renpy.input("{i}(Default: " + self.get("MClabel_default") + "){/i}")
self.MClabel = self.MClabel.strip() or self.get("MClabel_default")
if (self.get("MClabel_default") == "Unknown"):
self.set("MClabel_default", self.MClabel)
def get(self, text):
"""Returns the value "text", in case it does not exist returns \"Unknown\""""
if text in self.memory:
return self.memory[text]
else:
return "Unknown"
def set(self, text, value):
"""Function to set or add a new value"""
if (text != None and text != ""):
self.memory[text] = value
def getRelationNameByCharacter(self, character: Character) -> Optional[str]:
"""Wiki: https://github.com/DRincs-Productions/DS-toolkit/wiki/Relaction#get-relation-name-by-character """
if character in self.relationships:
return self.relationships[character]
else:
remove(text)
def remove(self, text):
"""Delete the text value"""
del memory[text]
def setActive(self, amt):
"""Change the active value according to the parameter (Tip: True/False)"""
self.active = amt

define rel = {
'rel_single' : 0,
'rel_engaged' : 1,
'rel_married' : 2,
'rel_divorced' : 3,
'rel_widow' : 4,
}
return None

def setRelationNameByCharacter(self, character: Character, relation: str = None) -> None:
"""Wiki: https://github.com/DRincs-Productions/DS-toolkit/wiki/Relaction#set-relation-name-by-character """
if IsNullOrWhiteSpace(relation):
value = renpy.input(self.name+" is:")
self.relationships[character] = value
del value
else:
self.relationships[character] = relation
return

label renaming_mc:
# allow default name(s) to be saved across multiple games
Expand Down

0 comments on commit 80584c2

Please sign in to comment.