ForeverZeros Journalscript: Image over the whole window

NOFACE12

Warper
Member
Joined
Oct 4, 2016
Messages
2
Reaction score
1
First Language
GERMAN
Primarily Uses
Hello guys, I need help with a RPG XP Script. Its about ForeverZer0's Journal script.


It allows to create journals about characters, items, weapons etc. You can also set pictures for each subject. For example for the entry aluxes (main character) you can set a picture that will be displayed. And heres what bothers me.


In my attachment at the end, theres an example. I want to make a picture displayed that will go completly over the windowskin. Somehowever the windowskin dont let the picture go beyond it.


My example picture (its the red square) was 640x480, then I made smaller, tried all sizes but the picture just wont go over the invisible boundaries you can "see" in the example. Can anybode edit the code, so that the the picture will be displayed completly without any boundaries that hides it.


I want the script to let the picture cover the whole windowskin area.


Thanks in advance.

#+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
# Journal
# Author: ForeverZer0
# Version: 2.4
# Data: 12.30.2010
#+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
#
# Introduction:
#   I wrote this script after seeing a request here on CP for something similar.
#   It basically just allows the player to view a Journal that show the player
#   information about people they have encountered and places they have visited.
#   Can also log weapons, armors, and items.
#   
# Features:
#   - Easy to use/configure
#   - Nice simple interface
#   - Will log people, places, weapons, armors, and items seperately
#   - Configurable what type of entries you would like to log.
#   - Configurable layout
#   - Option to use pictures
#   - Fully compatible "stats" you want the system to display.
#
# Instructions:
#   - Place script in the usual place.
#   - All configuration is below, and explained in each section.
#   - All pictures must be in folder labeled "Journal" within your game's 
#     Picture folder.
#   - All you have to do is assign arbitrary "ids" to each person and location
#     respectively. After you have completed configuration, when you want the
#     person/place to be added to the Journal, use these script calls:
#
#       Journal.add_character(ID)
#       Journal.add_location(ID)
#       Journal.add_weapon(ID)
#       Journal.add_armor(ID)
#       Journal.add_item(ID)
#
#       You can also delete entries in the same way:
#
#       Journal.delete_character(id)
#       Journal.delete_location(id)
#       Journal.delete_weapon(id)
#       Journal.delete_armor(id)
#       Journal.delete_item(id)
#
#     Where the "ID" is the number you assigned to each.
#   - To call the scene, use this script call:
#
#       $scene = Scene_Journal.new
#
#   - The script comes with a fix for those who like to use smaller text sizes
#     (like myself), which will allow for more information to be displayed on
#     the screen at once.
#   - If you would like to change the look up a little bit, just change around
#     the X and Y values in Window_Journal.
#
# Credits/Thanks:
#   - ForeverZer0, for the script.
#
#=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
#                           BEGIN CONFIGURATION
#=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=


module Journal
  
  # If true, a line height of 20 pixels will be used, which looks better with
  # smaller font sizes.
  SMALL_TEXT = true
  # The width of the entry list used for Scene_Journal. The other windows will
  # automatically adjust to this width.
  LIST_WIDTH = 192
  
  # Define what aspects of the journal you would like to use. Choose from the
  # values listed below and add them to the array. DO NOT change the values.
  # Omit values for types you do not want to use.
  #        'People' - 'Places' - 'Weapons' - 'Armors' - 'Items'
  LIST_ORDER = ['People', 'Places', 'Weapons', 'Armors', 'Items']
  
  # Configure if you would like for items, weapons, and armors to be unlocked
  # automatically when they are first aquired by the player. If using this
  # options, IDs MUST match the IDs used in the Database. You will also need to
  # manually add anything the player begins with at game start.
  AUTO_WEAPONS = true
  AUTO_ARMORS = true
  AUTO_ITEMS = true
  
#-------------------------------------------------------------------------------
  CHARACTER_STATS = ['Name:', 'Race:', 'Age:', 'Height:', 'Weight:']
  
  # Configure the values used for the above array for each character. Just make
  # sure the value that corresponds to each stat is at the same index in the [].
  # Just make sure that the first stat is the name, it will be used on the menu
  # to select which character/location will be viewed.
  def self.character_info(id)
    info = case id
    when 1 then ['Aluxes', 'Human', '19', '5\'10"', '165 lbs.']
    when 2 then ['Hilda', 'Human', '20', '5\'5"', '113']
    when 3 then ['Basil', 'Human', '24', '6\'0"', '187 lbs.']
    end
    return info != nil ? info : []
  end
  
  # Short paragraph/description of character. Uses Blizzard's slice_text method
  # to automatically break to next line when needed, so do not concern yourself
  # with that.
  def self.character_bio(id)
    text = case id
    when 1
      'Our everyday hero, that seems to make an appearance in every demo.'
    when 2
      'Random witch girl.'
    when 3
      'Another RPGXP character.'
    end
    return text != nil ? text : ''
  end
