#
# Poses file
#
# You can add new poses by including a poses.txt file in a mod, but existing poses can not
# be defined or changed. You can add new or existing poses to new groups or add new or existing
# poses to existing groups as well. But before doing so, make sure to have read all the info
# in this file!
#
# format
# pose pose_key abbrev req fallback fem_undress_to male_undress_to min_rev sprite flags
#
# pose_key is the internal/code key used for the pose
# abbrev   is the key used in the file names, usually shorter
# req      is 0/1 to indicate if the pose is required or not
# fem_only is 0/1 to indicate if it's only applicable for female characters
# fallback is the fallback pose to use if this pose doesn't exist. Note that required poses have no fallback
#          and must always exist. If there are two poses (separated by commas), the second one is for male
#          characters only. Must be specified using the abbrev.
# undress_to is the pose to undress to. If there are two poses (separated by commas), the second one is for
#          male characters only. Must be specified using the abbrev.
# min_rev minimum reveal value for the pose. This is also used for ordering them in some situations.
# sprite: name of the sprite to use to represent the clothing in the UI MC info row
#         if different between female/male, separate by commas (female,male)
#         (the sprite files are not currently exposed so can only use one of the existing ones)
# flags:  comma-separated list of flags to specify other info
#           headshot: is the headshot pose*
#           def: is the default pose (used for special characters and when image set is not valid)*
#           pregnancy: is the pregnancy pose*
#           nude: is the nude pose*
#           opt: optional but recommended pose, gives warning if not present
#         The flags with * are unique, one and only one entry must have it
#
pose headshot head 1 0 - nude 0 - headshot
pose casual cas 1 0 - uw 0 casual_f,casual_m def
pose business biz 0 0 bc uw 0 business_f,business_m opt
pose bizcas bc 0 0 cas uw 0 bizcas_f,bizcas_m opt
pose fun fun 0 0 cas uw 0 fun opt
pose strip1 s1 0 1 ss,fun uw 0 strip -
pose strip2 s2 0 1 s1,fun uw 1 strip -
pose strip3 s3 0 1 s2,fun uw 2 strip -
pose swimwear ss 0 1 uw tl,nude 1 swimwear -
pose underwear uw 0 0 fun tl,nude 2 underwear_f,underwear_m opt
pose topless tl 0 1 uw nude 6 topless -
pose nude nude 1 0 - - 8 nude_f,nude_m nude
pose pregnant preg 0 1 cas nude 0 preg pregnancy
#
# For each pose xyz added, you must define these localization strings (replace xyz with
# the pose abbrev):
#
# clothing.xyz XYZ Outfit
# clothing.str.xyz XYZ Outfit
# clothing.change.xyz {0:P} want to wear {0:sp} XYZ outfit (rev=%I1).
# clothing.desc.xyz wearing an XYZ outfit
#
# (The first is used by the UI, the second one by text in scenes, the third one is for
# the options given the player when choosing what to wear and the last describes what
# characters are wearing)
#
# Groups are used mostly to define which poses are appropriate for specific locations/activities
# Order matters sometimes so put more common ones early in each line
# (More specific activities are handled by the code)
# The entries for each line can be specified on the same line, separated by commas or
# in separate rows, each preceeded by the group <group_id>
# (The poses can be specified using the key or abbrev)
# The group keys can not be the same as pose keys or abbrevs.
#
# Format:
#
# group group_key list_of_poses list_of_work_locs list_of_club_rooms
#
# base: all the normal dressed poses
group base casual,bizcas,business,fun coffee,diner,clinic,arena -
#
# normal: the standard, dressed poses, fine for any ocassion/location -
group normal casual,bizcas,fun university,library,classroom,other_home,motel,neighborhood -
#
# public: the ones that people would normally wear in public
group public casual,bizcas,fun,business,strip1 away,alley,hotel -
#
# office: poses to wear at office work locations
group office business,bizcas,casual city_hall -
group office_sexy business,bizcas,strip1,casual,strip2 downtown -
#
# fancy: poses to wear at nicer locations
group fancy business,bizcas ch_work,restaurant -
group fancy_sexy business,bizcas,strip1,strip2 theater -
#
# lounge: poses to wear at very casual locations (home, patio, etc.)
group lounge fun,casual,underwear home,living,apartment,dorm -
#
# outdoors: poses to wear at outdoor locations or while excersing (park, gym)
group outdoors fun,casual,swimwear park,gym -
#
# swim: poses to wear while at swimming locations (pool, beach)
group swim swimwear,topless,fun patio,beach pool
#
# party: poses to wear as a guest at club or party
group party bizcas,strip1,casual,business,strip2 club -
#
# strip: poses that are part of a strip show
group strip strip1,strip2,strip3,swimwear,underwear,topless,nude - -
#
# undressed: when someone doesn't need to be wearing clothes (like a bathroom, bedroom)
# also used in logic to undress someone
group undressed underwear,topless,nude bedroom,bathroom sex_room,massage_room
#
# naked: poses for locations when one is typically naked (like the nude beach)
group naked nude,topless,underwear,swimwear nudebeach -
#
#
# How to Set Poses via TFL Code
#
# Before attempting to write code for this, one needs to understand these terms:
#
# pose: the image to show for a given image set.
#
# z-value or revealing value: a value 0-12 indicating how revealing a pose is.
# Higher values indicate more revealing.
# This value is specified via a z0, z1, z2, etc. field in the filename. Value of
# 0 is completely modest, 2 is usually swimsuits, 3 is underwear, 6 is topless
# and 9 is nude.
#
# pose key: the verbose descriptor of a pose (business, bizcas, casual, fun, etc.)
# These can be used on most calls for now, but that will eventually be deprecated
# so is suggested to avoid using those.
#
# pose abbrev: the short descriptor of a pose (biz, bc, cas, fun, etc.). This is
# the specifier that's used as part of filenames as well.
#
# pose id: the combination of pose abbrev and an index to handle the case where
# there's mnore that one pose of a given key but with different z-values. The
# first pose of each z-value gets an index of 0, which is not included. Example
# values: cas, cas_1, cas_2, etc.
#
# group_key: an identifier for a group of poses, used as a shortcut for allowing
# selecting one pose of several that are appropriate for a given situation.
# Examples: normal, office, public, etc.
#
# There are various ways you can specify in the TFL code a pose for a character.
#
# .pose Property
#
# This is used to set a character pose to a specific pose. Unless set to "default",
# this does not verify that the person would be comfortable in it or that the pose
# is allowed by law or that it is appropriate for that location. It takes as a
# value a pose abbrev, a pose key (although this is discouraged and may be
# deprecated at some point), a pose id or "default".
#
# A.pose = "cas";
# A.pose = "cas_2";
# A.pose = "casual";
# A.pose = "default"
#
# In general this should only be done to restore a person's pose to a previous
# one (as when dressing after undressing), when setting it to "default" or
# when undressing them in a controlled/private environment. When setting it
# to a pose abbrev, it will pick any available pose at random.
#
# When setting to a default, it looks at the current location of the character
# and finds the group that matches that location (for example, if someone is
# at the restuarant, that matches the "fancy" group which means it will choose a
# pose of "business" or "bizcas".)
#
# .pose_id Property
#
# Like .pose it is used to set a character's pose toa specific pose id.
# This does not verify that the person would be comfortable in it, or that the
# pose is allowed by law or appropriate for the location. It takes as a value
# a pose id.
#
# A.pose = "bc";
# A.pose = "bc_1";
#
# Note that the first case is essentially setting it to "bc_0". This should
# only be used to set a character to a pose that they were previously at,
# as when dressing after undressing. A typicall code would be:
#
# $old_pose_id = A.pose_id;
# <undress A>
# <do something>
# A.pose_id = $old_pose_id;
#
# &set_pose_in_group Built In Function
#
# This is preferred method to set a pose for a character. Use this in most cases!
# This function looks like:
#
# $new_pose_id = &set_pose_in_group(A, $group, $min_rev, $max_rev, $check, $as_perf, $how);
#
# The arguments are:
#   A: the character to set a pose for
#   $group: a group key that defines a list of poses to choose from
#       the group keys are defined in this file. Order matters, so put the best one first.
#   $min_rev: the minimum z-value for the poses to consider (0-12)
#   $max_rev: the maximum z-value for the poses to consider (0-12)
#   $check: whether to check that the character is comfortable wearing this given
#           their personality and the current laws (true/false)
#   $as_perf: whether someone is going to be working as a performer. This changes
#           what the current laws that are checked (true/false)
#   $how: how to select between multiple options (any/first/most/least).
#       any: picks any of the valid poses at random
#       first: picks the first valid pose, according to the order in the group definition
#       most: picks the most revealing valid pose in the group
#       least: picks the least revealing valid pose in the group
#
# A pose is valid if it's z-value is at least $min_rev and no more than than $max_rev,
# and if $check is true, is allowed by law (if $as_perf is true, using the performer's
# laws) and A is comfortable wearing it in public.
#
# Example:
#
# $new_pose = &set_pose_in_group(A, "office", 0, 3, true, false, "first");
#
# &set_pose_any, &set_pose_most, &set_pose_least, &set_pose_first Built-In Functions
#
# These built-in functions are very similar to &set_pose_in_group and can be used
# when one needs a more specific set of valid poses (or the valid poses are dynamic).
# The arguments are the same for all:
#
# $new_pose_id = &set_pose_any(A, $pose_list, $min_rev, $max_rev, $check, $as_perf);
#
# Most arguments are the same as for &set_pose_in_group. The difference is the
# $pose_list argument which specifies a list of poses. Other than that the pose
# selection is the same.
#
# Example:
#
# $new_pose = &set_pose_first(A, "biz,bc,cas", 0, 3, true, false);
#
# (This is equivalent of the &set_pose_in_group example earlier)
#
#
# In addition, when a character goes to work they are automatically dressed
# for that job. This is driven from the pose keys specified in the jobs.txt
# file. Also when going to some specific locations characters will automatically
# be dressed for the location (using the same process as A.pose = "default").
#