Disable using items on other characters?

Started by firevenge007, October 31, 2013, 08:24:41 pm

Previous topic - Next topic

firevenge007

So in my game, there are 4 characters in a party. Though, I wish to have only the first one be able to use items, heal, etc.

Also, I want to have it so that the other 3 characters' HP and MP do not show.

I was able to do this somehow with someone's help on the menu, but when I use a potion it shows the HP/Mp of other characters, which can be confusing, as these characters never use HP/MP.

If someone could help me out with this issue, that would be wonderful.

Thank you for your time.

WhiteRose

This sounds like it will require an edit to the battle system that you are using, but it shouldn't be a very hard edit. Are you just using the regular battle system?

firevenge007

I should mention that I am using Rpgmaker xp, and that yes, I am using the default battle system - but this is not a problem for battles, as I have manually removed all characters before entering a fight, and then adding them all on after the fight is over, so that they do not interfere with combat.

It is just a problem in the menu.

firevenge007


WhiteRose

It's possible, but unfortunately there aren't very many scripters here on CP. :( I'm sure they'll be willing to help you, but it just might take a few days. The weekend is usually a time when people are more available, so keep your fingers crossed. :)

By the way, just so that you know for next time, if you'd like to post in the same topic twice in less than twenty four hours, use the "Modify" button instead of making a new post. It helps to keep things less cluttered. (Don't worry; I made the same mistake before, too. :P)

KK20

Is it something as simple as this?

VALID_ACTORS_FOR_STATS = [1, 2, 3] # want just one actor? do this: [1]

class Window_Base < Window
  alias draw_hp_for_one_actor draw_actor_hp
  def draw_actor_hp(actor, x, y, width = 144)
    return unless VALID_ACTORS_FOR_STATS.include?(actor.id)
    draw_hp_for_one_actor(actor, x, y, width)
  end

  alias draw_sp_for_one_actor draw_actor_sp
  def draw_actor_sp(actor, x, y, width = 144)
    return unless VALID_ACTORS_FOR_STATS.include?(actor.id)
    draw_sp_for_one_actor(actor, x, y, width)
  end
end

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

firevenge007

November 03, 2013, 01:10:30 am #6 Last Edit: November 08, 2013, 07:41:13 pm by KK20
That did help to an extent, thank you.

Though, I was wondering if it was possible to remove stats that display attack/defense bonuses, etc.

I know you might not approve of how I am using rpgmaker xp, but this is the way I used my characters.

Spoiler: ShowHide


Basically, I'm trying to get rid of where it says [normal], which is the state, where it says 'equipment', and all the stuff beneath.

KK20

So your other party members are basically talents/side-job skills? You would have been better off requesting an entire system rather than making this makeshift design. Not only would it be more professional, but it would also make sense in both menu design and controls.

By the way, I deleted your "bump" because it has not been 24 hours since your last post. What you want is much more than possible--it's about as difficult as a scripter's first script.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

G_G

KK20, instead of directly deleting the post, just append it to the last one. That way the message hasn't been deleted. That's what I try to do anyways. Also... *moves to script requests*

KK20

"Is this not possible?" was all that was posted. If it's a more substantial question or meaningful post, I append it to the last one.

Thanks for moving. According to the direction this thread is going, it seems much more appropriate.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

WhiteRose

I think that using the other characters as separate skills is a cool utilization of the standard scripts. :) However, like KK20, I do think that you'll better be able to get the level of polish that you'd like by building a system from scratch - it shouldn't be too hard; the skills would just be extra variables, and then you can tweak them as you'd like. :) Having a custom system built around your area would also give you some extra flexibility as to the way that things are presented, so, for example, you could have an extra menu showing what fish can be caught at different levels or something like that.

Just let us know what you'd like, and I'm sure that someone will be willing to give it a try. If it's not too hard, even I might be able to do something. :)

firevenge007

The thing is though, I had started making my game this way for a while now, and have grown used to it.

Plus, I don't want others to break their backs over making something huge for me.

I was just wondering whether it would be possible to omit the combat stats from the page and if I could get some help with that.

Also, I find it very interesting how people write code. I'm going into computer science, but I haven't taken computer science classes yet, though I know a little bit of java and a miniscule amount of ruby.

Maybe through reading some of the code that is presented, I could learn a thing or two.

KK20

Quote from: firevenge007 on November 03, 2013, 07:28:54 pm
Plus, I don't want others to break their backs over making something huge for me.

