RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
[REQUEST] Beastiary Script

0 Members and 1 Guest are viewing this topic.

**
Rep: +0/-0Level 86
In my game, Gotterdammerung: Twilight of the Gods, I have a beastiary book. I am asking for a script that can show basic stats, areas they are found in, and large areas to show information about the monster. I also want the name on top, just above a monster battler. I would also like the option to be able to take the item to a Loremaster (some old wizard dude) and be able to fight monsters. I want the monsters to only appear in the book, after they have been defeated. I only want the option to fight to appear when you are next to a loremaster. I understand this sounds like a pokedex script, but it will be different due to the monsters. I also understand this can be done with many hours of hard work with events, and I have done it before that way. I just want to use scripting to make it better, more professional, and attractive. Any questions, please post.

***
Rep:
Level 87
????
Code: [Select]
#==============================================================================
# ? Bestiary
#------------------------------------------------------------------------------
# Credit(i forgot i think its momo)
#
#==============================================================================

module Enemy_Book_Config
 DROP_ITEM_NEED_ANALYZE = false
 EVA_NAME = "Evasion"             
 SHOW_COMPLETE_TYPE = 3         
                         
end

class Game_Temp
 attr_accessor :enemy_book_data
 alias temp_enemy_book_data_initialize initialize
 def initialize
   temp_enemy_book_data_initialize
   @enemy_book_data = Data_MonsterBook.new
 end
end

class Game_Party
 attr_accessor :enemy_info           
 #--------------------------------------------------------------------------
 alias book_info_initialize initialize
 def initialize
   book_info_initialize
   @enemy_info = {}
 end
 #--------------------------------------------------------------------------
 def add_enemy_info(enemy_id, type = 0)
   case type
   when 0
     if @enemy_info[enemy_id] == 2
       return false
     end
     @enemy_info[enemy_id] = 1
   when 1
     @enemy_info[enemy_id] = 2
   when -1
     @enemy_info[enemy_id] = 0
   end
 end
 #--------------------------------------------------------------------------
 def enemy_book_max
   return $game_temp.enemy_book_data.id_data.size - 1
 end
 #--------------------------------------------------------------------------
 def enemy_book_now
   now_enemy_info = @enemy_info.keys
   no_add = $game_temp.enemy_book_data.no_add_element
   new_enemy_info = []
   for i in now_enemy_info
     enemy = $data_enemies[i]
     next if enemy.name == ""
     if enemy.element_ranks[no_add] == 1
       next
     end
     new_enemy_info.push(enemy.id)
   end
   return new_enemy_info.size
 end
 #--------------------------------------------------------------------------
 def enemy_book_complete_percentage
   e_max = enemy_book_max.to_f
   e_now = enemy_book_now.to_f
   comp = e_now / e_max * 100
   return comp.truncate
 end
end

class Interpreter
 def enemy_book_max
   return $game_party.enemy_book_max
 end
 def enemy_book_now
   return $game_party.enemy_book_now
 end
 def enemy_book_comp
   return $game_party.enemy_book_complete_percentage
 end
end

class Scene_Battle
 alias add_enemy_info_start_phase5 start_phase5
 def start_phase5
   for enemy in $game_troop.enemies
     unless enemy.hidden
       $game_party.add_enemy_info(enemy.id, 0)
     end
   end
   add_enemy_info_start_phase5
 end
end

