Journal
Authors: ForeverZer0
Version: 2.4
Type: Misc. Add-On
Key Term: Misc Add-on
IntroductionI 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
- 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.
Screenshots(http://dl.dropbox.com/u/20787370/Scripts/Journal%202.3/Journal1.png)
DemoNone.
ScriptHere.
#+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
# 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[i]}").width > width
result.push(current_text)
current_text = words[i]
else
current_text = "#{current_text} #{words[i]}"
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[i])}
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[i])}
bio.each_index {|i| self.contents.draw_text(8, (320+y)+i*y, width, y, bio[i])}
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
InstructionsSee script.
CompatibilityNo known issues.
Credits and Thanks
- ForeverZer0, for the script.
Author's NotesEnjoy!
It seems cool! I'll try it later! Good work! (lv.++)
This script is great, it's exactly what I needed for one of my games!
Excellent work on the script! ^_^
This is awesome! Lvl up. :-*
Edit: Is it possible to modify some values to make it to where you can have two journals? Since I have basic RGSS know how i attempted it my self,...., but failed and ended up with this error when i tryed to start my game.
something like this.
QuoteError on line 175 in script "Scene_Journal" (thats what i named it in the editor) Stack level too deep.
what i did was dupe the script rename it to Scene_Journal2 in the page list. then I changed those things that add info right after the config ends by adding a 2 to the end of the thingys. then i scrolled down to where it said class Scene_Journal and changed it to this Scene_Journal2 any help?
It all worked fine before i duped the script. when i deleted the dupe, it was all fine.
Quote from: SquareMan on July 17, 2010, 11:32:11 pm
This is awesome! Lvl up. :-*
Edit: Is it possible to modify some values to make it to where you can have two journals? Since I have basic RGSS know how i attempted it my self,...., but failed and ended up with this error when i tryed to start my game.
something like this.
QuoteError on line 175 in script "Scene_Journal" (thats what i named it in the editor) Stack level too deep.
what i did was dupe the script rename it to Scene_Journal2 in the page list. then I changed those things that add info right after the config ends by adding a 2 to the end of the thingys. then i scrolled down to where it said class Scene_Journal and changed it to this Scene_Journal2 any help?
It all worked fine before i duped the script. when i deleted the dupe, it was all fine.
Copying the script wont do you much good. I'm not positive exactly what your trying to do, but try just renaming the scripts and config differently and calling them as such. For example instead of the Journal module, have a Journal_1 and Journal_2 module, and the same with the scenes. Just make sure that each scene calls from the appropriate Journal, etc, etc. You may also need to make some edits to have different variables that keep track of what is unlocked for each Journal. Hope that was helpful!
ok i might try it again when i learn more of rgss and not just basics.
Is there any way to make it so that the journal shows the actors names as dictated by the database? I ask this because I make it so the player can name the main character what they want and I want the journal to change accordingly.
Quote from: XaineC on August 21, 2010, 05:02:08 am
Is there any way to make it so that the journal shows the actors names as dictated by the database? I ask this because I make it so the player can name the main character what they want and I want the journal to change accordingly.
Don't got my game in front of me right now, but I think if you use...
$data_actors[ACTOR_ID].name
...it will show the name of the actor with that ID.
Thanks, that worked. One more question. What if I want to change the picture I use for a certain actor during the game. Is there any way to do that???
Quote from: XaineC on August 24, 2010, 06:15:11 pm
Thanks, that worked. One more question. What if I want to change the picture I use for a certain actor during the game. Is there any way to do that???
Simplest way I can think of off-hand without changing the method would be to set a switch to it.
Here's an example, using Switch #10. In the part where you configure the bitmap of char with ID...
when 1 then $game_switches[10] ? 'BITMAP SWITCH ON' : 'BITMAP SWITCH OFF'
Try that. Let me know if it works.
Thanks Zero. It worked great. Epic you are.
Would it be possible to put in an option for items? Not like an inventory list, just important artifacts.
Yeah that wouldn't be hard. I'll make you a mod sometime here when I get a chance. If I forget, just PM me or bump for update.
Just checking to see if you're still working on it.
Always a great addition to any game when used right.
* UPDATES *
Version is now 2.0
- Totally overworked code for better performance and overview
- Added options to log weapons, armors, and items
- Add ability to choose what options (ie. Places, People, Items, etc.) to use in your journal
- Basic configurables for the window look/layout.
- Feature to Auto-Unlock weapons, armors, and items as the player aquires them if desired.
- Names will be defined by the database now in a list.
Thank you everyone for the suggestions. I think I added them all... :P
Awesome job. Thanks a lot. :D
I wonder if you can added to the script a section for write what is hapenning in the game
Ex: after an encounter with a strange man, this appears in the section.
(Title) "The strange Man"
(What happened)"We found a strange man who told us we were at the castle, I wonder who will be
but we dont have time to follow and ask"
Then after a while it reappears the same strange man, after talking with him, and at the same section title("The strange Man") appears:
(Title) "The strange Man",
(What happened)"We found a strange man who told us we were at the castle, I wonder who will be
but we dont have time to follow and ask.
The same strange man came back to help us, I dont understand, ¿why he help us?"
Something like that, and space for many titles
That would not be a very hard script to write, but it would probably be easier to adapt this (http://forum.chaos-project.com/index.php?topic=7404.0).
I have that script, if you can adapted to any of the two scripts would works for me, :up:
Hi ForeverZer0.
This is a great script! Exactly what I've been looking for. Easy to configure and looks great!
However, something odd is happening . . . when a weapon, armor, shield, etc. is unequipped, it vanishes, and nothing else shows up that is available for the player to equip--even the sword/shield/etc. you just unequipped.
For instance, I started a new game just by copying and pasting the journal script into the editor. No other scripts involved in this test. I started the game, unequipped Aluxes's bronze sword and it vanished. It can no longer be seen on the equip screen. You can't see it even on the "item" menu.
I'm a novice, and managed to find a way to add a your journal to the default menu before I realized what was happening. That's when I tested it on a generic game start and still saw the same "vanishing de-equipped item" effect.
Am I doing something wrong?
I'm looking into right now. I just tested it real quick and had the same problem. :shy:
EDIT:
* Updates to 2.1 *Fixed the bug, I used the wrong method name when aliasing "gain_weapon" in Game_Party.
That was the only change made, so if you don't feel like repasting the script, you can easily just make the edit yourself. You simply need to change one word. Find the "Game_Party" section in the script and look at the first method, which looks like this:
alias zer0_auto_add_weapon gain_item
def gain_weapon(weapon_id, n)
# Unlock weapon ID if recieved.
Journal.add_weapon(weapon_id) if Journal::AUTO_WEAPONS
zer0_auto_add_weapon(weapon_id, n)
end
You simply need to change the "gain_item" in the first line to "gain_weapon".
alias zer0_auto_add_weapon gain_weapon
That should do it. ;)
Thanks for the fix - that did it for the weapons, but not for the other equipment slots. Sorry to be a pain!
* Updates to 2.2 *Your not being a pain. I appreciate you letting me know.
I'm the idiot who didn't look a few lines below the last bug.
The script is updated, but once again, if you want to change it yourself, do this.
Find the Game_Party class within the script, and find the aliased method "gain_armor" within it.
Change the line that reads:
zer0_auto_add_weapon(weapon_id, n)
and change it to...
zer0_auto_add_armor(weapon_id, n)
Sorry for all the little bugs.
@cates:
Thanks a bunch for pointing it out! ;)
OK! That error seems to be fixed.
Here's another issue, when I have the auto updates set to "true" in the config of the script, I'm getting a method error on the line that relates to whatever equipment I'm trying to change. (such as 332 for weapons).
This was happening with the default items equipped on Aluxes and the gang, so I thought maybe that's because I hadn't defined anything in the lower journal entries. So, I deleted everyone but aluxes and gave him only a single sword. I had an event call that journal addition and it was so far, so good. Then I added another event to give him a second sword to test the auto-update, the method error came up again.
When I set the auto updates to false, and called the scripts for each of those two individual swords, everything worked smoothly. Let me know if you'd like me to upload my little testing demo for you to check out.
Thanks for your quick responses! This is such a useful and versatile script!
I found the problem. It occurs when an ID of 0 gets passed as the weapon ID. I'm fixing it now.
EDIT::
* update to 2.3 *
...and yet another bug fixed. I didn't think that if the player unequips a weapon, it passes an ID of 0 to the array, which throws an error when the game attempts to see what weapon/armor that is. I couldn't get the error to repeat at first because I kept switching back and forth between two weapons, and not just straight unequipping to nothing.
Either way, another big thanks and a level up to Cates for pointing it out. :D
Awesome, man. It now works perfectly. Thanks!
GIves me an error:
????????? "Journal" 396???? No Method Error????
private method "split" called for Nil:Class
:'(
You're not configuring it properly. From the sounds of it, something in one of the ?????_bio(id) methods is not set up right. Basically this method needs a string passed to it, which is not being done if you're getting that error. Since the string is retrieved from the config, this is your likely problem.
I understand it!!! That is because i change the words... (My game its spanish) and i change the word "People" by "Gente" and also the others... I delete my script with spanish words and i put the original and works good....
Thank you very much...
Exist a limit of elements in the list? Or can shows all the items... Because just shows some items and not all that i get.... O_O ?
Hey Foreverzer0, it would be really nice to add this to the game menu, is it even possible?
Yes, you can link it to a menu option the same as any any other scene. The only edit that will need to be made is it to change the scene it returns to after exit. At the bottom of the script find the line that reads:
and change the scene to Scene_Map or whatever scene you would like for it to go to after it ends.
I`ve got a question, can it be done, that you can remove an entry?
You can, though there is no method to do it easily by default. I wrote this code real quick, its untested, but should do the job. Just add it to your scripts any old where.
module Journal
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
Use the methods the same as you would with Journal.add_PARAMETER(id), except use the word "delete", like this:
Journal.delete_weapon(ID)
Let me know how that works out for you. ;)
I made add it to the script when I'm not feeling so lazy.
Quote from: ForeverZer0 on April 07, 2011, 07:16:09 pm
def self.delete_character(id)
$game_system.journal['People'].delete(id)
$game_system.journal['People'].push(id)
end
use this lol just fixed that
module Journal
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
:P
Thanks, nathmatt.
I just edited the "add" methods real fast, apparently I did that one wrong. Fixed now.
Jeah, it works, thank you!
But if I call the Journey, there comes a warning message, like them from windows:
(http://s1.directupload.net/images/110408/temp/gxym3a55.png) (http://s1.directupload.net/file/d/2488/gxym3a55_png.htm)
Before, there is an other just with armors.
I have the same "window" problem O:O
Okay, I fixed that.
I had accidentally left a few lines in it that were there for debugging it.
Now the game crashes, when I call "$scene = Scene_Journal.new"
(http://s7.directupload.net/images/110412/temp/sy5c6rwu.png) (http://s7.directupload.net/file/d/2492/sy5c6rwu_png.htm)
That probably means something is not being configured correctly, but I will look into it. The lines I removed captured an exception if there was an error referencing the configuration. They would prevent a crash and print the ID that was passed.
i have the same mistake.... and the only thing that i change was the info of the items.....maybe its the script.... O_o
Having a problem.
My game has quite a few actors in it. (12 to be exact.) And, I keep getting syntax error when I playtest the game. The problem is with the following line:
when 9 then ['Name', 'Race', 'Age', 'Height', 'Weight']
It's bizarre. If I delete this line, it works. I can't wrap my head around what the problem is.
EDIT: Turns out It was caused by another script. No worries, I fixed it.
I have a suggestion for an addition: have the journal recognize an actor's name after it has been changed by the player.
For instance, let's say actor 1 is named Serge, and I set up a journal entry for Serge when the game begins. Now, however, if I give the player the option to change Serge's name, and they rename him Bubba, the journal (of course) still says "Serge."
Don't know how possible it is, but It would be really cool if there was a way within the journal to recognize a name input change and change the journal entry.
In the config, set the value for the actor's name to:
$game_actors[DATABASE_ID].name
This will display the name dynamically in the scene to what it is currently.
Great! Thanks.
Thank you so much for the wonderful script! It's just what I needed.
I have some questions, if it's alright?
1) How can I delete entries in the journal?
2) How can I replace the default main menu with this journal?
* Updates script to 2.4 *I added script calls for deleting entries.
Basically just added the little scriptlet from this (http://forum.chaos-project.com/index.php/topic,6783.msg140938.html#msg140938) post to the main script.
@geebrit:
I hope the update answers your first question.
As for the second question...
class Scene_Menu
def call_menu
$game_temp.menu_calling = false
if $game_temp.menu_beep
$game_system.se_play($data_system.decision_se)
$game_temp.menu_beep = false
end
$game_player.straighten
$scene = Scene_Journal.new
end
end
Just paste that below the default scripts.
Quote from: ForeverZer0 on August 09, 2011, 10:57:38 pm
* Updates script to 2.4 *
I added script calls for deleting entries.
Basically just added the little scriptlet from this (http://forum.chaos-project.com/index.php/topic,6783.msg140938.html#msg140938) post to the main script.
@geebrit:
I hope the update answers your first question.
As for the second question...
class Scene_Menu
def call_menu
$game_temp.menu_calling = false
if $game_temp.menu_beep
$game_system.se_play($data_system.decision_se)
$game_temp.menu_beep = false
end
$game_player.straighten
$scene = Scene_Journal.new
end
end
Just paste that below the default scripts.
Works like a charm!
At first the menu replacement didn't work, but I realized you probably meant "Scene_Map" and not "Scene_Menu." It's looking great now. Thanks for all of the help! :haha:
Ooops, yeah, that should be Scene_Map. :P
I fiddled with this a bit, but the extent of my scripting knowledge wasn't enough to accomplish my goal.
How would I embed new categories in each section?
So lets say I select 'People', it would give me another list categories like 'Heroes', 'Villains', 'Gods', and each one of those would have the usual selections with info... For example.
:)
This script is rather simple and is not really set up for that. There is no simple and quick explanation on how to do it, you kinda just need to know scripting well enough. Basically, create a sub-window with configurable commands, and update methods for each that will take you to the appropriate entry when selected.
Thaat's what I figured. I guess i'll just mess around with it some more until something works. Hah, thanks.
Love the script by the way!
How can I call this script from menu bar.
Quote$scene = Scene_Journal.new
One more question: How can I add the
point adding system after level up in the menu bar as well.
Actually, I'm a :n00b: and don't know about scripting, for the Point adding system that I found in this forum, I have to create an event and call the script from that event. It is unconfortable.
Hey, sorry for bumping up an old topic. I'm loving this script, I was just wondering how you could make an item show up in blue or something when it's a new addition.
I fiddled around a bit, I figure you want a true / false trigger so when you do the "add" entry it flags as new, then when you read it, the read sets the trigger to false / read. Might help if a script trigger can flag it as new as well, in case the entry gets updated (which I figured out pretty readily, but that unfortunately is the limit of my own script customising abilities)