As I stated before, this is hardly a challenge. I can do it in a few hours depending on how many features there are. It's just a matter of creating another scene that displays all the profession levels and EXP. Besides, I'd find viewing the Status of my Fishing skill weird when I'm accustomed to seeing an Actor's stats being displayed in other RPG Maker games.

If you want to continue along with your design, it'd just be a lot of edits to the default windows and only displaying certain stats based on the configuration.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

firevenge007

Where would the side-skills be displayed then?

I do have a lot of trouble sometimes, because of the issue that only 4 characters are allowed to be in a party, I just set 3 side-skills as the default ones, and then whenever a player enters an area where another side-skill is used, I swap out the last character for the one that might be used, and when the player goes back or teleports out, I make sure that the character is switched back.

KK20

Wherever you want them to be displayed--it's your request after all.

Think about what exactly you want and come back with a post detailing as much of your system as possible. Images will help carry the idea across too.

Also, because it sounds like your game is a one-man party, you should also mention any custom scripts you are using (one-man Menu Scene, One-Man battle system, etc.). Or, if you want the menu to look like something specific, be sure to explain that as well.

Some questions to consider answering:
- Do you want this to be done in a separate scene? For example, viewing your Items or Equips go to different scenes. Would you like a button in the menu to say something like "Side-Skills" that will show you all your skills?
- How the leveling/experience system works
- Are there any extra details you would like to be displayed other than skill level and EXP?

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

firevenge007

November 04, 2013, 11:01:29 pm #15 Last Edit: November 08, 2013, 07:42:35 pm by KK20
Spoiler: ShowHide


This is what the menu looks like as of right now.



With all the skills included fit into this tiny menu, it would look a little cramped.

As shown below, there are all the side-skills in my game...

Spoiler: ShowHide




I'm currently using 'Multi-Slot Script" by Guillaume777, a very old script.

as well as "Menu-modification" from which I do not have an author.

I'll post the script here...
Spoiler: ShowHide
class Window_Base < Window

def draw_actor_face(actor, x, y)
face = RPG::Cache.character("Faces/" + actor.character_name, actor.character_hue)
fw = face.width
fh = face.height
src_rect = Rect.new(0, 0, fw, fh)
self.contents.blt(x - fw / 23, y - fh, face, src_rect)
end
end
def draw_actor_battler_graphic(actor, x, y)
 bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
 cw = bitmap.width
 ch = bitmap.height
 src_rect = Rect.new(0, 0, cw, ch)
 self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
end

#========================================
#¡ Game_Map
#--------------------------------------------------------------------------------
# Setting functions for the Map
#========================================
class Game_Map

def name
$map_infos[@map_id]
end
end

#========================================
#¡ Window_Title
#--------------------------------------------------------------------------------
# Setting functions for the Title
#========================================
class Scene_Title
$map_infos = load_data("Data/MapInfos.rxdata")
for key in $map_infos.keys
$map_infos[key] = $map_infos[key].name
end
end




#==============================================================================
# ¡ Window_MenuStatus
#------------------------------------------------------------------------------
#  Sets up the Choosing.
#==============================================================================

class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# Set up
#--------------------------------------------------------------------------
def initialize
 super(0, 0, 560, 454)
 self.contents = Bitmap.new(width - 32, height - 32)
 self.contents.font.name = "Arial"
 self.contents.font.size = 18
 refresh
 self.active = false
 self.index = -1
end
#--------------------------------------------------------------------------
# Drawing Info on Screen
#--------------------------------------------------------------------------
def refresh
 self.contents.clear
 @item_max = $game_party.actors.size
 for i in 0...$game_party.actors.size
   x = 94
   y = i * 110
   actor = $game_party.actors[i]
  # draw_actor_face(actor, 12, y + 90) #To get rid of the Face, put a "#" before the draw_ of this line
   draw_actor_graphic(actor, 48, y + 65) #and delete the "#" infront of draw of this line
   draw_actor_name(actor, x, y)
   draw_actor_level(actor, x + 144, y)
   draw_actor_state(actor, x + 280, y )
   draw_actor_exp(actor, x+ 144, y + 38)
   if actor.id == 1
       draw_actor_hp(actor, x + -20, y + 32)
       draw_actor_sp(actor, x + -20, y + 64)
   end
 end