class Window_Base < Window
 #--------------------------------------------------------------------------
 def draw_enemy_drop_item(enemy, x, y)
   self.contents.font.color = normal_color
   treasures = []
   if enemy.item_id > 0
     treasures.push($data_items[enemy.item_id])
   end
   if enemy.weapon_id > 0
     treasures.push($data_weapons[enemy.weapon_id])
   end
   if enemy.armor_id > 0
     treasures.push($data_armors[enemy.armor_id])
   end
   if treasures.size > 0
     item = treasures[0]
     bitmap = RPG::Cache.icon(item.icon_name)
     opacity = 255
     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
     name = treasures[0].name
   else
     self.contents.font.color = disabled_color
     name = "No Item"
   end
   self.contents.draw_text(x+28, y, 212, 32, name)
 end
 #--------------------------------------------------------------------------
 def draw_enemy_book_id(enemy, x, y)
   self.contents.font.color = normal_color
   id = $game_temp.enemy_book_data.id_data.index(enemy.id)
   self.contents.draw_text(x, y, 32, 32, id.to_s)
 end
 #--------------------------------------------------------------------------
 def draw_enemy_name(enemy, x, y)
   self.contents.font.color = normal_color
   self.contents.draw_text(x, y, 152, 32, enemy.name)
 end
 #--------------------------------------------------------------------------
 def draw_enemy_graphic(enemy, x, y, opacity = 255)
   bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue)
   cw = bitmap.width
   ch = bitmap.height
   src_rect = Rect.new(0, 0, 64, 64)
   self.contents.blt(x + 10, y - 270, bitmap, src_rect, opacity)
 end
 #--------------------------------------------------------------------------
 def draw_enemy_exp(enemy, x, y)
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 120, 32, "EXP")
   self.contents.font.color = normal_color
   self.contents.draw_text(x + 120, y, 36, 32, enemy.exp.to_s, 2)
 end
 #--------------------------------------------------------------------------
 def draw_enemy_gold(enemy, x, y)
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 120, 32, $data_system.words.gold)
   self.contents.font.color = normal_color
   self.contents.draw_text(x + 120, y, 36, 32, enemy.gold.to_s, 2)
 end
end

class Game_Enemy_Book < Game_Enemy
 #--------------------------------------------------------------------------
 def initialize(enemy_id)
   super(2, 1)
   @enemy_id = enemy_id
   enemy = $data_enemies[@enemy_id]
   @battler_name = enemy.battler_name
   @battler_hue = enemy.battler_hue
   @hp = maxhp
   @sp = maxsp
 end
end

class Data_MonsterBook
 attr_reader :id_data
 #--------------------------------------------------------------------------
 def initialize
   @id_data = enemy_book_id_set
 end
 #--------------------------------------------------------------------------
 def no_add_element
   no_add = 0
   for i in 1...$data_system.elements.size
     if $data_system.elements[i] =~ /??????/
       no_add = i
       break
     end
   end
   return no_add
 end
 #--------------------------------------------------------------------------
 def enemy_book_id_set
   data = [0]
   no_add = no_add_element
   for i in 1...$data_enemies.size
     enemy = $data_enemies[i]
     next if enemy.name == ""
     if enemy.element_ranks[no_add] == 1
       next
     end
     data.push(enemy.id)
   end
   return data
 end
end


class Window_MonsterBook < Window_Selectable
 attr_reader   :data
 #--------------------------------------------------------------------------
 def initialize(index=0)
   super(0, 64, 640, 416)
   @column_max = 2
   @book_data = $game_temp.enemy_book_data
   @data = @book_data.id_data.dup
   @data.shift
   #@data.sort!
   @item_max = @data.size
   self.index = 0
   refresh if @item_max > 0
 end
 #--------------------------------------------------------------------------
 def data_set
   data = $game_party.enemy_info.keys
   data.sort!
   newdata = []
   for i in data
     next if $game_party.enemy_info[i] == 0
     if book_id(i) != nil
       newdata.push(i)
     end
   end
   return newdata
 end
 #--------------------------------------------------------------------------
 def show?(id)
   if $game_party.enemy_info[id] == 0 or $game_party.enemy_info[id] == nil
     return false
   else
     return true
   end
 end
 #--------------------------------------------------------------------------
 def book_id(id)
   return @book_data.index(id)
 end
 #--------------------------------------------------------------------------
 def item
   return @data[self.index]
 end
 #--------------------------------------------------------------------------
 def refresh
   if self.contents != nil
     self.contents.dispose
     self.contents = nil
   end
   self.contents = Bitmap.new(width - 32, row_max * 32)
   if @item_max > 0
     for i in 0...@item_max
      draw_item(i)
     end
   end
 end
 #--------------------------------------------------------------------------
 def draw_item(index)
   enemy = $data_enemies[@data[index]]
   return if enemy == nil
   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))
   self.contents.font.color = normal_color
   draw_enemy_book_id(enemy, x, y)
   if show?(enemy.id)
     self.contents.draw_text(x + 28+16, y, 212, 32, enemy.name, 0)
   else
     self.contents.draw_text(x + 28+16, y, 212, 32, "?????", 0)
     return
   end
   if analyze?(@data[index])
     self.contents.font.color = text_color(3)
     self.contents.draw_text(x + 256, y, 24, 32, "?", 2)
   end
 end
 #--------------------------------------------------------------------------
 def analyze?(enemy_id)
   if $game_party.enemy_info[enemy_id] == 2
     return true
   else
     return false
   end
 end
