Advertisement
mrbubble

Gender Functions

Jan 4th, 2012
590
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 20.53 KB | None | 0 0
  1. #==============================================================================
  2. # ++ Gender Functions ++                                        v1.2 (1/06/12)
  3. #==============================================================================
  4. # Script by:
  5. #     Mr. Bubble ( http://mrbubblewand.wordpress.com/ )
  6. # Thanks:
  7. #     Yanfly, script and design references
  8. #--------------------------------------------------------------------------
  9. # This is a simple script that provides developers the option to define the
  10. # gender of Actors and Enemies in their game. With the use of script calls
  11. # and new methods, this opens up a variety of options for eventers and
  12. # scripters alike.
  13. #--------------------------------------------------------------------------
  14. # ++ Changelog ++
  15. #--------------------------------------------------------------------------
  16. # v1.2 : Efficency update. (1/06/12)
  17. # v1.1 : Enemies should now use the proper default gender value. (1/04/12)
  18. # v1.0 : Initial release. (1/04/12)
  19. #--------------------------------------------------------------------------
  20. # ++ Installation ++
  21. #--------------------------------------------------------------------------
  22. # Install this script in the Materials section in your project's
  23. # script editor.
  24. #--------------------------------------------------------------------------
  25. # ++ Gender Notetags ++
  26. #--------------------------------------------------------------------------
  27. # The following notetags are for Actors and Enemies only:
  28. #
  29. # <gender: none>
  30. # <gender: genderless>
  31. #   Defines the Actor or Enemy as genderless. The internal value that
  32. #   represents genderless is 0.
  33. #  
  34. # <gender: m>
  35. # <gender: male>
  36. #   Defines the Actor or Enemy as male. The internal value that
  37. #   represents male is 1.
  38. #  
  39. # <gender: f>
  40. # <gender: female>
  41. #   Defines the Actor or Enemy as female. The internal value that
  42. #   represents female is 2.
  43. #
  44. #--------------------------------------------------------------------------
  45. # ++ Conditional Branch Script Calls ++
  46. #--------------------------------------------------------------------------
  47. # The following script calls are meant to be used in Conditional
  48. # Branch event commands within the Tab 4 "Script" box.
  49. # Each of these script calls will turn the given Game Switch ON
  50. # or OFF, where ON is true and OFF is false.
  51. #
  52. # leader_genderless?
  53. # leader_male?
  54. # leader_female?
  55. #   These script calls check the gender of the party leader.
  56. #
  57. # party_member_genderless?(index)
  58. # party_member_male?(index)
  59. # party_member_female?(index)
  60. #   These script calls check the gender of the given party member
  61. #   where index is the party position index. 0 is the party leader,
  62. #   1 is the 2nd member, 2 is the 3rd member, etc.
  63. #
  64. # actor_genderless?(id)
  65. # actor_male?(id)
  66. # actor_female?(id)
  67. #   These script calls check an actor's gender where id is an
  68. #   actor id from the Database. These can check the gender of actors
  69. #   not in the current party.
  70. #
  71. # battle_party_all_genderless?
  72. # battle_party_all_male?
  73. # battle_party_all_female?
  74. #   These script calls check if all members in the battle party
  75. #   have matching genders.
  76. #
  77. # troop_enemy_genderless?(index)
  78. # troop_enemy_male?(index)
  79. # troop_enemy_female?(index)
  80. #   These script calls check the gender of the given enemy in the
  81. #   current troop where index is the enemy's troop position index.
  82. #   0 is the first enemy, 1 is the 2nd enemy, 2 is the 3rd enemy,
  83. #   etc. This script call only works in-battle.
  84. #  
  85. # enemy_genderless?(id)
  86. # enemy_male?(id)
  87. # enemy_female?(id)
  88. #   These script calls check an enemy's gender where id is an
  89. #   enemy id from the Database. These can check the gender of enemies
  90. #   even when not in battle.
  91. #--------------------------------------------------------------------------
  92. # ++ Variable Operation Script Calls ++
  93. #--------------------------------------------------------------------------
  94. # The following script calls are meant to be used in Variable
  95. # Operation event commands within the "Script" box.
  96. # Each of these script calls return a number which is then
  97. # stored into the given Game Variable.
  98. #
  99. # all_party_genderless_count
  100. # all_party_male_count
  101. # all_party_female_count
  102. #   These script calls count the number of party members that has
  103. #   a specified gender and stores the number into the given
  104. #   Game Variable. This includes both battle and reserve members
  105. #   in the party.
  106. #
  107. # battle_party_genderless_count
  108. # battle_party_male_count
  109. # battle_party_female_count
  110. #   These script calls count the number of battle members in the
  111. #   party that has a specified gender and stores the number
  112. #   into the given Game Variable. This does not include reserve members.
  113. #
  114. # reserve_party_genderless_count
  115. # reserve_party_male_count
  116. # reserve_party_female_count
  117. #   These script calls count the number of reserve members in the
  118. #   party that has a specified gender and stores the number
  119. #   into the given Game Variable. This does not include battle members.
  120. #--------------------------------------------------------------------------
  121. # ++ Compatibility ++
  122. #--------------------------------------------------------------------------
  123. # This script does not overwrite any default VXA methods. All default
  124. # methods modified in this script are aliased.
  125. #
  126. # Requests for compatibility with other scripts are welcome.
  127. #--------------------------------------------------------------------------
  128. # ++ Terms and Conditions ++
  129. #--------------------------------------------------------------------------
  130. # Please do not repost this script elsewhere without permission. Newest
  131. # versions of this script can be found at http://mrbubblewand.wordpress.com/
  132. #==========================================================================
  133.  
  134. $imported = {} if $imported.nil?
  135. $imported["BubsGenderFunctions"] = true
  136.  
  137. #==========================================================================
  138. # ++ START OF USER CUSTOMIZATION MODULE ++
  139. #==========================================================================
  140.  
  141. module Bubs
  142.   module GenderFunctions
  143.   #--------------------------------------------------------------------------
  144.   # Default Gender Settings
  145.   #--------------------------------------------------------------------------
  146.   # The values below will determine the default gender for actors and
  147.   # enemies if a notetag is not found.
  148.   #     0 : Genderless
  149.   #     1 : Male
  150.   #     2 : Female
  151.   DEFAULT_ACTOR_GENDER = 0    # Actors
  152.   DEFAULT_ENEMY_GENDER = 0    # Enemies
  153.  
  154.   end # module GenderFunctions
  155. end # module Bubs
  156.  
  157. #==========================================================================
  158. # ++ END OF USER CUSTOMIZATION MODULE ++
  159. #==========================================================================
  160.  
  161.  
  162. #==========================================================================
  163. # ++ Bubs::Regexp
  164. #==========================================================================
  165. module Bubs
  166.   module Regexp
  167.     GENDER_NONE = /<(?:GENDER|sex):\s*(?:NONE|genderless)>/i
  168.     GENDER_MALE = /<(?:GENDER|sex):\s*(?:M|male)>/i
  169.     GENDER_FEMALE = /<(?:GENDER|sex):\s*(?:F|female)>/i
  170.   end
  171. end # module Bubs
  172.  
  173.  
  174. #==========================================================================
  175. # ++ DataManager
  176. #==========================================================================
  177. module DataManager
  178.   #--------------------------------------------------------------------------
  179.   # alias : load_database
  180.   #--------------------------------------------------------------------------
  181.   class << self; alias load_database_bubs_gender_func load_database; end
  182.   def self.load_database
  183.     load_database_bubs_gender_func # alias
  184.     load_notetags_bubs_gender_func
  185.   end
  186.  
  187.   #--------------------------------------------------------------------------
  188.   # new method : load_notetags_bubs_gender_func
  189.   #--------------------------------------------------------------------------
  190.   def self.load_notetags_bubs_gender_func
  191.     groups = [$data_actors, $data_enemies]
  192.     for group in groups
  193.       for obj in group
  194.         next if obj.nil?
  195.         obj.load_notetags_bubs_gender_func
  196.       end # for
  197.     end # for
  198.   end # def
  199.  
  200. end # module DataManager
  201.  
  202.  
  203. #==========================================================================
  204. # ++ RPG::BaseItem
  205. #==========================================================================
  206. class RPG::BaseItem
  207.   #--------------------------------------------------------------------------
  208.   # public instance variables
  209.   #--------------------------------------------------------------------------
  210.   attr_accessor :gender
  211.  
  212.   #--------------------------------------------------------------------------
  213.   # common cache : load_notetags_bubs_gender_func
  214.   #--------------------------------------------------------------------------
  215.   def load_notetags_bubs_gender_func
  216.     if self.is_a?(RPG::Actor)
  217.       @gender = Bubs::GenderFunctions::DEFAULT_ACTOR_GENDER
  218.     else
  219.       @gender = Bubs::GenderFunctions::DEFAULT_ENEMY_GENDER
  220.     end
  221.    
  222.     self.note.split(/[\r\n]+/).each { |line|
  223.       case line
  224.       when Bubs::Regexp::GENDER_NONE
  225.         @gender = 0
  226.       when Bubs::Regexp::GENDER_MALE
  227.         @gender = 1
  228.       when Bubs::Regexp::GENDER_FEMALE
  229.         @gender = 2
  230.       end
  231.     } # self.note.split
  232.    
  233.   end # def
  234. end # class RPG::BaseItem
  235.  
  236.  
  237. #==========================================================================
  238. # ++ Game_BattlerBase
  239. #==========================================================================
  240. class Game_BattlerBase
  241.   #--------------------------------------------------------------------------
  242.   # new method : genderless?
  243.   #--------------------------------------------------------------------------
  244.   def genderless?
  245.     if actor?
  246.       return true if self.actor.gender == 0
  247.     else
  248.       return true if self.enemy.gender == 0
  249.     end
  250.     return false
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # new method : male?
  254.   #--------------------------------------------------------------------------
  255.   def male?
  256.     if actor?
  257.       return true if self.actor.gender == 1
  258.     else
  259.       return true if self.enemy.gender == 1
  260.     end
  261.     return false
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # new method : male?
  265.   #--------------------------------------------------------------------------
  266.   def female?
  267.     if actor?
  268.       return true if self.actor.gender == 2
  269.     else
  270.       return true if self.enemy.gender == 2
  271.     end
  272.     return false  
  273.   end
  274. end # class Game_BattlerBase
  275.  
  276.  
  277. module Bubs
  278.   module GenderFunctions
  279.   module ScriptCalls
  280.   #--------------------------------------------------------------------------
  281.   # new method : leader_genderless?
  282.   #--------------------------------------------------------------------------
  283.   def leader_genderless?
  284.     leader = $game_party.leader
  285.     return leader.genderless? unless leader.nil?
  286.     return false
  287.   end
  288.   #--------------------------------------------------------------------------
  289.   # new method : leader_male?
  290.   #--------------------------------------------------------------------------
  291.   def leader_male?
  292.     leader = $game_party.leader
  293.     return leader.male? unless leader.nil?
  294.     return false
  295.   end
  296.   #--------------------------------------------------------------------------
  297.   # new method : leader_female?
  298.   #--------------------------------------------------------------------------
  299.   def leader_female?
  300.     leader = $game_party.leader
  301.     return leader.female? unless leader.nil?
  302.     return false  
  303.   end
  304.   #--------------------------------------------------------------------------
  305.   # new method : party_member_genderless?
  306.   #--------------------------------------------------------------------------
  307.   def party_member_genderless?(index)
  308.     member = $game_party.members[index]
  309.     return member.genderless? unless member.nil?
  310.     return false
  311.   end
  312.   #--------------------------------------------------------------------------
  313.   # new method : party_member_male?
  314.   #--------------------------------------------------------------------------
  315.   def party_member_male?(index)
  316.     member = $game_party.members[index]
  317.     return member.male? unless member.nil?
  318.     return false
  319.   end
  320.   #--------------------------------------------------------------------------
  321.   # new method : party_member_female?
  322.   #--------------------------------------------------------------------------
  323.   def party_member_female?(index)
  324.     member = $game_party.members[index]
  325.     return member.female? unless member.nil?
  326.     return false
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # new method : actor_genderless?
  330.   #--------------------------------------------------------------------------
  331.   def actor_genderless?(id)
  332.     actor = $game_actors[id]
  333.     return actor.genderless? unless actor.nil?
  334.     return false
  335.   end
  336.   #--------------------------------------------------------------------------
  337.   # new method : actor_male?
  338.   #--------------------------------------------------------------------------
  339.   def actor_male?(id)
  340.     actor = $game_actors[id]
  341.     return actor.male? unless actor.nil?
  342.     return false  
  343.   end
  344.   #--------------------------------------------------------------------------
  345.   # new method : actor_female?
  346.   #--------------------------------------------------------------------------
  347.   def actor_female?(id)
  348.     actor = $game_actors[id]
  349.     return actor.female? unless actor.nil?
  350.     return false  
  351.   end
  352.   #--------------------------------------------------------------------------
  353.   # new method : battle_party_all_genderless?
  354.   #--------------------------------------------------------------------------
  355.   def battle_party_all_genderless?
  356.     count = 0
  357.     for member in $game_party.battle_members
  358.       next if member.nil?
  359.       count += 1 if member.genderless?
  360.     end
  361.     return true if count == $game_party.max_battle_members
  362.     return false
  363.   end
  364.   #--------------------------------------------------------------------------
  365.   # new method : battle_party_all_male?
  366.   #--------------------------------------------------------------------------
  367.   def battle_party_all_male?
  368.     count = 0
  369.     for member in $game_party.battle_members
  370.       next if member.nil?
  371.       count += 1 if member.male?
  372.     end
  373.     return true if count == $game_party.max_battle_members
  374.     return false
  375.   end
  376.   #--------------------------------------------------------------------------
  377.   # new method : battle_party_all_female?
  378.   #--------------------------------------------------------------------------
  379.   def battle_party_all_female?
  380.     count = 0
  381.     for member in $game_party.battle_members
  382.       next if member.nil?
  383.       count += 1 if member.female?
  384.     end
  385.     return true if count == $game_party.max_battle_members
  386.     return false
  387.   end
  388.   #--------------------------------------------------------------------------
  389.   # new method : battle_party_genderless_count
  390.   #--------------------------------------------------------------------------
  391.   def battle_party_genderless_count
  392.     count = 0
  393.     for member in $game_party.battle_members
  394.       next if member.nil?
  395.       count += 1 if member.genderless?
  396.     end
  397.     return count  
  398.   end
  399.   #--------------------------------------------------------------------------
  400.   # new method : battle_party_male_count
  401.   #--------------------------------------------------------------------------
  402.   def battle_party_male_count
  403.     count = 0
  404.     for member in $game_party.battle_members
  405.       next if member.nil?
  406.       count += 1 if member.male?
  407.     end
  408.     return count  
  409.   end
  410.   #--------------------------------------------------------------------------
  411.   # new method : battle_party_female_count
  412.   #--------------------------------------------------------------------------
  413.   def battle_party_female_count
  414.     count = 0
  415.     for member in $game_party.battle_members
  416.       next if member.nil?
  417.       count += 1 if member.female?
  418.     end
  419.     return count  
  420.   end
  421.   #--------------------------------------------------------------------------
  422.   # new method : reserve_party_genderless_count
  423.   #--------------------------------------------------------------------------
  424.   def reserve_party_genderless_count
  425.     count = 0
  426.     count += all_party_genderless_count
  427.     count -= battle_party_genderless_count
  428.     return count
  429.   end
  430.   #--------------------------------------------------------------------------
  431.   # new method : reserve_party_male_count
  432.   #--------------------------------------------------------------------------
  433.   def reserve_party_male_count
  434.     count = 0
  435.     count += all_party_male_count
  436.     count -= battle_party_male_count
  437.     return count
  438.   end
  439.   #--------------------------------------------------------------------------
  440.   # new method : reserve_party_female_count
  441.   #--------------------------------------------------------------------------
  442.   def reserve_party_female_count
  443.     count = 0
  444.     count += all_party_female_count
  445.     count -= battle_party_female_count
  446.     return count
  447.   end
  448.   #--------------------------------------------------------------------------
  449.   # new method : all_party_genderless_count
  450.   #--------------------------------------------------------------------------
  451.   def all_party_genderless_count
  452.     count = 0
  453.     for member in $game_party.all_members
  454.       next if member.nil?
  455.       count += 1 if member.genderless?
  456.     end
  457.     return count  
  458.   end
  459.   #--------------------------------------------------------------------------
  460.   # new method : all_party_male_count
  461.   #--------------------------------------------------------------------------
  462.   def all_party_male_count
  463.     count = 0
  464.     for member in $game_party.all_members
  465.       next if member.nil?
  466.       count += 1 if member.male?
  467.     end
  468.     return count  
  469.   end
  470.   #--------------------------------------------------------------------------
  471.   # new method : all_party_female_count
  472.   #--------------------------------------------------------------------------
  473.   def all_party_female_count
  474.     count = 0
  475.     for member in $game_party.all_members
  476.       next if member.nil?
  477.       count += 1 if member.female?
  478.     end
  479.     return count  
  480.   end
  481.   #--------------------------------------------------------------------------
  482.   # new method : troop_enemy_genderless?
  483.   #--------------------------------------------------------------------------
  484.   def troop_enemy_genderless?(index)
  485.     if $game_party.in_battle
  486.       enemy = $game_troop.members[index]
  487.       return enemy.genderless? unless enemy.nil?
  488.     end
  489.     return false
  490.   end
  491.   #--------------------------------------------------------------------------
  492.   # new method : troop_enemy_male?
  493.   #--------------------------------------------------------------------------
  494.   def troop_enemy_male?(index)
  495.     if $game_party.in_battle
  496.       enemy = $game_troop.members[index]
  497.       return enemy.male? unless enemy.nil?
  498.     end
  499.     return false
  500.   end
  501.   #--------------------------------------------------------------------------
  502.   # new method : troop_enemy_female?
  503.   #--------------------------------------------------------------------------
  504.   def troop_enemy_female?(index)
  505.     if $game_party.in_battle
  506.       enemy = $game_troop.members[index]
  507.       return enemy.female? unless enemy.nil?
  508.     end
  509.     return false
  510.   end
  511.   #--------------------------------------------------------------------------
  512.   # new method : enemy_genderless?
  513.   #--------------------------------------------------------------------------
  514.   def enemy_genderless?(id)
  515.     enemy = $data_enemies[id]
  516.     return true if !enemy.nil? && enemy.gender == 0
  517.     return false
  518.   end
  519.   #--------------------------------------------------------------------------
  520.   # new method : enemy_male?
  521.   #--------------------------------------------------------------------------
  522.   def enemy_male?(id)
  523.     enemy = $data_enemies[id]
  524.     return true if !enemy.nil? && enemy.gender == 1
  525.     return false
  526.   end
  527.   #--------------------------------------------------------------------------
  528.   # new method : enemy_female?
  529.   #--------------------------------------------------------------------------
  530.   def enemy_female?(id)
  531.     enemy = $data_enemies[id]
  532.     return true if !enemy.nil? && enemy.gender == 2
  533.     return false
  534.   end
  535. end # module ScriptCalls
  536. end # module GenderFunctions
  537. end # module Bubs
  538.  
  539. #==========================================================================
  540. # ++ Game_Interpreter
  541. #==========================================================================
  542. class Game_Interpreter; include Bubs::GenderFunctions::ScriptCalls; end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement