02-17-2026, 09:50 PM (This post was last modified: 02-18-2026, 05:20 AM by DerVVulfman.)
Anyone with RMXP wanna give this anti-lag a try?
Part1 - The mostly Custom Code
Code:
module AntiLag
# The dimensions of you game window, useful if a resolution script in use
TILES_HORIZONTAL = 20
TILES_VERTICAL = 15
# How far out (in tiles) beyond the viewport to permit activity
BUFFER_SIZE = 2
end
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
# This class handles the map. It includes scrolling and passable determining
# functions. Refer to "$game_map" for the instance of this class.
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# * Gets the minimmum and maximum x/y map coordinates for updating events
#--------------------------------------------------------------------------
def get_antilag_tile_area
#
# Gets the upper left x and y tile-coordinate
x = $game_map.display_x / 128
y = $game_map.display_y / 128
#
# Get configurable buffer and ensure it isn't negative or invalid
al_buffer_size = AntiLag::BUFFER_SIZE
al_buffer_size = 0 if al_buffer_size.nil?
al_buffer_size = 0 if !al_buffer_size.is_a?(Integer)
al_buffer_size = 0 if al_buffer_size < 0
#
# Computes the min and max coordinates when considering the buffer-size
min_x = x - al_buffer_size
min_y = y - al_buffer_size
max_x = x + AntiLag::TILES_HORIZONTAL + al_buffer_size
max_y = y + AntiLag::TILES_VERTICAL + al_buffer_size
#
# Makes sure the min and max coordinates are within the map
min_x = 0 if min_x < 0
min_y = 0 if min_y < 0
max_x = $game_map.width - 1 if max_x >= $game_map.width
max_y = $game_map.height - 1 if max_y >= $game_map.height
#
# Returns the result as the min and max coordinates
return min_x, max_x, min_y, max_y
#
end
#--------------------------------------------------------------------------
# * Update the antilag tile coordinates for tile area testing
#--------------------------------------------------------------------------
def update_antilag_tile_area
#
# Don't bother updating if the player hasn't even moved
return unless antilag_player_moved?
#
# Since the player HAS moved, update the new antilag coordinates
@al_min_x, @al_max_x, @al_min_y, @al_max_y = get_antilag_tile_area
#
end
#--------------------------------------------------------------------------
# * Determine if an object is in the viable viewport
#--------------------------------------------------------------------------
def antilag_tile_area?(object)
#
# Exit false if the player is not within the x/y boundaries
return false if object.x < @al_min_x || object.x > @al_max_x
return false if object.y < @al_min_y || object.y > @al_max_y
#
# Exit true if the player is within the area
return true
#
end
#--------------------------------------------------------------------------
# * Determine if the player moved enough to require updating the tile area
#--------------------------------------------------------------------------
def antilag_player_moved?
#
# If the player moved even a single tile, let alone to a new map
if @antilag_old_x != $game_player.x ||
@antilag_old_y != $game_player.y ||
@antilag_old_id != $game_map.map_id
# Update the player's current coordinates
@antilag_old_x = $game_player.x
@antilag_old_y = $game_player.y
@antilag_old_id = $game_map.map_id
# And exit true that the player moved
return true
end
#
# Exit false if there's no change
return false
#
end
end
Part2 - Mainly Game_Map's update edited
Code:
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
# This class handles the map. It includes scrolling and passable determining
# functions. Refer to "$game_map" for the instance of this class.
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Refresh map if necessary
if $game_map.need_refresh
refresh
end
# If scrolling
if @scroll_rest > 0
# Change from scroll speed to distance in map coordinates
distance = 2 ** @scroll_speed
# Execute scrolling
case @scroll_direction
when 2 # Down
scroll_down(distance)
when 4 # Left
scroll_left(distance)
when 6 # Right
scroll_right(distance)
when 8 # Up
scroll_up(distance)
end
# Subtract distance scrolled
@scroll_rest -= distance
end
#------------------------------------------------------------------------
# >> EDITED AREA (contents below)<<
update_events # Update all map events
#------------------------------------------------------------------------
# Update common event
for common_event in @common_events.values
common_event.update
end
# Manage fog scrolling
@fog_ox -= @fog_sx / 8.0
@fog_oy -= @fog_sy / 8.0
# Manage change in fog color tone
if @fog_tone_duration >= 1
d = @fog_tone_duration
target = @fog_tone_target
@fog_tone.red = (@fog_tone.red * (d - 1) + target.red) / d
@fog_tone.green = (@fog_tone.green * (d - 1) + target.green) / d
@fog_tone.blue = (@fog_tone.blue * (d - 1) + target.blue) / d
@fog_tone.gray = (@fog_tone.gray * (d - 1) + target.gray) / d
@fog_tone_duration -= 1
end
# Manage change in fog opacity level
if @fog_opacity_duration >= 1
d = @fog_opacity_duration
@fog_opacity = (@fog_opacity * (d - 1) + @fog_opacity_target) / d
@fog_opacity_duration -= 1
end
end
#--------------------------------------------------------------------------
# * Frame Update (when handling map events) an SDK derived method
#--------------------------------------------------------------------------
def update_events
#
update_antilag_tile_area # Update tile area coords if needed
for event in @events.values # Cycle through all events
next unless antilag_tile_area?(event) # Skip if not in the viewport
event.update # Update the event
end
end
end
Part 3 - Mainly Spriteset_Map's update edited
Code:
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
# This class brings together map screen sprites, tilemaps, etc.
# It's used within the Scene_Map class.
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# If panorama is different from current one
if @panorama_name != $game_map.panorama_name or
@panorama_hue != $game_map.panorama_hue
@panorama_name = $game_map.panorama_name
@panorama_hue = $game_map.panorama_hue
if @panorama.bitmap != nil
@panorama.bitmap.dispose
@panorama.bitmap = nil
end
if @panorama_name != ""
@panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
end
Graphics.frame_reset
end
# If fog is different than current fog
if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
@fog_name = $game_map.fog_name
@fog_hue = $game_map.fog_hue
if @fog.bitmap != nil
@fog.bitmap.dispose
@fog.bitmap = nil
end
if @fog_name != ""
@fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
end
Graphics.frame_reset
end
# Update tilemap
@tilemap.ox = $game_map.display_x / 4
@tilemap.oy = $game_map.display_y / 4
@tilemap.update
# Update panorama plane
@panorama.ox = $game_map.display_x / 8
@panorama.oy = $game_map.display_y / 8
# Update fog plane
@fog.zoom_x = $game_map.fog_zoom / 100.0
@fog.zoom_y = $game_map.fog_zoom / 100.0
@fog.opacity = $game_map.fog_opacity
@fog.blend_type = $game_map.fog_blend_type
@fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
@fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
@fog.tone = $game_map.fog_tone
#------------------------------------------------------------------------
# >> EDITED AREA (contents below)<<
update_sprites # Update all character sprites
#------------------------------------------------------------------------
# Update weather graphic
@weather.type = $game_screen.weather_type
@weather.max = $game_screen.weather_max
@weather.ox = $game_map.display_x / 4
@weather.oy = $game_map.display_y / 4
@weather.update
# Update picture sprites
for sprite in @picture_sprites
sprite.update
end
# Update timer sprite
@timer_sprite.update
# Set screen color tone and shake position
@viewport1.tone = $game_screen.tone
@viewport1.ox = $game_screen.shake
# Set screen flash color
@viewport3.color = $game_screen.flash_color
# Update viewports
@viewport1.update
@viewport3.update
end
#--------------------------------------------------------------------------
# * Frame Update (when handling map sprites) an SDK derived method
#--------------------------------------------------------------------------
def update_sprites
#
# Cycle through all character sprites
for sprite in @character_sprites
# Skip if the sprite is not in the viewport ares
next unless $game_map.antilag_tile_area?(sprite.character)
# Update the sprite
sprite.update
end
#
end
end
Just tinkering with it, but I personally get at least a FPS of 38 out of 40 with the 900+ events in the anti-lag demo I cobbled together for the Zeriab posts. Faster than Near Fantastica's or Amaranth's too it seems.
It doesn't have all the bells and whistles (ie defining certain events that are always/never updated, enable/disable antilag).... But its a start, and its pretty much not altering the RMXP game variables.
DO NOTE: It does rewrite the update methods for "Game_Map" and "Spriteset_Map". But I sure as heck identified where the changes are made. And I kept with RMXP SDK names for the methods that cycle through and update the events/characters.
Rather than repeatedly re-acquire the minimum and maximum x/y coordinates where your player character is standing (typical with 'in_range?' like methods), it only grabs the coordinates IF you moved. So instead of it performing a dozen calculations just for the boundaries before even testing if the event(s) are in/outside the area, it runs a test to see if the player's X, Y and/or Map had changed... much less processing if you're not moving at all.
I kept values marginally unique with prefixes of @antilag of al (short for anti-lag) in variable names.
EDIT: Oh, gawd. I added two lines so I could have an RMXP switch to turn on/off anti-lag; one simple line in the config system, and one line for the simple 'if its on' bypass.
Turning the Anti-Lag off in that ridiculous 900+ map dropped the 38Frame rate down to 23!!! Yeah, I know without a DOUBT the anti-lag is working.
EDIT 2: Oof. Well, I added a sort of name tag for events so they can always be active on the map even outside your view when all others are limited by the anti-lag system. It seems to start dropping the FPS when you hit 200 events. Quite confusing to me. But... 200 events being fully active no matter when when everyone else is limited by the anti-lag is still a lot.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
02-20-2026, 06:08 AM (This post was last modified: 02-20-2026, 06:29 AM by DerVVulfman.)
Okay, I have a consistent 38/39 frame speed with the anti-lag I'm working on.
It only gets borked when you use commands to flag over 100+ events to either "IGNORE" the antilag system and be active outside of view or "INACTIVE" which means that they don't update and are essentially glorified tiles. I mean, you have to actively flag these... and I am saying you need to have over 100 flagged events before you may notice a frame rate reduction. Though... hitting 500 events being flagged and there will be more noticeable drop in the FPS. Comically, its worth turning the anti-lag off by that point.
By flagging, you can add a special character to an event's name.
EV001 EV002[Bork] EV003[Bork] EV004
Yep, you can add a custom phrase or special character IN the name. It doesn't need to replace the whole name as some others.
And unlike Near Fantastica's, I now have it recognize when an event has been given a "Move Route" by way of an Event Command. If it is given an event command, it will move about regardless of being within the visible area or not. Do know I mean the [Set Move Route] event command within the "List of Event Commands" and not a cursory [Fixed/Custom/Random/Follow] route setting.
I saw another script do something similar, but it did not consider (1) that the event must update at least 'once' for the move route to take effect, and (2) to deactivate the feature when the route is done (repeat-when-done notwithstanding).
It might not be as Frame Rate saving as a couple I know, but it doesn't change, alter or (gasp) bypass/erase either the Game_Map @events nor Spriteset_Map @character_sprite variables.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
Performed some minor updates to my working Anti-Lag, though I had encountered the ever loving "Step-Forward / Step-Backwards" scenario.
Trying to perform some cleaning and streamlining, my antilag went from a 38 FPS down to a 35fps rate. While it visibly didn't affect the motion or reaction within the game map, it was still greatly unacceptable. But the thing is, the cause was rather strange.
My initial work that held an average 37-38 frame rate with 998 tiles used the following code to ensure that Auto-Run and Parallel Process events were exempt:
return true if obj.trigger ==3# Permit for autorun return true if obj.trigger == 4# Permit for parallel
However, I attempted the following in its place:
return true if[3,4].include?(obj.trigger)# Permit for triggers
Who would think that one command using the include? method in the Array class would cause more lag? But it does as it comically takes more processing time than two simple if...end blocks.
It does.
Be that as it may, and some more cleaning up, I added a simple little test command.
While you might not think it may happen, I would not put it past anyone to accidentally flag an event "ALWAYS" update even when not in the player's view and "NEVER" update which would effectively turn an event into a glorified tile. That would be an issue indeed.
So I added a single method that will, upon entering any field map, check to see if any events contain both flags and generate a pop-up display indicating the IDs of the so offending events.
My current config setup for the script.
module AntiLag
# VIEWPORT TILES # ============== # Understanding that an additional Resolution Script may be used to change # the game window's size, it's here where you set the size of the player's # viewport in tiles both width and height. #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TILES_HORIZONTAL =20 TILES_VERTICAL =15
# VIEWPORT BUFFER # ==============+ # Because the player is moving across the map, it should be accepted that # events should be active and functioning before they are visible in the # player's viewport. It is here that you set how far outside the viewport # in tiles where event activities are permitted. #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BUFFER_SIZE =2
# DISABLE SWITCH ID # ==============+== # This determines the RPGMaker XP Switch that lets you enable/disable the # anti-lag system with a simple [Control Switches] event command. #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DISABLE_ID =4
# EVENTS ALWAYS ACTIVE # ==============+===== # This establishes a custom tag that can be placed within an event's name # allowing it to update even if off-screen. OR set to nil if there's none. #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EVENTS_ALWAYS =nil#"[Alw]"
# EVENTS NEVER ACTIVE # ==============+==== # This establishes a custom tag that can be placed within an event's name # preventing from ever updating.. OR set to nil if there's none. #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EVENTS_NEVER =nil#"[Nev]"
# EVENTS CONFLICT TEST # ==============+===== # Essentially, this will bring up a pop-up window upon entering a map when # any events contain BOTH the "Events Always' and 'Events Never' which is # an obvious accidental error. It will report both the map ID and name for # reference and a list of all event IDs that have this issue. #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EVENT_TEST =true
end
Have you seen anything more self-explanatory and understandable?
Don't answer that.
And I'm contemplating two things for development
Event command calls to add or remove the "EVENTS_ALWAYS" / "EVENTS_NEVER" flag while running, though it would likely reset each time you enter the map.
The ability to read flag-applying comments from the Event's "List of Event Commands" page, which would allow different flag conditions per page. Though an additional script call would be needed to ensure any such event with such would be able to update.
Yep, I try to consider eventualities.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
02-23-2026, 02:25 AM (This post was last modified: 02-23-2026, 02:26 AM by Remi-chan.)
Finally just cracked down on getting some work done, since I'm still waiting for the QA feedback from DerVVulfman I decided it'd be best if i focused on Disk 2 and onwards. Did some small rewrites in early Disk 2, but more importantly, I started recoding the bosses. Nola was done last night. I still gotta make the Fantasia Battle Introduction for her, but the fight itself is fully recoded. Next up will be Kitsune tikes Renae and Cathy.
Remi-Chan
So, you wanna see the Nola fight after being fully recoded? Of course, of course~!
Against the Witch Hunter
The major advantages to the new tech on this fight is the players ability to shoot Nola without having to line up their shot by way of personal positioning, making the fight flow a lot better and feel less awkward. Instead of focusing on standing in the right place and facing the right way, you can instead focus on avoiding those nasty red shurikens she throws out and handling the cross-cut mechanic. Xiie / Rune
Robin of the Fowlhunters is done, so Xiie is now working on the wing flap animations. She also got us Fatty McLarge!
Robin and Fatty
There will be some screenshots over in the fated place that show these sprites in-game. Pjcr
Heard back from Pjcr, but he's yet to submit any files and has yet again been silent for a long time. My hopium is that he's just disconnected from social media to focus on work, since he now does have to do the work over. His plan was to finish the High Elven Queen and then speed run the Shadow Pixies.
03-02-2026, 02:01 AM (This post was last modified: 03-02-2026, 02:03 AM by Remi-chan.)
Okay so I kinda popped off.
Remi-Chan
Zen Aneia's recoding is done! Both with main story and optional events. This includes the following:
Nola Worthington boss fight
Cathy and Renae boss fight
Xali boss "fight"
Cathy, Renae and Lily boss fight
Zephyrra boss fight
Zephyrra obstacle course
Remira boss fight
Nanianne boss fight
Akra Olna boss fight
And that's just what I got done on Zen Aneia!
I also got the two main story boss fights on Galaxia finished with their recoding, and implemented a new key_struggle interface now including a progress bar!
You'll also see Wi's summon animation for her projectile storm is upgraded.
I also entirely reskinned the versus battle screen, as what it was before looked like placeholder stuff. it now fits in line with the thematic of all the other UI elements.
It also now gives you a chance to stretch and stuff, allowing you to press confirm when you're good and ready. The sound design and all has been updated to fit the new appearance and animation.
New Versus Screen
Snazzy, right?
So, you wanna see some neat videos of all the stuff I got done? Yes yes, I'm sure~
Stella Diurna Dei
Translates roughly to 'Daystar of God'. This is indeed the first time you can fight the Immoral Messenger, as an optional boss in Day 7 of the Vahnus events during Disk 0.
Xali's Recoded Introduction
Yes, this did get some changes to make Xali hopefully feel more intimidating and also be lore accurate, as her having infinite health didn't make much sense knowing what we do now. Now she just toys with you for 30 seconds before getting bored. Xiie / Rune
Another human and the first of the Cloud Nymphs has been done while Xiie goes through it trying to animate the fowlhunter's wings!
Fire-elemented Cloud Nymph and Kimono-wearing Human Girl
There will be some screenshots over in the fated place that show these sprites in-game. Pjcr
Radio silence since my last report.
With that, i think I've covered most of what I've gotten done!
03-14-2026, 07:30 AM (This post was last modified: 03-14-2026, 07:31 AM by Remi-chan.)
Happy 3/14. I have MUCH to report.
Remi-Chan
Outside of the Remaster of the Tiramisa boss fight and the Inevitable City Clash Optional Event on Postmartia, the Re-Coding is done.
Behold, all them strikethroughs!
But let's not distract from the main event!
Fantasia Demo 3: Steam Trailer
That's correct, my plan is to release this game in its Demo 3 state on steam under early access, and work from there. The Demo 3 that will launch on Steam will hopefully be ready by the middle of this year, and I foresee it as very unlikely it won't be ready before years end.
That's not the only video showcasing what I've done between last post and now. I will share with you some real goodies!
Crimson Demonium // Re-Coded
It's a bit worrisome that this girl has such a strong link to pandemonium. Even hinting that she may know about Rykki (Schrodinger's Catgirl, who also flashes on screen several times for brief moments during the mini-cinematic that plays.) though the fact she says to watch out for cats implies she knows not her name or has had very hospitable dealings with her.
This fight is actually quite hard! While Remira's attacks are all able to be avoided with use of skedaddle and defend, there are just so many on screen that this becomes hard to do. She also is one of the bosses who comes with a vulnerable debuff on her regular attacks. Combine that with all of her attacks being fatal to begin with and you have a recipe for 'LOTS OF UNCONSCIOUS KIDS!'
The Court Magician // Re-Coded
Oh god so much blue and purple! Blue is don't move, purple is move. The entire fight is built more or less on that aesthetic beyond the fun mechanics unique to this two-tone lovely. Being turned into a sheep is probably the highlight, but the crystalline ward is also a cool mechanic.
Recode does make this fight a bit easier, as you can more easily hit Nanianne's warding crystal and freedom of movement is a lot higher due to not having to line up shots on the x or y axis and have direction facing the right way!
Nine-Tails Terminus // Re-Coded
This is one hell of a fight. Akra Olna's movement AI is unusually good at being evasive. Getting hits on her is tough, though admittedly easier now due to mouseaim as well as the direction of facing no longer mattering. You don't need to line shots up anymore.
It's easily one of the prettiest fights in the game, using every color except green and dark blue, the latter of which is unique to Svoli Apotropaism so far.
The Esoteric Maze of a Trillion Years is what can end an unaware or reckless player. It's best to weave between the purple SAFE zones and keep moving while on purple fill squares. You can make short cuts if need be like I did.
It's also the first appearance of the dreaded black projectiles, which knock a party member out and also make them no longer able to rejoin the fight. This is not an easy fight to do quickly. Between Akra Olna's evasiveness, her six bars of HP and the need to dodge those black projectiles which removes focus from Akra Olna, she'll definitely be one of those endurance fights.
Daystar's Wrath // Re-Coded
Daystar is one of Wi's more uncommon titles. it basically means "The Sun". Which is pretty apt when you consider all the paraphernalia and iconography that ties Wi Hellrider to such a celestial body.
The title was likely given to one who was able to observe it in her crushing radiance and passed that title on to her. For most mortals and even many immortals, an embodiment is hard to even comprehend... A burst of light or a slither of shadow may be all they see. Or some unexplained phenomenon.
The Angels of Hope can see them clearly for they are host to ENNUI who once served in their whole as a caretaker of the Embodiment's duties to the cosmos as it was before the fall of Eden.
A single dimension unhampered by the complications of the cosmos of today which harbors countless dimensions and continues to grow ever faster. This old world was called Eden. It is where the ENNUI, DENUI, The Embodiments and even some like Kyoshi began their existence.
That old world is now ironically termed the "Afterworld", and it is where that which is destroyed via the 'Hakai' command is sent. Where one may be lost to later be found. It is this realm that Yasondre was sent to by Yi's hand and later rescued from by Kyoshi's Gateway. Xiie / Rune
Another of the Cloud Nymphs arrives, the ice-elemented one in particular!
Ice-elemented Cloud Nymph
Frosty and a cutie pie~!
But that is not all, for Xiie has gotten some massive progress done on the wing flap animations for the Fowlhunters.
Robin Wing-flappy Previews
I'm so utterly impressed with how well she managed these. It is four frames, but singlehandedly makes all of the XP RTP sprites look stiff and shitty. Pjcr
Still no response. I'm a bit worried.
With that, I think I've covered all I can without doing more recordings and junk!
03-15-2026, 06:48 PM (This post was last modified: 03-15-2026, 06:48 PM by DerVVulfman.)
***SON OF A --- ***
Finally uploaded Widgets v1.2 last night.
Decided to piddle with it this morning to see about making the scrollable control area not get erased when making a widget (button/checkbox) invisible.
It wasn't even 20 minutes. And now I can see I can further shrink the code and get more speed optimization!
Er... okay. I'll get to v1.3 .... later. See about making an Image or Picturebox widget I guess.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
Well, I solved the issue with the contents window background vanishing sections when a widget is erased.
I'm now tackling the creation of the IMAGE widget
Tristy Heals: The Trustworthy Heroine (or to some "Anklebrain). Character by by Remi-Chan
The image box is able to resemble the 2D and 3D-esque PictureBox widget from some visual compilers. And I have just finished (as seen above) the Scale-To-Fit mode where the image loaded reduces in size and centers itself (either vertically or horizontally) within the viewed area.
Effectively, I have Crop-To-Fit, Stretch-To-Fit and Scale-To-Fit done. The only mode left is the oddball one where the image doesn't resize, but the widget itself does.
FUN!
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)
Yep Yep Yep.... Back to work on Windows Widgets, and a rewrite to the Listwidget system. By extension, that performs updates to theListBox, ComboBoxand all Widgets that display selectable text entries.
However, I got a bit of a breakthrough, and the Listwidget no longer requires certain dependencies. Unfortunately, its child class widgets still have dependencies due to having scrolling viewports, but not a basic List.
And have also discovered why NONE of the Listbased widgets were able to be set invisible! Yep, the .visible= property will soon be working with those widgets as they do all the others. Once done, I will re-verify the .enabled= property on all of the above, and ensure that invisible widgets don't accidentally respond to input of any sort (which would be hilarious but suck).
◄► ● ◄► ● ◄► ● ◄► ● ◄►
I know... I know... I have in the initial post that I want to have two more facets of keyboard input added to Windows Widgets, and that being the ability to [TAB]from one widget to another like any other Windows application, or the ability to have widget-defined hotkeys, such as having [Ctrl]+[X] being a hotkey because someone set a button to say "Exit" (noting the underscore beneath the 'x' in Exit).
However, when one uses such options, the widgets that are now under the user's control must reflect that in some way. And within Windows applications, it is a thin 'dotted' line that is drawn along the inner border surrounding the widget's test, if any. Button widgets have a dotted line inside their rectangular shape. And if the CheckBox widget (for both Check or Option circle variations) has text, the helpful text would also have a dotted line. And the List based widgets would have their highlight bar appear in a different shade when it is active.
Meticulous as I was at the onset, I already have all the graphic rendering code in a BASE set of scripts. So finding them will be a breeze. However, additional values indicating which widget is active vs all others will be necessary.
But now..... Time for a steak burrito.
Up is down, left is right and sideways is straight ahead. - Cord "Circle of Iron", 1978 (written by Bruce Lee and James Coburn... really...)