Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

D&D 3.5 Spells per day script request

D&D 3.5 Spells per day script request

RMXP:

Description:
Alright, I have done some searching and have found close versions of what I'm looking for but they are not quite right, due to the overwhelming "other" functions and the fact of they only last for a battle before there reset.

what I'm looking for is the Spells per day from Dungeons & Dragons 3.5(the ability to set a number of spell uses, per individual spells and spell levels, in a single day)

for example

if your familiar with D&D 3.5 its in the players handbook in chapter 3 pg 53 for sorc spells per day


for those of you not familiar look at the screen shots


but we continue on to the other classes for example

a paladin can "Smite Evil" once per day, and wont be able to do that again until the party rests(same with the sorc and so on)

also if you could throw in some sort of "passive skill" feature that would be great for the "Feats"(skills) such as "toughness" which in turn adds +3 hitpoints per time you take it!.

i found an old rough version of "Old FF Style Magic" that could be edited to work!
Code:
#-------------------------------------------------------------------------------

# Old FF Style Spells

#   by Jaberwocky

#-------------------------------------------------------------------------------

SKILLTHINGYELEMENT = 20

SKILLTHINGYMAX = 6

class Game_Actor < Game_Battler

 

  attr_accessor :spellsleft

  attr_accessor :spellsmax

  attr_accessor :spellslevels

  

  alias moosemuffins setup

  def setup(actor_id)

    @spellsmax = [6, 3, 2, 1, 1, 1, 0, 0, 0, 0, 1]

    @spellsleft = [4, 3, 2, 1, 1, 1, 0, 0, 0, 0, 1]

    @spellslevels = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

    moosemuffins(actor_id)

  end

 

  def learn_skill(skill_id)

    if skill_id > 0 and not skill_learn?(skill_id)

      if $data_skills[skill_id].element_set.include?(SKILLTHINGYELEMENT)

        if @spellslevels[$data_skills[skill_id].sp_cost] == SKILLTHINGYMAX

          return

        else

          @skills.push(skill_id)

          @skills.sort!

          @spellslevels[$data_skills[skill_id].sp_cost] += 1

        end

      else

        @skills.push(skill_id)

        @skills.sort!

      end

    end

  end

 

  def forget_skill(skill_id)

    if skill_id > 0 and skill_learn?(skill_id) and

        $data_skills[skill_id].element_set.include?(SKILLTHINGYELEMENT)

      @spellslevels[$data_skills[skill_id].sp_cost] -= 1

    end

    @skills.delete(skill_id)

  end

  

end

 

class Game_Party

 

  def resetspellsleft

    for actor in $game_party.actors

      for i in 0...actor.spellsleft.size

        actor.spellsleft[i] = actor.spellsmax[i]

      end

    end

  end

  

end

 

class Game_Battler

 

  def skill_can_use?(skill_id)

    if $data_skills[skill_id].element_set.include?(SKILLTHINGYELEMENT) and

          self.is_a?(Game_Actor)

      if self.spellsleft[$data_skills[skill_id].sp_cost] == 0

        return false

      end

    else

      # If there's not enough SP, the skill cannot be used.

      if $data_skills[skill_id].sp_cost > self.sp

        return false

      end

    end

    # Unusable if incapacitated

    if dead?

      return false

    end

    # If silent, only physical skills can be used

    if $data_skills[skill_id].atk_f == 0 and self.restriction == 1

      return false

    end

    # Get usable time

    occasion = $data_skills[skill_id].occasion

    # If in battle

    if $game_temp.in_battle

      # Usable with [Normal] and [Only Battle]

      return (occasion == 0 or occasion == 1)

    # If not in battle

    else

      # Usable with [Normal] and [Only Menu]

      return (occasion == 0 or occasion == 2)

    end

  end

 

  def elements_correct(element_set)

    # If not an element

    if element_set == []

      # Return 100

      return 100

    end

    if element_set == [SKILLTHINGYELEMENT]

      return 100

    end

    # Return the weakest object among the elements given

    # * "element_rate" method is defined by Game_Actor and Game_Enemy classes,

    #    which inherit from this class.

    weakest = -100

    for i in element_set

      unless i == SKILLTHINGYELEMENT

        weakest = [weakest, self.element_rate(i)].max

      end

    end

    return weakest

  end

  