#-------------------------------------------------------------------------------
  LOCATION_STATS = ['Name:', 'Country:']
  
  # Configure the values used for the above array for each location. Just make
  # sure the value that corresponds to each stat is at the same index in the [].
  # Just make sure that the first stat is the name, it will be used on the menu
  # to select which character/location will be viewed.
  def self.location_info(id)
    info = case id
    when 1 then ['New York', 'USA']
    when 2 then ['Ohio', 'USA']
    when 3 then ['Iowa', 'Who cares...']
    end
    return info != nil ? info : []
  end
  
  # Short paragraph/description of location. Uses Blizzard's slice_text method
  # to automatically break to next line when needed, so do not concern yourself
  # with that.
  def self.location_bio(id)
    return case id
    when 1
      'The state north of Pennsylvania.'
    when 2
      'The state west of Pennsylvania.'
    when 3
      'A boring state.'
    else
      ''
    end
  end
#-------------------------------------------------------------------------------
  WEAPON_STATS = ['Name:', 'Origin:']
    
  def self.weapon_info(id)
    text = case id
    when 1 then ['Bronze Sword', 'Everywhere.']
    when 2 then ['Iron Sword', 'Right here.']
    when 3 then ['Mythril Sword', 'Blah blah.']
    end
  end
  
  def self.weapon_bio(id)
    return case id
    when 1 
      'Simple sword. Seems to be the standard that all RPG games have the hero start with.'
    when 2
      'Slighly better than the Bronze sword.'
    when 3
      'Yet another sword that is in almost every RPG.'
    else
      ''
    end
  end
#-------------------------------------------------------------------------------
  ARMOR_STATS = ['Name:', 'Origin:']
    
  def self.armor_info(id)
    text = case id
    when 1 then ['', '']
    when 2 then ['', '']
    when 3 then ['', '']
    end
  end
  
  def self.armor_bio(id)
    return case id
    when 1 
      ''
    when 2
      ''
    when 3
      ''
    else
      ''
    end
  end
#-------------------------------------------------------------------------------
  ITEM_STATS = ['Name:', 'Origin:']
  
  def self.item_info(id)
    text = case id
    when 1 then ['', '']
    when 2 then ['', '']
    when 3 then ['', '']
    end
  end
  
  def self.item_bio(id)
    return case id
    when 1 
      ''
    when 2
      ''
    when 3
      ''
    else
      ''
    end
  end
#-------------------------------------------------------------------------------


  # Set the following to true if you would loke pictures to be displayed for
  # the respective type of Journal entries. They will be defined below.
  CHARACTER_PIC = true
  LOCATION_PIC = true
  WEAPON_PIC = true
  ARMOR_PIC = true
  ITEM_PIC = true
  
  # Filenames of character pictures. 
  def self.character_pic(id)
    file = case id
    when 1 then 'Aluxes'
    when 2 then 'Hilda'
    when 3 then 'Basil'
    end
    return file != nil ? RPG::Cache.picture("Journal/#{file}") : Bitmap.new(1,1)
  end
  
  # Filenames of location pictures. 
  def self.location_pic(id)
    file = case id
    when 1 then ''
    when 2 then ''
    when 3 then ''
    end
    return file != nil ? RPG::Cache.picture("Journal/#{file}") : Bitmap.new(1,1)
  end   
  
  # Filename of weapon pictures. 
  def self.weapon_pic(id)
    file = case id
    when 1 then ''
    when 2 then ''
    when 3 then ''
    end
    return file != nil ? RPG::Cache.picture("Journal/#{file}") : Bitmap.new(1,1)
  end
  
  # Filename of weapon pictures. 
  def self.armor_pic(id)
    file = case id
    when 1 then ''
    when 2 then ''
    when 3 then ''
    end
    return file != nil ? RPG::Cache.picture("Journal/#{file}") : Bitmap.new(1,1)
  end


  # Filenames of item pictures. 
  def self.item_pic(id)
    file = case id
    when 1 then ''
    when 2 then ''
    when 3 then ''
    end
    return file != nil ? RPG::Cache.picture("Journal/#{file}") : Bitmap.new(1,1)
  end