end
#--------------------------------------------------------------------------
# Update of Cursor
#--------------------------------------------------------------------------
def update_cursor_rect
 if @index < 0
   self.cursor_rect.empty
 else
   self.cursor_rect.set(0, @index * 110, self.width - 32, 96)
 end
end
end

#=======================================#
# ¡Window_GameStats                                                             #
# written by AcedentProne                                                          #
#------------------------------------------------------------------------------#

class Window_GameStats < Window_Base
def initialize
super(0, 0, 160, 60)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Arial"
self.contents.font.size = 18
refresh
end

def refresh
self.contents.clear
#Drawing gold into separate commas by Dubealex
case $game_party.gold
  when 0..9999
    gold = $game_party.gold
  when 10000..99999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+","+array[2].to_s+array[3].to_s+array[4].to_s
  when 100000..999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+array[2].to_s+","+array[3].to_s+array[4].to_s+array[5].to_s
  when 1000000..9999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+","+array[1].to_s+array[2].to_s+array[3].to_s+","+array[4].to_s+array[5].to_s+array[6].to_s
  when 10000000..99999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+","+array[2].to_s+array[3].to_s+array[4].to_s+","+array[5].to_s+array[6].to_s+array[7].to_s
  when 100000000..999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+array[2].to_s+","+array[3].to_s+array[4].to_s+array[5].to_s+","+array[6].to_s+array[7].to_s+array[8].to_s
  when 1000000000..9999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+","+array[1].to_s+array[2].to_s+array[3].to_s+","+array[4].to_s+array[5].to_s+array[6].to_s+","+array[7].to_s+array[8].to_s+array[9].to_s
  when 10000000000..99999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+","+array[2].to_s+array[3].to_s+array[4].to_s+","+array[5].to_s+array[6].to_s+array[7].to_s+","+array[8].to_s+array[9].to_s+array[10].to_s
  when 100000000000..999999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+array[1].to_s+array[2].to_s+","+array[3].to_s+array[4].to_s+array[5].to_s+","+array[6].to_s+array[7].to_s+array[8].to_s+","+array[9].to_s+array[10].to_s+array[11].to_s
  when 1000000000000..9999999999999
    gold = $game_party.gold.to_s
    array = gold.split(//)
    gold = array[0].to_s+","+array[1].to_s+array[2].to_s+array[3].to_s+","+array[4].to_s+array[5].to_s+array[6].to_s+","+array[7].to_s+array[8].to_s+array[9].to_s+","+array[10].to_s+array[11].to_s+array[12].to_s
  end
#Draw Gold
self.contents.font.color = system_color
gold_word = $data_system.words.gold.to_s
cx = contents.text_size(gold_word).width
cx2=contents.text_size(gold.to_s).width
self.contents.draw_text(4, 4, 120-cx-2, 32, gold_word)
self.contents.font.color = normal_color
self.contents.draw_text(124-cx2+1, 4, cx2, 32, gold.to_s, 2)
self.contents.font.color = system_color
# Draw "Time"
@total_sec = Graphics.frame_count / Graphics.frame_rate
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
text = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
self.contents.draw_text(4, -10, 120, 32, text, 2)
self.contents.font.color = system_color
self.contents.draw_text(4, -10, 120, 32, "Time")
end
#--------------------------------------------------------------------------
# Update of The count
#--------------------------------------------------------------------------
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
  refresh
end
end
end

#==============================================================================
# ¡ Window_Mapname
#------------------------------------------------------------------------------
# @Draws the Map name
#==============================================================================

class Window_Mapname < Window_Base
#--------------------------------------------------------------------------
# Set up
#--------------------------------------------------------------------------
def initialize
super(0, 0, 320, 44)
self.contents = Bitmap.new(width - 52, height - 32)
self.contents.font.name = "Arial"
self.contents.font.size = 18
refresh
end
#--------------------------------------------------------------------------
# Draws info on screen
#--------------------------------------------------------------------------
def refresh
self.contents.clear

# Map Name
#map = $game_map.name
self.contents.font.color = system_color
self.contents.draw_text(4, -10, 220, 32, "Location")
self.contents.font.color = normal_color
self.contents.draw_text(80, -10, 200, 32, $game_map.name)
end
end

#==============================================================================
# ¡ Scene_Menu
#------------------------------------------------------------------------------
# FF7 menu layout as requested by AcedentProne.
#==============================================================================

class Scene_Menu
#--------------------------- edit-------------------------------
attr_reader :status_window
#/--------------------------- edit-------------------------------

def initialize(menu_index = 0)
@menu_index = menu_index
end
def main
   
   s1 = $data_system.words.item
   s2 = $data_system.words.skill
   s3 = $data_system.words.equip
   s4 = "Status"
   s5 = "Save"
   s6 = "Quit"


#--------------------------- edit-------------------------------  
# Command menu
  @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6,])
