The method used is based on the order in which the hotkeys are stored. This means the absolute least amount of time is needed to gather, place and render them within the hud. Yep, in the ABS hud addon script. If you wanna look into changing their order, you would be hitting up the refresh_item_hotkeys and refresh_skill_hotkeys methods.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
For those of you interested in knowing why the new update, many things have been changed in The Lycan ABS. The major changes within come in three parts and are nearly exclusive to the ABS ENGINE code segment itself. A few changes have been performed within other script sections, but those will be explained.
First, The ABS Engine itself has been subdivided into four smaller units: General, Enemy, Player and Companion. The reason for this is to let a coder (like myself) to more easily find a method within the vast system, such as a feature that controlled a player's missile attack trigger. Before, you would have to search through nearly 5500 lines of code to find the correct method. Now, you only have 1300 for the player system. Yes, it is still over 1000 lines for the player, but it is a very detailed and comprehensive system.
Second, the methods within the Enemy, Player and Companion sections of the ABS Engine have been renamed so they all follow the same naming convention. No longer would you have a method called 'update_enemy_attack_skill' for enemies while a companion uses 'companion_ranged_spell?' Now, the three types of battlers (enemy, player and companions) use the same naming style for virtually all action methods. Insofar as attacks are concerned, all attacks follow the premise of combatant decision (you pressing a key or the enemy decides to be aggressive), readying an attack, starting the attack animation and delay set, and getting a result when the delay runs out. The typical naming standards would be update_xx_attack, update_xx_attack_*type*, update_xx_attack_*type*_perform, update_xx_attack_*type_result. The *type* would be substituted with melee, ranged, skill, and so on.
Before anyone frets over the methods being renamed, I did make a list of all methods renamed and know what classes/methods needed to be changed.
In fact, here's the list of renamed methods:
Code:
PART 1: GENERAL METHODS
# Method Name # Original Name (Renamed)
----------- -----------------------
update_range_missile update_range_fired_weapon
update_range_skill update_range_fired_skill
update_range_barrier update_range_fired_barrier
update_range_barrier_event barrier_event
update_range_barrier_tile_available? barrier_tile_available?
================================================================================
PART 2: ENEMY HANDLING
update_enemy_force_see (formerly force_enemy_see)
* Used within 'move_toward_player' in Game Code: Game_Character
update_enemy_force_attack (formerly force_enemy_attack
* Used within 'move_toward_player' in Game Code: Game_Character
update_enemy_event_movement_style (formerly update_enemy_target_and_movement)
* Used within 'hit_event' and 'explode event' in...
- Game_Ranged_Weapon, Game_Ranged_Skill, Game_Ranged_Item,
- Game_Ranged_Barrier and Game_Landmine
* Used within 'reset_enemies_after_load' within Scene Code: Scene_Load
Might just be easier to replace Game Code, Ballistic Code, Combatant Code and Scene Code
And third, many systems have been subdivided into smaller components for both cleanliness sake and a streamlining feature. Some of these smaller components are being shared by two or more methods, so some semblance of reduced code size has been made (if it wasn't for all my 'comments ^_^ ). This should enable coders (again... like myself) to create new script add-ons which can attach to The Lycan ABS without the necessity to overwrite sections.
I did move the 'enemy states' method out of update_enemies and move it into update_states. It seemed fitting as it is a routine to check all other status effects if any.
MEANWHILE: It also includes an updated version of The Lycan HUD and JayRay's Lycan GameLog.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
Two more methods were renamed in the demo, the first to differentiate it from a another method with a nearly identical name while the other to show it's similarity to a default system method.
Within the ABS Engine, the 'in_range' method (not the in_range? method) was renamed to 'targets_in_range'. The name was chosen to show how it is used to acquire targets within a certain range, and while used mainly in the ABS engine itself, it is also used by the 'update_destroy' method in the Game_Companion class... a part of the Game_Code page.
Meanwhile, the method known as 'update_enemy_attack_decisions' was renamed into 'update_enemy_attack_make_action' in order to punctuate a similarity to the 'make_action' method within the default Game_Enemy class.
So no actual bug fixes were performed...
HOWEVER, the .chm manual for the Lycan ABS was updated in regards to descriptions within the Q/A section and the Feature Effects section.
And now included is an .rtf file which catalogs each method in the ABS engine itself.
Oh... and Uruhara finally got me to post a pair of screenies from the demo.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
Ladies and gentlemen...
Boys and girls... BUMPIN! TIME is here.
Now at version 5.3, there are two things have been changed in the ABS engine itself.
First, the system apparently responds faster, so it stood to reason that I needed to put in safeguards into the system that checked if a
target was killed. A simple fix, I added an additional statement into the 'victim_not_dead?' method to prevent already erased enemies from
being run through again.
And the second was a repair to the companion's skill using system. A minor alteration was performed which allowed you to set up whether a skill being used was a normal skill or a barrier skill. Unfortunately, it was hard-set to only a barrier skill, even when using a minor fire missile skill... something that needed repairing in the 'update_companion_attack_skill_action_perform'.
Easy enough to upgrade your system... Either replace the methods I so noted, or just the 1st and 4th parts of the ABS Engine itself.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
Now at version 5.4, this repairs something I accidentally broke in the last update. I erased a statement within the method that checks if a victim is dead or not. I re-inserted that line, cleaned it up, and added another method that ensures that enemies that re-spawn do not show up a second time to drop off more treasure.
Yep, you heard that right guys. Enemies that re-spawned coulda dropped off TWICE the amount of loot that they should have dropped. No more double-dipping!!!
Meanwhile, I added a bit more to the Questions and Answers section of the help/.chm file available in the demo downloads.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
This bump isn't for the actual Lycan ABS, but for the bonus Multiple Pose and Paperdoll systems that are included in the forum's exclusive demo. Refined a bit, the new versions repairs a glitch where the ABS's default animated pattern system interfered with the revised one within the multiple pose's system. In doing so, I also fixed a weird glitch that affected the way idle animations had shown. And the standing pose (if the player used a separate standing frame) doesn't flicker anymore.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
Greetings,fellow readers, as it is now time for one more LYCAN BUMP to occur! Yes, two more things have changed to the system, and both repairs of diverse natures.
The first thing that was changed was within the Ballistics Code of the system. To be specific, the change occured on line #282 in the explode method of the Game_Ranged_Base class. The change performed properly centers the explosion animation at the point of impact.
Now you may see the code and wonder 'Why is the y value raised one tile?' To be honest, it is a visual factor as most targets are 'taller' than the normal 32x32 tile and this is an aesthetic decision which appears to work nicely.
The second thing that was changed was a bug fix, yet no one made any report. The fix relates to a feature called barriers, which is a skill effect where a battler can create a wall (be it a static wall of stone or a moving wall of fire). To affect the fix, the ABS Engine (General) page had to be edited. The change takes place on line #1584 in the animation_routine_skill method of the Game_ABS class. This change allows the system to properly read from the BARRIER_CUSTOM array when it was accidentally reading from the RANGE_SKILLS array by accident.
Code:
suffix_img = Lycan::BARRIER_CUSTOM[skill_id][15]
As popular the feature was with the game 'Diablo', I was surprised no one made any such bug report.
* * *
Meanwhile, the HELP file accompanying the demos had been given an update in the Q&A section for those curious about having a WASD system; credits to swickster for the inquiry.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
First off, I performed some cleanup and changes to all six classes within the Ballistics section. Not much was changed save for some cleanup and the creation of new methods within the Game_Ranged_Base class which are used throughout most of the other classes. If it weren't for the extensive amount of comments within, the page would be even smaller than it is now.
While nearly all methods within still have the same names, only six of note were changed, mainly for naming conventions. Two of these were the methods 'abs_through_target' (now 'is_through_target?') and 'abs_dead_companion?' (now 'is_dead_companion?') from the Game_Ranged_Base class, It was done this way to give a more standardized look as it is inquiring if a companion was dead or etc. The 'get_all_explode' method in both Game_Ranged_Base and Game_Landmine has now become the 'explode_all_object_range' method, aptly renamed as it is only used to detect objects in an explosive radius. And the 'set_engaged' method was renamed 'set_engaged_enemy' as a matching ''set_engaged_actor' method was created. Finally, the 'blow' method in Game_Landmine was renamed to 'explode' to mimic the name of a like method within Game_Ranged_Base.
Ballistics Code Changes
(Within Game_Ranged_Base)
update_range_drift_forced
update_range_drift_forced_failed?
update_movement_normal
update_movement_normal_drift
update_movement_normal_drift_mix
update_movement_forced
update_movement_forced_drift
update_movement_forced_drift_mix
update_movement_flags
update_movement_flag_invalid?
update_range_pattern
update_range_moves
explode_cycle_companions
explode_cycle_companions_perform
explode_cycle_enemies
explode_cycle_enemy_perform
target_in_position?
target_attack_effect
hit_target_animation *rewritten in Game_Barrier and Game_Landmine
set_engaged_actor
(Within Most Child Classes and Game_Landmine)
hit_player_perform
hit_event_perform
hit_companion_perform
Used solely by Game_Ranged_Skill and Game_Ranged_Item)
refresh_revive
After that, I began tackling the code in the Game ABS engine code once again. Like before, this was to make some of the methods cleaner by subdividing them with smaller components. Like I did with the ballistics section, I added a routine into the page that handles most general routines (aka Pg 1, General Routines). This routine is called 'update_range_attack?' and is a method used in various enemy and player melee and skill attack systems. It checks to ensure that the attacker is facing his target and that the target is in range of his attack.
The section that covers enemy handling systems had the coward checking and respawn systems made smaller by having it execute subroutines themselves. These separate routines cycle through enemies and companions for their related check and delay systems. Meanwhile, I altered some methods that handled some of the enemy behavior routines. They weren't changed bigtime, but had marginal changes to make the methods appear cleaner and more concise.
For the Player control section, I altered the attack melee routine that actually performs strikes upon enemies and companions by creating two new smaller routines that handles their strikes.
ABS Engine Changes
General Section (New)
update_range_attack?
Enemies Section (New)
update_enemy_test_coward_set
update_enemy_respawn_enemy_delay
update_enemy_respawn_companion_delay
update_enemy_respawn_companion_delay_set
update_enemy_respawn_placement
Enemies Section (Altered)
update_enemy_behavior_pre_attack_ranged
update_enemy_behavior_pre_attack_crisis
update_enemy_behavior_pre_attack_coward
update_enemy_behavior_pre_attack_hunter
update_enemy_behavior_pre_attack_backs
update_enemy_behavior_pre_attack_hitrun
Enemies Section (New)
update_player_attack_result_melee_enemies
update_player_attack_result_melee_companions
And though it is not within the actual ABS Engine code, a new method was added within the Game_ABS_Companion class, a part of the Game Code page. This method, update_melee_attack_decision, performs in the same way as the 'update_range_attack?' method in the Game Engine. However, it doesn't have to check facing. Before each attack, the companion always turns to face the target. Automatics are nice.
However, two methods were lightly touched to make them appear cleaner. They handle traps and scouting actions.
Game Code Changes
Game_ABS_Companion (New)
update_melee_attack_decision
Game_ABS_Companion (Altered)
traps
scout
And that's it!
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
Some more changes and streamlining were done, breaking down some of the methods in the various pages in the ABS.
My first job was to search through and tackle anything that needed altering in the Modules page. My first actual target was the RPG::Sprite class itself. Streamlining in the class name itself was performed, but that isn't a big deal. However, more work was performed to make the RPG Sprite class more compatible with other systems. Initially, the animation and update_animation methods were rewrites, but I eliminated the update_animation code from the system and decided to alias both the animation and dispose_animation methods as a fix. I had also broken up the update method, and created two new methods for its use; update_abs_system_collapse and update_abs_system_duration. And after that, I followed suit and made three new methods for use between the damage pop methods, these new methods are damage_pop_bitmap_set, damage_pop_bitmap_ouline and damage_pop_sprite.
After that, I went towards the Combatant code, cleaning up a little here and there. The Game_ABS_Enemy class went through the most, having deleted almost everything. As the class was an almost exact copy of the Game_Enemy class, I decided to have Game_Enemy be the parent class to Game_ABE_Enemy rather than Game_Battler. In that, I only needed to keep two methods and the attributes section. However, the initialize method was rewritten to be stand-alone, not drawing on Game_Enemy's 'initialize' as that requests both troop and member index values. So instead, I copied most of the 'initialize' method of Game_Battler and added it to Game_ABS_Enemy's. Besides the 'initialize' method, only the 'can_use_skill?' method remained. By doing so, the amount of code for the class was literally cut in half.
Also, this required very minor changes to both Lycan Enemy Bars and Lycan Audible Alerts. That was the very first change I ever made to the Lycan Enemy Bars since I coded it three years ago! Three years?
The Game_ABS_Companion class was more complicated than the Game_ABS_Enemy class though, being a child to the Game_Character class and relying on ties to the Game_Actor database for purposes of damage and combat mechanics. The first revision I made was towards the 'refresh' method, extracting some of the code to form three new methods called 'refresh_no_members?', 'refresh_not_valid?' and 'refresh_character'. This was followed up by editing the 'update' method and forming the 'update_ai_attack?' method and its two smaller parts, 'update_position_forward' and 'update_position_rear'. These two last pieces are used to handle companion attack decisions based on whether they stand back or get into close quarter combat. And the 'update_reactions' method was renamed 'update_attack_result' much like the 'update_player_attack_result' method in Game_ABS.
Meanwhile, it bothered me that I could 'TALK TO THE CAT' throughout the whole demo. Sure, i made the companion command system. But it would be a total cheat for the demo if you just left Jane the Cat on one map while you faced all the dangers. Part of the challenge is that you had to make sure she didn't get killed too, and if you could tell her to stay put on a map kinda ruined that. So I made a minor change to the Game_ABS initialize and attributes sections (ABS Engine Pg 1), added a new command to the Companions page (ABS Engine Pg 4) and to the 'check_event_trigger_here' method for the Game Player class in the Game Code page. Now you can use a new script call to turn the dialog system on and off.
While I was IN the Dialog mood, I did some minor 'subdividing' of the Window_Dialog class used by the companions dialog system. At the same time, I also attacked the Window_MenuStatus and Window_Ammo classes in my Window Code page. Alas, some methods in there are actual rewrites which could not be avoided. But if I can break them into smaller and more manageable portions, I will.
And the last thing I had to deal with in regards to the Lycan ABS itself was an error detected in the ballistics section. It appeared when an explosive effect was to take place around companions. At the same time, a similar error was found when an enemy was caught in an explosion. Obviously, these errors have been corrected.
* * *
So again, I did some minor changes to Lycan Enemy Bars and Lycan Audible Alerts. But for those using the paperdoll system, I performed a minor change to Frank's MultiPose Charactersets. It was in the 'animation_single_action_pose' that additional error-preventative values were introduced to prevent crashes.
And that's that!
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
My last update to the Lycan ABS involved a little touch-up to the Windows Page. Again, I mentioned how I was forced to rewrite a couple of methods some time ago, specifically the 'draw_item' methods within Window_Item and Window_Skill and the 'refresh' method in Window_MenuStatus. These rewrites were merely so the player could see if targeted skills or items were able to be used during ABS play, or if a companion was available.
I had returned to my Windows page and disected the methods within and broke them down into more manageable and much smaller components. And on a separte note, I plan on doing the same within the ReGaL project. Meanwhile, I also wish to point out that the methods that render icons use my cache testing system ensure the icon is available before rendering is attempted. If the icon isn't in the project, this will prevent accidental crashing.
And after that, I went after some of the classes within the Scene Code page itself. I targeted the Scene_Title class, breaking into the command_new_game method to create two new methods to handle the companions. Then, I tackled the Scene_Map class, splintering off sections of code from its update method so the additional animations, music timer and combo delay features were isolated. And after that, I targeted both the Scene_Item and Scene_Skill classes, slicing up their update_item (or update_skill) methods and sliced up Scene_Item's ammunition clip system. The classes that followed (Load, Save, Battle...) didn't really need much in way of edits, though I may return at a later date for them.
And in case no one knew, I have been updating the help file with a list of the methods in each script page.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)