#=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
#                           END CONFIGURATION
#=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=


  def self.add_character(id)
    unless $game_system.journal['People'].include?(id)
      $game_system.journal['People'].push(id)
      $game_system.journal['People'].sort!
    end
  end
  
  def self.add_location(id)
    unless $game_system.journal['Places'].include?(id)
      $game_system.journal['Places'].push(id)
      $game_system.journal['Places'].sort!
    end
  end
  
  def self.add_weapon(id)
    unless $game_system.journal['Weapons'].include?(id) 
      $game_system.journal['Weapons'].push(id)
      $game_system.journal['Weapons'].sort!
    end
  end
  
  def self.add_armor(id)
    unless $game_system.journal['Armors'].include?(id) 
      $game_system.journal['Armors'].push(id)
      $game_system.journal['Armors'].sort!
    end
  end
  
  def self.add_item(id)
    unless $game_system.journal['Items'].include?(id) 
      $game_system.journal['Items'].push(id)
      $game_system.journal['Items'].sort!
    end
  end


  def self.delete_character(id)
    $game_system.journal['People'].delete(id)
    $game_system.journal['People'].sort!
  end
  
  def self.delete_location(id)
    $game_system.journal['Places'].delete(id)
    $game_system.journal['Places'].sort!
  end
  
  def self.delete_weapon(id)
    $game_system.journal['Weapons'].delete(id)
    $game_system.journal['Weapons'].sort!
  end
  
  def self.delete_armor(id)
    $game_system.journal['Armors'].delete(id)
    $game_system.journal['Armors'].sort!
  end
  
  def self.delete_item(id)
    $game_system.journal['Items'].delete(id)
    $game_system.journal['Items'].sort!
  end
end


#===============================================================================
# ** Game_System
#===============================================================================


class Game_System
  
  attr_accessor :journal
  
  alias zer0_journal_init initialize
  def initialize
    zer0_journal_init
    @journal = {}
    Journal::LIST_ORDER.each {|key| @journal[key] = [] }
  end
  
  def journal_entries(type)
    entries = []
    case type
    when 'People'
      @journal[type].each {|id| entries.push(Journal.character_info(id)[0]) }
    when 'Places'
      @journal[type].each {|id| entries.push(Journal.location_info(id)[0]) }
    when 'Weapons'
      @journal[type].each {|id| entries.push(Journal.weapon_info(id)[0]) }
    when 'Armors'
      @journal[type].each {|id| entries.push(Journal.armor_info(id)[0]) }
    when 'Items'
      @journal[type].each {|id| entries.push(Journal.item_info(id)[0]) }
    end
    return entries.empty? ? ['None'] : entries
  end
end


#===============================================================================
# ** Game_Party
#===============================================================================


class Game_Party
  
  alias zer0_auto_add_weapon gain_weapon
  def gain_weapon(weapon_id, n)
    # Unlock weapon ID if recieved. 
    if Journal::AUTO_WEAPONS& ![nil, 0].include?(weapon_id)
      Journal.add_weapon(weapon_id) 
    end
    zer0_auto_add_weapon(weapon_id, n)
  end


  alias zer0_auto_add_armor gain_armor
  def gain_armor(armor_id, n)
    # Unlock armor ID if recieved. 
    if Journal::AUTO_ARMORS && ![nil, 0].include?(armor_id)
      Journal.add_armor(armor_id) 
    end
    zer0_auto_add_armor(armor_id, n)
  end
  
  alias zer0_auto_add_item gain_item
  def gain_item(item_id, n)
    # Unlock item ID if recieved. 
     if Journal::AUTO_ITEMS && ![nil, 0].include?(item_id)
      Journal.add_item(item_id)
    end
    zer0_auto_add_item(item_id, n)
  end
end


#===============================================================================
# ** Bitmap (slice_text method by Blizzard)
#===============================================================================


class Bitmap
  
  def slice_text(text, width)
    words = text.split(' ')
    return words if words.size == 1
    result, current_text = [], words.shift
    words.each_index {|i|
    if self.text_size("#{current_text} #{words}").width > width
      result.push(current_text)
      current_text = words
    else
      current_text = "#{current_text} #{words}"
    end
    result.push(current_text) if i >= words.size - 1}
    return result
  end
end


#===============================================================================
# ** Window_Journal
#===============================================================================