end


class Window_MonsterBook_Info < Window_Base
 include Enemy_Book_Config
 #--------------------------------------------------------------------------
 def initialize
   super(0, 0+64, 640, 480-64)
   self.contents = Bitmap.new(width - 32, height - 32)
 end
 #--------------------------------------------------------------------------
 def refresh(enemy_id)
   self.contents.clear
   self.contents.font.size = 22
   enemy = Game_Enemy_Book.new(enemy_id)
   draw_enemy_graphic(enemy, 96, 240+48+64, 200)
   draw_enemy_book_id(enemy, 4, 0)
   draw_enemy_name(enemy, 48, 0)
   draw_actor_hp(enemy, 288, 0)
   draw_actor_sp(enemy, 288+160, 0)
   draw_actor_parameter(enemy, 288    ,  32, 0)
   self.contents.font.color = system_color
   self.contents.draw_text(288+160, 32, 120, 32, EVA_NAME)
   self.contents.font.color = normal_color
   self.contents.draw_text(288+160 + 120, 32, 36, 32, enemy.eva.to_s, 2)
   draw_actor_parameter(enemy, 288    ,  64, 3)
   draw_actor_parameter(enemy, 288+160,  64, 4)
   draw_actor_parameter(enemy, 288    ,  96, 5)
   draw_actor_parameter(enemy, 288+160,  96, 6)
   draw_actor_parameter(enemy, 288    , 128, 1)
   draw_actor_parameter(enemy, 288+160, 128, 2)
   draw_enemy_exp(enemy, 288, 160)
   draw_enemy_gold(enemy, 288+160, 160)
   if analyze?(enemy.id) or !DROP_ITEM_NEED_ANALYZE
     self.contents.draw_text(288, 192, 96, 32, "Drop Item")
     draw_enemy_drop_item(enemy, 288+96+4, 192)
     self.contents.font.color = normal_color
     #draw_element_guard(enemy, 320-32, 160-16+96)
   end
 end
 #--------------------------------------------------------------------------
 def analyze?(enemy_id)
   if $game_party.enemy_info[enemy_id] == 2
     return true
   else
     return false
   end
 end
end