@command_window.x = 640 - @command_window.width
@command_window.y = 480
@command_window.z = 110
@command_window.index = @menu_index
#If certain options are avaliable
if $game_party.actors.size == 0
  @command_window.disable_item(0)
  @command_window.disable_item(1)
  @command_window.disable_item(2)
  @command_window.disable_item(3)
end
if $game_system.save_disabled
  @command_window.disable_item(4)
end
#Showing location window
@map = Window_Mapname.new
@map.x = 640 - @map.width
@map.y = 0 - @map.height - 1
@map.z = 110
#Showing the game stats
@game_stats_window = Window_GameStats.new
@game_stats_window.x = 0 - @game_stats_window.width
@game_stats_window.y = 480 - @map.height - @game_stats_window.height
@game_stats_window.z =110
 
#Showing the Menu Status window
@status_window = Window_MenuStatus.new
@status_window.x = 640
@status_window.y = 8
@status_window.z = 100

   
Graphics.transition
loop do
  Graphics.update
  Input.update
  update
  if $scene != self
    break
  end
end
Graphics.freeze
@command_window.dispose
@game_stats_window.dispose
@status_window.dispose
@map.dispose
end
#--------------------------------------------------------------------------
#Defining the delay
#--------------------------------------------------------------------------
def delay(seconds)
for i in 0...(seconds * 1)
  sleep 0.01
  Graphics.update
end
end
#--------------------------------------------------------------------------
# Updating
#--------------------------------------------------------------------------
def update
@command_window.update
@game_stats_window.update
@status_window.update
@map.update
#Moving Windows inplace
gamepos = 640 - @game_stats_window.width
mappos = 480 - @map.height - 1
if @command_window.y > 0
@command_window.y -= 60
end
if @game_stats_window.x < gamepos
@game_stats_window.x += 80
end
if @map.y < mappos
@map.y += 80
end
if @status_window.x > 0
  @status_window.x -= 80
end
#Saying if options are active
if @command_window.active
  update_command
  return
end
if @status_window.active
  update_status
  return
end
end
#--------------------------------------------------------------------------
# Updating the Command Selection
#--------------------------------------------------------------------------
def update_command
# If B button is pushed
if Input.trigger?(Input::B)
  # Plays assigned SE
  $game_system.se_play($data_system.cancel_se)
  #Looping for moving windows out
   loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
 # Go to Map
$scene = Scene_Map.new
  return
end
# If C button is pused
if Input.trigger?(Input::C)
  # Checks actor size
  if $game_party.actors.size == 0 and @command_window.index < 4
    # plays SE
    $game_system.se_play($data_system.buzzer_se)
    return
  end
  case @command_window.index
  when 0  
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
    $scene = Scene_Item.new
  when 1
    $game_system.se_play($data_system.decision_se)
    @command_window.active = false
    @status_window.active = true
    @status_window.index = 0
     when 2  
       $game_system.se_play($data_system.decision_se)
       @command_window.active = false
       @status_window.active = true
       @status_window.index = 0
  when 3  
    $game_system.se_play($data_system.decision_se)
    @command_window.active = false
    @status_window.active = true
    @status_window.index = 0

  when 4
    if $game_system.save_disabled
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
   $scene = Scene_Save.new
         when 5
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
     $scene = Scene_End.new
  return
end
end
#--------------------------------------------------------------------------
# Updating Status Screen
#--------------------------------------------------------------------------
def update_status
if Input.trigger?(Input::B)
  $game_system.se_play($data_system.cancel_se)
  @command_window.active = true
  @status_window.active = false
  @status_window.index = -1
  return