class Window_Journal < Window_Base
  
  attr_accessor :type 
  
  def initialize
    super(Journal::LIST_WIDTH, 0, 640 - Journal::LIST_WIDTH, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
    @type = ''
  end
  
  def id=(id)
    @id = id
    refresh
  end
  
  def refresh
    self.contents.clear
    return if @id == nil
    # Set local variables, branching by what type is being viewed.
    case @type
    when 'People'
      stats = Journal::CHARACTER_STATS
      info = Journal.character_info(@id)
      bio = Journal.character_bio(@id)
      pic = Journal::CHARACTER_PIC ? Journal.character_pic(@id) : nil
    when 'Places'
      stats = Journal::LOCATION_STATS
      info = Journal.location_info(@id)
      bio = Journal.location_bio(@id)
      pic = Journal::LOCATION_PIC ? Journal.location_pic(@id) : nil
    when 'Weapons'
      stats = Journal::WEAPON_STATS
      info = Journal.weapon_info(@id)
      bio = Journal.weapon_bio(@id)
      pic = Journal::WEAPON_PIC ? Journal.weapon_pic(@id) : nil
    when 'Armors'
      stats = Journal::ARMOR_STATS
      info = Journal.armor_info(@id)
      bio = Journal.armor_bio(@id)
      pic = Journal::ARMOR_PIC ? Journal.armor_pic(@id) : nil
    when 'Items'
      stats = Journal::ITEM_STATS
      info = Journal.item_info(@id)
      bio = Journal.item_bio(@id)
      pic = Journal::ITEM_PIC ? Journal.item_pic(@id) : nil
    end
    width = 640 - Journal::LIST_WIDTH - 40
    bio = self.contents.slice_text(bio, width)
    if pic != nil
      rect = Rect.new(0, 0, pic.width, pic.height)
      self.contents.blt(self.width-pic.width-64, 32, pic, rect)
    end
    # Draw the values on the window's bitmap.
    self.contents.font.color = system_color
    y = Journal::SMALL_TEXT ? 20 : 32
    stats.each_index {|i| self.contents.draw_text(0, i*(y*2), 128, y, stats)}
    self.contents.draw_text(0, 320, 128, y, 'Description:')
    self.contents.font.color = normal_color
    info.each_index {|i| self.contents.draw_text(8, y+i*(y*2), 128, y, info)}
    bio.each_index {|i| self.contents.draw_text(8, (320+y)+i*y, width, y, bio)}  
  end
end


#===============================================================================
# ** Scene_Journal
#===============================================================================


class Scene_Journal
#-------------------------------------------------------------------------------
  def main
    # Create lists of the entries for each Journal content type.
    @entry_lists, @index = [], 0
    # Create list of entry titles.
    Journal::LIST_ORDER.each {|key|
      next unless $game_system.journal.has_key?(key)
      window = Window_Command.new(Journal::LIST_WIDTH, $game_system.journal_entries(key))
      window.visible = window.active = false
      window.height = 480
      @entry_lists.push(window)
    }
    # Create main command window.
    @command_window = Window_Command.new(Journal::LIST_WIDTH, Journal::LIST_ORDER)
    @command_window.height = 480
    # Create main window for viewing information and dummy window.
    @dummy_window = Window_Base.new(Journal::LIST_WIDTH, 0, 640 - Journal::LIST_WIDTH, 480)
    @journal_window = Window_Journal.new
    @windows = @entry_lists + [@journal_window, @command_window, @dummy_window]
    # Transition and start main loop for the scene.
    Graphics.transition
    loop {Graphics.update; Input.update; update; break if $scene != self}
    # Dispose all windows and prepare for transition.
    Graphics.freeze
    @windows.each {|window| window.dispose}
  end
#-------------------------------------------------------------------------------
  def update
    # Update all the windows.
    @windows.each {|window| window.update }
    # Branch update method depending on what window is active.
    @command_window.active ? update_command : update_entry_selection
  end
#-------------------------------------------------------------------------------
  def update_command
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::C)
      # Deactivate command window and make selected entry list active.
      @index = @command_window.index
      @command_window.active = @command_window.visible = false
      @entry_lists[@index].active = @entry_lists[@index].visible = true
    end
  end
#-------------------------------------------------------------------------------
  def update_entry_selection
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      # Deactivate entry list and make command window active.
      @command_window.active = @command_window.visible = true
      @entry_lists[@index].active = @entry_lists[@index].visible = false
      @journal_window.visible = false
    elsif Input.trigger?(Input::C)
      @journal_window.visible = true
      $game_system.se_play($data_system.decision_se)
      type = Journal::LIST_ORDER[@index]
      # Set the type and id variables for the journal window and refresh.
      @journal_window.type = type
      @journal_window.id = $game_system.journal[type][@entry_lists[@index].index]
    end
  end
end

 


problem554.png
 
Last edited by a moderator:

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Posts

Latest Profile Posts

How many parameters is 'too many'??
Yay, now back in action Happy Christmas time, coming back!






Back in action to develop the indie game that has been long overdue... Final Fallacy. A game that keeps on giving! The development never ends as the developer thinks to be the smart cookie by coming back and beginning by saying... "Oh bother, this indie game has been long overdue..." How could one resist such? No-one c
So I was playing with filters and this looked interesting...

Versus the normal look...

Kind of gives a very different feel. :LZSexcite:
To whom ever person or persons who re-did the DS/DS+ asset packs for MV (as in, they are all 48x48, and not just x2 the pixel scale) .... THANK-YOU!!!!!!!!! XwwwwX

Forum statistics

Threads
105,849
Messages
1,016,981
Members
137,563
Latest member
cexojow
Top