[VXA] Monster Catalogue

0 Members and 2 Guests are viewing this topic.

*
Rep:
Level 97
2014 Best RPG Maker User - Engine2014 Most Unsung Member2013 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best RPG Maker User (Scripting)2011 Best Veteran2011 Favourite Staff Member2011 Most Mature Member2011 Best Use of Avatar and Signature Space2010 Favourite Staff Member2010 Most Mature Member
Monster Catalogue
Version: 1.1
Author: modern algebra
Date: March 24, 2012

Version History


  • <Version 1.1> 2012.03.24 - Fixed an error where only the last form of an enemy that transformed would be counted as encountered.
  • <Version 1.0c> 2012.02.19 - Fixed a bug where hidden enemies would be considered encountered even if they never appeared in battle
  • <Version 1.0b> 2012.02.07 - Fixed major bug where hidden enemies would become visible at the start of battle
  • <Version 1.0a> 2012.02.06 - Fixed a bug when using species icons for the monsters and inheriting the icon of the species
  • <Version 1.0> 2012.02.04 - Original Release

Description


This script creates a scene that you can call which shows data on any and all monsters you have collected. You can change the exact point at which data will show up. By default, the script will show only ?????? for any monsters not yet fought, but once they are first encountered by the player then the monster's name, battler, and stats will show up. There are options to change that though. For instance, you could make it so that only the monster's name and battler will show up when the monster is encountered, and to show the stats you will need to use a special analyze item, which you can set up in the database by simply putting \analyze in an item or skill's notebox.

Additionally, you can give the enemies species and use different categories to separate them.

Features

  • A very simple scene to provide data on monsters encountered by the party
  • Allows you to set triggers for revealing data, namely on either encounter or analyze. Thus, if you want to show only the battler and name when encountered and want to only show the stats if an analyze item is used, that is possible.
  • The analyze item also shows the monster's stats in battle
  • Categories allow you to split up and group creatures based on whatever attributes you choose
  • Multiple modes of access - you have the option of accessing the script through the main menu, by pressing a button on the map, or by a script call in an event
  • Lots of configurable options
  • Custom resolution support

Screenshots



You can select which stats to show and you can also categorize enemies.

Spoiler for More Screenshots:

A basic setup to show a bat.


This samples the silhouette feature and the fact that you can remove the description window if you don't want it.


Analyzing a monster during battle.

Instructions

Paste this script into its own slot in the Script Editor, below Materials but above Main.

Please read the header of the script and the comments in the Editable Region for further instructions.

Script


The script is too long to post here. Get it from Pastebin.

Addons

DrDhoom has created some neat add-ons to this script which you can find here: http://drd-workshop.blogspot.com/2015/01/modern-algebra-monster-catalogue-add-on.html

All credit for the add-ons should go to DrDhoom.

Credit


  • modern algebra

Thanks

  • AlexArmstrong, for two bug reports
  • protractor, for a bug report
  • Wiimeiser, for an incompatibility report

Support


Please post in this topic at RMRK.net if you need any assistance.

Known Compatibility Issues

Spoiler for Yanfly's Doppelganger[/spoiler:
The scripts are incompatible because Yanfly's script overwrites the class method of Game_Enemy. To fix it, paste the following script into its own slot in the Script Editor, still above Main but below Monster Catalogue.

Code: [Select]
#==============================================================================
#    MA Monster Catalogue + Yanfly's Doppelganger
#      Compatibility Patch
#    Version: 1.0.0
#    Author: modern algebra (rmrk.net)
#    Date: July 25, 2012
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Descriptions:
#
#    This fixes an incompatibility between Yanfly's Doppelganger script and
#   my Monster Catalogue.
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Instructions:
#
#    Paste this script into its own slot in the Script Editor, above Main but
#   below the Monster Catalogue script.
#==============================================================================

#==============================================================================
# ** Window_MonsterCard
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    overwritten method - shown_stats
#==============================================================================

class Window_MonsterCard 
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Showable Stats
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def shown_stats
    stats = (monster.nil? || !show_data?) ? [] : MAMC_CONFIG[:shown_stats].keys
    stats.keep_if { |stat| Game_Enemy.method_defined?(stat) }
    stats
  end
end
« Last Edit: October 31, 2015, 08:28:54 PM by modern algebra »

**
Rep:
Level 71
RMRK Junior
YES!!!  :gracie: Thank you modern algebra! This is one of the most important scripts I've been waiting patiently for. All that's left for me to get is the Quest Journal.
My game will have hunting as a main side-quest and this script will be a vital aid to the player. I hope this script can handle over 200 monsters in its list ;).

