• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 13:32
CEST 19:32
KST 02:32
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
ByuL, and the Limitations of Standard Play3Team Liquid Map Contest #22: Results and Winners7Code S Season 2 (2026): RO4 and Finals Preview12TL.net Map Contest #22 - Voting & Ladder Map Selection7Code S Season 2 (2026) - RO8 Preview8
Community News
MC vs IdrA, Boxer vs Nal_rA to be Legacy Matches @ BlizzCon255.0.16 Hotfix (June 30) - Balance + Bug Fixes28Weekly Cups (June 22-28): Zergs thrive in new patch2[TLMC] Summer 2026 Ladder Map Rotation05.0.16 patch for SC2 goes live (8 worker start)99
StarCraft 2
General
MC vs IdrA, Boxer vs Nal_rA to be Legacy Matches @ BlizzCon HomeStory Cup In Early July 5.0.16 Hotfix (June 30) - Balance + Bug Fixes 5.0.16 patch for SC2 goes live (8 worker start) Is the larve respawn broken?
Tourneys
Crank Gathers Season 4: BW vs SC2 Team League RSL Revival: Season 6 - Qualifiers and Main Event Douyu Cup 2026: $20,000 Legends Event (June 26-28) Maestros of The Game 2 announcement and schedule ! INu's Battles#17 <BO.9>
Strategy
[G] Having the right mentality to improve
Custom Maps
New Map Maker - Looking for Advice - Love or Hate Work In Progress Melee Maps [D]RTS in all its shapes and glory <3
External Content
The PondCast: SC2 News & Results Mutation # 532 Nuclear Family Mutation # 531 Experimental Artillery Mutation # 530 One For All
Brood War
General
Starcraft vs Retro Category on Twitch ASL 22 Proposed Map Pool First season(s) of tastosis gomtv gsl vods? Best thing happen to StarCraft since Remastered? BW General Discussion
Tourneys
[Megathread] Daily Proleagues [ASL21] Grand Finals The Casual Games of the Week Thread [BSL22] GosuLeague Casts - Tue & Thu 22:00 CEST
Strategy
Simple Questions, Simple Answers Creating a full chart of Zerg builds Relatively freeroll strategies Why doesn't anyone use restoration?
Other Games
General Games
Stormgate/Frost Giant Megathread Nintendo Switch Thread Dawn of War IV ZeroSpace at Steam NextFest - Last free demo Path of Exile
Dota 2
Looking for a Dota Mentor Official 'what is Dota anymore' discussion
League of Legends
Heroes of the Storm
Simple Questions, Simple Answers Heroes of the Storm 2.0
Hearthstone
Deck construction bug
TL Mafia
TL Mafia Power Rank TL Mafia Community Thread Vanilla Mini Mafia
Community
General
US Politics Mega-thread Russo-Ukrainian War Thread The Games Industry And ATVI Men's Fashion Thread Canadian Politics Mega-thread
Fan Clubs
The HerO Fan Club! The herO Fan Club!
Media & Entertainment
Movie Discussion! Series you have seen recently... [Req][Books] Good Fantasy/SciFi books [TV/BOOK] *SPOILERS* Game of Thrones Discussion
Sports
2024 - 2026 Football Thread TeamLiquid Health and Fitness Initiative For 2023 Formula 1 Discussion McBoner: A hockey love story Cricket [SPORT]
World Cup 2022
Tech Support
How to clean a TTe Thermaltake keyboard? Computer Build, Upgrade & Buying Resource Thread
TL Community
The Automated Ban List
Blogs
Listen To The Coaches!
TrAiDoS
An Exploration of th…
waywardstrategy
I'm an arrogant trash talke…
FlaShFTW
Gauntlet SC2: A Retrospectiv…
Ctone23
ramps on octagon
StaticNine
Funny Nicknames
LUCKY_NOOB
Evil Gacha Games and the…
ffswowsucks
Customize Sidebar...

Website Feedback

Closed Threads



Active: 7597 users

Spawn Larva Overlay Trainer - Page 3

Forum Index > SC2 General
Post a Reply
Prev 1 2 3 4 5 6 7 Next All
Soulish
Profile Joined April 2010
Canada1403 Posts
October 02 2011 08:26 GMT
#41
On October 02 2011 11:05 Xanbatou wrote:
Show nested quote +
On October 02 2011 11:00 betaflame wrote:
Say you go off some of your injects, the timing will be off on the alert so you should make it so that it times itself based on your last inject (everytime you press v, it resets to 0?).



1. You can already reset it really easily

2. If I did that, then it would screw up every time you made an overlord

set it to everytime u press a userdefined hotkey and then v. it would be less accurate with more hatcheries, but its a good way
me all in, he drone drone drone, me win
Steel
Profile Blog Joined April 2010
Japan2283 Posts
Last Edited: 2011-10-03 12:31:29
October 03 2011 12:30 GMT
#42
On October 02 2011 10:44 MartynX wrote:
What's the point? It makes you a lazy and bad player + you can not use it at live events. Also stuff happens in game that can affect the timings and they are not always lined up with each other.


It's called dedicated practice. Whatever level you are as Zerg, you can always improve your inject larva timing. NOBODY nails all their injects, 100% of time, which is normal because stuff happens in game and it might be more important to defend an attack with good micro than to inject 3 seconds sooner.

Instead of spending 50 games focusing on sort of nailing your injects, this program can help you get them 100% on time. Hell, you'll probably lose some games by being so focused on injects, but that's not the point. It won't take very long for you to 'feel' the time to inject when you spent so much time getting them perfectly. It's also really hard to gain that 'feel' by just going back to your base or checking your queen energy and going hm, not quite yet, or oh I was a little late...you know what I mean.

I think this program can help people a lot who want to dedicate some practice to inject. It's an integral part of all zerg gameplay, and has to be worked on consistently. It's not ezpz like mules or chronoboost though larva inject is incredibly rewarding once you master it.

Thanks OP. I'll try it tonight!

EDIT :
The file you are trying to access is temporarily unavailable. Please try again later.


D= this might be beyond your control but just sayin in case you hadn't noticed...i'll dl it later I guess ^^
Try another route paperboy.
Calvin[Deck]
Profile Joined November 2010
Denmark88 Posts
October 03 2011 12:41 GMT
#43
When i try to download:

"The file you are trying to access is temporarily unavailable. Please try again later."
wheelchairs
Profile Joined February 2010
United States145 Posts
October 03 2011 12:45 GMT
#44
this is already used by a lot of people, most of the people that make hacks for sc2 also make overlays for macro training, I have seen and used a zerg one that beeps and tells you to inject.
Sbrubbles
Profile Joined October 2010
Brazil5776 Posts
Last Edited: 2011-10-03 12:50:32
October 03 2011 12:47 GMT
#45
Very cool program! Sounds like a good way to learn the spawn larva rhythm!

And don't mind the elitist trolls in these forums. They're just angry they're gonna lose ladder points to players with better decision making and "worse" mechanics.
Bora Pain minha porra!
Deleuze
Profile Blog Joined December 2010
United Kingdom2102 Posts
October 03 2011 13:01 GMT
#46
Practically identical in concept, Zergkekekeke came up with some batch files which was discussed some months ago for Terran building SCVs:

http://www.teamliquid.net/forum/viewmessage.php?topic_id=243799

My opinion was then, as it is now, that this should be discouraged and custom maps used as a more flexible alternative in a practice rather than competitive context.

Then the thread descended in to flaming, no one reached an agreement and the thread died.
“An image of thought called philosophy has been formed historically and it effectively stops people from thinking.” ― Gilles Deleuze, Dialogues II
Broxxi
Profile Joined June 2010
Norway48 Posts
October 03 2011 13:41 GMT
#47
Thank you!

And to all you haters. If you wan't to use custom maps, if you want to play ladder games without any timer, if you want to look at the ingame clock, if you want to look at the "larva popped" news ticker thingy or if you want to use this application does not matter.

In the grand scheme of things, when you end up playing in that booth for $100.000 over a ZvZ. You don't have your custom map with you, you can use the ingame clock, you can use the ticker but you can't use this application. Which way you ended up with your larva timings does not matter. But if the guy who used this application has 3 more larva for three more roaches in a stressfull constant battle game. You'll regret. (I'm not saying this will make you have better larva injects in the end, but what if?)

This is obviously not meant to be used as a replacement for knowing your larva injections. It's a learning tool that helps you get your inner clock set to GMT-Zerg. And I personally plan to use it as such (if I could just download it )!
KaiserW
Profile Joined November 2010
United States87 Posts
Last Edited: 2011-10-03 13:54:12
October 03 2011 13:52 GMT
#48
Always good to see a member of the community helping others.

