battle narration RMXP

is there any scripts for battle narration similar to earthbound for RMXP, i have found this forum but the link seems to no longer work ( Battle Narration ) and I can not find other scripts

The site in question was in an old host service that was shut down long ago, and unfortunately can’t find traces of it either. So far seems that it would be either asking people if someone has it on their drive for some reason.

Second option is finding another one, but I can’t seem to find one either. Funny enough found another thread directing to that same thread you posted… :sweat_smile:

Third option is making one, but I think this takes more than 5 minutes. :upside_down_face:

1 Like

okay, i will keep looking but im also trying to learn ruby so it might be something i have to make.

1 Like

Here is an unstable version of a script I made in 2020, feel free to modify it.
It’s a battle log, but I’d recommend waiting a bit longer, as I’m currently working on a script pack that recreates most of the EarthBound systems.
I’m repurposing some scripts that Cap’n Coco Charm released on Starmen.net ages ago. Anyway, I could look into developing a more complete version, but for now, I’ll send you this one, you’re free to modify it.

#==============================================================================
# ** Moveto's Battle Log 1.0 - 10/28/2020 **
#
#-------------------------------------------------
#  This version isn't very stable, it was
#  created for a discarded project, but it
#  works normally—though it hasn't been reviewed.
#==============================================================================

module MVBLSYS

  #-------
  # CONFIG
  #-------

  # Log Window Position
  X = 8
  Y = 8

  # Log Area Sizze
  WIDTH  = 624
  HEIGHT = 82

  # Lines
  MAX_LINES = 4

  # Font Size
  FONT_SIZE = 20

  # Wite Speed
  # 1 = faster
  # 2 = normal
  # 3 = slow
  LETTER_SPEED = 2

  # Line spacing
  LINE_HEIGHT = 20

  # Time the message remains on the screen after finishing
  MESSAGE_WAIT = 35

  #-------------
  # * Create Log
  #-------------
  def self.create
    dispose

    @sprite = Sprite.new
    @sprite.x = X
    @sprite.y = Y
    @sprite.z = 9999

    @bitmap = Bitmap.new(WIDTH, HEIGHT)
    @sprite.bitmap = @bitmap

    @messages = []
    @current_text = ""
    @display_text = ""
    @text_index = 0
    @wait = 0
    @active = true

    refresh
  end

  #---------
  # * Update
  #---------
  def self.update
    return if @sprite == nil
    return if @bitmap == nil

    # If no message is being written
    if @current_text == nil or @current_text == ""
      return
    end

    # Wait before continuing
    if @wait > 0
      @wait -= 1
      return
    end

    # Typing the message
    if @text_index < @current_text.length

      if Graphics.frame_count % LETTER_SPEED == 0
        @text_index += 1
        @display_text = @current_text[0, @text_index]
        refresh
      end

    else
      # Message ended
      @wait = MESSAGE_WAIT
    end
  end

  #--------------
  # * Add message
  #--------------
  def self.add(text)
    return if text == nil

    text = text.to_s

    @messages = [] if @messages == nil

    @messages.push(text)

    while @messages.size > MAX_LINES
      @messages.shift
    end

    @current_text = text
    @display_text = ""
    @text_index = 0
    @wait = 0

    refresh
  end

  #---------------
  # * Show message
  #---------------
  def self.message(text)
    add(text)
  end

  #----------------------
  # * Updates the drawing
  #----------------------
  def self.refresh
    return if @bitmap == nil

    @bitmap.clear

    # Log background
    @bitmap.fill_rect(
      0,
      0,
      WIDTH,
      HEIGHT,
      Color.new(0, 0, 0, 180)
    )

    # Edge
    border = Color.new(255, 255, 255, 255)

    @bitmap.fill_rect(0, 0, WIDTH, 2, border)
    @bitmap.fill_rect(0, HEIGHT - 2, WIDTH, 2, border)
    @bitmap.fill_rect(0, 0, 2, HEIGHT, border)
    @bitmap.fill_rect(WIDTH - 2, 0, 2, HEIGHT, border)

    # Font
    @bitmap.font.name = "Arial"
    @bitmap.font.size = FONT_SIZE
    @bitmap.font.bold = false
    @bitmap.font.italic = false
    @bitmap.font.color = Color.new(255, 255, 255, 255)

    #------------------------
    # Draws previous messages
    #------------------------
    if @messages != nil

      count = @messages.size

      # The last message will be replaced by the version currently being typed
      if count > 0
        last_index = count - 1
      else
        last_index = -1
      end

      y = 5

      for i in 0...count

        text = @messages[i]

        # If it's the current message, use the typed version
        if i == last_index and
           @current_text != nil and
           @current_text != ""

          text = @display_text
        end

        @bitmap.draw_text(
          10,
          y,
          WIDTH - 20,
          LINE_HEIGHT,
          text,
          0
        )

        y += LINE_HEIGHT
      end
    end
  end

  #----------------------
  # * Checks if it exists
  #----------------------
  def self.exist?
    return false if @sprite == nil
    return false if @bitmap == nil
    return true
  end

  #----------
  # * Deletye
  #----------
  def self.clear
    @messages = []
    @current_text = ""
    @display_text = ""
    @text_index = 0
    @wait = 0

    refresh
  end

  #-----------------
  # * Remove the log
  #-----------------
  def self.dispose
    if @sprite != nil
      @sprite.bitmap = nil
      @sprite.dispose
      @sprite = nil
    end

    if @bitmap != nil
      @bitmap.dispose
      @bitmap = nil
    end

    @messages = []
    @current_text = ""
    @display_text = ""
    @text_index = 0
    @wait = 0
  end
end


