SES Lexicon (Browse script source in-game.)

Solistra

Veteran
Veteran
Joined
Aug 15, 2012
Messages
593
Reaction score
247
Primarily Uses
SES Lexicon v1.2
by Solistra and Enelvon
Introduction
This script provides information and browsing capabilities for all of the RGSS3 scripts that are present in the RPG Maker VX Ace Script Editor. Script source code may be browsed and paginated in-game with the use of a REPL (such as the SES Console) or using script calls.

Change Log
  • v1.2 (April 18th, 2014) - Enhanced Pager functionality.
  • v1.1 (April 14th, 2014) - Documented, some API changes.
  • v1.0 (April 14th, 2014) - Initial release.
Features
  • Browse game source code while the game is running.
  • Paginate output, allowing large scripts to be browsed.
  • Easily discover which scripts define or redefine classes and modules.
  • Search for scripts by partial name with strings or regular expressions.
Screenshot
Usage
This script is designed to function entirely through a REPL or script calls (although the latter is not recommended). As such, all of the available functionality of this script is available through simple methods.

In order to browse the source code of a script, simply use the provided SES::Lexicon.browse method with the file name of the script you wish to view. Example:
 
Code:
SES::Lexicon.browse('Game_Interpreter’)
This method opens the given script in the pager, allowing paginated browsing of the script's source code. Without pagination, it's very likely that a significant portion of the script may be swallowed by the console's buffer (especially when viewing large scripts such as Game_Interpreter).

If you need to view a specific line or chunk of source code, you can use the SES::Lexicon.line method. The usage of this method involves providing the script name, line number, and (optionally) the number of lines around the requested line number to display as well. For example, if we wanted to view the update method of Scene_Base and the 5 lines of code both above and below that method, we would use the following:
 
Code:
SES::Lexicon.line('Scene_Base', 40, 5)
There are also two methods provided for information-gathering purposes: SES::Lexicon.named and SES::Lexicon.defining. As expected, the named method returns an array of script names containing the given string or regular expression, and the defining method returns an array of scripts which define or redefine the given class or module. Examples:
 
Code:
SES::Lexicon.named('Manager') # => ["DataManager", "SceneManager", "BattleManager"]SES::Lexicon.defining('Cache') # => ["Cache”]
The defining method can also take partial class or module names and will return an array of script names which match the partial information given. For example, you can easily view which scripts modify any of the Scene_* classes using SES::Lexicon.defining('Scene_’).

The Lexicon also enables direct reading of the script information that it stores. This information is provided as a reader method for the Lexicon's @scripts instance variable. The elements of this array store information as a hash -- each hash includes the :name and :code keys which provide the expected information when accessed. For example, if you want to simply print the contents of Main to the console, you could use the following:
 
Code:
puts SES::Lexicon.scripts[-2][:code]
Using the Pager
The Lexicon's pager paginates large text so that it can be viewed in pages which may be navigated with commands. When using the pager, you will come across a string at the bottom of the paged output with >> at the end of it; this indicates that a command is expected.

By default, giving no command (by simply pressing Enter) will advance the pager to the next page of text; this is exactly the same as giving any of the following commands: >, forward, next, or down. You may browse the previous page of text with <, back, prev, previous, or up.

In addition to this, you can browse a specific number of pages forward or backward in the paginated text by passing a valid integer as the command. Positive integers advance the text forward, negatives show previous pages of the text. You may browse between -99 and 99 pages at a time; any number above or below these values is not a valid command.

In order to exit the pager, simply pass any of the following commands: q, quit, or exit. This will cause the pager to immediately terminate and return the position of the pager in the paginated text.

Script
This script is available from SES VX Ace.

Installation
Place this script below the SES Core (v2.0) and SES Console (v1.1) scripts (if you are using them) or the Materials header, but above Main. This script does not require the SES Core (v2.0) or SES Console (v1.1), but they are recommended.

Credit and Thanks
  • Solistra
  • Enelvon
Author's Notes
This script is made available under the terms of the MIT Expat license. View this page for more information.
 

Zane

Food for thought
Veteran
Joined
Jun 9, 2013
Messages
913
Reaction score
110
First Language
US English
Primarily Uses
I don't see why more people aren't viewing this, it's an interesting piece of information.
 

Engr. Adiktuzmiko

Chemical Engineer, Game Developer, Using BlinkBoy'
Veteran
Joined
May 15, 2012
Messages
14,682
Reaction score
3,003
First Language
Tagalog
Primarily Uses
RMVXA
possibly because it's more of a developer tool for users who actually know how to script...
 

Zane

Food for thought
Veteran
Joined
Jun 9, 2013
Messages
913
Reaction score
110
First Language
US English
Primarily Uses
Which is why it's handy.
 

Tsukihime

Veteran
Veteran
Joined
Jun 30, 2012
Messages
8,564
Reaction score
3,846
First Language
English
Easily discover which scripts define or redefine classes and modules.
So with this, I can figure out what's aliasing what, and whether the end result is what I expect?
 

Engr. Adiktuzmiko

Chemical Engineer, Game Developer, Using BlinkBoy'
Veteran
Joined
May 15, 2012
Messages
14,682
Reaction score
3,003
First Language
Tagalog
Primarily Uses
RMVXA
@Zane - for those who have an idea on scripting that wants some extra tools... for other people, it's not. :)
 

ShinGamix

DS Style 4Ever!
Veteran
Joined
Mar 18, 2012
Messages
3,905
Reaction score
451
First Language
April Fools
Primarily Uses
N/A
I could have used this a year ago but I can now try to solve one issue I never figured out of all my troubles.
 

Solistra

Veteran
Veteran
Joined
Aug 15, 2012
Messages
593
Reaction score
247
Primarily Uses
So with this, I can figure out what's aliasing what, and whether the end result is what I expect?
More or less. The method which actually handles discovering definitions and redefinitions is relatively stupid, so it won't find more exotic class or module definitions, but it's really more than good enough for almost anything that I've personally come across.


It won't help you to find where a particular method is defined or aliased, but where a class or module is defined. Adding in the ability to search for method definitions and aliases would be fairly simple to include as well. This is something I would like to improve in the future, by the way, but at the moment I'm already working on too many other projects to bother improving on something which is already working "well enough" for me.
 

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

Latest Threads

Latest Posts

Latest Profile Posts

People3_5 and People3_8 added!

so hopefully tomorrow i get to go home from the hospital i've been here for 5 days already and it's driving me mad. I miss my family like crazy but at least I get to use my own toiletries and my own clothes. My mom is coming to visit soon i can't wait to see her cause i miss her the most. :kaojoy:
Couple hours of work. Might use in my game as a secret find or something. Not sure. Fancy though no? :D
Holy stink, where have I been? Well, I started my temporary job this week. So less time to spend on game design... :(
Cartoonier cloud cover that better fits the art style, as well as (slightly) improved blending/fading... fading clouds when there are larger patterns is still somewhat abrupt for some reason.

Forum statistics

Threads
105,868
Messages
1,017,083
Members
137,583
Latest member
write2dgray
Top