Yo Xanbatou
if you're looking for another project, how about the following:
+ Show Spoiler +

Create a 'timer' that displays real time. This overlay can be placed next to the already existing game timer. It can look identical. It can be started by clicking, or preferably a color trigger on a (small) portion of the screen.

Personally, I want this to give me a sense of real time; Initially, in addition to faster time 'sense', and at some point I'll be on real time exclusively. (Sure, at first it may be confusing, but in the long run, it'd be worth it I think.)
This would enable us to train our sense of REAL TIME, which could be beneficial to real life and makes more sense!
I'm sure there are others that would use this.

Read this post [or thread] for an explanation on why this would be useful.
http://www.teamliquid.net/forum/viewmessage.php?topic_id=182018&currentpage=3#46


Edited to reduce thread derailment. o.O
"We are all but shadows in the void." - Stalker
Grapefruit
Profile Joined November 2010
Germany439 Posts
October 03 2011 13:56 GMT
#49
Although I don't really approve of such things I have a suggestion for you.

Why don't you make it so that the timer resets every time you hit "V"?
Starcraft 2 is funny, everybody picks the race, which he considers to be the weakest. ¯\_(ツ)_/¯
ensign_lee
Profile Joined June 2010
United States1178 Posts
October 03 2011 13:59 GMT
#50
On October 03 2011 22:56 Grapefruit wrote:
Although I don't really approve of such things I have a suggestion for you.

Why don't you make it so that the timer resets every time you hit "V"?


overlords.
ODKStevez
Profile Joined February 2011
Ireland1225 Posts
October 03 2011 13:59 GMT
#51
Personally, I think using this will make you more comfortable at home but it will train you to rely on this thing and you won't be able to use it anywhere else.
Luppa <3
Grapefruit
Profile Joined November 2010
Germany439 Posts
October 03 2011 14:01 GMT
#52
On October 03 2011 22:59 ensign_lee wrote:
Show nested quote +
On October 03 2011 22:56 Grapefruit wrote:
Although I don't really approve of such things I have a suggestion for you.

Why don't you make it so that the timer resets every time you hit "V"?


overlords.


Good point, haven't though about that.
Starcraft 2 is funny, everybody picks the race, which he considers to be the weakest. ¯\_(ツ)_/¯
Koshi
Profile Blog Joined August 2010
Belgium38799 Posts
October 03 2011 14:03 GMT
#53
Why all the hate? If you don't like it, don't use it.

Thanks for sharing OP, I will probably not use it, but this might help people who want to work on their larva injects.
I had a good night of sleep.
Okiesmokie
Profile Joined May 2010
Canada379 Posts
Last Edited: 2011-10-03 14:19:28
October 03 2011 14:11 GMT
#54
A better way to go about this would be to poll the value of the
HKEY_CURRENT_USER\Software\Razer\Starcraft2\AdditionalLarvaBirthed
Registry key. That is set to "1" for a brief period of time when a hatchery pops the larva off, which means the player would need to inject again. Reading the value of that and flashing the window when an inject is required would be much easier/more efficient than having to reset the timer each time.


Edit:
Here's the source to a simple program I made in C# to see how exactly the registry keys worked, if anyone is interested, just run it along side the game while you play and you will be able to see how the keys change:

+ Show Spoiler +

MainForm.Designer.cs

+ Show Spoiler +

namespace SC2Status {
partial class MainForm {
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing) {
if(disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.dataGrid = new System.Windows.Forms.DataGridView();
this.exitButton = new System.Windows.Forms.Button();
this.PropertyName = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.PropertyValue = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.checkTimer = new System.Windows.Forms.Timer(this.components);
((System.ComponentModel.ISupportInitialize)(this.dataGrid)).BeginInit();
this.SuspendLayout();
//
// dataGrid
//
this.dataGrid.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.dataGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.PropertyName,
this.PropertyValue});
this.dataGrid.Location = new System.Drawing.Point(3, 3);
this.dataGrid.Name = "dataGrid";
this.dataGrid.Size = new System.Drawing.Size(329, 699);
this.dataGrid.TabIndex = 0;
this.dataGrid.MouseDown += new System.Windows.Forms.MouseEventHandler(this.dataGrid_MouseDown);
//
// exitButton
//
this.exitButton.Dock = System.Windows.Forms.DockStyle.Bottom;
this.exitButton.Location = new System.Drawing.Point(0, 708);
this.exitButton.Name = "exitButton";
this.exitButton.Size = new System.Drawing.Size(332, 24);
this.exitButton.TabIndex = 1;
this.exitButton.Text = "Exit";
this.exitButton.UseVisualStyleBackColor = true;
this.exitButton.Click += new System.EventHandler(this.exitButton_Click);
//
// PropertyName
//
this.PropertyName.HeaderText = "Property";
this.PropertyName.Name = "PropertyName";
this.PropertyName.Width = 150;
//
// PropertyValue
//
this.PropertyValue.HeaderText = "Value";
this.PropertyValue.Name = "PropertyValue";
//
// checkTimer
//
this.checkTimer.Interval = 500;
this.checkTimer.Tick += new System.EventHandler(this.checkTimer_Tick);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(332, 732);
this.Controls.Add(this.exitButton);
this.Controls.Add(this.dataGrid);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "MainForm";
this.Text = "SC2 Status";
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.MainForm_MouseDown);
((System.ComponentModel.ISupportInitialize)(this.dataGrid)).EndInit();
this.ResumeLayout(false);

}