Btw, the silhouette feature is pretty cool.
« Last Edit: February 05, 2012, 03:59:01 AM by Seiryuki »

*****
you don't wanna mess
Rep:
Level 79
bruh
2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
This script can handle any number of monsters ._.
Because it's amazing. Great job, MA.

Out of curiosity, no catalogue base?

*
Rep:
Level 97
2014 Best RPG Maker User - Engine2014 Most Unsung Member2013 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best RPG Maker User (Scripting)2011 Best Veteran2011 Favourite Staff Member2011 Most Mature Member2011 Best Use of Avatar and Signature Space2010 Favourite Staff Member2010 Most Mature Member
@Seiryuki - I am glad you like it. As Pacman noted, it should work with as many monsters as you like, though depending on how many are in any one category the player may experience a little lag when first entering the scene or switching between categories. If you are getting up to 200, then you might want to make use of the categories to make it easier to navigate.

And thanks for the comment on the silhouette feature; I think it looks kind of pretty too. For large battlers though, make sure to manually make the silhouette graphics you want to show and add them through notetage; it could get pretty laggy otherwise.

@Pacman - Nah, I decided against the Catalogue_Base. Substantively, there isn't a lot necessarily in common between catalogues - it is really only graphical: the scene layout, the category windows, and the list window. However, with the way scenes are designed in VX Ace, I didn't think there was a lot of added value - all it would really do is put artificial limitations on the graphical design of the other scripts. At least, that's what I told myself. I was probably just being lazy.
« Last Edit: February 05, 2012, 05:07:07 PM by modern algebra »

*****
you don't wanna mess
Rep:
Level 79
bruh
2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
I understand completely.
There were only like two or three VX catalogue scripts though, so it wasn't all that important anyway. But VXA opens up a lot of new opportunities for much easier catalogue scripts, as pretty much everything in the database is a child of RPG::BaseItem. So you could have things like Actor and Class catalogues. Yay!

**
Rep:
Level 65
RMRK Junior
Bestiary! I like this type of scripts. And I am very picky about this, actually.
I really like species, categories and silhouette features!)
What about item drop? Element/State efficiency? Habitat (maps names, where monster can be encountered)? I think, it's most important then even stats, because some (lesser part?) players don't want to look at numeric values other then HP/MP and, maybe, CRI/EVA (well, in this script stats has good customization).
I don't test description part very well yet... It looks short >< I like big descriptions. Anyway, there is also possibly to write elements/habitat/drops in description page...
Oh, sorry, too much babble. First reason I came here:
Monster Catalogue, string 436
NoMethodError undefined method '[]' for nil:NilClass