end
if Input.trigger?(Input::C)
  case @command_window.index
       when 1  # ƒXƒLƒ‹
       # ,±,̃AƒNƒ^[,̍s"®§ŒÀ,ª 2 ˆÈã,̏ꍇ
       if $game_party.actors[@status_window.index].restriction >= 2
         # ƒuƒU[ SE ,ð‰‰'t
         $game_system.se_play($data_system.buzzer_se)
         return
       end
       # Œˆ'è SE ,ð‰‰'t
       $game_system.se_play($data_system.decision_se)
       # ƒXƒLƒ‹‰æ-Ê,ɐØ,è'Ö,¦
       $scene = Scene_Skill.new(@status_window.index)
       when 2
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
    $scene = Scene_Equip.new(@status_window.index)
  when 3
    $game_system.se_play($data_system.decision_se)
    loop do
    if @command_window.y < 480
     @command_window.y += 40
    end
    if @game_stats_window.x > 0 - @game_stats_window.width
     @game_stats_window.x -= 40
    end
    if @map.y > 0 - @map.height
     @map.y -= 40
    end
    if @status_window.x < 640
     @status_window.x += 40
    end
    delay(0.5)
    if @status_window.x >= 640
     break
   end
  end
    $scene = Scene_Status.new(@status_window.index)
  end
  return
end
end
end
end


As you could probably tell, I'm using a level limit breaker, which is Blizzard's unlimited Levels.

And I am using some miniature scripts, like yours for example:

VALID_ACTORS_FOR_STATS = [1] # want just one actor? do this: [1]

class Window_Base < Window
 alias draw_hp_for_one_actor draw_actor_hp
 def draw_actor_hp(actor, x, y, width = 144)
   return unless VALID_ACTORS_FOR_STATS.include?(actor.id)
   draw_hp_for_one_actor(actor, x, y, width)
 end

 alias draw_sp_for_one_actor draw_actor_sp
 def draw_actor_sp(actor, x, y, width = 144)
   return unless VALID_ACTORS_FOR_STATS.include?(actor.id)
   draw_sp_for_one_actor(actor, x, y, width)
 end
end


This script is meant to omit other characters' health and Magic.


Regarding your question about having stats displayed on a different scene, I think it might be inefficient due to the fact that the player doesn't even know what his/her stats are until they check their menu, so having to go through even more buttons might be irritating, and maybe even confuse some new players.
I saw some people having trouble finding where to equip items because they went to the item slot instead of the equipment slot.

The leveling/experiencing system is pulled from the original curvature, with some altered parameters for certain skills.

If it were possible, having an option to select the side-skill on the menu and pressing enter, which would bring up a kind-of guide which would display what the player could do at a certain level with that certain side-skill would be beneficial.

Also, having a level-up message each time a player levels up a certain skill would be nice for the player to determine when he or she has reached a goal.