#endregion

private System.Windows.Forms.DataGridView dataGrid;
private System.Windows.Forms.Button exitButton;
private System.Windows.Forms.DataGridViewTextBoxColumn PropertyName;
private System.Windows.Forms.DataGridViewTextBoxColumn PropertyValue;
private System.Windows.Forms.Timer checkTimer;

}
}



MainForm.cs

+ Show Spoiler +

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Runtime.InteropServices;
using Microsoft.Win32;

namespace SC2Status {
public partial class MainForm : Form {

public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;

[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();

private string[] propertyList = new string[] {
"AdditionalLarvaBirthed",
"AllyBaseUnderAttack",
"AllyUnitUnderAttack",
"APMValue",
"BuildingComplete",
"CalldownLaunch",
"ChronoBoostExpired",
"MorphComplete",
"MothershipCompleted",
"MothershipStarted",
"MULEExpired",
"OwnBaseUnderAttack",
"OwnUnitUnderAttack",
"ResearchComplete",
"ResourceDepleted",
"ResourceExhausted",
"SpecializationComplete",
"StartModule",
"TrainingComplete",
"UpgradeComplete",
"WarpInComplete"
};

public MainForm() {
InitializeComponent();

foreach(string property in propertyList) {
dataGrid.Rows.Add(new object[] { property, "0" });
}

checkTimer.Start();
}

private void MainForm_MouseDown(object sender, MouseEventArgs e) {
if(e.Button == MouseButtons.Left) {
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}

private void exitButton_Click(object sender, EventArgs e) {
Application.Exit();
}

private void dataGrid_MouseDown(object sender, MouseEventArgs e) {
MainForm_MouseDown(sender, new MouseEventArgs(MouseButtons.Left, 1, 0, 0, 0));
}

private void checkTimer_Tick(object sender, EventArgs e) {
foreach(string property in propertyList) {
RegistryKey key = Registry.CurrentUser;
RegistryKey subKey = key.OpenSubKey(@"SOFTWARE\Razer\Starcraft2");

dataGrid.Rows[getIndexOfRow(property)].Cells[1].Value = subKey.GetValue(property);
}
}

private int getIndexOfRow(string key) {
for(int i = 0; i < dataGrid.Rows.Count; i++) {
if(dataGrid.Rows[i].Cells[0].Value == key) {
return i;
}
}

throw new Exception("No column with that name found");
}
}
}



Program.cs

+ Show Spoiler +

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace SC2Status {
static class Program {
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}


Sleight
Profile Blog Joined May 2009
2471 Posts
October 03 2011 14:19 GMT
#55
Has anyone hear ever done ANY research into habit forming behaviors? This is basically the protocol for teaching a Pavlovian response to ANYONE. Put things on a schedule, give a clear, consistent enforcement protocol, and once you have done it enough, the timing becomes second nature, with or without the stimulus.

This is more efficient for improving larvae inject timings than just trying to play. Why? Because like Day[9] says, you should be improving ONE thing at a time. This helps with that.

Thanks, bro!
One Love
garlicface
Profile Joined April 2010
Canada4196 Posts
October 03 2011 14:20 GMT
#56
On October 03 2011 23:03 Koshi wrote:
Why all the hate? If you don't like it, don't use it.

Thanks for sharing OP, I will probably not use it, but this might help people who want to work on their larva injects.

Me neither, but I don't think people are grasping the usefulness of this. It's not a crutch for playing higher level games - it's for practicing and working your way up to that point.

ex: 10 games with it on, 5 games with it off. 5 games with it on, 5 games with it off. 3 games with it on, then play with it off after.
#TeamBuLba
fuzzayy
Profile Joined February 2011
United States99 Posts
October 03 2011 14:32 GMT
#57
pretty cool man
alepov
Profile Joined December 2010
Netherlands1132 Posts
October 03 2011 14:35 GMT
#58
shit like this should be illegal
ლ(ಠ益ಠლ)
Astevio
Profile Joined May 2011
Sweden3 Posts
October 03 2011 15:10 GMT
#59
Could you upload this to mediafire please?
Sequence
Profile Joined June 2010
7 Posts
October 03 2011 15:11 GMT
#60
Wish i could download this .. Thanks for the tool! I plan to use it for a few weeks then I expect to no longer need it.

Haters - Wtf? its a teaching tool..
Prev 1 2 3 4 5 6 7 Next All
Please log in or register to reply.
Live Events Refresh
CrankTV Team League
11:00
Crank Gathers S4: Qualifiers
LiquipediaDiscussion
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
trigger 576
RushiSC 42
Railgan 36
MindelVK 32
Vindicta 31
StarCraft: Brood War
Britney 21056
ggaemo 455
Soulkey 440
Jaedong 264
soO 45
sorry 43
hero 42
Free 35
Sharp 33
scan(afreeca) 32
[ Show more ]
Shine 30
Hm[arnc] 16
Rock 16
yabsab 16
Bale 14
IntoTheRainbow 12
Sacsri 11
Dota 2
Gorgc5540
qojqva2839
Counter-Strike
x6flipin1637
fl0m1280
edward446
byalli389
kRYSTAL_26
Super Smash Bros
Mew2King72
Other Games
gofns25752
Grubby2099
FrodaN1623
DeMusliM411
Sick191
C9.Mang0137
ArmadaUGS80
KnowMe78
UpATreeSC56
Trikslyr42
JuggernautJason8
Organizations
Other Games
BasetradeTV274
Dota 2
PGL Dota 2 - Main Stream184
StarCraft 2
angryscii 28
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
[ Show 17 non-featured ]
StarCraft 2
• LaughNgamezSOOP
• sooper7s
• AfreecaTV YouTube
• Migwel
• intothetv
• Kozan
• IndyKCrew
StarCraft: Brood War
• 80smullet 10
• FirePhoenix8
• Michael_bg 3
• STPLYoutube
• ZZZeroYoutube
• BSLYoutube
Dota 2
• WagamamaTV504
League of Legends
• TFBlade1044
Other Games
• imaqtpie447
• Shiphtur348
Upcoming Events
Bombastic Starleague
2h 28m
The PondCast
16h 28m
HomeStory Cup
17h 28m
Replay Cast
1d 6h
HomeStory Cup
1d 17h
Replay Cast
2 days
HomeStory Cup
2 days
OSC
2 days
Sparkling Tuna Cup
3 days
WardiTV Weekly
4 days
[ Show More ]
The PondCast
5 days
Replay Cast
6 days
CrankTV Team League
6 days
Liquipedia Results

Completed

YSL S3
Douyu Cup 2026
Murky Cup 2026

Ongoing

IPSL Spring 2026
Acropolis #4
CSL Season 21: Qualifier 2
SCTL 2026 Spring
XSE Pro League 2026
IEM Cologne Major 2026
Stake Ranked Episode 2
CS Asia Championships 2026
Asian Champions League 2026
IEM Atlanta 2026
PGL Astana 2026
BLAST Rivals Spring 2026
IEM Rio 2026

Upcoming

Escore Tournament S3: W1
CSL 2026 Summer (S21)
Escore Tournament S3: W2
ASL Season 22:Wild Card Qualifier
CSLAN 4
Blizzard Classic Cup 2026
Kung Fu Cup 2026 Grand Finals
RSL Revival: Season 6
CranK Gathers Season 4: BW vs SC2 Team League
HSC XXIX
Light Tournament 2026
Eternal Conflict S2 Finale
Heroes Pulsing #3
Eternal Conflict S2 E1
FISSURE Playground #5
BLAST Open Fall 2026
Esports World Cup 2026
BLAST Bounty Summer 2026
BLAST Bounty Summer Qual
Stake Ranked Episode 3
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2026 TLnet. All Rights Reserved.