class Scene_MonsterBook
 include Enemy_Book_Config
 #--------------------------------------------------------------------------
 def main
   $game_temp.enemy_book_data = Data_MonsterBook.new
   @title_window = Window_Base.new(0, 0, 640, 64)
   @title_window.contents = Bitmap.new(640 - 32, 64 - 32)
   @title_window.contents.draw_text(4, 0, 320, 32, "Bestiary", 0)
   if SHOW_COMPLETE_TYPE != 0
     case SHOW_COMPLETE_TYPE
     when 1
       e_now = $game_party.enemy_book_now
       e_max = $game_party.enemy_book_max
       text = e_now.to_s + "/" + e_max.to_s
     when 2
       comp = $game_party.enemy_book_complete_percentage
       text = comp.to_s + "%"
     when 3
       e_now = $game_party.enemy_book_now
       e_max = $game_party.enemy_book_max
       comp = $game_party.enemy_book_complete_percentage
       text = e_now.to_s + "/" + e_max.to_s + "    " + comp.to_s + "%"
     end
     if text != nil
       @title_window.contents.draw_text(320, 0, 288, 32,  text, 2)
     end
   end
   @main_window = Window_MonsterBook.new
   @main_window.active = true
   @info_window = Window_MonsterBook_Info.new
   @info_window.z = 110
   @info_window.visible = false
   @info_window.active = false
   @visible_index = 0
   Graphics.transition
   loop do
     Graphics.update
     Input.update
     update
     if $scene != self
       break
     end
   end
   Graphics.freeze
   @main_window.dispose
   @info_window.dispose
   @title_window.dispose
 end
 #--------------------------------------------------------------------------
 def update
   @main_window.update
   @info_window.update
   if @info_window.active
     update_info
     return
   end
   if @main_window.active
     update_main
     return
   end
 end
 #--------------------------------------------------------------------------
 def update_main
   if Input.trigger?(Input::B)
     $game_system.se_play($data_system.cancel_se)
     $scene = Scene_Menu.new
     return
   end
   if Input.trigger?(Input::C)
     if @main_window.item == nil or @main_window.show?(@main_window.item) == false
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     $game_system.se_play($data_system.decision_se)
     @main_window.active = false
     @info_window.active = true
     @info_window.visible = true
     @visible_index = @main_window.index
     @info_window.refresh(@main_window.item)
     return
   end
 end
 #--------------------------------------------------------------------------
 def update_info
   if Input.trigger?(Input::B)
     $game_system.se_play($data_system.cancel_se)
     @main_window.active = true
     @info_window.active = false
     @info_window.visible = false
     return
   end
   if Input.trigger?(Input::C)
     #$game_system.se_play($data_system.decision_se)
     return
   end
   if Input.trigger?(Input::L)
     $game_system.se_play($data_system.decision_se)
     loop_end = false
     while loop_end == false
       if @visible_index != 0
         @visible_index -= 1
       else
         @visible_index = @main_window.data.size - 1
       end
       loop_end = true if @main_window.show?(@main_window.data[@visible_index])
     end
     id = @main_window.data[@visible_index]
     @info_window.refresh(id)
     return
   end
   if Input.trigger?(Input::R)
     $game_system.se_play($data_system.decision_se)
     loop_end = false
     while loop_end == false
       if @visible_index != @main_window.data.size - 1
         @visible_index += 1
       else
         @visible_index = 0
       end
       loop_end = true if @main_window.show?(@main_window.data[@visible_index])
     end
     id = @main_window.data[@visible_index]
     @info_window.refresh(id)
     return
   end
 end
end

If you want it to be a option in main menu just ask me

**
Rep: +0/-0Level 86
how would I go about adding specific monsters? how do I add stats, pictures, and info or the ability to battle monsters when near a "loremaster"? I would like to add an option into the menu, but I am using Rune's CMS which only has space for the 6 options. Can I add it to an object? I want the book to be able to call this script, and then be able to battle the monsters when near a loremaster. How would I go about doing this?

thank you for this script. If you cant help me get it perfect, then i will suffice and find a way to get it to work someother way. Thanks in advance for any help. I appreciate your help.

***
Rep:
Level 87
????
You dont need to it just comes up when you battle it you dont need to add anything
really simple just make a monster and then when you battle it the script reconizes it
Sorry for the bad spelling i did this quick

**
Rep: +0/-0Level 86
ok, I added that script just above main. i called it Scene_Beastiary. I did a battle and nothing appeared to change. How do I access the beastiary script? How should I call it? when I try a "$scene = SceneBeastiary.new" call, it gives a Name Error: Uninitialized Constant Interpreter :: Scene_Beastiary. I tried calling it as a window, but that didnt work either, as it gave the same error.

***
Rep:
Level 87
????
Strange it works fine for me let me check for a sec

try this it should work
$scene = Scene_MonsterBook.new

*******
Rep:
Level 90
Returned from the dead.
I am using Rune's CMS which only has space for the 6 options.

Which one?
Sincerely,
Your conscience.

**
Rep: +0/-0Level 86
@Rune:

This one:



@BECKY1111:
It works, but monsters dont show up after battling them. I checked it before and after, and nothing changed (that I could see) what should I do now?

**
Rep: +0/-0Level 86
Sorry for the double post. I have Blizz's Beastiary script and analyze script, and it works. I only want to add in the ability to battle monsters you have already battled before. This is to simulate a practice arena in my game. you are faced against foes you already have defeated to gain more EXP and to train for the much more difficult Arena battles.