(I tried doing this with one skill, and it ended up being a lot of switches which would turn on every time a player would level up, which was connected to a lot of different parallel events and would display a multitude of pictures that I drew myself, which would queue a certain animation. It came out to be 1000s of lines of code in the editor and it became hard to see because the window wasn't wide enough so the indenting eventually led me to not seeing some of the code... in the end it was just a nightmare.)

If it isn't possible though, it's okay.

Thanks for all your help by the way. It really does mean a lot to have someone help you.

KK20

So this is the idea I have so far.

  • Create a new tab in the menu called "Side-Skills". I will put this under "Status".

  • Modify the party status window to better fit the player's stats and all the side-skills. The skills won't be very detailed, perhaps showing only the picture, its level, and the gradient bar (but no EXP numbers unless there's room)

  • Upon selecting "Side-Skills", it will open up a new scene that will display all the side-skills in a list (looks like the "Skills" scene, except in one column). Player selects a side-skill and a new window will pop up displaying all its information (name, level, exp, extra details on what it does--you'll have to go into more detail as to what you want that to be).

  • If you're already pretty far into the development of your game, I can leave the EXP and level handling to your dummy actors. Otherwise, I can create new Actor variables to take care of these numbers as well as implement new script calls to increase EXP/Level.

  • Play an animation when a skill levels up. You will have to create the animation in the database.


Comments?

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

firevenge007

November 05, 2013, 01:13:38 am #17 Last Edit: November 05, 2013, 01:44:12 am by firevenge007
That sounds pretty nice.

How about if I decide to keep using the characters, would it be hard to grab the character X's data and use that to display the experience/skill in the new window.

The reason I would rather use the characters I already have is due to the fact that I've been in the development of this game for over 5 years now, so it would be almost a complete rewrite.



Also, to explain what the side-skills are, so you have an idea of what to place where:

-Fishing: Used to gather food, which would be eaten raw for a constant amount of health and magic restoration based on the tier of the seafood.

-Agility: Leveled up by completing courses which are essentially obstacle courses in which you just go round and around. Training agility unlocks shortcuts which saves time when crossing from one area to another without having to walk all the way around a large mountain or something like that. It is not a very useful skill, but I plan on giving it more uses soon.

-Legend: This is a dungeon exploring skill. During the game, a main dungeon is explored, which is where the player gains most of his/her levels. Though, there are 'world dungeons' which are dungeons that the player can raid that, once conquered can no longer be conquered again. Legend is useful to be able to fight higher level bosses in more difficult dungeons to potentially receive better loot.

-Farming: A passive skill. This means that you plant seeds while you train other skills. The downside of this skill is that you must be playing the game to have your plants grow. For players who want to accomplish some sort of goal, this usually means keeping the game on and racking hundreds of unnecessary game-hours, but that's not the major point. Due to the fact that it is not on the main tab because the player, fishing, agility, and legend are the 4 main characters, farming is only able to be trained in designated areas, which are isolated from the rest of the environment.

-Hunting: Same thing with farming about isolation. Hunting is a skill where a player can catch woodland creatures and considerably larger creatures like bulls and tigers later on for their pelts. With the pelts, players can craft armour which can increase chances of catching their prey.

-Building: Essentially a skill where a player builds a home. The isolation aspect of this skill works as it is meant to be in an isolated area, in the player's house. Players can use this skill to build furniture and cooking areas, (to cook which, which increases it's healing value) at lower levels, and gardens and dungeons at higher levels.

-Rogue: A skill which encourages a player to level his/her combat/main character's level. A player is given a randomly generated task from the various tasks implemented into the database, while still incorporating the player's combat and rogue level. The player is assigned to kill N amount of an X type of monster. When the player has finally killed enough monsters (the player can track his progress through an item in his/her inventory), he/she must return to the rogue master and will receive rogue experience alongside a number of rogue points which exponentially increases as the player's rogue level increases.
Rogue level is only displayed in the character menu when the player is in proximity of a rogue master, which could be quite inconvenient for those who want to check what rogue level they are during a rogue task.

-Plundering: A more story-based side-skill. Involves traveling to the a village in the Saharan desert, which potentially could make the player rich. The player teams up with some other thiefs and goes on a multitude of quests to gain loot or to gain the trust of the town's royalty just to get more loot.
Plundering is only shown when in the Saharan desert. This has restricted me from making any plundering uses outside of the Saharan village.

-Scroll-Making: This side-skill involves taking scrolls made from papyrus and infusing them with a spell at the respected obelisks. Scroll-making is meant to be for players who are keen to train magic or gain high level spells to ease transportation with new teleports, to gain more ease in combat with strengthened offensive spells, or simply to make life easier (enhancing speed, mixing multiple potions at one time...)
Scroll-Making only shows up when the player is in an obelisk realm. An obelisk realm can be accessed by little rainbows which are scattered over the world. They teleport the player to the realm, where the player can craft papyrus scrolls into spell scrolls.

-Herbalism: Uses 'special herbs' achievable only through combat at the moment, to make concoctions, which in conjunction with secondary ingredients, can make final potions which effectively boost the player's stats during combat, temporarily. Herbalism is only shown in the character slot in a single area, which makes it very confusing for people trying to level the skill as people have to constantly go back to this location to check their level.

-Holyness: This is the final skill. This skill incorporates the story/lore of the gods. Ferrous is a human who eventually rose to power with his charisma and his overwhelming support from the public and with his power, struck the two gods, 'good and evil' (not true names, but for simplicity) and banished them to another realm. These banished gods are needed for balance in the world, and without them, there is confusion and corruption spread across the world. The banished gods have found a slight rupture that gives them the ability to send messages to the realm the player is playing in.
The player cannot read all messages that the gods are sending though, and must start siphoning small messages, from which he/she learns to decipher more complex ones.
This skill serves a purpose towards the main story of the game, which is to bring down Ferrous, the corrupt leader.




By reading these, I hope you have a basic understanding of my game, and how to place these skill accordingly in the list.

firevenge007


KK20

November 06, 2013, 02:04:23 am #19 Last Edit: November 06, 2013, 02:05:54 am by KK20
Patience, my friend. I've got a life outside of script requests :P Today was spent programming in Intel X86-64 for a class assignment. Wanna have a look at this hellish stuff?
Spoiler: ShowHide
Code: Intel X86-64

;Statement of Purpose:  This subprogram will calculate the approximate value of e^x. By using a Taylor Series, it will continuously
;                       loop until the next added term is less than 2^(-n).
;
;Status: First release. Any discovered bugs should be reported to the author.
;
;Assemble: nasm -f elf64 -l tscalc.lis -o tscalc.o tscalc.asm
;
;Pre-conditions:
;  - rdi holds the value of n
;  - rax holds 1
;  - xmm0 holds the value of x
;
;Post-conditions:
;  - rax holds the number of terms required for the calculation
;  - xmm0 holds the calculated value of e^x
;  - xmm1 holds the last term that was added to get e^x
;  - Remaining xmm-registers will be corrupt

;=====[ Begin ]======================================================================================================================

%include "debug.inc"                                        ;Requires debug.asm and debug.inc ; This line can be omitted

global tscalc                                               ;Makes this program callable by other programs

;=====[ Begin program instructions ]=================================================================================================

segment .data                                               ;Begin initialized data

segment .bss                                                ;Begin uninitialized data

segment .text                                               ;Begin instructions

tscalc:                                                     ;Begin execution of the program [setgetarrays]

;=====[ Back up used registers ]=====================================================================================================

align 16                                                    ;Start new data only on 16-byte boundaries

push rbp                                                    ;Save the base pointer
push rdi                                                    ;Save common parameter
push rsi                                                    ;Save common parameter
push rcx                                                    ;Save register that will store important data
push r13                                                    ;Save register that will store important data
push r14                                                    ;Save register that will store important data
push r15                                                    ;Save register that will store important data
pushf                                                       ;Back up flag registers
pushf                                                       ;

;=====[ Calculate 2^(-n) ]===========================================================================================================

neg rdi                                                     ;Makes the user's input for n to be negative
mov qword rcx, 1023                                         ;Stores bias number for calculating exponents in floats
add rdi, rcx                                                ;Real Exponent + Bias Number = Stored Exponenet
shl rdi, 52                                                 ;Shifts the stored exponent enough spaces to give us 2^(-n)

push rdi                                                    ;Store this value onto the stack to move to SSE2
movsd xmm15, [rsp]                                          ;Puts value into safe, out-of-the-way xmm-register
pop rax                                                     ;Remove the recent push onto the stack

;=====[ Initialize the rest of the xmm-registers ]===================================================================================

movsd xmm1, xmm0                                            ;Store copy of x into a temporary register
mulsd xmm1, xmm0                                            ;Calculate x^2

push qword 0                                                ;************************************************************************
movsd [rsp], xmm1                                           ;   Loads two instances of x^2 onto the stack. It will then pack these
push qword 0                                                ;   numbers into a register's high and low ends. This will be
movsd [rsp], xmm1                                           ;   crucial for incrementing the terms in the series via parallel
movupd xmm3, [rsp]                                          ;   process.
pop rax                                                     ;  
pop rax                                                     ;************************************************************************

mov rdi, 0x3ff0000000000000                                 ;Holds 1.0 to be pushed into the stack multiple times

push rdi                                                    ;************************************************************************
push qword 0                                                ;   Loads 1.0 and x onto the stack. It will pack these into a register's
movsd [rsp], xmm0                                           ;   high and low ends. These will represent the first two terms in the
movupd xmm1, [rsp]                                          ;   Taylor Series. As the program loops, these will hold the current
pop rax                                                     ;   iterations being added to e^x.
pop rax                                                     ;************************************************************************
                                                   
push qword 0                                                ;************************************************************************
push rdi                                                    ;   Loads 0 and 1.0 onto the stack. It will pack these into a register's
movupd xmm2, [rsp]                                          ;   high and low ends. These will represent the denominator for the
pop rax                                                     ;   current term in the series. It will also track the number of terms.
pop rax                                                     ;************************************************************************

push rdi                                                    ;************************************************************************
push rdi                                                    ;   Loads two instaces of 1.0 onto the stack. It will put them into a
movupd xmm4, [rsp]                                          ;   register's high and low ends. This will increment the denominators
pop rax                                                     ;   for each term in the series. Done for convention.
pop rax                                                     ;************************************************************************

push qword 0                                                ;************************************************************************
push qword 0                                                ;   This process will clear xmm0 of its values in the high and low ends.
movupd xmm0, [rsp]                                          ;   This is done because this register will hold the sums of the terms.
pop rax                                                     ;
pop rax                                                     ;************************************************************************

;------------------------------------------------------------------------------------------------------------------------------------
; This is how the XMM-registers will be used
;          high         low
;        __________ __________
; xmm15 |          |  2^(-n)  |  Constant value. Is compared with xmm5 every loop. Breaks loop if xmm5 is less than xmm15.
; . . . |          |          |
; xmm5  |          |abs(xmm1) |  Temporary register. Stores absolute value of low xmm1 here. Compares itself with xmm15.
; xmm4  |   1.0    |   1.0    |  Constant of 1. Added into xmm2 to increment the factorial in the denominator for each term.
; xmm3  |   x^2    |   x^2    |  Constant of x^2. Multiplied into xmm1 to increment numerator for two terms.
; xmm2  |    0     |   1.0    |  Current factorial number. Increases by two every loop. Low end plus one gives us number of terms.
; xmm1  |   1.0    |    x     |  Current term being added into the series.
; xmm0  |    0     |    0     |  Sums of the high and low end terms. Added together at the end of the program to get e^x.
;       -----------------------
;------------------------------------------------------------------------------------------------------------------------------------

;=====[ Perform Taylor Series calculations ]=========================================================================================

mov rdi, 0x8000000000000000                                 ;Holds -0.0 for absolute value conversions

tsLoop:                                                     ;<Begin Loop>

addpd xmm0, xmm1                                            ;Adds last terms to the sums

                                                           ;***** Get the absolute value of the last term *****

push qword 0                                                ;Reserve space on the stack to put float number into
movsd [rsp], xmm1                                           ;Puts last term calculated onto the stack
pop rax                                                     ;Put this float into rax

or  rax, rdi                                                ;Changes the left-most bit to a 1
sub rax, rdi                                                ;Changes the left-most bit to a 0

push rax                                                    ;Push number back onto the stack to be transferred into xmm-register
movsd xmm5, [rsp]                                           ;Put float number into temporary register
pop rax                                                     ;Remove recent push

                                                           ;***** Compare absolute value of the last term with 2^(-n) *****

ucomisd xmm5, xmm15                                         ;If   abs(last_term) < 2^(-n)
jb tsDone                                                   ;Then Jump to [tsDone]

                                                           ;***** Calculate next two terms in the series *****

mulpd xmm1, xmm3                                            ;Increment terms twice by multiplying x^2 to them
addpd xmm2, xmm4                                            ;Increment denominators by one...
divpd xmm1, xmm2                                            ;...and divide it with the current term
addpd xmm2, xmm4                                            ;  (Repeat this process twice because we
divpd xmm1, xmm2                                            ;    are calculating two terms at once)

jmp tsLoop                                                  ;Repeat loop [tsLoop]

;=====[ Add the two sums together ]==================================================================================================

tsDone:                                                     ;<End Loop>

push qword 0                                                ;Reserve two spaces onto the stack to put the...
push qword 0                                                ;...two sums in so that they can be added together.
movupd [rsp], xmm0                                          ;Puts both sums onto the stack
movsd xmm3, [rsp+8]                                         ;Load high end sum back into an unneeded xmm-register
addsd xmm0, xmm3                                            ;Add the high and low end sums together
pop rax                                                     ;Remove the two pushes made to the stack
pop rax                                                     ;

;=====[ Move number of terms to rax ]================================================================================================

addsd xmm2, xmm4                                            ;Increment number of terms by one (low end is odd when even is expected)
cvtsd2si rax, xmm2                                          ;Convert float number into integer

;=====[ Finish up and exit ]=========================================================================================================

popf                                                        ;Restore the flags register
popf                                                        ;Repeat since it was done twice
pop r15                                                     ;Restore the registers in order they were pushed
pop r14                                                     ;    |
pop r13                                                     ;    |
pop rcx                                                     ;    |
pop rsi                                                     ;    |
pop rdi                                                     ;    |
pop rbp                                                     ;    V

ret                                                         ;Pop return address from stack and return to caller

;====================================================================================================================================
;               E N D   O F   P R O G R A M                 [tscalc]
;====================================================================================================================================

Anyways, I'll get onto it tomorrow since I have a lot of free time.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!