end

 

class Window_Skill < Window_Selectable

  

  def draw_item(index)

    skill = @data[index]

    if @actor.skill_can_use?(skill.id)

      self.contents.font.color = normal_color

    else

      self.contents.font.color = disabled_color

    end

    x = 4 + index % 2 * (288 + 32)

    y = index / 2 * 32

    rect = Rect.new(x, y, self.width / @column_max - 32, 32)

    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))

    bitmap = RPG::Cache.icon(skill.icon_name)

    opacity = self.contents.font.color == normal_color ? 255 : 128

    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)

    self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)

    if skill.element_set.include?(SKILLTHINGYELEMENT)

      self.contents.draw_text(x + 210, y, 70, 32, "Lv" + skill.sp_cost.to_s + " - " + @actor.spellsleft[skill.sp_cost].to_s, 2)

    else

      self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)

    end

  end

  

end

 

class Scene_Skill

  

  def update_skill

    # If B button was pressed

    if Input.trigger?(Input::B)

      # Play cancel SE

      $game_system.se_play($data_system.cancel_se)

      # Switch to menu screen

      $scene = Scene_Menu.new(1)

      return

    end

    # If C button was pressed

    if Input.trigger?(Input::C)

      # Get currently selected data on the skill window

      @skill = @skill_window.skill

      # If unable to use

      if @skill == nil or not @actor.skill_can_use?(@skill.id)

        # Play buzzer SE

        $game_system.se_play($data_system.buzzer_se)

        return

      end

      # Play decision SE

      $game_system.se_play($data_system.decision_se)

      # If effect scope is ally

      if @skill.scope >= 3

        # Activate target window

        @skill_window.active = false

        @target_window.x = (@skill_window.index + 1) % 2 * 304

        @target_window.visible = true

        @target_window.active = true

        # Set cursor position to effect scope (single / all)

        if @skill.scope == 4 || @skill.scope == 6

          @target_window.index = -1

        elsif @skill.scope == 7

          @target_window.index = @actor_index - 10

        else

          @target_window.index = 0

        end

      # If effect scope is other than ally

      else

        # If common event ID is valid

        if @skill.common_event_id > 0

          # Common event call reservation

          $game_temp.common_event_id = @skill.common_event_id

          # Play use skill SE

          $game_system.se_play(@skill.menu_se)

          if @skill.element_set.include?(SKILLTHINGYELEMENT)

            @actor.spellsleft[@skill.sp_cost] -= 1

          else

            # Use up SP

            @actor.sp -= @skill.sp_cost

          end

          # Remake each window content

          @status_window.refresh

          @skill_window.refresh

          @target_window.refresh

          # Switch to map screen

          $scene = Scene_Map.new

          return

        end

      end

      return

    end

    # If R button was pressed

    if Input.trigger?(Input::R)

      # Play cursor SE

      $game_system.se_play($data_system.cursor_se)

      # To next actor

      @actor_index += 1

      @actor_index %= $game_party.actors.size

      # Switch to different skill screen

      $scene = Scene_Skill.new(@actor_index)

      return

    end

    # If L button was pressed

    if Input.trigger?(Input::L)

      # Play cursor SE

      $game_system.se_play($data_system.cursor_se)

      # To previous actor

      @actor_index += $game_party.actors.size - 1

      @actor_index %= $game_party.actors.size

      # Switch to different skill screen

      $scene = Scene_Skill.new(@actor_index)

      return

    end

  end

 

  def update_target

    # If B button was pressed

    if Input.trigger?(Input::B)

      # Play cancel SE

      $game_system.se_play($data_system.cancel_se)

      # Erase target window

      @skill_window.active = true

      @target_window.visible = false

      @target_window.active = false

      return

    end

    # If C button was pressed

    if Input.trigger?(Input::C)

      # If unable to use because SP ran out

      unless @actor.skill_can_use?(@skill.id)

        # Play buzzer SE

        $game_system.se_play($data_system.buzzer_se)

        return

      end

      # If target is all

      if @target_window.index == -1

        # Apply skill use effects to entire party

        used = false

        for i in $game_party.actors

          used |= i.skill_effect(@actor, @skill)

        end

      end

      # If target is user

      if @target_window.index <= -2

        # Apply skill use effects to target actor

        target = $game_party.actors[@target_window.index + 10]

        used = target.skill_effect(@actor, @skill)

      end

      # If single target

      if @target_window.index >= 0

        # Apply skill use effects to target actor

        target = $game_party.actors[@target_window.index]

        used = target.skill_effect(@actor, @skill)

      end

      # If skill was used

      if used

        # Play skill use SE

        $game_system.se_play(@skill.menu_se)

        $game_system.se_play(@skill.menu_se)

        if @skill.element_set.include?(SKILLTHINGYELEMENT)

          @actor.spellsleft[@skill.sp_cost] -= 1

        else

          # Use up SP

          @actor.sp -= @skill.sp_cost

        end

        # Remake each window content

        @status_window.refresh

        @skill_window.refresh

        @target_window.refresh

        # If entire party is dead

        if $game_party.all_dead?

          # Switch to game over screen

          $scene = Scene_Gameover.new

          return

        end

        # If command event ID is valid

        if @skill.common_event_id > 0

          # Command event call reservation

          $game_temp.common_event_id = @skill.common_event_id

          # Switch to map screen

          $scene = Scene_Map.new

          return

        end

      end

      # If skill wasn't used

      unless used

        # Play buzzer SE

        $game_system.se_play($data_system.buzzer_se)

      end

      return

    end

  end

  