It's with # Species Icon. I have 8 species. #8 is Insects.
:show_monster_icon => true
:inherit_species_icon => true
In Enemy notetag I place \species[8] (oh, in comment on string 199 \species_id[n] it's wrong and not works).
Well, somehow species icon always come from next species! Example: if enemy notetag \species[7] (Aquatic) then in catalogue it show icon for 8 (Insects). I have only 8 species, and if \species[8], I have an error...
« Last Edit: February 06, 2012, 01:49:28 PM by AlexArmstrong »

*
Rep:
Level 97
2014 Best RPG Maker User - Engine2014 Most Unsung Member2013 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best RPG Maker User (Scripting)2011 Best Veteran2011 Favourite Staff Member2011 Most Mature Member2011 Best Use of Avatar and Signature Space2010 Favourite Staff Member2010 Most Mature Member
Ah, thanks for reporting that error. To fix it, go to the identified line and you will see:

Code: [Select]
def icon_index(*args, &block)
    if !@mamc_icon_index
      @mamc_icon_index = super(*args, &block)
      if note[/\\ICON\[\s*(\d+)\s*\]/i]
        @mamc_icon_index = $1.to_i
      elsif MAMC_CONFIG[:inherit_species_icon]
        # Species Icon
        @mamc_icon_index = MAMC_CONFIG[:species][species_id][0]
      end
      @mamc_icon_index = 0 unless @mamc_icon_index.is_a?(Integer)
    end
    @mamc_icon_index
  end

Change it to:

Code: [Select]
def icon_index(*args, &block)
    if !@mamc_icon_index
      @mamc_icon_index = super(*args, &block)
      if note[/\\ICON\[\s*(\d+)\s*\]/i]
        @mamc_icon_index = $1.to_i
      elsif MAMC_CONFIG[:inherit_species_icon]
        # Species Icon
        @mamc_icon_index = MAMC_CONFIG[:species][species_id - 1][0]
      end
      @mamc_icon_index = 0 unless @mamc_icon_index.is_a?(Integer)
    end
    @mamc_icon_index
  end

Additionally, you will need to go down to around line 1100, where you will see this:

Code: [Select]
  def draw_species(x, y)
    return if monster.enemy.species_id < 1
    return if MAMC_CONFIG[:species][monster.enemy.species_id].nil?
    icon_index, species_name = *MAMC_CONFIG[:species][monster.enemy.species_id - 1]
    draw_icon(icon_index, x, y)
    change_color(text_color(MAMC_CONFIG[:species_colour]))
    draw_text(x + 24, y, contents_width - x*2, line_height, species_name)
  end

Change it to:

Code: [Select]
  def draw_species(x, y)
    return if monster.enemy.species_id < 1
    return if MAMC_CONFIG[:species][monster.enemy.species_id - 1].nil?
    icon_index, species_name = *MAMC_CONFIG[:species][monster.enemy.species_id - 1]
    draw_icon(icon_index, x, y)
    change_color(text_color(MAMC_CONFIG[:species_colour]))
    draw_text(x + 24, y, contents_width - x*2, line_height, species_name)
  end


As for the suggested features: I don't disagree that they would be cool, but my intention with this script was to keep it basic; there is not a whole lot of room to draw data on the window. Just to add the Item Drops would be another 4 lines, and then there would be compatibility issues with scripts like my Item Drop Ranks or Drop Options. Additionally, as you mentioned, you can always put that data in the Description window as well, though that is not really ideal since it would look weird.

As for the description window, however, you can change its size by going to around line 270, where you will see:

Code: [Select]
  # :desc_window_lines - This allows you to choose how many lines will fit in
  #    the help window. If set to 0, there will be no help window to show
  #    description.
  :desc_window_lines => 2,

Just change the 2 to however many lines you want, and the window will grow accordingly. Additionally, it might be worth noting that a number of the default codes that work in messages, such as \c[n] or \v[n] will also work in the description window. If you use my ATS: SMC, then most of those special message codes will also work.
« Last Edit: February 06, 2012, 09:44:53 PM by modern algebra »

*
Rep:
Level 97
2014 Best RPG Maker User - Engine2014 Most Unsung Member2013 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best RPG Maker User (Scripting)2011 Best Veteran2011 Favourite Staff Member2011 Most Mature Member2011 Best Use of Avatar and Signature Space2010 Favourite Staff Member2010 Most Mature Member
This script is updated as there was another bug. Thanks to protractor for discovering it and bringing it to my attention.

**
Rep: +0/-0Level 63
RMRK Newbie
Thanks for making this, it's awesome.
P.S. I'm new here.

**
Rep:
Level 65
RMRK Junior
I think, I found another bug. Hidden enemies again.
When party run away (Escape) from battle, hidden enemies suddenly appear, and after that you can see them in Monster Catalogue. After victory in battle, even if hidden enemy didn't show up, you also can see it in Monster Catalogue as "encountered".

*
Rep:
Level 97
2014 Best RPG Maker User - Engine2014 Most Unsung Member2013 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best RPG Maker User (Scripting)2011 Best Veteran2011 Favourite Staff Member2011 Most Mature Member2011 Best Use of Avatar and Signature Space2010 Favourite Staff Member2010 Most Mature Member
The enemy appearing when escaping happens with or without the monster catalogue and has nothing to do with this script. I can write a fix for it, but I wouldn't connect it with this script.

However, I can modify the script so that hidden enemies at the end of battle are not added to the encounter array. That's done - you can get the new script either from the .rb document attached at the bottom of the first post or from Pastebin.
« Last Edit: February 19, 2012, 03:00:34 PM by modern algebra »

**
Rep:
Level 65
RMRK Junior
Sorry, I didn't know about that until today. Usually, I place hidden monsters in boss battles, and player can't escape from the boss battle.
Thanks a lot!
« Last Edit: February 19, 2012, 05:28:41 PM by AlexArmstrong »

*
Rep:
Level 97
2014 Best RPG Maker User - Engine2014 Most Unsung Member2013 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best RPG Maker User (Scripting)2011 Best Veteran2011 Favourite Staff Member2011 Most Mature Member2011 Best Use of Avatar and Signature Space2010 Favourite Staff Member2010 Most Mature Member
Thanks for the bug report.

*
Rep: +0/-0Level 55
RMRK Junior
I hope I'm not breaking any rules posting in this (necro post?), I don't know where to add in Monster descriptions.. I know it's \desc but where to put/type it? Also I know it's monsters, but if you feel like making like a character catalogue (like info on protagonists, antagonists, npcs you meet), would it work in the same way with some configuration? Thankyou.

*****
you don't wanna mess
Rep:
Level 79
bruh
2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
It goes in the enemy's notebox, in the lower-left hand corner of the enemy's tab in the database.

**
Rep: +0/-0Level 55
RMRK Junior
Is it possible to add a feature which shows what the monster drops?

Hi,
 zhein04

*
Rep:
Level 97
2014 Best RPG Maker User - Engine2014 Most Unsung Member2013 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best RPG Maker User (Scripting)2011 Best Veteran2011 Favourite Staff Member2011 Most Mature Member2011 Best Use of Avatar and Signature Space2010 Favourite Staff Member2010 Most Mature Member
It would be possible, but I do not intend to add it. This is meant to be a very basic representation of enemies.
« Last Edit: March 24, 2012, 02:43:55 PM by modern algebra »

**
Rep: +0/-0Level 70
RMRK Junior
I've tried adding a description to monsters and I'm not sure I'm doing this right. The instructions state that I need to put \desc into the notes section of the monster tab. I've tried and it doesn't seem to be coming up. I've tried to enter it as:

\desc {Slime is weak}
\desc [Slime is weak]
\desc Slime is weak

None show anything in the catalog window. There's something I'm doing wrong, I just don't know what it is.
Throw a 90mph fast ball and be praised. Throw a banana and suddenly you're 'not funny'.

*****
you don't wanna mess
Rep:
Level 79
bruh
2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
Without looking at the script, and considering how predictable MA's REGEXP's are (:P) I'd assume that the problem is that there should be no space between \desc and [.
\desc[Slime is weak]

**
Rep: +0/-0Level 70
RMRK Junior
That did it. Thank you. I'll have to remember that little detail.
Throw a 90mph fast ball and be praised. Throw a banana and suddenly you're 'not funny'.

**
Rep:
Level 54
RMRK Junior
Modern Algebra, first of all congratulations on an awesome script. I have a question about it if you don't mind.

I was looking at your code to improve my own understanding of RGSS3, because I was planning on doing something similar (a dynamic bestiary that estimates enemy stats as you fight them) and wanted to see how other people implemented this sort of system.

Now I know roughly what *args and &block are for in a Ruby context, but considering your script works without those parts I'm not sure why you added them. Can you explain their function to me please?

Edit: Upon closer inspection, "super" calls the closest inherited method with the same name. However, in your "description" and "icon_index" methods, there is literally no other inherited method with that name. Am I wrong in thinking that the arguments and call to super for those two don't actually do anything?
« Last Edit: April 03, 2012, 08:33:32 PM by Trihan »
It's more like a big ball of wibbly wobbly...timey wimey...stuff.

*
Rep:
Level 97
2014 Best RPG Maker User - Engine2014 Most Unsung Member2013 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best RPG Maker User (Scripting)2011 Best Veteran2011 Favourite Staff Member2011 Most Mature Member2011 Best Use of Avatar and Signature Space2010 Favourite Staff Member2010 Most Mature Member
I use *args and &block on methods that expect neither arguments nor a block as a compatibility measure. It is a paranoid way to accomodate for unexpected alterations to the method that change what a method expects. Take, for instance, the following default method in Window_Gold:

Code: [Select]
  def initialize
    super(0, 0, window_width, fitting_height(1))
    refresh
  end

Let's say someone else comes along and says that for her scene, she actually wants Window_Gold to be in the bottom right corner, not the upper left. Naturally, she could do this in smarter ways, but she decides that to do it, she will simply change the initialize method of Window_Gold to accept x and y as arguments. She does so like this:

Code: [Select]
class Window_Gold
  alias she_newscene_init_2ak1 initialize
  def initialize(x = 0, y = 0)
    she_newscene_init_2ak1
    self.x = x
    self.y = y
  end
end

Then, in her scene, she simply creates the window with:

Code: [Select]
  @gold_window = Window_Gold.new(Graphics.width - 160, Graphics.height - 48)


OK, that's all fine - there will be no errors and her edit will work for her scene.

Now, let's say I come along and decide that for whatever reason, I am adding an instance variable to Window_Gold and I want to give it an initial value in the initialize method. So I do this:

Code: [Select]
class Window_Gold
  alias ma_myvariable_init_8jh2 initialize
  def initialize
    ma_myvariable_init_8jh2
    @my_variable = 0
  end
end

Let's now say someone wants to use both our scripts and he places my script below her script. What's going to happen? When he opens her scene, he's going to get an argument error at her line:

Code: [Select]
  @gold_window = Window_Gold.new(Graphics.width - 160, Graphics.height - 48)

He's going to get that error because my script overwrites the initialize method so that it does not expect any arguments, and her script is trying to pass arguments to a method which doesn't expect them.

If I had done this instead:

Code: [Select]
class Window_Gold
  attr_accessor :my_variable
  alias ma_myvariable_init_8jh2 initialize
  def initialize(*args)
    ma_myvariable_init_8jh2(*args)
    @my_variable = 0
  end
end

then our scripts would be immediately compatible.

Naturally, that error also would not have happened if my script had been above hers, but it is wrong to expect script users to intuit script order and, in any case, I usually instruct people to put my scripts below other custom scripts since I do alias and I know other scripters do not.

It also would not have happened if the other scripter had chosen to accomplish her goal through means which did not involve passing arguments to the initialize method, but I don't think it's a good idea to rely on the other scripter for compatibility and do nothing yourself.

I use &block for the same reason, though I must admit that while I have seen people change the expected arguments for incomprehensible reasons, I have never seen someone modify a method so that it requires a block. Still, I am a slave to paranoia, and I think that's a prudent approach when you consider the patchwork nature by which RM users collect their scripts.

For compatibility reasons then, I always use (*args, &block). I also don't think it's a good idea to change the expected input or output of a default method as my hypothetical counterpart did, but I know that some scripters do that. There might be some occasions where it's necessary or helpful, but I can't think of any off the top of my head.


With respect to your other question, there are indeed inherited methods with that name. RPG::Enemy is a subclass of RPG::BaseItem. You are right that they don't do anything by default, but they do do something if RPG::BaseItem is modified in such a way that something besides the expected "" and 0 are yielded.

The reason was

For added compatibility, I probably should have aliased those methods as well instead of relying on super as I would that way capture any other scripts which changed those methods inside RPG::Enemy itself.

Alternatively, I shouldn't have used them at all since it could lead to incompatibility if description yielded anything other than a "" or icon_index yielded anything other than 0. If they were the wrong type of object altogether, then I would get errors when I tried to draw them, and if they were such that they would only make sense in the subclasses of RPG::BaseItem that use those variables by default then they might seem out of place.

Aliasing would probably have been better than a straight overwrite and either one of those would likely have been smarter than simply calling the super method, but hey, live and learn. In answer to your question though, they are inherited methods and I did it for compatibility reasons, just not well thought out ones.
« Last Edit: April 03, 2012, 11:02:12 PM by modern algebra »

****
Sperm Donor Extraordinaire
Rep:
Level 76
Bronze - GIAW 9
lmao you accomplished something with this that i tried to accomplish previously myself.  I'm slightly jealous :P  good job lol
I am out of fucks to give.  In fact, I think you owe ME some fucks.  I have insufficient fucks in the fucking account.

*
Rep:
Level 97
2014 Best RPG Maker User - Engine2014 Most Unsung Member2013 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best RPG Maker User (Scripting)2011 Best Veteran2011 Favourite Staff Member2011 Most Mature Member2011 Best Use of Avatar and Signature Space2010 Favourite Staff Member2010 Most Mature Member
Without looking at the script, and considering how predictable MA's REGEXP's are (:P) I'd assume that the problem is that there should be no space between \desc and [.
\desc[Slime is weak]

\desc{Slime is weak} actually, in order to accomodate for message codes. Who's predictable now biatch!

I like that style though - mimics the default message codes more closely. Sadly, Yanfly-style < : > notetags seem to have won the Great Notetag War of '09, but I like my way better.

lmao you accomplished something with this that i tried to accomplish previously myself.  I'm slightly jealous :P  good job lol

Thanks!
« Last Edit: April 03, 2012, 11:08:20 PM by modern algebra »

****
Sperm Donor Extraordinaire
Rep:
Level 76
Bronze - GIAW 9
I've gotta admit, Yanfly's seems to make it seem more organized on occasions but I do like the old message style tags.  It requires less finger movement and feels more natural for me, especially since when I started learning to type, I've always used the right shift key out of habit.  Considering the brackets are all on the same side as the shift key I use, it makes it easier to do things like the classic message code style.
I am out of fucks to give.  In fact, I think you owe ME some fucks.  I have insufficient fucks in the fucking account.