#==============================================================================
# ** Scene_Battle
#==============================================================================

class Scene_Battle

  #------------------
  # * Main Processing
  #------------------
  alias mvbl_battle_log_main main

  def main

    # Create the log BEFORE the battle starts.
    MVBLSYS.create

    # Mensagem inicial
    MVBLSYS.add("The battle has begun!")

    # Runs the original Scene_Battle
    mvbl_battle_log_main

    # Security
    MVBLSYS.dispose
  end

  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  alias mvbl_battle_log_update update

  def update

    # Updates the original battle system
    mvbl_battle_log_update

    # Updates the log
    MVBLSYS.update
  end

  #-------------
  # * End Battle
  #-------------
  alias mvbl_battle_log_battle_end battle_end

  def battle_end(result)

    MVBLSYS.dispose

    mvbl_battle_log_battle_end(result)
  end

  #---------------
  # * Basic Action
  #---------------
  alias mvbl_battle_log_basic_action make_basic_action_result

  def make_basic_action_result

    # Hold the attacker before the action
    battler = @active_battler

    # Executes the original action
    mvbl_battle_log_basic_action

    # If the battler does not exist
    return if battler == nil

    # Normal attack
    if battler.current_action.basic == 0

      name = battler.name

      if name == nil or name == ""
        name = "Enemy"
      end

      MVBLSYS.add(name + " attack!")

      # Result
      if @target_battlers != nil

        for target in @target_battlers

          next if target == nil

          if target.damage == "Miss"

            MVBLSYS.add("Miss!")

          elsif target.damage.is_a?(Numeric)

            if target.critical
              MVBLSYS.add("Critical Hit!")
            end

            if target.damage < 0
              MVBLSYS.add(
                target.name + " recovered " +
                (-target.damage).to_s + " HP!"
              )
            else
              MVBLSYS.add(
                target.name + " suffer " +
                target.damage.to_s + " of damage!"
              )
            end
          end

          if target.hp <= 0
            MVBLSYS.add(target.name + " fall!")
          end
        end
      end
    end
  end

  #---------------
  # * Skill Action
  #---------------
  alias mvbl_battle_log_skill_action make_skill_action_result

  def make_skill_action_result

    battler = @active_battler

    # Save the ability
    skill_id = nil

    if battler != nil
      skill_id = battler.current_action.skill_id
    end

    skill = nil

    if skill_id != nil
      skill = $data_skills[skill_id]
    end

    # Executes the original action
    mvbl_battle_log_skill_action

    return if battler == nil
    return if skill == nil

    name = battler.name

    if name == nil or name == ""
      name = "Enemy"
    end

    MVBLSYS.add(
      name + " used " + skill.name + "!"
    )

    # Result
    if @target_battlers != nil

      for target in @target_battlers

        next if target == nil

        if target.damage == "Miss"

          MVBLSYS.add("Miss!")

        elsif target.damage.is_a?(Numeric)

          if target.critical
            MVBLSYS.add("Critical Hit!")
          end

          if target.damage < 0

            MVBLSYS.add(
              target.name + " recoverec " +
              (-target.damage).to_s + " HP!"
            )

          elsif target.damage > 0

            MVBLSYS.add(
              target.name + " suffer " +
              target.damage.to_s + " of damage!"
            )
          end
        end

        if target.hp <= 0
          MVBLSYS.add(target.name + " caiu!")
        end
      end
    end
  end

  #--------------------------------------------------------------------------
  # * Item Action
  #--------------------------------------------------------------------------
  alias mvbl_battle_log_item_action make_item_action_result

  def make_item_action_result

    battler = @active_battler

    item_id = nil

    if battler != nil
      item_id = battler.current_action.item_id
    end

    item = nil

    if item_id != nil
      item = $data_items[item_id]
    end

    # Executes the original action
    mvbl_battle_log_item_action

    return if battler == nil
    return if item == nil

    name = battler.name

    if name == nil or name == ""
      name = "Enemy"
    end

    MVBLSYS.add(
      name + " used " + item.name + "!"
    )

    # Resultado
    if @target_battlers != nil

      for target in @target_battlers

        next if target == nil

        if target.damage == "Miss"

          MVBLSYS.add("It Didn't Work...")

        elsif target.damage.is_a?(Numeric)

          if target.damage < 0

            MVBLSYS.add(
              target.name + " recovered " +
              (-target.damage).to_s + " HP!"
            )

          elsif target.damage > 0

            MVBLSYS.add(
              target.name + " suffer " +
              target.damage.to_s + " of damage!"
            )
          end
        end

        if target.hp <= 0
          MVBLSYS.add(target.name + " fall!")
        end
      end
    end
  end

end


#==============================================================================
# ** Game_Temp
#------------------------------------------------------------------------------
#  Allows the log to be called via an event.
#
#  Example:
#
#  $game_temp.battle_log("The enemy looks furious!")
#==============================================================================

class Game_Temp

  def battle_log(text)
    MVBLSYS.add(text)
  end

end
1 Like

I still have an old *EarthBound* “Cap’n Coco Charm Starter Kit” project; it’s quite incomplete, but it’s the closest thing to *EarthBound* in RPG Maker XP. I can send the project over, since I’m probably the only one who still has it.

1 Like

Yeah that would be great! also I will ceck out that script you sent earlier!

I tried out the script and it works really good! its a little confusing to try and customize it but other than that its amazing!

1 Like

Well, if I were you, I’d wait until my EarthBound system for RMXP is finished. I’m working on it right now, I recommend checking out the video I made about it, It’s still in the early stages, but I’m working on it daily so I can release it later this year.

Earthbound no RPG Maker XP! - The Earthbound XP Kit (em desenvolvimento)

1 Like