end

 

class Scene_Battle

  

  def make_skill_action_result(battler)

    # Acquiring skill

    @skill = $data_skills[battler.current_action.skill_id]

    # Verification whether or not it is cooperation skill,

    speller = synthe?(battler)

    # If it is not forced action

    unless battler.current_action.forcing

      # When with SP and so on is cut off and it becomes not be able to use

      if speller == nil

        unless battler.skill_can_use?(@skill.id)

          # It moves to step 6

          battler.phase = 6

         return

        end

      end

    end

    # SP consumption

    temp = false

    if speller != nil

      for spell in speller

        if spell.current_action.spell_id == 0

          if @skill.element_set.include?(SKILLTHINGYELEMENT) and

                spell.is_a?(Game_Actor)

            spell.spellsleft[@skill.sp_cost] -= 1

          else

            spell.sp -= @skill.sp_cost

          end

        else

          if $data_skills[spell.current_action.spell_id].element_set.include?(SKILLTHINGYELEMENT) and

                spell.is_a?(Game_Actor)

            spell.spellsleft[$data_skills[spell.current_action.spell_id].sp_cost] -= 1

          else

            spell.sp -= $data_skills[spell.current_action.spell_id].sp_cost

          end

        end

        # Refreshing the status window

        status_refresh(spell)

      end

    else

      if @skill.element_set.include?(SKILLTHINGYELEMENT) and

            battler.is_a?(Game_Actor)

        battler.spellsleft[@skill.sp_cost] -= 1

      else

        battler.sp -= @skill.sp_cost

      end

      # Refreshing the status window

      status_refresh(battler)

    end

    # Setting animation ID

    battler.anime1 = @skill.animation1_id

    battler.anime2 = @skill.animation2_id

    # Setting common event ID

    battler.event = @skill.common_event_id

    # Setting the object side battler

    set_target_battlers(@skill.scope, battler)

    # Applying the effect of skill

    for target in battler.target

      if speller != nil

        damage = 0

        d_result = false

        effective = false

        state_p = []

        state_m = []

        for spell in speller

          if spell.current_action.spell_id != 0

            @skill = $data_skills[spell.current_action.spell_id]

          end

          effective |= target.skill_effect(spell, @skill)

          if target.damage[spell].class != String

            d_result = true

            damage += target.damage[spell]

          elsif effective

            effect = target.damage[spell]

          end

          state_p += target.state_p[spell]

          state_m += target.state_m[spell]

          target.damage.delete(spell)

          target.state_p.delete(spell)

          target.state_m.delete(spell)

        end

        if d_result

          target.damage[battler] = damage

        elsif effective

          target.damage[battler] = effect

        else

          target.damage[battler] = 0

        end

        target.state_p[battler] = state_p

        target.state_m[battler] = state_m

      else

        target.skill_effect(battler, @skill)

      end

    end

  end

 

end


Screen shots:
spellsperday.png


Other Scripts I am using (in order):
CW: DnD Formula



Please and thank you....I'm in need of this
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top