@Rune, I would love to see the ability to add this to your CMS (pic is above) under items, unless you could make a modification to your CMS to add the extra option. I need it to call '$scene = Scene_Bestiary.new' to bring up the beastiary.

@BECKY1111:thanks for your help. even though I didnt use yours, (i would have if I could have gotten to see what it looks like.) I still appreciate you taking time out to help me.

pokeball WcWOfflineMale
***
Rep:
Level 87
2 + 2 is a math problem, NOT 4.
Yeah, Blizzard's scripts are pretty good and simple, but unfortunately, he doesn't let anyone who's mainly active on here of .org use them.  And I don't give away mine either, not since I got banned.
If you are reading this, the government of the U.S.A. is currently planting a chip in your brain.
People like decreasing my Rep. In fact, people like decreasing most others people's rep.

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Best Member2012 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Veteran2011 Favourite Staff Member2011 Most Mature Member2011 Best RPG Maker User (Scripting)2011 Best Use of Avatar and Signature Space2010 Most Mature Member2010 Favourite Staff Member
I don't think that that's true. I've only seen one that he doesn't allow .org people to use, and I haven't seen one that rmrk people are not allowed to use. And also, you were banned because you told the admin that you were 12 years old on 13+ forum. If it is true that he doesn't allow rmrk people to use his scripts, can you link me to the topic where he says that so I can complain  ;8

And welcome back WcW! You were theguywithproblems right?

pokeball WcWOfflineMale
***
Rep:
Level 87
2 + 2 is a math problem, NOT 4.
Well, he hasn't openly stated it, but seeing as how he deleted all of them off here, I'd say he doesn't want many people here using them.  And I was banned after saying that and then saying it was a joke, and then why was Nightwolf never banned?  And yes, WcW and TGWP are one and the same.  He didn't have much choice letting me back, though, since my birthdays next Friday and I'd be turning 13 anyway.
If you are reading this, the government of the U.S.A. is currently planting a chip in your brain.
People like decreasing my Rep. In fact, people like decreasing most others people's rep.

***
Rep:
Level 86
I hate everyone except the ones I don't hate...
I know this is necro-posting, but the bestiary screen won't appear for me. Nothing happens. Plz help.
I wonder how many of my-reps are there for a reason, and not just because some jackass wanted to show off in front of some other jackasses...?
Probably a lot of them - and those people sure as hell don't deserve my pity, let alone my disgust.
That's right, let's see some more -Rep'ing! BOOYEAH!!

********
Hungry
Rep:
Level 96
Mawbeast
2013 Best ArtistParticipant - GIAW 11Secret Santa 2013 ParticipantFor the great victory in the Breakfast War.2012 Best Game Creator (Non-RM Programs)~Bronze - GIAW 9Project of the Month winner for December 2009Project of the Month winner for August 20082011 Best Game Creator (Non RM)Gold - GIAW Halloween
people can use blizzard's scripts, he never said otherwise
he just didn't want them posted here, he wants the traffic to go to his site
now, on that note

Demonic Blade, just use Blizzard's, it does the same thing and I know it works
I've tried it out
and on that note: Bestiary 2.2

also, you should be more specific with your problems
when it's not working
what you were trying to do when it didn't work
your configuration, etc...

FCF3a A+ C- D H- M P+ R T W- Z- Sf RLCT a cmn+++ d++ e++ f h+++ iw+++ j+ p sf+
Follow my project: MBlok | Find me on: Bandcamp | Twitter | Patreon

***
Rep:
Level 86
I hate everyone except the ones I don't hate...
Forget it, I think it was just because I made a Common Event (So that I could press "A" for example, and then it'd appear. But it works with a normal event... I guess I should've tried that first... hehe... ::)
« Last Edit: January 02, 2008, 10:03:17 AM by Demonic Blade »
I wonder how many of my-reps are there for a reason, and not just because some jackass wanted to show off in front of some other jackasses...?
Probably a lot of them - and those people sure as hell don't deserve my pity, let alone my disgust.
That's right, let's see some more -Rep'ing! BOOYEAH!!